Skip to main content
IBM Quantum Platform

qiskit_noise_learning.sequences.PartialPauliPermutation

class qiskit_noise_learning.sequences.PartialPauliPermutation(partial_permutation_indices: NDArray[int8])

GitHub

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
inverseRestituisce l'inverso di questa permutazione parziale.
is_completeSe “self” rappresenti una specifica completa delle permutazioni di Pauli per un singolo qubit.
num_qubits
partial_permutation_indicesFormato numerico grezzo della permutazione parziale.
structure_tokenUn 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 se isinstance(pauli, PhasedQubitSparsePauli and not self.is_complete, oppure se non pauli è 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.

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