qiskit_noise_learning.sequences.PartialPauliPermutation
class qiskit_noise_learning.sequences.PartialPauliPermutation(partial_permutation_indices: NDArray[int8])
Basi: Instruction
Permutazioni parzialmente specificate delle funzioni di Pauli senza fase su un singolo qubit su n qubit.
A rappresenta PartialPauliPermutation una specifica parziale di uno strato di operatori di Clifford su un singolo qubit per quei casi in cui non è necessario vincolare le fasi specifiche del gruppo di Pauli. La natura parziale della specifica ha lo scopo di consentire la realizzazione progressiva di tali livelli. Una volta che una permutazione parziale è “completa”, nel senso che costituisce una specifica completa di una permutazione, come indicato dalla proprietà bool PartialPauliPermutation.is_complete, a ciascun qubit viene assegnato un Clifford predefinito che implementa la permutazione, secondo l’ordinamento indicato in COMPLETE_TO_C1_TABLEAU.
Due permutazioni parziali su un qubit sono unificabili (vedi e is_mergeable_with() merge()) se esiste un Clifford a singolo qubit che implementa entrambe le permutazioni; ciò equivale, senza perdita di generalità, ad affermare che una permutazione non mappa un operatore di Pauli su un operatore di Pauli diverso da quello mappato dall’altra.
La rappresentazione principale dei dati della classe è un elenco di numeri interi, in cui ciascun numero intero indica una particolare permutazione parziale di Pauli a singolo qubit definita in partial_permutation_sets(), che fornisce un ordinamento fisso.
Tuttavia, una rappresentazione setin formato leggibile dall'utente può essere utilizzata anche per la creazione tramite il metodo di classe PartialPauliPermutation.from_sets() , oppure può essere recuperata da un'istanza tramite il PartialPauliPermutation.to_sets() metodo. Per un singolo qubit, la permutazione parziale è definita come un set i cui elementi sono tuples della forma (p0, p1), dove e p0 p1 sono stringhe estratte da ["Z", "X", "Y"]. Ciò indica tuple che p0 viene mappato dalla permutazione su p1.
Parametri
partial_permutation_indices – Un array NumPy contenente permutazioni parziali specificate tramite indici. Il numero di qubit è determinato dalla lunghezza.
__init__
__init__(partial_permutation_indices: NDArray[int8])
Metodi
Rubrica 1 | Rubrica 2 |
|---|---|
__init__(indici_di_permutazione_parziale) | |
complete() | Restituisce una nuova permutazione parziale che sia completa e coerente con se stessa. |
compose(altro) | Comporre con un’altra permutazione parziale. |
empty(num_qubit) | Genera l'istanza completamente non specificata su num_qubits. |
from_qubit_sparse_pauli_lists(in_paulis,...) | Costruisci una funzione PartialPauliPermutation che mappa in_paulis su out_paulis. |
from_qubit_sparse_paulis(in_pauli, out_pauli) | Costruisci una funzione PartialPauliPermutation che mappa in_pauli su out_pauli. |
from_sets(set) | Costruisci a partire da un elenco di insiemi. |
is_mergeable_with(altro) | Se questa istruzione sia o meno combinabile con un'altra. |
merge(altro) | Unire il sé e l’altro in un’unica istruzione. |
propagate(...) | Dato un operatore di Pauli, propagarlo attraverso l’operatore di Clifford implicito in questa permutazione. |
to_sets() | Restituisce la rappresentazione sotto forma di insieme. |
Attributi
Rubrica 1 | Rubrica 2 |
|---|---|
inverse | Restituisce l'inverso di questa permutazione parziale. |
is_complete | Se “self” rappresenti una specifica completa delle permutazioni di Pauli per un singolo qubit. |
num_qubits | |
partial_permutation_indices | Formato numerico grezzo della permutazione parziale. |
structure_token | Un riepilogo hashable di questa istruzione che limita la possibilità di unione. |
inverse
Tipo: Self
Restituisce l'inverso di questa permutazione parziale.
Questo restituisce un'inversione parzialmente specificata: verranno invertite solo le mappature esistenti in questa istanza. Si noti che la convenzione di completamento è stata scelta in modo da essere coerente con l'inversione, nel senso che self.inverse.complete() == self.complete().inverse. Inoltre, il Clifford implicito in COMPLETE_TO_C1_TABLEAU è l'inverso del Clifford implicito.
is_complete
Tipo: bool
Se “self” rappresenti una specifica completa delle permutazioni di Pauli per un singolo qubit.
partial_permutation_indices
Tipo: NDArray[int8]
Formato numerico grezzo della permutazione parziale.
structure_token
Tipo: Hashable
Un riepilogo hashable di questa istruzione che limita la possibilità di unione.
Questo token funge da verifica economica della non unificabilità: le istruzioni con token di struttura disuguali non sono mai unificabili. Il token deve quindi distinguere i diversi tipi di istruzione.
complete
complete() → Self
Restituisce una nuova permutazione parziale che sia completa e coerente con se stessa.
Si noti che le convenzioni sono state scelte per garantire che:
- Qualsiasi permutazione parzialmente specificata compatibile con l'identità viene mappata sull'identità, e
self.inverse.complete() == self.complete().inverse.
Risultati
Un nuovo documento contenente PartialPauliPermutation il completamento di self.
compose
compose(other: Self) → Self
Comporre con un’altra permutazione parziale.
Per le permutazioni complete, self.compose(other) restituisce la permutazione associata a C1 @ C2, dove e C1 C2 sono i Clifford associati, rispettivamente, a e self other. Le permutazioni parzialmente specificate contengono una sola corrispondenza, e la composizione è definita in modo naturale solo quando l'uscita di è other l'entrata di self. Si noti infine che la composizione non è definita se uno tra e self other è incompleto e l’altro è completo. Ciò è dovuto all'impossibilità di garantire la commutazione tra completamento e composizione, descritta di seguito.
Si noti che la convenzione di completamento è stata scelta in modo da essere coerente con la composizione, nel senso che self.compose(other).complete() == self.complete().compose(other.complete()). Inoltre, per le permutazioni complete, la mappa verso il gruppo di Clifford implicita in COMPLETE_TO_C1_TABLEAU è un omomorfismo di gruppi (conserva la moltiplicazione).
Parametri
altro – L’altro con cui confrontarsi.
Risultati
La permutazione composta.
Aumenti
ValueError : se la composizione di self con non other è definita.
empty
classmethod empty(num_qubits: int) → Self
Genera l'istanza completamente non specificata su num_qubits.
Parametri
num_qubits – Numero di qubit.
Risultati
Una nuova, banale PartialPauliPermutation.
from_qubit_sparse_paulis
classmethod from_qubit_sparse_paulis(in_pauli: QubitSparsePauli, out_pauli: QubitSparsePauli) → Self
Costruisci una funzione PartialPauliPermutation che mappa in_pauli su out_pauli.
Parametri
- in_pauli – Il Pauli da mappare.
- out_pauli – Il Pauli a cui effettuare il mapping.
Risultati
Una nuova funzione PartialPauliPermutation che mappa su in_pauli out_pauli.
Aumenti
ValueError : se in_pauli e non out_pauli hanno lo stesso numero di qubit o se non agiscono sugli stessi qubit.
from_qubit_sparse_pauli_lists
classmethod from_qubit_sparse_pauli_lists(in_paulis: QubitSparsePauliList, out_paulis: QubitSparsePauliList) → Self
Costruisci una funzione PartialPauliPermutation che mappa in_paulis su out_paulis.
Parametri
- in_paulis – I Paulis da mappare.
- out_paulis – I Paulis a cui effettuare il mapping.
Risultati
Una nuova PartialPauliPermutation.
Aumenti
ValueError : se il numero di qubit non è coerente o se le permutazioni implicite non sono coerenti.
from_sets
classmethod from_sets(sets: list[frozenset[tuple[str, str]]]) → Self
Costruisci a partire da un elenco di insiemi.
Per una descrizione del formato previsto, consultare la documentazione della classe.
Parametri
insiemi – Gli insiemi che specificano la permutazione parziale.
Risultati
Una nuova istanza.
Aumenti
ValueError : se uno qualsiasi degli insiemi non è valido.
is_mergeable_with
is_mergeable_with(other)
Se questa istruzione sia o meno combinabile con un'altra.
Due istruzioni sono unificabili se esiste una terza istruzione che implementa contemporaneamente entrambe le loro azioni. Il caso banale si verifica quando le istruzioni sono uguali: la terza istruzione può essere una terza occorrenza della stessa istruzione. Tuttavia, sono possibili casi non banali poiché alcuni tipi di istruzione, in particolare PartialPauliPermutation, non specificano necessariamente in modo completo la propria azione, per cui istanze disuguali possono comunque vedere i propri vincoli soddisfatti contemporaneamente da una singola terza istanza.
Se questo metodo restituisce True, allora il metodo merge() dovrebbe andare a buon fine.
Parametri
altro – L'altra istruzione con cui verificare la possibilità di unione.
Risultati
Se questa istruzione sia integrabile con l'altra.
merge
merge(other)
Unire il sé e l’altro in un’unica istruzione.
Parametri
altro – L'altra istruzione con cui effettuare il merge.
Risultati
Un'istruzione (probabilmente la stessa istanza) che esegue contemporaneamente l'azione di questa istruzione e quella dell'altra istruzione.
propagate
propagate(pauli: QubitSparsePauli, inverse: bool = False) → QubitSparsePauli
propagate(pauli: PhasedQubitSparsePauli, inverse: bool = False) → PhasedQubitSparsePauli
Dato un operatore di Pauli, propagarlo attraverso l’operatore di Clifford implicito in questa permutazione.
Questo metodo funziona sia per la propagazione in fase che fuori fase, a seconda del tipo di Pauli fornito. La propagazione senza fase può essere eseguita su permutazioni incomplete, purché la permutazione sia definita sul sistema di Pauli. La propagazione per fasi richiede self che sia completa, in modo che a questa istanza possa essere associato un Clifford esplicito.
Parametri
pauli – Il Pauli su cui applicare lo strato.
Risultati
Il Pauli evoluto.
Aumenti
- ValueError : se
pauli.num_qubits != self.num_qubits, oppure seisinstance(pauli, PhasedQubitSparsePauli and not self.is_complete, oppure se nonpauliè in fase e questa istanza non è definita su di esso. - TypeError : se
pauliè un tipo non valido.
to_sets
to_sets() → list[frozenset[tuple[str, str]]]
Restituisce la rappresentazione sotto forma di insieme.