Clifford
class qiskit.quantum_info.Clifford(data, validate=True, copy=True)
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 definiert als
wobei die Pauli-Gruppe auf Qubits ist, die von Ein-Qubit-Pauli-Operatoren erzeugt wird, und ein unitärer Operator in der unitären Gruppe ist, der Operationen auf Qubits darstellt. ist die Quotientengruppe der Untergruppe skalarer unitärer Matrizen .
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.
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
- 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
compose
compose(other, qargs=None, front=False)
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
Erhöht
QiskitError – wenn andere nicht in einen Operator umgewandelt werden können oder für die angegebenen Teilsysteme nicht kompatible Dimensionen aufweisen.
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
copy
dot
dot(other, qargs=None)
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
Das Punktprodukt kann mit dem binären Operator @ ermittelt werden. Daher ist a.dot(b) gleichbedeutend mit a @ b.
expand
expand(other)
Gibt das Tensorprodukt umgekehrter Ordnung mit einem anderen Clifford zurück.
Parameter
other (Clifford) – ein Clifford-Objekt.
Rückgabe
das Tensorprodukt , wobei
ist der aktuelle Clifford, und ist der andere Clifford.
Rückgabetyp
from_circuit
static from_circuit(circuit)
Initialisieren von einer QuantumCircuit oder Anweisung.
Parameter
circuit (QuantumCircuit orInstruction) – Anweisung zur Initialisierung.
Rückgabe
das Clifford-Objekt für die Anweisung.
Rückgabetyp
Erhöht
QiskitError – wenn der Eingabebefehl kein Clifford-Befehl ist oder einen klassischen Registerbefehl enthält.
from_dict
from_label
static from_label(label)
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
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)
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
from_matrix
classmethod from_matrix(matrix)
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
Erhöht
QiskitError – wenn die Eingabe keine Clifford-Matrix ist.
from_operator
classmethod from_operator(operator)
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
Erhöht
QiskitError – wenn die Eingabe kein Clifford-Operator ist.
from_permutation
classmethod from_permutation(permutation_gate)
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
input_dims
input_dims(qargs=None)
Rückgabe eines Tupels der Eingabedimension für die angegebenen Teilsysteme.
is_unitary
output_dims
output_dims(qargs=None)
Rückgabe eines Tupels der Ausgabedimension für die angegebenen Teilsysteme.
power
power(n)
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
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)
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)
Gibt das Tensorprodukt mit einem anderen Clifford zurück.
Parameter
other (Clifford) – ein Clifford-Objekt.
Rückgabe
das Tensorprodukt , wobei
ist der aktuelle Clifford, und ist der andere Clifford.
Rückgabetyp
Das Tensorprodukt kann mit dem binären Operator ^ erhalten werden. Daher ist a.tensor(b) gleichbedeutend mit a ^ b.
to_circuit
to_circuit()
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
Referenzen
- S. Bravyi, D. Maslov, Hadamard-freie Schaltungen legen die Struktur der Clifford-Gruppe offen, arXiv:2003.09412 [quant-ph]
- S. Aaronson, D. Gottesman, Improved Simulation of Stabilizer Circuits, Phys. Rev. A 70, 052328 (2004). arXiv:quant-ph/0406196
to_dict
to_instruction
to_labels
to_labels(array=False, mode='B')
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 | |||
"-I" | 1 | |||
"X" | 0 | |||
"-X" | 1 | |||
"Y" | 0 | |||
"-Y" | 1 | |||
"Z" | 0 | |||
"-Z" | 1 |
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
Erhöht
QiskitError – wenn sowohl „Stabilizer“ als auch „Destabilizer“ auf „False“ gesetzt sind.