CNOTDihedral
class qiskit.quantum_info.CNOTDihedral(data=None, num_qubits=None, validate=True)
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,TGateetXGate.Représentation
Un opérateur CNOT-Dihedral -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 et d'un vecteur binaire .
Le polynôme de phase est un polynôme de degré 3 au maximum, dans 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 unQuantumCircuit, ouGateobjet utilisant leto_circuit()outo_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éthodeto_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 :
- Shelly Garion et 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 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
composer
compose(other, qargs=None, front=False)
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
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.
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é
copie
point
dot(other, qargs=None)
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
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)
Renvoie le produit tensoriel d'ordre inverse avec un autre CNOTDihedral.
Paramètres
other (CNOTDihedral) – un objet CNOTDihedral.
Retours
le produit tensoriel , où
est le CNOTDihedral actuel, et est l'autre CNOTDihedral.
Type de retour
input_dims
input_dims(qargs=None)
Retourne un ensemble de dimensions d'entrée pour les sous-systèmes spécifiés.
output_dims
output_dims(qargs=None)
Retourne un tuple de dimensions de sortie pour les sous-systèmes spécifiés.
puissance
power(n)
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
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)
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)
Renvoie le produit tensoriel avec un autre CNOTDihedral.
Paramètres
other (CNOTDihedral) – un objet CNOTDihedral.
Retours
le produit tensoriel , où
est le CNOTDihedral actuel, et est l'autre CNOTDihedral.
Type de retour
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()
Retourne un QuantumCircuit implémentant l'élément CNOT-Dihedral.
Retours
une implémentation en circuit de l'objet CNOTDihedral.
Type de retour
Références
- Shelly Garion et 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 et Jay M. Gambetta, Scalable randomized benchmarking of non-Clifford gates, npj Quantum Inf 2, 16012 (2016).