Pauli
class qiskit.quantum_info.Pauli(data=None)
Bases : BasePauli
Opérateur de Pauli à N-qubits.
Cette classe représente un opérateur du groupe de Pauli complet -qubit
où et sont des matrices de Pauli à qubit unique :
Initialisation
Un objet Pauli peut être initialisé de plusieurs façons :
Pauli(obj)où
objest une chaîne de Pauli,Pauliou un opérateurScalarOpou une porte de Pauli ouQuantumCircuitne contenant que des portes de Pauli.
Pauli((z, x, phase))où
zetxsont des booléensnumpy.ndarraysetphaseest 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 peut être représenté par une chaîne de caractères composée de 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- au caractère de Pauli le plus à gauche. Par exemple, 'XYZ' représente 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).
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 -qubit Pauli est constituée de deux vecteurs booléens de longueur , , et d'un nombre entier définissant l'opérateur Pauli
Le qubit -th correspond à la -th entry in the and arrays
où z[k] = P.z[k], x[k] = P.x[k] respectivement.
Les tableaux et sont accessibles et mis à jour à l'aide des commandes z et x respectivement. Il est possible d'accéder à l'entier de phase 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 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) où z et x sont des tableaux Numpy booléens, et phase est un entier provenant de . 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
anticommutes
anticommutes(other, qargs=None)
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
apply_layout
apply_layout(layout, num_qubits=None)
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
layoutest unTranspileLayoutle nombre de qubits du circuit de sortie du transpondeur sera utilisé par défaut. Silayoutest 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
commutes
commutes(other, qargs=None)
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
compose
compose(other, qargs=None, front=False, inplace=False)
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
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 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
copy
delete
delete(qubits)
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
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)
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
equiv
equiv(other)
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
evolve
evolve(other, qargs=None, frame='h')
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 .
L'image de Schrödinger fait évoluer l'image de Pauli vers .
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 (image de Heisenberg) ou le Pauli (image de Schrödinger).
Type de retour
Augmentations
QiskitError – si le nombre de qubits et de qargs selon Clifford ne correspondent pas.
expand
expand(other)
Renvoyer le produit tensoriel d'ordre inverse avec un autre Pauli.
Paramètres
other (Pauli) – un objet de Pauli.
Retours
le produit tensoriel , où
est le Pauli actuel, et est l'autre Pauli.
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.
insert
insert(qubits, value)
Insérer un Pauli à une valeur de qubit spécifique.
Paramètres
Retours
le Pauli résultant avec les entrées insérées.
Type de retour
Augmentations
QiskitError – si les qubits d'insertion ne sont pas valides.
inverse
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.
set_truncation
classmethod set_truncation(val)
Définissez le nombre maximal de caractères Pauli à afficher avant la troncature.
Paramètres
val (int) – le nombre de caractères.
La troncature sera désactivée si la valeur de la troncature est fixée à 0.
tensor
tensor(other)
Retourner le produit tensoriel avec un autre Pauli.
Paramètres
other (Pauli) – un objet de Pauli.
Retours
**le produit tensoriel , où **
est le Pauli actuel, et est l'autre Pauli.
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_instruction
to_label
to_label()
Convertit un Pauli en une chaîne de caractères.
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
to_matrix
to_matrix(sparse=False)
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