PauliList
class qiskit.quantum_info.PauliList(data)
Bases : BasePauli, LinearMixin, GroupMixin
Liste des opérateurs de Pauli pour N-qubits.
Cette classe est une représentation efficace d'une liste d'opérateurs Pauli opérateurs. Il supporte 1D l'indexation des tableaux numpy en retournant un Pauli pour les index entiers ou un PauliList pour les index de type "slice" ou "list".
Initialisation
Un objet PauliList peut être initialisé de plusieurs façons.
PauliList(list[str])où les chaînes sont représentées de la même manière que
Pauli.
PauliList(Pauli) and PauliList(list[Pauli])où Pauli est
Pauli.
PauliList.from_symplectic(z, x, phase)où
zetxsont des booléens à 2 dimensionsnumpy.ndarraysetphaseest un entier dans[0, 1, 2, 3].
Exemple :
import numpy as np
from qiskit.quantum_info import Pauli, PauliList
# 1. init from list[str]
pauli_list = PauliList(["II", "+ZI", "-iYY"])
print("1. ", pauli_list)
pauli1 = Pauli("iXI")
pauli2 = Pauli("iZZ")
# 2. init from Pauli
print("2. ", PauliList(pauli1))
# 3. init from list[Pauli]
print("3. ", PauliList([pauli1, pauli2]))
# 4. init from np.ndarray
z = np.array([[True, True], [False, False]])
x = np.array([[False, True], [True, False]])
phase = np.array([0, 1])
pauli_list = PauliList.from_symplectic(z, x, phase)
print("4. ", pauli_list)1. ['II', 'ZI', '-iYY']
2. ['iXI']
3. ['iXI', 'iZZ']
4. ['YZ', '-iIX']Accès aux données
Il est possible d'accéder aux différents Paulis et de les mettre à jour à l'aide de l'opérateur [] qui accepte des entiers, des listes ou des tranches pour sélectionner des sous-ensembles de PauliList. Si un nombre entier est donné, il renvoie Pauli et non PauliList.
pauli_list = PauliList(["XX", "ZZ", "IZ"])
print("Integer: ", repr(pauli_list[1]))
print("List: ", repr(pauli_list[[0, 2]]))
print("Slice: ", repr(pauli_list[0:2]))Integer: Pauli('ZZ')
List: PauliList(['XX', 'IZ'])
Slice: PauliList(['XX', 'ZZ'])Itération
Les lignes du tableau de Pauli peuvent être parcourues comme une liste. L'itération peut également être effectuée en utilisant l'étiquette ou la représentation matricielle de chaque ligne à l'aide des commandes label_iter() et matrix_iter() pour chaque ligne.
Initialiser le site PauliList.
Paramètres
data (Pauli orlist) – les données d'entrée pour Paulis. Si l'entrée est une liste, chaque élément de la liste doit être un objet Pauli ou une chaîne Pauli.
Augmentations
QiskitError – si le tableau d'entrée présente une forme non valide.
Renseignements supplémentaires :
Le tableau d'entrée n'est pas copié, de sorte que plusieurs tables de Pauli peuvent partager le même tableau sous-jacent.
Attributs
dim
Retourne un tuple (forme_d'entrée, forme_de_sortie).
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 PauliList.
qargs
Retourne les qargs de l'opérateur.
settings
Paramètres de retour.
shape
La forme complète de la array()
size
Le nombre de lignes de Pauli dans le tableau.
x
Le tableau x pour la représentation symplectique.
z
Le tableau z pour la représentation symplectique.
Méthodes
adjoint
anticommutes
anticommutes(other, qargs=None)
Renvoie True si l'autre opérateur de Pauli anticommute avec celui-ci.
Paramètres
- other (PauliList) – un autre opérateur PauliList.
- qargs (list) – qubits auxquels appliquer le produit de points (par défaut :
None).
Retours
True si les Paulis ne font pas la navette, False s'ils font la navette.
Type de retour
anticommutes_with_all
anticommutes_with_all(other)
Renvoie les indices des lignes qui anticommutent avec l'autre liste de Pauli.
Si other est une liste de Pauli à plusieurs rangs, le vecteur renvoyé indexe les rangs de la liste actuelle PauliList qui sont anti-commutatoires avec tous les Paulis de l'autre liste. Si aucune ligne ne remplit la condition, le tableau retourné sera vide.
Paramètres
other (PauliList) – un seul Pauli ou plusieurs rangs PauliList.
Retours
tableau d'index des lignes anti-travail.
Type de retour
argsort
argsort(weight=False, phase=False)
Renvoie des indices permettant de trier les lignes du tableau.
La méthode de tri par défaut est le tri lexicographique par numéro de qubit. En utilisant le poids kwarg, la sortie peut également être triée en fonction du nombre de termes non identiques dans le Pauli, où l'ensemble de tous les Paulis d'un poids donné est toujours ordonné lexicographiquement.
Paramètres
- weight (bool) – Optionnellement, trier par poids si
True(par défaut :False). - phase (bool) – Il est possible de trier par phase avant le poids ou par ordre (par défaut :
False).
Retours
les indices permettant de trier le tableau.
Type de retour
commutes
commutes(other, qargs=None)
Retourne True pour chaque Pauli qui commute avec les autres.
Paramètres
- other (PauliList) – un autre opérateur PauliList.
- qargs (list) – qubits auxquels appliquer le produit de points (par défaut :
None).
Retours
True si les Paulis font la navette, False s'ils font l'inverse.
Type de retour
commutes_with_all
commutes_with_all(other)
Retourne les index des lignes qui commuent other.
Si other est une liste de Pauli à plusieurs rangs, le vecteur renvoyé indexe les rangs de la liste actuelle PauliList qui commuent avec tous les Paulis des autres listes. Si aucune ligne ne remplit la condition, le tableau retourné sera vide.
Paramètres
other (PauliList) – un seul Pauli ou plusieurs rangs PauliList.
Retours
tableau d'indices des lignes de commutation.
Type de retour
compose
compose(other, qargs=None, front=False, inplace=False)
Retourne la composition self∘other pour chaque Pauli de la liste.
Paramètres
- other (PauliList) – un autre PauliList.
- qargs (None or list) – qubits auxquels appliquer le produit de points (par défaut :
None). - front (bool) – Si True, utiliser la méthode de composition par points [. Valeur par défaut :
False]. - inplace (bool) – Si
True, mise à jour sur place (par défaut :False).
Retours
la liste des Paulis composés.
Type de retour
Augmentations
qargsQiskitError – si l’autre ne peut pas être convertie en une « PauliList, » : soit elle ne contient pas 1 ou le même nombre de Paulis que la liste actuelle, soit elle comporte un nombre incorrect de qubits pour la valeur spécifiée.
conjugate
copy
delete
delete(ind, qubit=False)
Renvoie une copie avec les lignes Pauli supprimées de la table.
Lors de la suppression de qubits, l'indice du qubit est le même que l'indice de la colonne des tableaux sous-jacents X et Z .
Paramètres
- ind (int orlist) – index à supprimer.
- qubit (bool) – si
Truesupprimer les colonnes de qubits, sinon supprimer les lignes de Pauli (par défaut :False).
Retours
le tableau résultant avec les entrées supprimées.
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 la composition other∘self pour chaque Pauli de la liste.
Paramètres
- other (PauliList) – un autre PauliList.
- qargs (None or list) – qubits auxquels appliquer le produit de points (par défaut :
None). - inplace (bool) – Si True, mise à jour sur place (par défaut :
False).
Retours
la liste des Paulis composés.
Type de retour
Augmentations
qargsQiskitError – si l’autre ne peut pas être convertie en une « PauliList, » : soit elle ne contient pas 1 ou le même nombre de Paulis que la liste actuelle, soit elle comporte un nombre incorrect de qubits pour la valeur spécifiée.
equiv
equiv(other)
Comparaison de l'équivalence de Pauli jusqu'à la phase globale.
Paramètres
other (PauliList orPauli) – un objet de comparaison.
Retours
Un tableau de True ou False pour l'équivalence d'entrée
du tableau actuel.
Type de retour
np.ndarray
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 vers .
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)
Renvoie le produit d'expansion de chaque Pauli de la liste.
Paramètres
other (PauliList) – un autre PauliList.
Retours
la liste des produits tensoriels de Paulis.
Type de retour
Augmentations
QiskitError – si « other » ne peut pas être converti en « PauliList, », c'est-à-dire qu'il ne contient ni 1, ni le même nombre de Paulis que la liste actuelle.
from_symplectic
classmethod from_symplectic(z, x, phase=0)
Construire un PauliList à partir d'une donnée symplectique.
Paramètres
- z (np.ndarray) – 2D booléen Numpy array.
- x (np.ndarray) – 2D booléen Numpy array.
- phase (np.ndarray or None) – 1D tableau d'entiers tiré de Z_4.
Retours
le site construit PauliList.
Type de retour
group_commuting
group_commuting(qubit_wise=False)
Partitionner un site PauliList en ensembles de cordes de Pauli commutées.
Paramètres
qubit_wise (bool) –
si la règle de commutation est appliquée à l'ensemble de l'opérateur ou à chaque qubit. Par exemple :
>>> from qiskit.quantum_info import PauliList
>>> op = PauliList(["XX", "YY", "IZ", "ZZ"])
>>> op.group_commuting()
[PauliList(['XX', 'YY']), PauliList(['IZ', 'ZZ'])]
>>> op.group_commuting(qubit_wise=True)
[PauliList(['XX']), PauliList(['YY']), PauliList(['IZ', 'ZZ'])]Retours
Liste de PauliLists où chaque PauliList contient des opérateurs de Pauli commutatifs.
Type de retour
group_qubit_wise_commuting
group_qubit_wise_commuting()
Partitionner un site PauliList en ensembles de cordes de Pauli commutant mutuellement dans le sens des qubits.
Retours
Liste de PauliLists où chaque PauliList contient des opérateurs de Pauli commuables.
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(ind, value, qubit=False)
Insérer Paulis dans le tableau.
Lors de l'insertion de qubits, l'indice du qubit est le même que l'indice de la colonne des tableaux sous-jacents X et Z .
Paramètres
- ind (int) – l'index à utiliser pour l'insertion.
- value (PauliList) – les valeurs à insérer.
- qubit (bool) – si
Trueinsérer les colonnes de qubits, sinon insérer les lignes de Pauli (par défaut :False).
Retours
le tableau résultant avec les entrées insérées.
Type de retour
Augmentations
QiskitError – si l'index d'insertion n'est pas valide.
inverse
label_iter
label_iter()
Renvoie un itérateur de représentation des étiquettes.
Il s'agit d'un itérateur paresseux qui convertit chaque ligne en une chaîne de caractères au fur et à mesure de son utilisation. Pour convertir l'ensemble du tableau en étiquettes, utilisez la méthode to_labels() méthode.
Retours
objet itérateur d'étiquettes pour le site PauliList.
Type de retour
LabelIterator
matrix_iter
matrix_iter(sparse=False)
Retourne un itérateur de représentation de la matrice.
Il s'agit d'un itérateur paresseux qui convertit chaque ligne dans la représentation de la matrice de Pauli au fur et à mesure de son utilisation. Pour convertir l'ensemble du tableau en matrices, utilisez la méthode to_matrix() méthode.
Paramètres
sparse (bool) – renvoie éventuellement des matrices CSR creuses si True, sinon renvoie des matrices sous forme de tableaux Numpy (par défaut : False)
Retours
objet itérateur de matrice pour PauliList.
Type de retour
MatrixIterator
noncommutation_graph
noncommutation_graph(qubit_wise)
Créez le graphe de non-commutation de cette PauliList.
Cela transforme le problème de regroupement des opérateurs de mesure en un problème de coloration de graphe. Le graphe construit contient un nœud pour chaque Pauli. Les nœuds seront connectés pour tout terme de Pauli qui ne commute pas.
Paramètres
qubit_wise (bool) – si la règle de commutation est appliquée à l'ensemble de l'opérateur ou à chaque qubit.
Retours
le graphe de non-commutation avec des nœuds pour chaque Pauli et des arêtes
indiquant une relation de non-commutation. Chaque nœud contient l'indice du terme de Pauli auquel il correspond dans ses données. Les bords du graphique ne contiennent aucune donnée.
Type de retour
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.
sort
sort(weight=False, phase=False)
Trier les lignes du tableau.
La méthode de tri par défaut est le tri lexicographique par numéro de qubit. En utilisant le poids kwarg, la sortie peut également être triée en fonction du nombre de termes non identiques dans le Pauli, où l'ensemble de tous les Paulis d'un poids donné est toujours ordonné lexicographiquement.
Exemple
Considérons le tri de tous les Paulis à 2 qubits dans un ordre aléatoire
from numpy.random import shuffle
from qiskit.quantum_info.operators import PauliList
# 2-qubit labels
labels = ['II', 'IX', 'IY', 'IZ', 'XI', 'XX', 'XY', 'XZ',
'YI', 'YX', 'YY', 'YZ', 'ZI', 'ZX', 'ZY', 'ZZ']
# Shuffle Labels
shuffle(labels)
pt = PauliList(labels)
print('Initial Ordering')
print(pt)
# Lexicographic Ordering
srt = pt.sort()
print('Lexicographically sorted')
print(srt)
# Weight Ordering
srt = pt.sort(weight=True)
print('Weight sorted')
print(srt)Initial Ordering
['YX', 'ZZ', 'XZ', 'YI', 'YZ', 'II', 'XX', 'XI', 'XY', 'YY', 'IX', 'IZ',
'ZY', 'ZI', 'ZX', 'IY']
Lexicographically sorted
['II', 'IX', 'IY', 'IZ', 'XI', 'XX', 'XY', 'XZ', 'YI', 'YX', 'YY', 'YZ',
'ZI', 'ZX', 'ZY', 'ZZ']
Weight sorted
['II', 'IX', 'IY', 'IZ', 'XI', 'YI', 'ZI', 'XX', 'XY', 'XZ', 'YX', 'YY',
'YZ', 'ZX', 'ZY', 'ZZ']Paramètres
- weight (bool) – trier éventuellement par poids si
True(par défaut :False). - phase (bool) – Il est possible de trier par phase avant le poids ou par ordre (par défaut :
False).
Retours
une copie triée du tableau original.
Type de retour
tensor
tensor(other)
Retourne le produit tensoriel avec chaque Pauli de la liste.
Paramètres
other (PauliList) – un autre PauliList.
Retours
la liste des produits tensoriels de Paulis.
Type de retour
Augmentations
QiskitError – si « other » ne peut pas être converti en « PauliList, », c'est-à-dire qu'il ne contient ni 1, ni le même nombre de Paulis que la liste actuelle.
to_labels
to_labels(array=False)
Convertit une adresse PauliList en une liste d'étiquettes de chaînes de Pauli.
Pour les grands sites PauliLists, la conversion à l'aide de array=True kwarg sera plus efficace car elle alloue à l'avance de la mémoire pour le tableau Numpy complet des étiquettes.
Libellé | Symplectique | Matrice |
|---|---|---|
"I" | ||
"X" | ||
"Y" | ||
"Z" |
Paramètres
array (bool) – renvoie un tableau Numpy si True, sinon renvoie une liste (par défaut : False).
Retours
Les lignes du site PauliList sous forme d'étiquettes.
Type de retour
to_matrix
to_matrix(sparse=False, array=False)
Convertir en une liste ou un tableau de matrices de Pauli.
Pour les grandes PauliLists, l'utilisation du kwarg array=True sera plus efficace car il alloue à l'avance la mémoire d'un tableau Numpy rank-3 complet de matrices.
Libellé | Symplectique | Matrice |
|---|---|---|
"I" | ||
"X" | ||
"Y" | ||
"Z" |
Paramètres
- sparse (bool) – si
Truerenvoie des matrices CSR peu denses, sinon renvoie des tableaux Numpy denses (par défaut :False). - array (bool) – renvoie comme rank-3 un tableau numpy si
True, sinon renvoie une liste de tableaux Numpy (par défaut :False).
Retours
Une liste de matrices de Pauli denses si array=False et sparse=False. liste : Une liste de matrices de Pauli creuses si array=False et sparse=True. tableau : un tableau dense de matrices de Pauli de dimension rank-3, si array=True.
Type de retour
transpose
unique
unique(return_index=False, return_counts=False)
Retourner l'unique Paulis de la table.
Exemple
from qiskit.quantum_info.operators import PauliList
pt = PauliList(['X', 'Y', '-X', 'I', 'I', 'Z', 'X', 'iZ'])
unique = pt.unique()
print(unique)['X', 'Y', '-X', 'I', 'Z', 'iZ']Paramètres
- return_index (bool) – Si c'est le cas
True, renvoie également les indices qui composent ce tableau unique. (Par défaut :False) - return_counts (bool) – Si
True, indiquer également le nombre de fois que chaque élément unique apparaît dans le tableau.
Retours
// unique
le tableau des lignes uniques.
indices uniques : np.ndarray, optionnel
Les indices des premières occurrences des valeurs uniques dans le tableau original. Fourni uniquement si return_index est True.
unique_counts : np.array, optionnel
Le nombre de fois que chacune des valeurs uniques apparaît dans le tableau original. Fourni uniquement si return_counts est True.
Type de retour