Skip to main content
IBM Quantum Platform

Limiti

qiskit_addon_slc.bounds

Funzioni di calcolo associate.

Questo modulo offre diverse funzioni per il calcolo dei limiti di errore che costituiscono un cono di luce ombreggiato.

compute_forward_bounds

compute_forward_bounds(circuit, noise_model_paulis, /, observable, *, evolution_max_terms=1000000, eigval_max_qubits=14, atol=1e-08, atol_simplify=1e-08, atol_eigenvalue=1e-08, **kwargs)

GitHub

Calcolare i limiti del commutatore a tempi disuguali ottenuti mediante evoluzione in avanti.

Partendo dalla fine del circuito, calcolare i limiti del commutatore a tempi disuguali ottenuti tramite evoluzione in avanti per tutti i termini di errore di Pauli di ciascun livello soggetto a rumore nel circuito di destinazione.

Cioè, calcolare [EF,AF]2\| \left[ E_F, A_F \right] \|_2 per tutti i termini di errore, EFE_F, dove AFA_F è il valore target observable da misurare su circuit.

I termini di errore, EIE_I, sono determinati da noise_model_paulis. Questo dizionario associa gli identificatori dei modelli di rumore (samplomatic.InjectNoise.ref) a un elenco di termini di errore di Pauli. I termini corrispondenti verranno utilizzati ogni volta che, durante l'iterazione su, si incontrerà un BoxOp con un'annotazione InjectNoise corrispondente circuit.

Obsoleto a partire dalla versione 0.2.0

L'argomentazione qiskit_addon_slc.bounds.forward.compute_forward_bounds()di … atol è deprecata a partire dalla versione qiskit-addon-slc 0.2.0. Verrà rimosso non prima di 3 mesi dalla data di pubblicazione. Utilizza invece atol_simplify e atol_eigenvalue.

Parametri

  • circuit (QuantumCircuit) – il circuito di destinazione.
  • noise_model_paulis (dict[str, QubitSparsePauliList]) – i termini di errore di Pauli da considerare per ciascun modello di rumore.
  • observable (Pauli |PauliList |SparseObservable |SparsePauliOp) – la grandezza osservabile da misurare alla fine del circuito.
  • evolution_max_terms (int) – il numero massimo di termini dell'operatore da tenere sotto controllo durante l'evoluzione.
  • eigval_max_qubits (int) – il numero massimo di qubit di un commutatore per i quali si tenterà comunque di calcolare l'autovalore. Quando questo valore viene superato, il limite viene approssimato tramite una disuguaglianza triangolare più semplice e meno rigorosa.
  • atol (float) – USO OBSOLETO: usa e atol_simplify atol_eigenvalue al suo posto!
  • atol_simplify (float) – la tolleranza assoluta utilizzata per l'eliminazione dei termini dal commutatore. Allentare questa tolleranza comporterà un maggiore troncamento dei termini del commutatore, rendendo il calcolo dei suoi autovalori più veloce ma meno accurato.
  • atol_eigenvalue (float) – la tolleranza assoluta utilizzata per rilevare la convergenza dell'autovalore del commutatore. Allentando questa tolleranza, si otterrà un autovalore meno accurato, calcolato dall'algoritmo iterativo di Davidson per la risoluzione degli autovalori.
  • kwargs – eventuali argomenti chiave aggiuntivi verranno inoltrati a compute_bounds().

Risultati

Il limite del commutatore a tempi disuguali.

Aumenti

NotImplementedError – quando il contiene observable più di un termine di Pauli. Se ti capita questa situazione, dovrai chiamare questa funzione separatamente per ciascun Pauli di destinazione.

Tipo di restituzione

dict [ str, PauliLindbladMap ]

tighten_with_speed_limit

tighten_with_speed_limit(bounds, circuit, noise_model_paulis, /, observable)

GitHub

Restringere i limiti previsti applicando restrizioni alla velocità di propagazione delle informazioni.

Ispirata alle idee alla base dei limiti di Lieb-Robinson, questa funzione sfrutta i limiti alla velocità di propagazione dell’informazione per restringere i limiti del commutatore a tempi disuguali calcolati in precedenza mediante evoluzione in avanti (vedi anche compute_forward_bounds()).

Parametri

Risultati

Una versione più rigorosa dei limiti del commutatore a tempo diseguale.

Aumenti

  • NotImplementedError – quando il contiene observable più di un termine di Pauli. Se ti capita questa situazione, dovrai chiamare questa funzione separatamente per ciascun Pauli di destinazione.
  • ValueError – quando si incontra un gate che agisce su più di 2 qubit.

Tipo di restituzione

dict [ str, PauliLindbladMap ]

compute_backward_bounds

compute_backward_bounds(circuit, noise_model_paulis, /, *, evolution_max_terms=1000000, **kwargs)

GitHub

Calcolare i limiti del commutatore a tempi disuguali ottenuti mediante evoluzione a ritroso.

A partire dall’inizio del circuito, calcolare i limiti del commutatore a tempi disuguali ottenuti tramite evoluzione a ritroso per tutti i termini di errore di Pauli di ciascun livello soggetto a rumore nel circuito di destinazione.

In altre parole, calcolare [EI,ρI]1\| \left[ E_I, \rho_I \right] \|_1 (utilizzando la norma 1 di Schatten, nota anche come norma nucleare) per tutti i termini di errore, EIE_I, dove si ipotizza che ρI\rho_I sia lo stato tutto a zero, 00\ket{0 \ldots 0}, su tutti i qubit attivi in circuit.

I termini di errore, EIE_I, sono determinati da noise_model_paulis. Questo dizionario associa gli identificatori dei modelli di rumore (samplomatic.InjectNoise.ref) a un elenco di termini di errore di Pauli. I termini corrispondenti verranno utilizzati ogni volta che, durante l'iterazione su, si incontrerà un BoxOp con un'annotazione InjectNoise corrispondente circuit.

Attenzione

Prima di calcolare gli intervalli, questa funzione rimuove tutte le operazioni Measure da circuit. Ciò è necessario perché il circuito viene invertito prima di essere elaborato in ordine inverso, il che consente di trattare l'evoluzione a ritroso come un'evoluzione in avanti (nel circuito invertito).

Parametri

  • circuit (QuantumCircuit) – il circuito di destinazione.
  • noise_model_paulis (dict[str, QubitSparsePauliList]) – i termini di errore di Pauli da considerare per ciascun modello di rumore.
  • evolution_max_terms (int) – il numero massimo di termini dell'operatore da tenere sotto controllo durante l'evoluzione. (Se l'operatore supera tale dimensione, i termini più piccoli vengono troncati).
  • kwargs – eventuali argomenti chiave aggiuntivi verranno inoltrati a compute_bounds().

Risultati

I limiti del commutatore a tempo diseguale derivati a ritroso.

Tipo di restituzione

dict [ str, PauliLindbladMap ]

merge_bounds

merge_bounds(circuit, forward_bounds, backward_bounds, /, noise_rates=None, *, is_clifford_circuit=False)

GitHub

Unire i limiti anteriore e posteriore.

Il livello al quale avviene il passaggio dall'uso dei limiti posteriori a quello dei limiti anteriori sarà lo stesso per tutti i qubit. Viene determinato tenendo conto dei dati di addestramento forniti noise_rates. Se tali dati non vengono forniti, si ipotizzano livelli di rumore uniformi. Sebbene si tratti di un'ipotesi non realistica, potrebbe comunque essere utile visualizzare in anteprima i confini risultanti dalla fusione.

Parametri

Risultati

I limiti unificati.

Aumenti

  • ValueError – quando entrambi i limiti specificati sono None.
  • KeyError – quando i bounds contengono una chiave InjectNoise.modifier_ref che non compare nel di destinazione o circuit il cui non InjectNoise.ref viene trovato.
  • ValueError – se i termini di Pauli del modello di rumore, i cui limiti sono calcolati per un dato, non InjectNoise.modifier_ref coincidono tra e forward_bounds backward_bounds.
  • NotImplementedError – quando è is_clifford_circuit True.

Tipo di restituzione

dict [ str, PauliLindbladMap ] | None

compute_local_scales

compute_local_scales(circuit, bounds, /, noise_rates, *, sampling_cost_budget=inf, bias_tolerance=0.0)

GitHub

Calcola l'argomento local_scales di un Samplex.

Questo parametro local_scales serve a specificare quali singoli termini di errore si desidera mitigare.

È bias_tolerance necessario specificare o o sampling_cost_budget . Il primo stabilisce un limite massimo per il costo di campionamento, mentre il secondo stabilisce un limite massimo per la distorsione residua tollerabile.

Nota

Se l'ordine dei termini di Pauli in e bounds noise_rates non coincide, l'output di questa funzione assumerà l'ordine stabilito da noise_rates al fine di garantire che le scale siano compatibili con i tassi che saranno forniti anche a QuantumProgram.

Parametri

  • circuit (QuantumCircuit) – il circuito di destinazione.
  • bounds (dict[str, PauliLindbladMap]) – i limiti del cono di luce ombreggiato.
  • noise_rates (dict[str, PauliLindbladMap | None]) – i valori stimati dal modello di rumore.
  • sampling_cost_budget (float) – il costo massimo di campionamento consentito.
  • bias_tolerance (float) – il bias massimo tollerabile.

Risultati

  • il local_scales dizionario da fornire come input diretto al samplomatic.samplex.Samplex.inputs().
  • i costi generali di campionamento ( γ2\gamma^2 ) necessari per eseguire il campionamento di local_scales.
  • il bias residuo sui valori attesi calcolati con questi limiti.

Tipo di restituzione

Una tupla di lunghezza 3, i cui elementi sono

Aumenti

  • ValueError – se per entrambi vengono specificati valori diversi da quelli predefiniti, il sampling_cost_budget e il bias_tolerance.
  • KeyError – se noise_rates manca una voce relativa a un identificatore di modello di rumore (InjectNoise.ref) rilevato in circuit.

Questo modulo contiene anche alcune funzioni di livello inferiore a cui l'utente finale solitamente non accede direttamente, ma che potrebbero rivelarsi utili per ulteriori sviluppi basati su questo pacchetto.

compute_bounds

compute_bounds(circuit, noise_model_paulis, light_cone, norm_fn, *, backwards, max_num_boxes=None, num_processes=1, timeout=None)

GitHub

Calcola i limiti disuguali del commutatore temporale.

Dato un circuito con BoxOp istruzioni con InjectNoise annotazioni e una mappatura degli identificatori del modello di rumore (InjectNoise.ref) su un elenco di termini di errore di Pauli (noise_model_paulis), questa funzione calcola i limiti del commutatore a tempo diseguale (i cui dettagli sono implementati da norm_fn). Nel farlo, prende in considerazione solo i gate che si trovano all’interno del cono di luce dell’osservabile (inizializzato da light_cone). Questi limiti calcolati costituiscono la base del cono di luce ombreggiato.

Poiché questa funzione esegue un calcolo di lunga durata, gestisce in modo corretto le eccezioni KeyboardInterrupt , consentendo all'utente di interrompere il calcolo in un momento qualsiasi e di ottenere comunque i risultati calcolati fino a quel momento.

Parametri

  • circuit (QuantumCircuit) – il circuito di destinazione.
  • noise_model_paulis (dict[str, QubitSparsePauliList]) – i termini di errore di Pauli da considerare per ciascun modello di rumore.
  • light_cone (LightCone) – il tracker LightCone inizializzato e con stato.
  • norm_fn (Callable[[Pauli, RotationGates], CommutatorBounds]) – la funzione che implementa il commutatore a tempi disuguali specifico.
  • backwards (bool) – se eseguire l'iterazione in circuit ordine inverso.
  • max_num_boxes (int | None) – il numero massimo di caselle per le quali calcolare i limiti. Ai limiti di eventuali caselle aggiuntive verrà assegnato il valore limite superiore banale di 2.02.0.
  • num_processes (int) – il numero di processi paralleli da utilizzare.
  • timeout (float | None) – un timeout facoltativo (in secondi) al termine del quale tutti i livelli rimanenti vengono riempiti con valori numerici banali pari a 2.0. Si noti che non si tratta di un timeout rigido e che il livello in fase di elaborazione al momento del raggiungimento di tale timeout verrà completato normalmente.

Risultati

I limiti calcolati per il commutatore a tempi disuguali.

Tipo di restituzione

dict [ str, PauliLindbladMap ]

CommutatorBounds

class CommutatorBounds(commutator_bound, truncation_bias, fallback_to_tri_ineq)

GitHub

Basi: NamedTuple

Una classe di dati per memorizzare i metadati relativi ai limiti del commutatore calcolati.

Crea una nuova istanza di CommutatorBounds(commutator_bound, truncation_bias, fallback_to_tri_ineq)

Parametri

  • commutator_bound (float)
  • truncation_bias (float)
  • fallback_to_tri_ineq (bool)

commutator_bound

Tipo: float

Il limite del commutatore.

Questo limite verrà calcolato in modi diversi a seconda dell'applicazione. Ad esempio, i limiti a ritroso calcolano la norma nucleare (norma di Schatten 1), mentre i limiti in avanti vengono in genere calcolati utilizzando la norma spettrale (norma di Schatten all'infinito).

Se il calcolo della norma supera i limiti di difficoltà specificati, verrà abbandonato a favore di un limite più semplice basato sulla disuguaglianza triangolare, il che è indicato dall'impostazione fallback_to_tri_ineq di a True.

Questo valore può essere presente NaN nel caso in cui il calcolo del limite di commutazione sia stato interrotto. Ciò può verificarsi quando supera già truncation_bias il limite teorico di 2.0.

fallback_to_tri_ineq

Tipo: bool

commutator_bound È stato calcolato “approssimativamente” utilizzando una semplice disuguaglianza triangolare.

min

min()

GitHub

Restituisce il limite minimo codificato da questi metadati.

Il limite minimo è il minore tra la somma di e commutator_bound e truncation_bias il limite teorico di 2.0.

Si 2.0 utilizza il valore di perché un osservabile di Pauli limitato nell'intervallo [-1, +1] non può essere distorto di più di 2.0.

Tipo di restituzione

mobile

truncation_bias

Tipo: float

L'errore di distorsione sul limite dovuto al troncamento del commutatore.

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.