Skip to main content
IBM Quantum Platform

Clifford

class qiskit.quantum_info.Clifford(data, validate=True, copy=True)

GitHub

Basen: BaseOperator, AdjointMixin, Operation

Ein N-Qubit-Unitaroperator aus der Clifford-Gruppe.

Ein N-Qubit-Clifford-Operator nimmt Paulis zu Paulis über Konjugation (bis zu einer globalen Phase). Genauer gesagt, ist die Clifford-Gruppe CN\mathcal{C}_N definiert als

CN={U∈U(2N)∣UPNU†=PN}/U(1)\mathcal{C}_N = \{ U \in U(2^N) | U \mathcal{P}_N U^{\dagger} = \mathcal{P}_N \} / U(1)

wobei PN\mathcal{P}_N die Pauli-Gruppe auf NN Qubits ist, die von Ein-Qubit-Pauli-Operatoren erzeugt wird, und UU ein unitärer Operator in der unitären Gruppe U(2N)U(2^N) ist, der Operationen auf NN Qubits darstellt. CN\mathcal{C}_N ist die Quotientengruppe der Untergruppe skalarer unitärer Matrizen U(1)U(1).

Darstellung

Ein N-Qubit-Clifford-Operator wird als boolesches Tableau der Länge 2N × ( 2N+1 ) unter Verwendung der Konvention aus Referenz [1] gespeichert.

  • Die Zeilen 0 bis N-1 sind die Generatoren der Destabilisierungsgruppe
  • Die Zeilen N bis 2N-1 sind die Generatoren der Stabilisierungsgruppe.

Das interne boolesche Tableau für den Clifford kann über das Attribut tableau aufgerufen werden. Auf die Destabilisierungs- oder Stabilisierungszeilen kann jeweils als Tabelle der Länge N Stabilizer mit destab und stab attribute zugegriffen werden.

Eine leichter lesbare Darstellung des Clifford-Operators erhält man durch Aufruf der to_dict() methode. Diese Darstellung wird auch verwendet, wenn ein Clifford-Objekt gedruckt wird, wie im folgenden Beispiel

from qiskit import QuantumCircuit
from qiskit.quantum_info import Clifford

# Bell state generation circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
cliff = Clifford(qc)

# Print the Clifford
print(cliff)

# Print the Clifford destabilizer rows
print(cliff.to_labels(mode="D"))

# Print the Clifford stabilizer rows
print(cliff.to_labels(mode="S"))
Clifford: Stabilizer = ['+XX', '+ZZ'], Destabilizer = ['+IZ', '+XI']
['+IZ', '+XI']
['+XX', '+ZZ']

Kreislaufumwandlung

Clifford-Operatoren können aus Schaltkreisen initialisiert werden, die ausschließlich die folgenden Clifford-Gatter enthalten: IGate, XGate, YGate, ZGate, HGate SGate, SdgGate, SXGate, SXdgGate, CXGate, CZGate, CYGate, DCXGate, SwapGate, iSwapGate, ECRGate, LinearFunction,, PermutationGate. Sie können mithilfe der to_circuit() Methoden bzw. to_instruction() wieder in ein QuantumCircuit,- oder Gate -Objekt umgewandelt werden. Beachten Sie, dass diese Zerlegung hinsichtlich der Anzahl der Gatter nicht unbedingt optimal ist.

Anmerkung

Eine minimal generierende Menge von Gattern für Clifford-Schaltungen ist die HGate und SGate gatter und entweder das CXGate oder CZGate zwei-Qubit-Gatter.

Clifford-Operatoren können auch in Operator objekte umgewandelt werden, indem man die to_operator() methode. Dies geschieht durch Zerlegung in einen Schaltkreis und anschließende Simulation des Schaltkreises als unitärer Operator.

Referenzen

  1. S. Aaronson, D. Gottesman, Improved Simulation of Stabilizer Circuits, Phys. Rev. A 70, 052328 (2004). arXiv:quant-ph/0406196

Initialisieren Sie ein Operator-Objekt.


Attribute

destab

Das Destabilisierungsfeld für die symplektische Darstellung.

destab_phase

Rückgabe der Phase des Destabilisators mit boolescher Darstellung.

destab_x

Das Destabilisierungsfeld x für die symplektische Darstellung.

destab_z

Der Destabilisator z-Array für die symplektische Darstellung.

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

Rückgabe der Phase mit boolescher Darstellung.

qargs

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

stab

Das Stabilisatorfeld für die symplektische Darstellung.

stab_phase

Rückgabe der Phase des Stabilisators mit boolescher Darstellung.

stab_x

Der Stabilisator x-Array für die symplektische Darstellung.

stab_z

Das Stabilisatorfeld für die symplektische Darstellung.

symplectic_matrix

Rückgabe boolesche symplektische Matrix.

x

Das x-Feld für die symplektische Darstellung.

z

Das z-Feld für die symplektische Darstellung.


Methoden

adjoint

adjoint()

GitHub

Gibt den Adjungierten des Operators zurück.

compose

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

GitHub

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

Parameter

  • other (Clifford) – ein Clifford-Objekt.
  • qargs (list or None) – eine Liste von Subsystempositionen, auf die andere angewendet werden sollen. Wenn „None“ auf alle Teilsysteme angewendet wird (Standard: None).
  • front (bool) – Wenn True, wird mit der Multiplikation des Rechtsoperators anstelle der Linksmultiplikation komponiert, [Standard: False].

Rückgabe

Der komponierte Clifford.

Rückgabetyp

Clifford

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 @ (entspricht dot()) als rechte Matrixmultiplikation definiert ist. Das heißt, dass A & B == A.compose(B) gleichwertig mit B @ A == 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 des Clifford zurück.

copy

copy()

GitHub

Erstellen Sie eine Tiefenkopie des aktuellen Operators.

dot

dot(other, qargs=None)

GitHub

Rückgabe des rechtsmultiplizierten Operators self * other.

Parameter

  • other (Operator) – ein Operator-Objekt.
  • qargs (list or None) – eine Liste von Subsystempositionen, auf die andere angewendet werden sollen. Wenn „None“ auf alle Teilsysteme angewendet wird (Standard: None).

Rückgabe

Die rechte Matrix multipliziert Operator.

Rückgabetyp

Bediener

Anmerkung

Das Punktprodukt kann mit dem binären Operator @ ermittelt werden. Daher ist a.dot(b) gleichbedeutend mit a @ b.

expand

expand(other)

GitHub

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

Parameter

other (Clifford) – ein Clifford-Objekt.

Rückgabe

das Tensorprodukt b⊗ab \otimes a, wobei aa

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

Rückgabetyp

Clifford

from_circuit

static from_circuit(circuit)

GitHub

Initialisieren von einer QuantumCircuit oder Anweisung.

Parameter

circuit (QuantumCircuit orInstruction) – Anweisung zur Initialisierung.

Rückgabe

das Clifford-Objekt für die Anweisung.

Rückgabetyp

Clifford

Erhöht

QiskitError – wenn der Eingabebefehl kein Clifford-Befehl ist oder einen klassischen Registerbefehl enthält.

from_dict

classmethod from_dict(obj)

GitHub

Einen Clifford aus einem Wörterbuch laden

from_label

static from_label(label)

GitHub

Rückgabe eines Tensorprodukts von Ein-Qubit-Clifford-Gattern.

Parameter

label (string) – ein-Qubit-Operator-String.

Rückgabe

Der N-Qubit-Clifford-Operator.

Rückgabetyp

Clifford

Erhöht

QiskitError – wenn die Bezeichnung ungültige Zeichen enthält.

Weitere Informationen:

Die Beschriftungen entsprechen den Ein-Qubit-Cliffords sind

    • Bezeichnung (Label)
    • Stabilisator
    • Destabilisator
    • "I"
    • +Z
    • +X
    • "X"
    • -Z
    • +X
    • "Y"
    • -Z
    • -X
    • "Z"
    • +Z
    • -X
    • "H"
    • +X
    • +Z
    • "S"
    • +Z
    • +Y

from_linear_function

classmethod from_linear_function(linear_function)

GitHub

Erstellen einer Clifford-Funktion aus einer linearen Funktion.

Wenn die lineare Funktion durch eine binäre invertierbare nxn-Matrix A dargestellt wird, dann hat die entsprechende Clifford-Matrix eine symplektische Matrix [[A^t, 0], [0, A^ {-1}] ].

Parameter

linear_function (LinearFunction) – Eine lineare Funktion, die umgewandelt werden soll.

Rückgabe

das Clifford-Objekt für diese lineare Funktion.

Rückgabetyp

Clifford

from_matrix

classmethod from_matrix(matrix)

GitHub

Erstellen einer Clifford-Matrix aus einer unitären Matrix.

Beachten Sie, dass diese Funktion eine exponentiell lange Zeit benötigt w.r.t. die Anzahl der Qubits.

Parameter

matrix (np.array) – Eine unitäre Matrix, die eine zu konvertierende Clifford-Matrix darstellt.

Rückgabe

das Clifford-Objekt für die unitäre Matrix.

Rückgabetyp

Clifford

Erhöht

QiskitError – wenn die Eingabe keine Clifford-Matrix ist.

from_operator

classmethod from_operator(operator)

GitHub

Erstelle einen Clifford aus einem Operator.

Beachten Sie, dass diese Funktion eine exponentiell lange Zeit benötigt w.r.t. die Anzahl der Qubits.

Parameter

operator (Operator) – Ein Operator, der einen zu konvertierenden Clifford darstellt.

Rückgabe

das Clifford-Objekt für den Operator.

Rückgabetyp

Clifford

Erhöht

QiskitError – wenn die Eingabe kein Clifford-Operator ist.

from_permutation

classmethod from_permutation(permutation_gate)

GitHub

Erstellen Sie einen Clifford aus einer PermutationGate.

Parameter

permutation_gate (PermutationGate) – Eine zu konvertierende Permutation.

Rückgabe

das Clifford-Objekt für diese Permutation.

Rückgabetyp

Clifford

input_dims

input_dims(qargs=None)

GitHub

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

is_unitary

is_unitary()

GitHub

Gibt True zurück, wenn die Clifford-Tabelle gültig ist.

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.

tensor

tensor(other)

GitHub

Gibt das Tensorprodukt mit einem anderen Clifford zurück.

Parameter

other (Clifford) – ein Clifford-Objekt.

Rückgabe

das Tensorprodukt a⊗ba \otimes b, wobei aa

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

Rückgabetyp

Clifford

Anmerkung

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

to_circuit

to_circuit()

GitHub

Geben Sie eine QuantumCircuit zurück, die den Clifford implementiert.

Für N <= 3 qubits this is based on optimal CX cost decomposition from reference [1]. For N > 3 Qubits wird dies mit der allgemeinen nicht-optimalen Kompilierungsroutine aus Referenz [2] durchgeführt.

Rückgabe

eine schaltungstechnische Umsetzung des Clifford.

Rückgabetyp

QuantumCircuit

Referenzen

  1. S. Bravyi, D. Maslov, Hadamard-freie Schaltungen legen die Struktur der Clifford-Gruppe offen, arXiv:2003.09412 [quant-ph]
  2. S. Aaronson, D. Gottesman, Improved Simulation of Stabilizer Circuits, Phys. Rev. A 70, 052328 (2004). arXiv:quant-ph/0406196

to_dict

to_dict()

GitHub

Rückgabe der Wörterbuchrepräsentation des Clifford-Objekts.

to_instruction

to_instruction()

GitHub

Rückgabe einer Gate-Anweisung, die den Clifford implementiert.

to_labels

to_labels(array=False, mode='B')

GitHub

Umwandlung einer Clifford-Liste in eine Liste von Pauli-(De-)Stabilisator-Kettenbezeichnungen.

Für große Clifford-Konvertierungen ist die Verwendung von array=True kwarg effizienter, da es im Voraus Speicher für das gesamte Numpy-Array von Labels zuweist.

Bezeichnung (Label)
Phase  
Symplektisch
Matrix
Pauli
"+I"0[0,0][0, 0][1001]\begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}II
"-I"1[0,0][0, 0][−100−1]\begin{bmatrix} -1 & 0 \\ 0 & -1 \end{bmatrix}−I-I
"X"0[1,0][1, 0][0110]\begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix}XX
"-X"1[1,0][1, 0][0−1−10]\begin{bmatrix} 0 & -1 \\ -1 & 0 \end{bmatrix}−X-X
"Y"0[1,1][1, 1][01−10]\begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix}iYiY
"-Y"1[1,1][1, 1][0−110]\begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix}−iY-iY
"Z"0[0,1][0, 1][100−1]\begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix}ZZ
"-Z"1[0,1][0, 1][−1001]\begin{bmatrix} -1 & 0 \\ 0 & 1 \end{bmatrix}−Z-Z

Parameter

  • array (bool) – gibt ein Numpy-Array zurück, wenn True, andernfalls eine Liste (Standard: False).
  • mode (Literal["S", "D", "B"]) – sowohl Stabilisator als auch Destabilisator zurückgeben, wenn "B", nur Stabilisator zurückgeben, wenn "S" und nur Destabilisator zurückgeben, wenn "D".

Rückgabe

Die Zeilen der StabilizerTable in Form von Etiketten.

Rückgabetyp

Liste oder Array

Erhöht

QiskitError – wenn sowohl „Stabilizer“ als auch „Destabilizer“ auf „False“ gesetzt sind.

to_matrix

to_matrix()

GitHub

Operator in Numpy-Matrix umwandeln.

to_operator

to_operator()

GitHub

In ein Operator-Objekt umwandeln.

Rückgabetyp

Operator

transpose

transpose()

GitHub

Gibt die Transponierung des Clifford zurück.

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