Skip to main content
IBM Quantum Platform

Pauli

class qiskit.quantum_info.Pauli(data=None)

GitHub

Bases : BasePauli

Opérateur de Pauli à N-qubits.

Cette classe représente un opérateur PP du groupe de Pauli complet nn -qubit

P=(i)qPn1...P0P = (-i)^{q} P_{n-1} \otimes ... \otimes P_{0}

qZ4q\in \mathbb{Z}_4 et Pi{I,X,Y,Z}P_i \in \{I, X, Y, Z\} sont des matrices de Pauli à qubit unique :

I=(1001),X=(0110),Y=(0ii0),Z=(1001).I = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}, X = \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}, Y = \begin{pmatrix} 0 & -i \\ i & 0 \end{pmatrix}, Z = \begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix}.

Initialisation

Un objet Pauli peut être initialisé de plusieurs façons :

Pauli(obj)

obj est une chaîne de Pauli, Pauli ou un opérateur ScalarOp ou une porte de Pauli ou QuantumCircuit ne contenant que des portes de Pauli.

Pauli((z, x, phase))

z et x sont des booléens numpy.ndarrays et phase est un entier dans [0, 1, 2, 3].

Pauli((z, x))

équivalent à Pauli((z, x, 0)) avec une phase triviale.

Représentation de la chaîne

Un qubit Pauli nn peut être représenté par une chaîne de caractères composée de nn caractères provenant de ['I', 'X', 'Y', 'Z'], et éventuellement d'un coefficient de phase dans ['', '-i', '-', 'i']. Par exemple : 'XYZ' ou '-iZIZ'.

Dans la représentation de la chaîne de caractères, qubit-0 correspond au caractère de Pauli le plus à droite, et qubit- (n1)(n-1) au caractère de Pauli le plus à gauche. Par exemple, 'XYZ' représente XYZX\otimes Y \otimes Z avec 'Z' sur qubit-0, 'Y' sur qubit-1, et 'X' sur qubit-2.

La représentation de la chaîne peut être convertie en un objet Pauli à l'aide de l'initialisation de la classe (Pauli('-iXYZ')). Un objet Pauli peut être reconverti en représentation de chaîne de caractères à l'aide de la méthode to_label() ou str(pauli).

Remarque

L'utilisation de str pour convertir un Pauli en chaîne de caractères tronquera la chaîne renvoyée pour un grand nombre de qubits, tandis que to_label() renverra la chaîne complète sans troncature. La longueur de troncature par défaut est de 50 caractères. La valeur par défaut peut être modifiée en attribuant à l'attribut class __truncate__ une valeur entière. Si elle est fixée à 0 , aucune troncature ne sera effectuée.

Représentation des tableaux

La structure de données interne d'un nn -qubit Pauli est constituée de deux vecteurs booléens de longueur nn zZ2Nz \in \mathbb{Z}_2^N, xZ2Nx \in \mathbb{Z}_2^N, et d'un nombre entier qZ4q \in \mathbb{Z}_4 définissant l'opérateur Pauli

P=(i)q+zxZzXx.P = (-i)^{q + z\cdot x} Z^z \cdot X^x.

Le qubit kk -th correspond à la kk -th entry in the zz and xx arrays

P=Pn1...P0Pk=(i)z[k]x[k]Zz[k]Xx[k]\begin{aligned} P &= P_{n-1} \otimes ... \otimes P_{0} \\ P_k &= (-i)^{z[k] * x[k]} Z^{z[k]}\cdot X^{x[k]} \end{aligned}

z[k] = P.z[k], x[k] = P.x[k] respectivement.

Les tableaux zz et xx sont accessibles et mis à jour à l'aide des commandes z et x respectivement. Il est possible d'accéder à l'entier de phase qq et de le mettre à jour à l'aide de la propriété phase propriété.

Représentation des opérateurs matriciels

Les matrices de Pauli peuvent être converties en (2n,2n)(2^n, 2^n) Operator à l'aide de la méthode to_operator() , ou en une matrice complexe dense ou éparse à l'aide de la méthode to_matrix() méthode.

Accès aux données

Les qubits Paulis individuels peuvent être consultés et mis à jour à l'aide de l'opérateur [] qui accepte des entiers, des listes ou des tranches pour sélectionner des sous-ensembles de Paulis. Notez que la sélection de sous-ensembles de Pauli ne tient pas compte de la phase du Pauli actuel.

Par exemple

from qiskit.quantum_info import Pauli

P = Pauli('-iXYZ')

print('P[0] =', repr(P[0]))
print('P[1] =', repr(P[1]))
print('P[2] =', repr(P[2]))
print('P[:] =', repr(P[:]))
print('P[::-1] =', repr(P[::-1]))

Initialiser le Pauli.

Lors de l'utilisation des données d'entrée du tableau symplectique, les arguments z et x doivent être fournis, mais le premier argument (z) peut être utilisé seul pour l'étiquette de chaîne, l'opérateur de Pauli ou les données d'entrée du tableau symplectique ScalarOp les données d'entrée.

Paramètres

data (str ortuple orPauli orScalarOp) – données d'entrée pour Pauli. Si l'entrée est un tuple, elle doit être de la forme (z, x) ou (z, x, phase)z et x sont des tableaux Numpy booléens, et phase est un entier provenant de Z4\mathbb{Z}_4. Si l'entrée est une chaîne, elle doit être une concaténation d'une phase et d'une chaîne de Pauli (par exemple 'XYZ', '-iZIZ') où une chaîne de phase est une combinaison d'au plus trois caractères provenant de ['+', '-', ''], ['1', ''], et ['i', 'j', ''] dans cet ordre, par exemple '', '-1j' tandis qu'une chaîne de Pauli est constituée de 1 ou plusieurs caractères de 'I', 'X', 'Y', ou 'Z', par exemple 'Z', 'XIYY'.

Augmentations

QiskitError – si le tableau d'entrée présente une forme non valide.


Attributs

dim

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

name

Identifiant unique sous forme de chaîne 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 l'exposant de phase de groupe pour le Pauli.

qargs

Retourne les qargs de l'opérateur.

settings

Paramètres de retour.

x

Le vecteur x pour le Pauli.

z

Le vecteur z pour le Pauli.


Méthodes

adjoint

adjoint()

GitHub

Retourne l'adjoint de l'opérateur.

anticommutes

anticommutes(other, qargs=None)

GitHub

Retourne True si l'autre Pauli est anticommuté avec soi.

Paramètres

  • other (Pauli) – un autre opérateur de Pauli.
  • qargs (list) – qubits sur lesquels appliquer le produit de points (par défaut : None).

Retours

Vrai si les Pauli sont anticommutés, Faux s'ils sont commutés.

Type de retour

booléen

apply_layout

apply_layout(layout, num_qubits=None)

GitHub

Appliquer un schéma de transposition à cette Pauli

Paramètres

  • layout (TranspileLayout |list[int] | None) – Soit un TranspileLayoutune liste d'entiers ou None. Si la disposition et le nombre de qubits sont tous deux nuls, une copie de l'opérateur est renvoyée.
  • num_qubits (int | None) – Le nombre de qubits auquel l'opérateur doit être étendu. S'il n'est pas fourni, alors si layout est un TranspileLayout le nombre de qubits du circuit de sortie du transpondeur sera utilisé par défaut. Si layout est une liste d'entiers, la permutation spécifiée sera appliquée sans expansion. Si la disposition est nulle, l'opérateur sera étendu au nombre de qubits indiqué.

Retours

Un nouveau Pauli avec la mise en page fournie appliquée

Type de retour

Pauli

commutes

commutes(other, qargs=None)

GitHub

Retourne True si le Pauli commute avec l'autre.

Paramètres

  • other (Pauli orPauliList) – un autre opérateur de Pauli.
  • qargs (list) – qubits sur lesquels appliquer le produit de points (par défaut : None).

Retours

Vrai si les Pauli commuent, Faux s'ils anti-commutent.

Type de retour

booléen

compose

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

GitHub

Renvoyer la composition de l'opérateur avec un autre Pauli.

Paramètres

  • other (Pauli) – un objet de Pauli.
  • qargs (list or None) – qubits sur lesquels appliquer le produit scalaire (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].
  • inplace (bool) – Si True, mise à jour sur place (par défaut : False).

Retours

Le composé Pauli.

Type de retour

Pauli

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 la composition est définie comme une multiplication matricielle à droite dot() est définie comme une multiplication matricielle à droite. C'est-à-dire que A & B == A.compose(B) est équivalent à 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

Renvoie le conjugué complexe de Pauli par rapport à la base Z.

copy

copy()

GitHub

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

delete

delete(qubits)

GitHub

Retourne un Pauli dont les qubits ont été supprimés.

Paramètres

qubits (int orlist) – qubits à supprimer de Pauli.

Retours

le Pauli résultant avec les qubits spécifiés enlevés.

Type de retour

Pauli

Augmentations

QiskitError – si ind est hors limites par rapport à la taille du tableau ou au nombre de qubits.

dot

dot(other, qargs=None, inplace=False)

GitHub

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

Paramètres

  • other (Pauli) – un objet opérateur.
  • qargs (list or None) – qubits sur lesquels appliquer le produit scalaire (par défaut : None).
  • inplace (bool) – Si True, mise à jour sur place (par défaut : False).

Retours

L'opérateur s'auto *autre.

Type de retour

Pauli

equiv

equiv(other)

GitHub

Retourne True si les Pauli sont équivalents jusqu'à la phase de groupe.

Paramètres

other (Pauli) – un objet opérateur.

Retours

C'est vrai si les Pauli sont équivalents jusqu'à la phase de groupe.

Type de retour

booléen

evolve

evolve(other, qargs=None, frame='h')

GitHub

Effectue l'évolution de l'image de Heisenberg (par défaut) ou de Schrödinger de Pauli par un Clifford et renvoie le Pauli évolué.

L'évolution de l'image de Schrödinger peut être choisie en passant le paramètre frame='s'. Cette option permet un calcul plus rapide.

L'image de Heisenberg fait évoluer le Pauli comme P=C.P.CP^\prime = C^\dagger.P.C.

L'image de Schrödinger fait évoluer l'image de Pauli vers P=C.P.CP^\prime = C.P.C^\dagger.

Paramètres

  • other (Pauli orClifford orQuantumCircuit) – L'opérateur de Clifford à partir duquel évoluer.
  • qargs (list) – une liste de qubits auxquels appliquer le Clifford.
  • frame (string) – 'h' pour Heisenberg (par défaut) ou 's' pour le cadre de Schrödinger.

Retours

le Pauli C.P.CC^\dagger.P.C (image de Heisenberg) ou le Pauli C.P.CC.P.C^\dagger (image de Schrödinger).

Type de retour

Pauli

Augmentations

QiskitError – si le nombre de qubits et de qargs selon Clifford ne correspondent pas.

expand

expand(other)

GitHub

Renvoyer le produit tensoriel d'ordre inverse avec un autre Pauli.

Paramètres

other (Pauli) – un objet de Pauli.

Retours

le produit tensoriel bab \otimes a, où aa

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

Type de retour

Pauli

input_dims

input_dims(qargs=None)

GitHub

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

insert

insert(qubits, value)

GitHub

Insérer un Pauli à une valeur de qubit spécifique.

Paramètres

  • qubits (int orlist) – l'index des qubits à insérer.
  • value (Pauli) – à insérer.

Retours

le Pauli résultant avec les entrées insérées.

Type de retour

Pauli

Augmentations

QiskitError – si les qubits d'insertion ne sont pas valides.

inverse

inverse()

GitHub

Renvoie l'inverse de la valeur de Pauli.

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.

set_truncation

classmethod set_truncation(val)

GitHub

Définissez le nombre maximal de caractères Pauli à afficher avant la troncature.

Paramètres

val (int) – le nombre de caractères.

Remarque

La troncature sera désactivée si la valeur de la troncature est fixée à 0.

tensor

tensor(other)

GitHub

Retourner le produit tensoriel avec un autre Pauli.

Paramètres

other (Pauli) – un objet de Pauli.

Retours

**le produit tensoriel aba \otimes b, où aa **

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

Type de retour

Pauli

Remarque

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

to_instruction

to_instruction()

GitHub

Convertir en instruction de circuit de Pauli.

to_label

to_label()

GitHub

Convertit un Pauli en une chaîne de caractères.

Remarque

La différence entre to_label et __str__() réside dans le fait que ce dernier tronquera le résultat lorsque le nombre de qubits est élevé.

Retours

l'étiquette de la chaîne de Pauli.

Type de retour

str

to_matrix

to_matrix(sparse=False)

GitHub

Convertir en tableau Numpy ou en matrice CSR éparse.

Paramètres

sparse (bool) – si True renvoie des matrices CSR peu denses, sinon renvoie des tableaux Numpy denses (défaut : False).

Retours

La matrice de Pauli.

Type de retour

Tableau

transpose

transpose()

GitHub

Renvoie la transposition de chaque Pauli de la liste.

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