CNOT-Dieder
class qiskit.quantum_info.CNOTDihedral(data=None, num_qubits=None, validate=True)
Basen: BaseOperator, AdjointMixin
Ein N-Qubit-Operator aus der CNOT-Dihedral-Gruppe.
Die CNOT-Dihedral-Gruppe wird durch die Quantengatter erzeugt,
CXGate,TGate, undXGate.Darstellung
Ein -qubit CNOT-Dihedral-Operator wird als affine Funktion und als Phasenpolynom gespeichert, basierend auf der Konvention in Referenzen [1, 2].
Die affine Funktion besteht aus einer invertierbaren binären Matrix und einem binären Vektor.
Das Phasenpolynom ist ein Polynom vom Grad höchstens 3 in Variablen, dessen Koeffizienten im Ring Z_8 mit 8 Elementen liegen.
from qiskit import QuantumCircuit from qiskit.quantum_info import CNOTDihedral circ = QuantumCircuit(3) circ.cx(0, 1) circ.x(2) circ.t(1) circ.t(1) circ.t(1) elem = CNOTDihedral(circ) # Print the CNOTDihedral element print(elem)
phase polynomial =
0 + 3*x_0 + 3*x_1 + 2*x_0*x_1
affine function =
(x_0,x_0 + x_1,x_2 + 1)Kreislaufumwandlung
CNOT-Dihedral-Operatoren können aus Schaltkreisen initialisiert werden, die ausschließlich die folgenden Gatter enthalten:
IGate,XGate,YGate,ZGate,TGate,TdgGateSGate,SdgGate,CXGateCZGate,CSGate,CSdgGate,SwapGate,,CCZGate. Sie können mithilfe derto_circuit()Methoden bzw.to_instruction()wieder in einQuantumCircuit,- oderGate-Objekt umgewandelt werden. Beachten Sie, dass diese Zerlegung hinsichtlich der Anzahl der Gatter nicht unbedingt optimal ist, wenn die Anzahl der Qubits größer als zwei ist.CNOTDihedral-Operatoren können auch in Objekte umgewandelt werden
Operatorobjekte mit derto_operator()methode. Dies geschieht durch Zerlegung in einen Schaltkreis und anschließende Simulation des Schaltkreises als unitärer Operator.Quellenangaben:
- Shelly Garion und Andrew W. Cross, Synthesis of CNOT-Dihedral circuits with optimal number of two qubit gates, Quantum 4(369), 2020
- Andrew W. Cross, Easwar Magesan, Lev S. Bishop, John A. Smolin und Jay M. Gambetta, Scalable randomized benchmarking of non-Clifford gates, npj Quantum Inf 2, 16012 (2016).
Initialisieren eines CNOTDihedral-Operator-Objekts.
Parameter
- data (CNOTDihedral orQuantumCircuit orInstruction) – Operator zum Initialisieren.
- num_qubits (int) – Einen leeren CNOTDihedral-Operator initialisieren.
- validate (bool) – wenn True, validiert das CNOTDihedral-Element.
Erhöht
- QiskitError – wenn der Typ ungültig ist.
- QiskitError – wenn
validate=Trueund das CNOTDihedral-Element ungültig ist.
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.
qargs
Gibt die qargs für den Operator zurück.
Methoden
adjoint
compose
compose(other, qargs=None, front=False)
Rückgabe der Operator-Komposition mit einem anderen CNOTDihedral.
Parameter
- other (CNOTDihedral) – ein CNOTDihedral-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
Das zusammengesetzte CNOTDihedral.
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 CNOTDihedral zurück.
Parameter
other (CNOTDihedral) – ein CNOTDihedral-Objekt.
Rückgabe
das Tensorprodukt , wobei
ist der aktuelle CNOTDihedral, und ist der andere CNOTDihedral.
Rückgabetyp
input_dims
input_dims(qargs=None)
Rückgabe eines Tupels der Eingabedimension für die angegebenen Teilsysteme.
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 CNOTDihedral zurück.
Parameter
other (CNOTDihedral) – ein CNOTDihedral-Objekt.
Rückgabe
das Tensorprodukt , wobei
ist der aktuelle CNOTDihedral, und ist der andere CNOTDihedral.
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()
Gibt eine QuantumCircuit zurück, die das CNOT-Dihedral-Element implementiert.
Rückgabe
eine Schaltungsimplementierung des CNOTDihedral-Objekts.
Rückgabetyp
Referenzen
- Shelly Garion und Andrew W. Cross, Synthesis of CNOT-Dihedral circuits with optimal number of two qubit gates, Quantum 4(369), 2020
- Andrew W. Cross, Easwar Magesan, Lev S. Bishop, John A. Smolin und Jay M. Gambetta, Scalable randomized benchmarking of non-Clifford gates, npj Quantum Inf 2, 16012 (2016).