Skip to main content
IBM Quantum Platform

CNOT-Dieder

class qiskit.quantum_info.CNOTDihedral(data=None, num_qubits=None, validate=True)

GitHub

Basen: BaseOperator, AdjointMixin

Ein N-Qubit-Operator aus der CNOT-Dihedral-Gruppe.

Die CNOT-Dihedral-Gruppe wird durch die Quantengatter erzeugt, CXGate, TGate, und XGate.

Darstellung

Ein NN -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 N×NN \times N invertierbaren binären Matrix und einem NN binären Vektor.

Das Phasenpolynom ist ein Polynom vom Grad höchstens 3 in NN 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, TdgGate SGate, SdgGate, CXGate CZGate, CSGate, CSdgGate, SwapGate,, CCZGate. 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, wenn die Anzahl der Qubits größer als zwei ist.

CNOTDihedral-Operatoren können auch in Objekte umgewandelt werden Operator objekte mit der to_operator() methode. Dies geschieht durch Zerlegung in einen Schaltkreis und anschließende Simulation des Schaltkreises als unitärer Operator.

Quellenangaben:

  1. Shelly Garion und Andrew W. Cross, Synthesis of CNOT-Dihedral circuits with optimal number of two qubit gates, Quantum 4(369), 2020
  2. 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=True und 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

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

CNOTDihedral

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 CNOTDihedral 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 CNOTDihedral zurück.

Parameter

other (CNOTDihedral) – ein CNOTDihedral-Objekt.

Rückgabe

das Tensorprodukt b⊗ab \otimes a, wobei aa

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

Rückgabetyp

CNOTDihedral

input_dims

input_dims(qargs=None)

GitHub

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

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 CNOTDihedral zurück.

Parameter

other (CNOTDihedral) – ein CNOTDihedral-Objekt.

Rückgabe

das Tensorprodukt a⊗ba \otimes b, wobei aa

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

Rückgabetyp

CNOTDihedral

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

Gibt eine QuantumCircuit zurück, die das CNOT-Dihedral-Element implementiert.

Rückgabe

eine Schaltungsimplementierung des CNOTDihedral-Objekts.

Rückgabetyp

QuantumCircuit

Referenzen

  1. Shelly Garion und Andrew W. Cross, Synthesis of CNOT-Dihedral circuits with optimal number of two qubit gates, Quantum 4(369), 2020
  2. 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).

to_instruction

to_instruction()

GitHub

Rückgabe einer Gate-Anweisung, die das Objekt CNOTDihedral implementiert.

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 CNOTDihedral zurück.

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