Skip to main content
IBM Quantum Platform

Pauli

class qiskit.quantum_info.Pauli(data=None)

GitHub

Basi: BasePauli

Operatore di Pauli a N-qubit.

Questa classe rappresenta un operatore PP del gruppo di Pauli completo nn -qubit

P=(i)qPn1...P0P = (-i)^{q} P_{n-1} \otimes ... \otimes P_{0}

dove qZ4q\in \mathbb{Z}_4 e Pi{I,X,Y,Z}P_i \in \{I, X, Y, Z\} sono matrici di Pauli a singolo qubit:

I=(1001),X=(0110),Y=(0ii0),Z=(1001).I = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}, X = \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}, Y = \begin{pmatrix} 0 & -i \\ i & 0 \end{pmatrix}, Z = \begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix}.

Inizializzazione

Un oggetto Pauli può essere inizializzato in diversi modi:

Pauli(obj)

dove obj è una stringa di Pauli, Pauli o un ScalarOp o un operatore, o una porta Pauli o QuantumCircuit contenente solo porte Pauli.

Pauli((z, x, phase))

dove z e x sono booleani numpy.ndarrays e phase è un intero in [0, 1, 2, 3].

Pauli((z, x))

equivalente a Pauli((z, x, 0)) con fase banale.

Rappresentazione delle stringhe

Un nn -qubit Pauli può essere rappresentato da una stringa composta da nn caratteri di ['I', 'X', 'Y', 'Z'], ed eventualmente da un coefficiente di fase in ['', '-i', '-', 'i']. Ad esempio: 'XYZ' o '-iZIZ'.

Nella rappresentazione a stringa qubit-0 corrisponde al carattere di Pauli più a destra e qubit- (n1)(n-1) al carattere di Pauli più a sinistra. Ad esempio 'XYZ' rappresenta XYZX\otimes Y \otimes Z con 'Z' su qubit-0, 'Y' su qubit-1 e 'X' su qubit-2.

La rappresentazione della stringa può essere convertita in un oggetto Pauli utilizzando l'inizializzazione della classe (Pauli('-iXYZ')). Un oggetto Pauli può essere riconvertito nella rappresentazione della stringa usando il metodo to_label() o str(pauli).

Nota

L'uso di str per convertire un Pauli in una stringa troncherà la stringa restituita per grandi numeri di qubit, mentre to_label() restituirà la stringa completa senza alcun troncamento. La lunghezza di troncamento predefinita è di 50 caratteri. Il valore predefinito può essere modificato impostando l'attributo di classe __truncate__ su un valore intero. Se impostato su 0 , non verrà eseguito alcun troncamento.

Rappresentazione della matrice

La struttura interna dei dati di un nn -qubit Pauli è costituita da due vettori booleani di lunghezza nn zZ2Nz \in \mathbb{Z}_2^N, xZ2Nx \in \mathbb{Z}_2^N, e da un intero qZ4q \in \mathbb{Z}_4 che definisce l'operatore Pauli

P=(i)q+zxZzXx.P = (-i)^{q + z\cdot x} Z^z \cdot X^x.

Il qubit kk corrisponde alla kk -esima voce degli array zz e xx

P=Pn1...P0Pk=(i)z[k]x[k]Zz[k]Xx[k]\begin{aligned} P &= P_{n-1} \otimes ... \otimes P_{0} \\ P_k &= (-i)^{z[k] * x[k]} Z^{z[k]}\cdot X^{x[k]} \end{aligned}

dove z[k] = P.z[k], x[k] = P.x[k] rispettivamente.

Gli array zz e xx possono essere consultati e aggiornati utilizzando gli elementi z e x rispettivamente. L'intero di fase qq può essere consultato e aggiornato utilizzando la proprietà phase proprietà.

Rappresentazione dell'operatore di matrice

Le matrici di Pauli possono essere convertite in (2n,2n)(2^n, 2^n) Operator utilizzando il metodo to_operator() , oppure in una matrice complessa densa o rada utilizzando il metodo to_matrix() metodo.

Accesso ai dati

È possibile accedere ai singoli qubit Paulis e aggiornarli utilizzando l'operatore [] , che accetta interi, liste o slices per selezionare sottoinsiemi di Paulis. Si noti che la selezione di sottoinsiemi di Pauli scarterà la fase del Pauli corrente.

Per esempio

from qiskit.quantum_info import Pauli

P = Pauli('-iXYZ')

print('P[0] =', repr(P[0]))
print('P[1] =', repr(P[1]))
print('P[2] =', repr(P[2]))
print('P[:] =', repr(P[:]))
print('P[::-1] =', repr(P[::-1]))

Inizializzare il Pauli.

Quando si utilizzano i dati di input della matrice simplectica è necessario fornire entrambi gli argomenti z e x, tuttavia il primo argomento (z) può essere utilizzato da solo per l'etichetta della stringa, l'operatore Pauli o i dati di input ScalarOp dati di input.

Parametri

data (str ortuple orPauli orScalarOp) – dati di input per Pauli. Se l'input è una tupla, deve essere della forma (z, x) o (z, x, phase) dove z e x sono array booleani di Numpy e la fase è un intero di Z4\mathbb{Z}_4. Se l'input è una stringa, deve essere una concatenazione di una fase e di una stringa di Pauli (ad esempio 'XYZ', '-iZIZ') dove una stringa di fase è una combinazione di almeno tre caratteri da ['+', '-', ''], ['1', ''], e ['i', 'j', ''] in questo ordine, ad esempio '', '-1j' mentre una stringa Pauli è costituita da 1 o più caratteri di 'I', 'X', 'Y', o 'Z', ad esempio 'Z', 'XIYY'.

Aumenti

QiskitError – se l'array di input ha una forma non valida.


Attributi

dim

Restituisce una tupla (forma_ingresso, forma_uscita).

name

Identificatore univoco del tipo di operazione.

num_clbits

Numero di bit classici.

num_qubits

Restituisce il numero di qubit se si tratta di un operatore a N qubit o altrimenti None.

phase

Restituisce l'esponente di fase del gruppo Pauli.

qargs

Restituisce i qarg per l'operatore.

settings

Impostazioni di ritorno.

x

Il vettore x per il Pauli.

z

Il vettore z per il Pauli.


Metodi

adjoint

adjoint()

GitHub

Restituisce l'adjoint dell'Operatore.

anticommutes

anticommutes(other, qargs=None)

GitHub

Restituisce True se l'altro Pauli anticommuta con self.

Parametri

  • other (Pauli) – un altro operatore di Pauli.
  • qargs (list) – qubit a cui applicare il prodotto di punti (valore predefinito: Nessuno).

Risultati

Vero se i Pauli sono anticommutativi, falso se sono commutativi.

Tipo di restituzione

bool

apply_layout

apply_layout(layout, num_qubits=None)

GitHub

Applicare un layout di transpiler a questo Pauli

Parametri

  • layout (TranspileLayout |list[int] | None) – O un TranspileLayout, un elenco di numeri interi o Nessuno. Se sia il layout che il numero di bit sono nulli, viene restituita una copia dell'operatore.
  • num_qubits (int | None) – Il numero di qubit a cui espandere l'operatore. Se non viene fornito, se layout è un valore TranspileLayout il numero di qubit del circuito di uscita del transpiler verrà utilizzato per impostazione predefinita. Se layout è un elenco di numeri interi, la permutazione specificata verrà applicata senza alcuna espansione. Se il layout è None, l'operatore sarà espanso al numero di qubit indicato.

Risultati

Un nuovo Pauli con il layout fornito applicato

Tipo di restituzione

Pauli

commutes

commutes(other, qargs=None)

GitHub

Restituisce True se il Pauli commuta con altri.

Parametri

  • other (Pauli orPauliList) – un altro operatore di Pauli.
  • qargs (list) – qubit a cui applicare il prodotto di punti (valore predefinito: Nessuno).

Risultati

Vero se i Pauli sono pendolari, falso se sono anti-commutativi.

Tipo di restituzione

bool

compose

compose(other, qargs=None, front=False, inplace=False)

GitHub

Restituisce l'operatore composizione con un altro Pauli.

Parametri

  • other (Pauli) – un oggetto Pauli.
  • qargs (list or None) – qubit su cui applicare il prodotto scalare (impostazione predefinita: Nessuno).
  • front (bool) – Se True, componi utilizzando la moltiplicazione dell'operatore a destra, invece della moltiplicazione a sinistra, [impostazione predefinita: False].
  • inplace (bool) – Se True, aggiorna in-place (valore predefinito: False).

Risultati

Il composto Pauli.

Tipo di restituzione

Pauli

Aumenti

QiskitError – se l’altro non può essere convertito in un operatore o presenta dimensioni incompatibili con i sottosistemi specificati.

Nota

La composizione (&) per impostazione predefinita è definita come moltiplicazione matriciale sinistra per gli operatori matriciali, mentre dot() è definita come moltiplicazione destra della matrice. Cioè A & B == A.compose(B) è equivalente a B.dot(A) quando A e B sono dello stesso tipo.

Impostando il kwarg front=True si passa alla moltiplicazione matriciale destra ed è equivalente al metodo dot()A.dot(B) == A.compose(B, front=True) .

conjugate

conjugate()

GitHub

Restituisce il coniugato complesso del Pauli rispetto alla base Z.

copy

copy()

GitHub

Eseguire una copia profonda dell'operatore corrente.

delete

delete(qubits)

GitHub

Restituisce un Pauli con i qubit cancellati.

Parametri

qubits (int orlist) – qubit da eliminare da Pauli.

Risultati

il Pauli risultante con la rimozione dei qubit specificati.

Tipo di restituzione

Pauli

Aumenti

QiskitError – se ind è fuori dai limiti della dimensione dell'array o del numero di qubit.

dot

dot(other, qargs=None, inplace=False)

GitHub

Restituisce l'operatore moltiplicato a destra self * altro.

Parametri

  • other (Pauli) – un oggetto operatore.
  • qargs (list or None) – qubit su cui applicare il prodotto scalare (impostazione predefinita: Nessuno).
  • inplace (bool) – Se True, aggiorna in-place (valore predefinito: False).

Risultati

L'operatore self * altro.

Tipo di restituzione

Pauli

equiv

equiv(other)

GitHub

Restituisce True se i Pauli sono equivalenti fino alla fase di gruppo.

Parametri

other (Pauli) – un oggetto operatore.

Risultati

Vero se le Pauli sono equivalenti fino alla fase di gruppo.

Tipo di restituzione

bool

evolve

evolve(other, qargs=None, frame='h')

GitHub

Esegue l'evoluzione del quadro di Heisenberg (predefinito) o di Schrödinger del Pauli da parte di un Clifford e restituisce il Pauli evoluto.

L'evoluzione dell'immagine di Schrödinger può essere scelta passando il parametro frame='s'. Questa opzione consente di ottenere un calcolo più rapido.

Il quadro di Heisenberg evolve il Pauli come P=C.P.CP^\prime = C^\dagger.P.C.

Il quadro di Schrödinger evolve il Pauli come P=C.P.CP^\prime = C.P.C^\dagger.

Parametri

  • other (Pauli orClifford orQuantumCircuit) – L'operatore di Clifford da utilizzare per l'evoluzione.
  • qargs (list) – un elenco di qubit a cui applicare il Clifford.
  • frame (string) – 'h' per Heisenberg (default) o 's' per il quadro di Schrödinger.

Risultati

il Pauli C.P.CC^\dagger.P.C (quadro di Heisenberg) o il Pauli C.P.CC.P.C^\dagger (quadro di Schrödinger).

Tipo di restituzione

Pauli

Aumenti

QiskitError – se il numero di Clifford dei qubit e dei qarg non coincide.

expand

expand(other)

GitHub

Restituisce il prodotto tensoriale di ordine inverso con un altro Pauli.

Parametri

other (Pauli) – un oggetto Pauli.

Risultati

il prodotto tensoriale bab \otimes a, dove aa

è il Pauli attuale e bb è l'altro Pauli.

Tipo di restituzione

Pauli

input_dims

input_dims(qargs=None)

GitHub

Restituisce una tupla di dimensioni di ingresso per i sottosistemi specificati.

insert

insert(qubits, value)

GitHub

Inserire un Pauli in corrispondenza di un valore specifico del qubit.

Parametri

  • qubits (int orlist) – indice dei qubit da inserire.
  • value (Pauli) – valore da inserire.

Risultati

il Pauli risultante con le voci inserite.

Tipo di restituzione

Pauli

Aumenti

QiskitError – se i qubit di inserimento non sono validi.

inverse

inverse()

GitHub

Restituisce l'inverso del Pauli.

output_dims

output_dims(qargs=None)

GitHub

Restituisce una tupla di dimensioni di uscita per i sottosistemi specificati.

power

power(n)

GitHub

Restituisce il risultato dell'applicazione di un operatore su se stesso per n volte.

Parametri

n (int) – il numero di volte che si compone con il sé ( n>0 ).

Risultati

l'operatore composto n volte.

Tipo di restituzione

Clifford

Aumenti

QiskitError – se le dimensioni di ingresso e di uscita dell'operatore non sono uguali, oppure se la potenza non è un numero intero positivo.

reshape

reshape(input_dims=None, output_dims=None, num_qubits=None)

GitHub

Restituisce una copia superficiale con le dimensioni dei sottosistemi di ingresso e di uscita rimodellate.

Parametri

  • input_dims (None or tuple) – nuove dimensioni di input del sottosistema. Se Nessuno, le attenuazioni dell'input originale verranno mantenute. [Predefinito: Nessuno].
  • output_dims (None or tuple) – nuove dimensioni di uscita del sottosistema. Se Nessuno, le gradazioni di output originali verranno mantenute. [Predefinito: Nessuno].
  • num_qubits (None or int) – rimodella in un operatore N-qubit [Predefinito: Nessuno].

Risultati

restituisce self con le dimensioni di ingresso e di uscita rimodellate.

Tipo di restituzione

BaseOperator

Aumenti

QiskitError – se la somma delle dimensioni di ingresso o di uscita di tutti i sottosistemi non è costante.

set_truncation

classmethod set_truncation(val)

GitHub

Imposta il numero massimo di caratteri Pauli da visualizzare prima del troncamento.

Parametri

val (int) – il numero di caratteri.

Nota

La troncatura sarà disabilitata se il valore di troncatura è impostato su 0.

tensor

tensor(other)

GitHub

Restituisce il prodotto tensoriale con un altro Pauli.

Parametri

other (Pauli) – un oggetto Pauli.

Risultati

**il prodotto tensoriale aba \otimes b, dove aa **

è il Pauli attuale e bb è l'altro Pauli.

Tipo di restituzione

Pauli

Nota

Il prodotto tensoriale può essere ottenuto utilizzando l'operatore binario ^ . Quindi a.tensor(b) è equivalente a a ^ b.

to_instruction

to_instruction()

GitHub

Convertire in istruzione di circuito Pauli.

to_label

to_label()

GitHub

Converte un Pauli in un'etichetta di stringa.

Nota

La differenza tra to_label e to_label __str__() è che quest'ultimo tronca l'output quando il numero di qubit è elevato.

Risultati

l'etichetta della stringa di Pauli.

Tipo di restituzione

STR

to_matrix

to_matrix(sparse=False)

GitHub

Convertire in una matrice Numpy o in una matrice CSR rada.

Parametri

sparse (bool) – se True restituisce matrici CSR rade, altrimenti restituisce matrici Numpy dense (valore predefinito: False).

Risultati

La matrice di Pauli.

Tipo di restituzione

array

transpose

transpose()

GitHub

Restituisce la trasposizione di ogni Pauli dell'elenco.

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