Skip to main content
IBM Quantum Platform

QubitSparsePauli

class qiskit.quantum_info.QubitSparsePauli(data, /, num_qubits=None)

GitHub

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 P=nAi(n)P = \bigotimes_n A^{(n)}_i, per Ai(n){I,X,Y,Z}A^{(n)}_i \in \{I, X, Y, Z\}. 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"II (identità)Non conservato.Non conservato.
"X"XX (Pauli X)0b10 (2)X
"Y"YY (Pauli Y)0b11 (3)Y
"Z"ZZ (Pauli Z)0b01 (1)Z
Attributo
Lunghezza
Descrizione
paulisssCiascuno degli operatori di Pauli non identitari a singolo qubit. Queste corrispondono alle non identità Ai(n)A^{(n)}_i nell'elenco, dove le voci sono memorizzate in ordine crescente ii prima, e in ordine crescente nn all'interno di ogni termine.
indicesssIl qubit corrispondente ( nn ) 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 ss è 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

GitHub

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.X

Si 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 XX. Utilizza l'etichetta a lettera singola "X".

Y

Valore predefinito: 3

L'operatore di Pauli YY. Utilizza l'etichetta a lettera singola "Y".

Z

Valore predefinito: 1

L'operatore di Pauli ZZ. 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 formati from_label() o from_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 con Pauli).
  • 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 ZZ 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_label

identity

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.

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