Skip to main content
IBM Quantum Platform

CNOTDihedral

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

GitHub

Bases : BaseOperator, AdjointMixin

Un opérateur N-qubit du groupe CNOT-Dihedral.

Le groupe CNOT-Dihedral est généré par les portes quantiques, CXGate, TGateet XGate.

Représentation

Un opérateur CNOT-Dihedral NN -qubit est stocké sous la forme d'une fonction affine et d'un polynôme de phase, selon la convention décrite dans les références [1, 2.]

La fonction affine se compose d'une matrice binaire inversable N×NN \times N et d'un vecteur binaire NN.

Le polynôme de phase est un polynôme de degré 3 au maximum, dans NN variables, dont les coefficients sont dans l'anneau Z_8 à 8 éléments.

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)

Conversion des circuits

Les opérateurs CNOTDièdres peuvent être initialisés à partir de circuits contenant uniquement les portes suivantes : IGate, XGate, YGate, ZGate, TGate, TdgGateSGate , SdgGate, CXGate, CZGate, CSGate, CSdgGate, SwapGate, CCZGate. Ils peuvent être reconvertis en un QuantumCircuit, ou Gate objet utilisant le to_circuit() ou to_instruction() méthodes respectivement. Notons que cette décomposition n'est pas nécessairement optimale en termes de nombre de portes si le nombre de qubits est supérieur à deux.

Les opérateurs CNOTDihedral peuvent également être convertis en objets à l'aide de l'outil Operator à l'aide de la méthode to_operator() méthode. Cela se fait par décomposition en un circuit, puis en simulant le circuit en tant qu'opérateur unitaire.

Références :

  1. Shelly Garion et 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 et Jay M. Gambetta, Scalable randomized benchmarking of non-Clifford gates, npj Quantum Inf 2, 16012 (2016).

Initialise un objet opérateur CNOTDihedral.

Paramètres

  • data (CNOTDihedral orQuantumCircuit orInstruction) – Facultatif, opérateur à initialiser.
  • num_qubits (int) – Optionnel, initialiser un opérateur CNOTDihedral vide.
  • validate (bool) – si True, valide l'élément CNOTDihedral.

Augmentations

  • QiskitError - si le type n'est pas valide.
  • QiskitError - si validate=True et que l'élément CNOTDihedral est invalide.

Attributs

dim

Retourne un tuple (forme_d'entrée, forme_de_sortie).

nom

Identifiant unique sous forme de chaîne de caractères pour le type d'opération.

num_clbits

Nombre de bits classiques.

num_qubits

Renvoie le nombre de qubits s'il s'agit d'un opérateur à N qubits ou None dans le cas contraire.

qargs

Retourne les qargs de l'opérateur.


Méthodes

adjoint

adjoint()

GitHub

Retourne l'adjoint de l'opérateur.

composer

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

GitHub

Retourne la composition de l'opérateur avec un autre CNOTDihedral.

Paramètres

  • other (CNOTDihedral) – un objet CNOTDihedral.
  • qargs (list or None) – Facultatif : liste des positions du sous-système sur lesquelles appliquer d'autres éléments. Si elle est nulle, elle s'applique à tous les sous-systèmes (par défaut : aucune).
  • front (bool) – Si True, composer en utilisant la multiplication de l'opérateur de droite, au lieu de la multiplication de gauche [par défaut : False].

Retours

Le CNOTDihedral composé.

Type de retour

CNOTDihedral

Augmentations

QiskitError - si l'autre ne peut pas être converti en opérateur ou a des dimensions incompatibles avec les sous-systèmes spécifiés.

Remarque

La composition (&) est définie par défaut comme une multiplication matricielle à gauche pour les opérateurs matriciels, tandis que @ (équivalent à dot()) est définie comme une multiplication matricielle à droite. C'est-à-dire que A & B == A.compose(B) est équivalent à B @ A == B.dot(A) lorsque A et B sont du même type.

L'utilisation du kwarg front=True permet de passer à une multiplication matricielle à droite, ce qui équivaut à la méthode dot() méthode A.dot(B) == A.compose(B, front=True).

conjugué

conjugate()

GitHub

Retourne le conjugué du CNOTDihedral.

copie

copy()

GitHub

Effectuer une copie intégrale de l'opérateur actuel.

point

dot(other, qargs=None)

GitHub

Retourne l'opérateur multiplié par la droite self * other.

Paramètres

  • other (Operator) – un objet opérateur.
  • qargs (list or None) – Facultatif : liste des positions du sous-système sur lesquelles appliquer d'autres éléments. Si elle est nulle, elle s'applique à tous les sous-systèmes (par défaut : aucune).

Retours

La matrice droite multipliée Opérateur.

Type de retour

Opérateur

Remarque

Le produit de points peut être obtenu en utilisant l'opérateur binaire @ . Par conséquent, a.dot(b) est équivalent à a @ b.

développer

expand(other)

GitHub

Renvoie le produit tensoriel d'ordre inverse avec un autre CNOTDihedral.

Paramètres

other (CNOTDihedral) – un objet CNOTDihedral.

Retours

le produit tensoriel bab \otimes a, où aa

est le CNOTDihedral actuel, et bb est l'autre CNOTDihedral.

Type de retour

CNOTDihedral

input_dims

input_dims(qargs=None)

GitHub

Retourne un ensemble de dimensions d'entrée pour les sous-systèmes spécifiés.

output_dims

output_dims(qargs=None)

GitHub

Retourne un tuple de dimensions de sortie pour les sous-systèmes spécifiés.

puissance

power(n)

GitHub

Retourne la composition d'un opérateur avec lui-même n fois.

Paramètres

n (int) – le nombre de fois où l'on compose avec soi-même ( n>0 ).

Retours

l'opérateur composé n fois.

Type de retour

Clifford

Augmentations

QiskitError - si les dimensions d'entrée et de sortie de l'opérateur ne sont pas égales, ou si la puissance n'est pas un entier positif.

reshape

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

GitHub

Renvoyer une copie peu profonde avec les dimensions des sous-systèmes d'entrée et de sortie remodelées.

Paramètres

  • input_dims (None or tuple) – les nouvelles dimensions d'entrée du sous-système. Si aucun, les gradations d'entrée d'origine seront conservées. [Par défaut : Aucun].
  • output_dims (None or tuple) – les nouvelles dimensions de sortie du sous-système. Si aucun, les gradations de sortie d'origine seront conservées. [Par défaut : Aucun].
  • num_qubits (None or int) – transformer en un opérateur N-qubit [Défaut : Aucun].

Retours

renvoie l'utilisateur avec les dimensions d'entrée et de sortie remodelées.

Type de retour

BaseOperator

Augmentations

QiskitError - si la taille combinée de toutes les dimensions d'entrée du sous-système ou de toutes les dimensions de sortie du sous-système n'est pas constante.

tenseur

tensor(other)

GitHub

Renvoie le produit tensoriel avec un autre CNOTDihedral.

Paramètres

other (CNOTDihedral) – un objet CNOTDihedral.

Retours

le produit tensoriel aba \otimes b, où aa

est le CNOTDihedral actuel, et bb est l'autre CNOTDihedral.

Type de retour

CNOTDihedral

Remarque

Le produit tensoriel peut être obtenu en utilisant l'opérateur binaire ^ . Par conséquent, a.tensor(b) est équivalent à a ^ b.

to_circuit

to_circuit()

GitHub

Retourne un QuantumCircuit implémentant l'élément CNOT-Dihedral.

Retours

une implémentation en circuit de l'objet CNOTDihedral.

Type de retour

QuantumCircuit

Références

  1. Shelly Garion et 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 et Jay M. Gambetta, Scalable randomized benchmarking of non-Clifford gates, npj Quantum Inf 2, 16012 (2016).

to_instruction

to_instruction()

GitHub

Retourne une instruction Gate implémentant l'objet CNOTDihedral.

Matrice de l'état d'esprit

to_matrix()

GitHub

Convertit l'opérateur en matrice Numpy.

to_operator

to_operator()

GitHub

Convertir en un objet Operator.

Type de retour

Opérateur

transposer

transpose()

GitHub

Retourne la transposition du CNOTDihedral.

Cette page a-t-elle été utile ?
Signalez un bogue, une coquille ou demandez du contenu sur GitHub .