QubitSparsePauli
class qiskit.quantum_info.QubitSparsePauli(data, /, num_qubits=None)
Basi: object
Un operatore di Pauli senza fase memorizzato in un formato qubit-sparse.
Rappresentazione
Un operatore di Pauli è un prodotto tensoriale di operatori di Pauli a singolo qubit della forma , per . La rappresentazione interna di un QubitSparsePauli memorizza solo gli operatori Pauli single-qubit non identici.
Internamente, ogni operatore di Pauli a singolo qubit è memorizzato con un valore numerico, esplicitamente:
Etichetta | Operatore | Valore numerico | Pauli attributo |
|---|---|---|---|
"I" | (identità) | Non conservato. | Non conservato. |
"X" | (Pauli X) | 0b10 (2) | X |
"Y" | (Pauli Y) | 0b11 (3) | Y |
"Z" | (Pauli Z) | 0b01 (1) | Z |
Attributo | Lunghezza | Descrizione |
|---|---|---|
paulis | Ciascuno degli operatori di Pauli non identitari a singolo qubit. Queste corrispondono alle non identità nell'elenco, dove le voci sono memorizzate in ordine crescente prima, e in ordine crescente all'interno di ogni termine. | |
indices | Il qubit corrispondente ( ) per ciascuno degli operatori in paulis. QubitSparsePauli richiede che questo elenco sia ordinato per termini e gli algoritmi possono fare affidamento sul mantenimento di questo invariante. |
Il parametro è il numero totale di termini single-qubit non identici.
L'elemento scalare dell'array paulis viene memorizzato come byte numerico. I valori numerici sono relativi alla rappresentazione di Pauli simplectica che SparsePauliOp utilizza e sono accessibili con un accesso con nome tramite un'enumerazione:
Pauli
class Pauli
Un IntEnum che fornisce un accesso con nome ai valori numerici utilizzati per rappresentare ciascuno dei termini dell'alfabeto single-qubit enumerati in Alphabet of single-qubit Pauli operators used in QubitSparsePauliList.
Questa classe è collegata a QubitSparsePauli. Accedere come QubitSparsePauli.Pauli. Se questa è una digitazione eccessiva e si ha a che fare esclusivamente con QubitSparsePauliList e il nome Pauli non è ambiguo, si potrebbe abbreviare come:
>>> ops = QubitSparsePauli.Pauli
>>> assert ops.X is QubitSparsePauli.Pauli.XSi può accedere a tutti i valori dell'enumerazione sia con l'accesso agli attributi, sia con l'indicizzazione a dizionario per stringa:
>>> assert QubitSparsePauli.Pauli.X is QubitSparsePauli.Pauli["X"]I bit che rappresentano ogni singolo qubit Pauli sono la rappresentazione simplettica (senza fase) dell'operatore Pauli.
Valori
X
Valore predefinito: 2
L'operatore di Pauli . Utilizza l'etichetta a lettera singola "X".
Y
Valore predefinito: 3
L'operatore di Pauli . Utilizza l'etichetta a lettera singola "Y".
Z
Valore predefinito: 1
L'operatore di Pauli . Utilizza l'etichetta a lettera singola "Z".
Ogni attributo di tipo array si comporta come una sequenza Python. È possibile indicizzarli e tagliarli con una semantica list-con la semantica standard. Affettare un attributo restituisce un Numpy ndarray contenente una copia dei dati rilevanti con il dtype naturale del campo; questo permette di fare facilmente matematica sui risultati, come operazioni bitwise su paulis.
Costruzioni
QubitSparsePauli definisce diversi costruttori. Il costruttore predefinito tenterà di delegare a uno dei costruttori più specifici, in base al tipo di input. Si possono sempre usare i costruttori specifici per avere un maggiore controllo sulla costruzione.
Metodo | Riepilogo |
|---|---|
from_label() | Converte un'etichetta stringa densa in un elemento QubitSparsePauli. |
from_sparse_label() | Costruisce un QubitSparsePauli da una tupla di una stringa rada di etichette e dei qubit a cui si applicano. |
from_pauli() | Sollevare un singolo Pauli in un QubitSparsePauli. |
from_raw_parts() | Costruire l'operatore a partire dagli array di dati grezzi. |
__new__
__new__(data, /, num_qubits=None)
Il costruttore predefinito di QubitSparsePauli.
Delega a uno dei metodi espliciti del costruttore di conversione, in base al tipo dell'argomento data . Se viene fornito num_qubits e il costruttore implicito nel tipo di data non accetta un numero, il numero intero fornito deve corrispondere all'input.
Parametri
- data - Il tipo di dati dell'ingresso. Può essere un altro formato
QubitSparsePauli, nel qual caso l'input viene copiato, oppure può essere un formato valido per i formatifrom_label()ofrom_sparse_label(). - num_qubits (int|None) – Numero opzionale di qubit per l'operatore. Per la maggior parte degli input di dati, questo può essere dedotto e non è necessario passarlo. È necessario solo per il formato sparse-label. Se viene dato inutilmente, deve corrispondere ai dati immessi.
Attributi
indices
Visualizzazione in sola lettura degli indici di ciascun termine non identitario a singolo qubit.
Gli indici saranno sempre in ordine sparso.
num_qubits
Il numero di qubit su cui è definito il termine.
paulis
Visualizzazione in sola lettura dei singoli termini a singolo qubit.
Gli unici valori validi nell'array sono quelli con un corrispondente valore Pauli.
Metodi
commutes
commutes(other)
Verifica se il qubit “self” commuta con un altro qubit in uno stato di Pauli sparsa.
Parametri
other (QubitSparsePauli) – il qubit sparse Pauli con cui verificare la commutazione.
compose
compose(other)
Composizione senza fase con un altro QubitSparsePauli.
Parametri
other (QubitSparsePauli) – il qubit sparse Pauli da comporre.
copy
copy()
Ottenere una copia di questo termine.
from_label
static from_label(label, /)
Costruire da un'etichetta stringa densa.
L'etichetta deve essere una sequenza dell'alfabeto 'IXYZ'. L'etichetta viene interpretata in modo analogo a una stringa di bit. In altre parole, la lettera più a destra è associata al qubit 0 e così via. Questa è la stessa etichetta per Pauli e SparsePauliOp.
Parametri
label (str) – l'etichetta densa.
Esempi
>>> QubitSparsePauli.from_label("IIIIXZI")
<QubitSparsePauli on 7 qubits: X_2 Z_1>
>>> label = "IYXZI"
>>> pauli = Pauli(label)
>>> assert QubitSparsePauli.from_label(label) == QubitSparsePauli.from_pauli(pauli)from_pauli
static from_pauli(pauli, /)
Costruire un QubitSparsePauli da una singola Pauli istanza.
Si noti che la fase di Pauli viene abbandonata.
Parametri
pauli (Pauli) – il singolo Pauli da convertire.
Esempi
>>> label = "IYXZI"
>>> pauli = Pauli(label)
>>> QubitSparsePauli.from_pauli(pauli)
<QubitSparsePauli on 5 qubits: Y_3 X_2 Z_1>
>>> assert QubitSparsePauli.from_label(label) == QubitSparsePauli.from_pauli(pauli)from_raw_parts
static from_raw_parts(num_qubits, paulis, indices)
Costruire una classe QubitSparsePauli da array Numpy grezzi che corrispondono alla rappresentazione dei dati richiesta, descritta nella documentazione a livello di classe.
I dati di ogni array vengono copiati in allocazioni fresche e crescenti dello spazio Rust.
Parametri
- num_qubit - numero di qubit su cui agisce l'operatore.
- paulis - elenco dei termini single-qubit. Dovrebbe essere un array Numpy con dtype
uint8(che è compatibile conPauli). - indici - elenco ordinato dei qubit a cui corrisponde ogni termine a singolo qubit. Dovrebbe essere una matrice Numpy con il tipo dtype
uint32.
Esempi
Costruire un operatore che agisce sul qubit 50 di 100 qubit.
>>> num_qubits = 100
>>> terms = np.array([QubitSparsePauli.Pauli.Z], dtype=np.uint8)
>>> indices = np.array([50], dtype=np.uint32)
>>> QubitSparsePauli.from_raw_parts(num_qubits, terms, indices)
<QubitSparsePauli on 100 qubits: Z_50>from_sparse_label
static from_sparse_label(sparse_label, num_qubits)
Costruire un qubit sparse Pauli da un'etichetta sparsa, data come tupla di una stringa di Pauli e degli indici dei qubit corrispondenti.
Questo è analogo a SparsePauliOp.from_sparse_list().
Parametri
- sparse_label (tuple[str, Sequence[int]]) – e i qubit a cui si applica ogni termine a singolo qubit.
- num_qubits (int) – il numero di qubit su cui agisce l'operatore.
Esempi
Costruire un semplice Pauli:
>>> QubitSparsePauli.from_sparse_label(
... ("ZX", (1, 4)),
... num_qubits=5,
... )
<QubitSparsePauli on 5 qubits: X_4 Z_1>Questo metodo può replicare il comportamento di from_label()se il campo qubit-arguments della tupla è impostato su numeri interi decrescenti:
>>> label = "XYXZ"
>>> from_label = QubitSparsePauli.from_label(label)
>>> from_sparse_label = QubitSparsePauli.from_sparse_label(
... (label, (3, 2, 1, 0)),
... num_qubits=4
... )
>>> assert from_label == from_sparse_labelidentity
static identity(num_qubits)
Ottiene l'operatore di identità per un dato numero di qubit.
Esempi
Ottenere l'identità su 100 qubit:
>>> QubitSparsePauli.identity(100)
<QubitSparsePauli on 100 qubits: >to_pauli
to_pauli()
Restituire un Pauli che rappresenta lo stesso Pauli senza fase.
to_qubit_sparse_pauli_list
to_qubit_sparse_pauli_list()
Convertire questo Pauli in un singolo elemento QubitSparsePauliList.