Skip to main content
IBM Quantum Platform

Clifford

class qiskit.quantum_info.Clifford(data, validate=True, copy=True)

GitHub

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 CN\mathcal{C}_N est défini comme suit

CN={UU(2N)UPNU=PN}/U(1)\mathcal{C}_N = \{ U \in U(2^N) | U \mathcal{P}_N U^{\dagger} = \mathcal{P}_N \} / U(1)

PN\mathcal{P}_N est le groupe de Pauli sur NN qubits qui est généré par des opérateurs de Pauli à qubit unique, et UU est un opérateur unitaire dans le groupe unitaire U(2N)U(2^N) représentant des opérations sur NN qubits. CN\mathcal{C}_N est le groupe quotient par le sous-groupe des matrices unitaires scalaires U(1)U(1).

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.

Remarque

Un ensemble de portes minimalement génératrices pour les circuits de Clifford est l'ensemble de portes HGate et SGate et soit la porte CXGate ou CZGate porte à deux qubits.

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

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

adjoint()

GitHub

Retourne l'adjoint de l'opérateur.

compose

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

GitHub

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

Clifford

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.

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

conjugate

conjugate()

GitHub

Retourne le conjugué du Clifford.

copy

copy()

GitHub

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

dot

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

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.

expand

expand(other)

GitHub

Retourne le produit tensoriel d'ordre inverse avec un autre Clifford.

Paramètres

other (Clifford) – un objet de Clifford.

Retours

le produit tensoriel bab \otimes a, où aa

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

Type de retour

Clifford

from_circuit

static from_circuit(circuit)

GitHub

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

Clifford

Augmentations

QiskitError – si l'instruction d'entrée n'est pas de type Clifford ou contient une instruction de registre classique.

from_dict

classmethod from_dict(obj)

GitHub

Charger un Clifford à partir d'un dictionnaire

from_label

static from_label(label)

GitHub

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

Clifford

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)

GitHub

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

Clifford

from_matrix

classmethod from_matrix(matrix)

GitHub

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

Clifford

Augmentations

QiskitError – si la donnée d'entrée n'est pas une matrice de Clifford.

from_operator

classmethod from_operator(operator)

GitHub

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

Clifford

Augmentations

QiskitError – si l'entrée n'est pas un opérateur de Clifford.

from_permutation

classmethod from_permutation(permutation_gate)

GitHub

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

Clifford

input_dims

input_dims(qargs=None)

GitHub

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

is_unitary

is_unitary()

GitHub

Retourne True si la table de Clifford est valide.

output_dims

output_dims(qargs=None)

GitHub

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

power

power(n)

GitHub

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

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 nombre 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 somme des dimensions d'entrée ou de sortie de tous les sous-systèmes n'est pas constante.

tensor

tensor(other)

GitHub

Retourner le produit tensoriel avec un autre Clifford.

Paramètres

other (Clifford) – un objet de Clifford.

Retours

le produit tensoriel aba \otimes b, où aa

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

Type de retour

Clifford

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

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

QuantumCircuit

Références

  1. S. Bravyi, D. Maslov, Hadamard-free circuits expose the structure of the Clifford group, arXiv:2003.09412 [quant-ph]
  2. S. Aaronson, D. Gottesman, Improved Simulation of Stabilizer Circuits, Phys. Rev. A 70, 052328 (2004). arXiv:quant-ph/0406196

to_dict

to_dict()

GitHub

Retourne la représentation du dictionnaire de l'objet Clifford.

to_instruction

to_instruction()

GitHub

Renvoie une instruction de porte mettant en œuvre le Clifford.

to_labels

to_labels(array=False, mode='B')

GitHub

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[0,0][0, 0][1001]\begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}II
"-I"1[0,0][0, 0][1001]\begin{bmatrix} -1 & 0 \\ 0 & -1 \end{bmatrix}I-I
"X"0[1,0][1, 0][0110]\begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix}XX
"-X"1[1,0][1, 0][0110]\begin{bmatrix} 0 & -1 \\ -1 & 0 \end{bmatrix}X-X
"Y"0[1,1][1, 1][0110]\begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix}iYiY
"-Y"1[1,1][1, 1][0110]\begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix}iY-iY
"Z"0[0,1][0, 1][1001]\begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix}ZZ
"-Z"1[0,1][0, 1][1001]\begin{bmatrix} -1 & 0 \\ 0 & 1 \end{bmatrix}Z-Z

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

liste ou tableau

Augmentations

QiskitError – si « stabilizer » et « destabilizer » ont tous deux la valeur « False ».

to_matrix

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

transpose

transpose()

GitHub

Retourne la transposition du Clifford.

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