Clifford
class qiskit.quantum_info.Clifford(data, validate=True, copy=True)
Bases : BaseOperator, AdjointMixin, Operation
Un opérateur unitaire N-qubit du groupe de Clifford.
Un opérateur de Clifford à N-qubits prend Paulis à Paulis via la conjugaison (jusqu'à une phase globale). Plus précisément, le groupe de Clifford est défini comme suit
où est le groupe de Pauli sur qubits qui est généré par des opérateurs de Pauli à qubit unique, et est un opérateur unitaire dans le groupe unitaire représentant des opérations sur qubits. est le groupe quotient par le sous-groupe des matrices unitaires scalaires .
Représentation
Un opérateur de Clifford à N qubits est stocké sous la forme d'un tableau booléen de longueur 2N × ( 2N+1 ) en utilisant la convention de la référence [1.]
- Les lignes 0 à N-1 sont les générateurs du groupe déstabilisateur
- Les rangs N à 2N-1 sont les générateurs du groupe stabilisateur.
Le tableau booléen interne du Clifford est accessible à l'aide de l'attribut tableau . Les rangées de déstabilisateurs ou de stabilisateurs sont toutes accessibles sous la forme d'un tableau Stabilisateur de longueur N à l'aide de destab et stab attributs.
Une représentation plus facilement lisible de l'opérateur de Clifford peut être obtenue en appelant la méthode to_dict() méthode. Cette représentation est également utilisée lorsqu'un objet de Clifford est imprimé, comme dans l'exemple suivant
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']Conversion des circuits
Les opérateurs de Clifford peuvent être initialisés à partir de circuits ne contenant que les portes de Clifford suivantes : IGate, XGate, YGate, ZGate, HGate SGate, SdgGate, SXGate, SXdgGate, CXGate, CZGate, CYGate, DCXGate, SwapGate, iSwapGate, ECRGate, LinearFunction,, PermutationGate. Ils peuvent être reconvertis en objet QuantumCircuit, ou Gate à l'aide des to_circuit() méthodes ou to_instruction() respectivement. Il convient de noter que cette décomposition n'est pas nécessairement optimale en termes de nombre de portes logiques.
Les opérateurs de Clifford peuvent également être convertis en 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
- S. Aaronson, D. Gottesman, Improved Simulation of Stabilizer Circuits, Phys. Rev. A 70, 052328 (2004). arXiv:quant-ph/0406196
Initialise un objet opérateur.
Attributs
destab
Le réseau de déstabilisateurs pour la représentation symplectique.
destab_phase
Retour de la phase du déstabilisateur avec une représentation booléenne.
destab_x
Le tableau des déstabilisateurs x pour la représentation symplectique.
destab_z
Le réseau de déstabilisateurs z pour la représentation symplectique.
dim
Retourne un tuple (forme_d'entrée, forme_de_sortie).
name
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.
phase
Retourne la phase avec une représentation booléenne.
qargs
Retourne les qargs de l'opérateur.
stab
Le réseau de stabilisateurs pour la représentation symplectique.
stab_phase
Phase de retour du stabilisateur avec représentation booléenne.
stab_x
Le réseau de stabilisateurs x pour la représentation symplectique.
stab_z
Le réseau de stabilisateurs pour la représentation symplectique.
symplectic_matrix
Retourne une matrice symplectique booléenne.
x
Le tableau x pour la représentation symplectique.
z
Le tableau z pour la représentation symplectique.
Méthodes
adjoint
compose
compose(other, qargs=None, front=False)
Retourner la composition de l'opérateur avec un autre Clifford.
Paramètres
- other (Clifford) – un objet de Clifford.
- qargs (list or None) – une liste des postes au sein du sous-système auxquels appliquer d'autres mesures. Si « None » s'applique à tous les sous-systèmes (par défaut : None).
- 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
La composition de Clifford.
Type de retour
Augmentations
QiskitError – si l'autre ne peut pas être converti en opérateur ou si ses dimensions sont incompatibles avec celles des 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).
conjugate
copy
dot
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) – une liste des postes au sein du sous-système auxquels appliquer d'autres mesures. Si « None » s'applique à tous les sous-systèmes (par défaut : None).
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.
expand
expand(other)
Retourne le produit tensoriel d'ordre inverse avec un autre Clifford.
Paramètres
other (Clifford) – un objet de Clifford.
Retours
le produit tensoriel , où
est le Clifford actuel, et est l'autre Clifford.
Type de retour
from_circuit
static from_circuit(circuit)
Initialiser à partir d'un site QuantumCircuit ou d'une instruction.
Paramètres
circuit (QuantumCircuit orInstruction) – instruction d'initialisation.
Retours
l'objet de Clifford pour l'instruction.
Type de retour
Augmentations
QiskitError – si l'instruction d'entrée n'est pas de type Clifford ou contient une instruction de registre classique.
from_dict
from_label
static from_label(label)
Retourne un produit tensoriel de portes de Clifford à un qubit.
Paramètres
label (string) – chaîne d'opérateurs à qubit unique.
Retours
L'opérateur de Clifford N-qubit.
Type de retour
Augmentations
QiskitError – si l'étiquette contient des caractères non valides.
Renseignements supplémentaires :
Les étiquettes correspondent aux Cliffords à qubit unique sont
-
- Libellé
- Stabilisateur
- Déstabilisateur
-
"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)
Créer un Clifford à partir d'une fonction linéaire.
Si la fonction linéaire est représentée par une matrice binaire inversible nxn A, la matrice symplectique de Clifford correspondante est [[A^t, 0], [0, A^ {-1}] ].
Paramètres
linear_function (LinearFunction) – Une fonction linéaire à convertir.
Retours
l'objet de Clifford pour cette fonction linéaire.
Type de retour
from_matrix
classmethod from_matrix(matrix)
Créer un Clifford à partir d'une matrice unitaire.
Notez que cette fonction prend un temps exponentiellement long w.r.t. le nombre de qubits.
Paramètres
matrix (np.array) – Matrice unitaire représentant un Clifford à convertir.
Retours
l'objet de Clifford pour la matrice unitaire.
Type de retour
Augmentations
QiskitError – si la donnée d'entrée n'est pas une matrice de Clifford.
from_operator
classmethod from_operator(operator)
Créer un Clifford à partir d'un opérateur.
Notez que cette fonction prend un temps exponentiellement long w.r.t. le nombre de qubits.
Paramètres
operator (Operator) – Un opérateur représentant un Clifford à convertir.
Retours
l'objet de Clifford pour l'opérateur.
Type de retour
Augmentations
QiskitError – si l'entrée n'est pas un opérateur de Clifford.
from_permutation
classmethod from_permutation(permutation_gate)
Créer un Clifford à partir d'un PermutationGate.
Paramètres
permutation_gate (PermutationGate) – Une permutation à convertir.
Retours
l'objet de Clifford pour cette permutation.
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.
is_unitary
output_dims
output_dims(qargs=None)
Retourne un tuple de dimensions de sortie pour les sous-systèmes spécifiés.
power
power(n)
Renvoie le résultat de 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 nombre 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 somme des dimensions d'entrée ou de sortie de tous les sous-systèmes n'est pas constante.
tensor
tensor(other)
Retourner le produit tensoriel avec un autre Clifford.
Paramètres
other (Clifford) – un objet de Clifford.
Retours
le produit tensoriel , où
est le Clifford actuel, et est l'autre Clifford.
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()
Renvoyer un QuantumCircuit mettant en œuvre le Clifford.
Pour N <= 3 qubits this is based on optimal CX cost decomposition from reference [1]. For N > 3 qubits, on utilise la routine de compilation générale non optimale de la référence [2.]
Retours
un circuit de mise en œuvre du Clifford.
Type de retour
Références
- S. Bravyi, D. Maslov, Hadamard-free circuits expose the structure of the Clifford group, 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')
Convertir un Clifford en une liste d'étiquettes de chaînes de (dé)stabilisateurs de Pauli.
Pour les grandes conversions de Clifford, l'utilisation de array=True kwarg sera plus efficace car elle alloue à l'avance de la mémoire pour le tableau Numpy complet d'étiquettes.
Libellé | Phase | Symplectique | Matrice | Pauli |
|---|---|---|---|---|
"+I" | 0 | |||
"-I" | 1 | |||
"X" | 0 | |||
"-X" | 1 | |||
"Y" | 0 | |||
"-Y" | 1 | |||
"Z" | 0 | |||
"-Z" | 1 |
Paramètres
- array (bool) – renvoie un tableau Numpy si True, sinon renvoie une liste (Défaut : False).
- mode (Literal["S", "D", "B"]) – renvoie à la fois le stabilisateur et le déstabilisateur si "B", renvoie uniquement le stabilisateur si "S" et renvoie uniquement le déstabilisateur si "D".
Retours
Les lignes du site StabilizerTable sous forme d'étiquettes.
Type de retour
Augmentations
QiskitError – si « stabilizer » et « destabilizer » ont tous deux la valeur « False ».