Skip to main content
IBM Quantum Platform

Pauli

class qiskit.quantum_info.Pauli(data=None)

GitHub

Basen: BasePauli

N-Qubit Pauli-Operator.

Diese Klasse repräsentiert einen Operator PP aus der vollständigen nn -qubit Pauli-Gruppe

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

wobei q∈Z4q\in \mathbb{Z}_4 und Pi∈{I,X,Y,Z}P_i \in \{I, X, Y, Z\} Ein-Qubit-Pauli-Matrizen sind:

I=(1001),X=(0110),Y=(0−ii0),Z=(100−1).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}.

Initialisierung

Ein Pauli-Objekt kann auf verschiedene Weise initialisiert werden:

Pauli(obj)

wobei obj eine Pauli-Kette ist, Pauli oder ScalarOp operator oder ein Pauli-Tor oder QuantumCircuit , das nur Pauli-Tore enthält.

Pauli((z, x, phase))

wobei z und x boolesche numpy.ndarrays sind und phase eine ganze Zahl in [0, 1, 2, 3] ist.

Pauli((z, x))

gleichwertig mit Pauli((z, x, 0)) mit trivialer Phase.

String-Darstellung

Ein nn -Qubit Pauli kann durch eine Zeichenkette dargestellt werden, die aus nn Zeichen von ['I', 'X', 'Y', 'Z'] und optional einem Phasenkoeffizienten in ['', '-i', '-', 'i'] besteht. Zum Beispiel: 'XYZ' oder '-iZIZ'.

In der Zeichenkettendarstellung entspricht qubit-0 dem äußersten rechten Pauli-Zeichen und qubit- (n−1)(n-1) dem äußersten linken Pauli-Zeichen. Zum Beispiel repräsentiert 'XYZ' X⊗Y⊗ZX\otimes Y \otimes Z mit 'Z' auf qubit-0, 'Y' auf qubit-1 und 'X' auf qubit-2.

Die String-Darstellung kann mit Hilfe der Klasseninitialisierung (Pauli('-iXYZ')) in eine Pauli konvertiert werden. Ein Pauli Objekt kann mit der Methode to_label() methode oder str(pauli) zurückgewandelt werden.

Anmerkung

Die Verwendung von str zur Umwandlung von Pauli in eine Zeichenkette wird die zurückgegebene Zeichenkette bei einer großen Anzahl von Qubits abschneiden, während to_label() die vollständige Zeichenkette ohne Abschneiden zurückgibt. Die Standardlänge für die Trunkierung beträgt 50 Zeichen. Der Standardwert kann geändert werden, indem das Attribut der Klasse __truncate__ auf einen Integer-Wert gesetzt wird. Bei der Einstellung 0 wird keine Trunkierung vorgenommen.

Array-Darstellung

Die interne Datenstruktur eines nn -Qubits Pauli besteht aus zwei booleschen Vektoren der Länge nn z∈Z2Nz \in \mathbb{Z}_2^N, x∈Z2Nx \in \mathbb{Z}_2^N und einer ganzen Zahl q∈Z4q \in \mathbb{Z}_4, die den Pauli-Operator definiert

P=(−i)q+z⋅xZz⋅Xx.P = (-i)^{q + z\cdot x} Z^z \cdot X^x.

Das kk -te Qubit entspricht dem kk -ten Eintrag in den Arrays zz und xx

P=Pn−1⊗...⊗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}

wobei z[k] = P.z[k] bzw. x[k] = P.x[k] .

Auf die Arrays zz und xx kann mit den Befehlen z und x eigenschaften zugegriffen werden. Auf die Phasen-Ganzzahl qq kann mit der Eigenschaft phase eigenschaft.

Darstellung von Matrix-Operatoren

Pauli-Matrizen können in (2n,2n)(2^n, 2^n) umgewandelt werden Operator mit der Methode to_operator() oder in eine dichte oder dünnbesetzte komplexe Matrix mit der Methode to_matrix() methode.

Datenzugriff

Auf die einzelnen Paulis der Qubits kann mit dem Operator [] zugegriffen werden, der Ganzzahlen, Listen oder Slices zur Auswahl von Teilmengen von Paulis akzeptiert. Beachten Sie, dass bei der Auswahl von Teilmengen von Pauli die Phase des aktuellen Pauli verworfen wird.

Zum Beispiel

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]))

Initialisieren Sie den Pauli.

Bei Verwendung der Eingabedaten des symplektischen Arrays müssen sowohl z- als auch x-Argumente angegeben werden; das erste (z-)Argument kann jedoch auch allein für String-Label, Pauli-Operator oder ScalarOp eingabedaten verwendet werden.

Parameter

data (str ortuple orPauli orScalarOp) – eingabedaten für Pauli. Handelt es sich bei der Eingabe um ein Tupel, muss es die Form (z, x) oder (z, x, phase) haben, wobei z und x boolesche Numpy-Arrays sind und phase eine ganze Zahl aus Z4\mathbb{Z}_4 ist. Handelt es sich bei der Eingabe um eine Zeichenkette, muss es sich um eine Verkettung von phase und einer Pauli-Zeichenkette handeln (z. B. 'XYZ', '-iZIZ') wobei eine Phasenfolge eine Kombination aus höchstens drei Zeichen aus ['+', '-', ''], ['1', ''] und ['i', 'j', ''] in dieser Reihenfolge ist, z. B. '', '-1j' während eine Pauli-Zeichenkette aus 1 oder mehreren Zeichen von 'I', 'X', 'Y' oder 'Z' besteht, z. B. 'Z', 'XIYY'.

Erhöht

QiskitError – wenn das Eingabe-Array eine ungültige Form hat.


Attribute

dim

Rückgabe Tupel (input_shape, output_shape).

name

Eindeutiger String-Bezeichner für die Vorgangsart.

num_clbits

Anzahl der klassischen Bits.

num_qubits

Gibt die Anzahl der Qubits zurück, wenn es sich um einen N-Qubit-Operator handelt, andernfalls None.

phase

Gibt den Gruppenphasenexponenten für die Pauli-Gruppe zurück.

qargs

Gibt die qargs für den Operator zurück.

settings

Einstellungen zurückgeben.

x

Der x-Vektor für den Pauli.

z

Der z-Vektor für den Pauli.


Methoden

adjoint

adjoint()

GitHub

Gibt den Adjungierten des Operators zurück.

anticommutes

anticommutes(other, qargs=None)

GitHub

Gibt True zurück, wenn andere Pauli mit self anticommutes.

Parameter

  • other (Pauli) – ein weiterer Pauli-Operator.
  • qargs (list) – qubits, auf die das Punktprodukt angewendet werden soll (Voreinstellung: Keine).

Rückgabe

Wahr, wenn Pauli's anticommute, Falsch, wenn sie pendeln.

Rückgabetyp

bool

apply_layout

apply_layout(layout, num_qubits=None)

GitHub

Wenden Sie ein Transpiler-Layout auf diese Pauli

Parameter

  • layout (TranspileLayout |list[int] | None) – Entweder ein TranspileLayout, eine Liste von Ganzzahlen oder None. Wenn sowohl layout als auch num_qubits keine sind, wird eine Kopie des Operators zurückgegeben.
  • num_qubits (int | None) – Die Anzahl der Qubits, auf die der Operator erweitert werden soll. Wenn nicht angegeben, wird, wenn layout ein TranspileLayout ist, wird standardmäßig die Anzahl der Qubits der Transpiler-Ausgangsschaltung verwendet. Wenn layout eine Liste von ganzen Zahlen ist, wird die angegebene Permutation ohne Expansion angewendet. Ist Layout gleich Null, wird der Operator auf die angegebene Anzahl von Qubits erweitert.

Rückgabe

Eine neue Pauli mit dem angegebenen Layout

Rückgabetyp

Pauli

commutes

commutes(other, qargs=None)

GitHub

Gibt True zurück, wenn der Pauli mit anderen pendelt.

Parameter

  • other (Pauli orPauliList) – ein weiterer Pauli-Operator.
  • qargs (list) – qubits, auf die das Punktprodukt angewendet werden soll (Voreinstellung: Keine).

Rückgabe

Richtig, wenn die Paulis pendeln, falsch, wenn sie nicht pendeln.

Rückgabetyp

bool

compose

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

GitHub

Rückgabe der Operator-Komposition mit einem anderen Pauli.

Parameter

  • other (Pauli) – ein Pauli-Objekt.
  • qargs (list or None) – Qubits, auf die das Skalarprodukt angewendet werden soll (Standard: None).
  • front (bool) – Wenn True, wird mit der Multiplikation des Rechtsoperators anstelle der Linksmultiplikation komponiert, [Standard: False].
  • inplace (bool) – Bei True wird die Aktualisierung an Ort und Stelle durchgeführt (Standard: False).

Rückgabe

Der komponierte Pauli.

Rückgabetyp

Pauli

Erhöht

QiskitError – wenn andere nicht in einen Operator umgewandelt werden können oder für die angegebenen Teilsysteme nicht kompatible Dimensionen aufweisen.

Anmerkung

Die Komposition (&) ist standardmäßig als linke Matrixmultiplikation für Matrixoperatoren definiert, während dot() als rechte Matrixmultiplikation definiert ist. Das heißt, dass A & B == A.compose(B) gleichwertig mit B.dot(A) ist, wenn A und B vom gleichen Typ sind.

Die Einstellung front=True kwarg ändert dies in eine rechte Matrixmultiplikation und ist äquivalent zu der dot() methode A.dot(B) == A.compose(B, front=True).

conjugate

conjugate()

GitHub

Gibt die konjugierte Komplexität der Pauli-Basis in Bezug auf die Z-Basis zurück.

copy

copy()

GitHub

Erstellen Sie eine Tiefenkopie des aktuellen Operators.

delete

delete(qubits)

GitHub

Gibt einen Pauli mit gelöschten Qubits zurück.

Parameter

qubits (int orlist) – qubits aus Pauli zu löschen.

Rückgabe

das resultierende Pauli, bei dem die angegebenen Qubits entfernt wurden.

Rückgabetyp

Pauli

Erhöht

QiskitError – wenn „ind“ außerhalb des zulässigen Bereichs für die Array-Größe oder die Anzahl der Qubits liegt.

dot

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

GitHub

Rückgabe des rechtsmultiplizierten Operators self * other.

Parameter

  • other (Pauli) – ein Operator-Objekt.
  • qargs (list or None) – Qubits, auf die das Skalarprodukt angewendet werden soll (Standard: None).
  • inplace (bool) – Bei True wird die Aktualisierung an Ort und Stelle durchgeführt (Standard: False).

Rückgabe

Der Betreiber selbst * andere.

Rückgabetyp

Pauli

equiv

equiv(other)

GitHub

Gibt True zurück, wenn die Pauli's bis zur Gruppenphase äquivalent sind.

Parameter

other (Pauli) – ein Operator-Objekt.

Rückgabe

Richtig, wenn die Pauli-Sätze bis zur Gruppenphase äquivalent sind.

Rückgabetyp

bool

evolve

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

GitHub

Führt entweder die Heisenberg- (Standard) oder die Schrödinger-Bildentwicklung des Pauli-Bildes durch ein Clifford-Bild durch und gibt das entwickelte Pauli-Bild zurück.

Die Entwicklung des Schrödinger-Bildes kann durch Übergabe des Parameters frame='s' gewählt werden. Diese Option führt zu einer schnelleren Berechnung.

Das Heisenberg-Bild entwickelt das Pauli-Bild als P′=C†.P.CP^\prime = C^\dagger.P.C.

Schrödingers Bild entfaltet das Pauli-Bild als P′=C.P.C†P^\prime = C.P.C^\dagger.

Parameter

  • other (Pauli orClifford orQuantumCircuit) – Der Clifford-Operator, nach dem die Entwicklung erfolgen soll.
  • qargs (list) – eine Liste von Qubits, auf die das Clifford-Verfahren angewendet werden soll.
  • frame (string) – 'h' für Heisenberg (Standard) oder 's' für das Schrödinger-System.

Rückgabe

das Pauli C†.P.CC^\dagger.P.C (Heisenberg-Bild) oder das Pauli C.P.C†C.P.C^\dagger (Schrödinger-Bild).

Rückgabetyp

Pauli

Erhöht

QiskitError – wenn die Clifford-Zahl der Qubits und die der Qargs nicht übereinstimmen.

expand

expand(other)

GitHub

Gibt das Tensorprodukt umgekehrter Ordnung mit einem anderen Pauli zurück.

Parameter

other (Pauli) – ein Pauli-Objekt.

Rückgabe

das Tensorprodukt b⊗ab \otimes a, wobei aa

ist der aktuelle Pauli, und bb ist der andere Pauli.

Rückgabetyp

Pauli

input_dims

input_dims(qargs=None)

GitHub

Rückgabe eines Tupels der Eingabedimension für die angegebenen Teilsysteme.

insert

insert(qubits, value)

GitHub

Einfügen eines Pauli bei einem bestimmten Qubit-Wert.

Parameter

  • qubits (int orlist) – qubit-Index zum Einfügen bei.
  • value (Pauli) – einzufügender Wert.

Rückgabe

das resultierende Pauli mit den eingefügten Einträgen.

Rückgabetyp

Pauli

Erhöht

QiskitError – wenn die Einfüge-Qubits ungültig sind.

inverse

inverse()

GitHub

Gibt den Kehrwert des Pauli zurück.

output_dims

output_dims(qargs=None)

GitHub

Rückgabe eines Tupels der Ausgabedimension für die angegebenen Teilsysteme.

power

power(n)

GitHub

Gibt das Ergebnis der n-maligen Anwendung eines Operators auf sich selbst zurück.

Parameter

n (int) – die Anzahl der Kompositionen mit sich selbst ( n>0 ).

Rückgabe

der n-fach zusammengesetzte Operator.

Rückgabetyp

Clifford

Erhöht

QiskitError – wenn die Eingabe- und Ausgabedimensionen des Operators nicht gleich sind oder die Potenz keine positive ganze Zahl ist.

reshape

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

GitHub

Rückgabe einer flachen Kopie mit umgestalteten Dimensionen des Eingangs- und Ausgangssubsystems.

Parameter

  • input_dims (None or tuple) – neue Subsystem-Eingangsmaße. Wenn Keine, werden die ursprünglichen Eingangsdimms beibehalten [Standard: Keine].
  • output_dims (None or tuple) – neue Dimensionen der Teilsystemleistung. Wenn Keine, werden die ursprünglichen Ausgangsdimms beibehalten [Standard: Keine].
  • num_qubits (None or int) – in einen N-Qubit-Operator umwandeln [Standard: Keine].

Rückgabe

gibt self mit umgestalteten Eingabe- und Ausgabeabmessungen zurück.

Rückgabetyp

BaseOperator

Erhöht

QiskitError – wenn die Summe aller Eingangs- oder Ausgangsabmessungen der Teilsysteme nicht konstant ist.

set_truncation

classmethod set_truncation(val)

GitHub

Legen Sie die maximale Anzahl an Pauli-Zeichen fest, die vor dem Abschneiden angezeigt werden sollen.

Parameter

val (int) – die Anzahl der Zeichen.

Anmerkung

Die Trunkierung wird deaktiviert, wenn der Trunkierungswert auf 0 gesetzt wird.

tensor

tensor(other)

GitHub

Geben Sie das Tensorprodukt mit einem anderen Pauli zurück.

Parameter

other (Pauli) – ein Pauli-Objekt.

Rückgabe

** das Tensorprodukt a⊗ba \otimes b, wobei aa **

ist der aktuelle Pauli, und bb ist der andere Pauli.

Rückgabetyp

Pauli

Anmerkung

Das Tensorprodukt kann mit dem binären Operator ^ erhalten werden. Daher ist a.tensor(b) gleichbedeutend mit a ^ b.

to_instruction

to_instruction()

GitHub

Umwandlung in eine Pauli-Schaltanweisung.

to_label

to_label()

GitHub

Konvertiert einen Pauli in einen String-Label.

Anmerkung

Der Unterschied zwischen to_label und __str__() besteht darin, dass Letzteres die Ausgabe bei einer großen Anzahl von Qubits abschneidet.

Rückgabe

das Pauli String Label.

Rückgabetyp

str

to_matrix

to_matrix(sparse=False)

GitHub

Umwandlung in ein Numpy-Array oder eine dünnbesetzte CSR-Matrix.

Parameter

sparse (bool) – bei True werden dünn besetzte CSR-Matrizen zurückgegeben, andernfalls werden dichte Numpy-Arrays zurückgegeben (Standard: False).

Rückgabe

Die Pauli-Matrix.

Rückgabetyp

Bereich

transpose

transpose()

GitHub

Gibt die Transponierung jedes Pauli in der Liste zurück.

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.