PhasedQubitSparsePauliList
class qiskit.quantum_info.PhasedQubitSparsePauliList(data, /, num_qubits=None)
Bases : object
Une liste d'opérateurs de Pauli avec des phases stockées dans un format épargné par les qubits.
Représentation
Chaque opérateur de Pauli de la liste est un produit tensoriel d'opérateurs de Pauli à qubit unique de la forme , pour , et d'un entier appelé l'exposant de phase. La représentation interne de a PhasedQubitSparsePauliList ne stocke que les opérateurs de Pauli non identiques à un qubit.
Indexation
PhasedQubitSparsePauliList se comporte comme une séquence Python (la forme standard, pas la forme développée collections.abc.Sequence). Les éléments de la liste peuvent être indexés par des entiers et parcourus par itération. Que ce soit par indexation ou par itération, les éléments de la liste sont renvoyés en tant que PhasedQubitSparsePauli instances.
Construction
PhasedQubitSparsePauliList définit plusieurs constructeurs. Le constructeur par défaut tentera de déléguer à l'un des constructeurs plus spécifiques, en fonction du type d'entrée. Vous pouvez toujours utiliser les constructeurs spécifiques pour mieux contrôler la construction.
Méthode | Récapitulatif |
|---|---|
from_label() | Convertir une étiquette de chaîne dense en un élément unique PhasedQubitSparsePauliList. |
from_list() | Construit à partir d'une liste d'étiquettes de chaînes denses. |
from_sparse_list() | Éléments donnés sous la forme d'une liste de tuples de l'exposant de phase, d'étiquettes de chaînes éparses et des qubits auxquels ils s'appliquent. |
from_pauli() | Transforme un simple Pauli en un seul élément PhasedQubitSparsePauliList. |
from_phased_qubit_sparse_paulis() | Construire à partir d'une liste de PhasedQubitSparsePaulis. |
__new__
__new__(data, /, num_qubits=None)
Le constructeur par défaut de PhasedQubitSparsePauliList.
Elle délègue à l'une des méthodes explicites de conversion-construction, en fonction du type de l'argument data . Si num_qubits est fourni et que le constructeur impliqué par le type de data n'accepte pas de nombre, l'entier donné doit correspondre à l'entrée.
Paramètres
- data - Le type de données de l'entrée. Il peut s'agir d'un autre
PhasedQubitSparsePauliListauquel cas l'entrée est copiée, ou il peut s'agir d'une liste dans un format valide pour soitfrom_list()oufrom_sparse_list(). - num_qubits (int|None) – Nombre facultatif de qubits pour la liste. Pour la plupart des entrées de données, ce paramètre peut être déduit et n'a pas besoin d'être transmis. Elle n'est nécessaire que pour les listes vides ou le format "sparse-list". S'il est donné inutilement, il doit correspondre aux données saisies.
En plus des constructeurs basés sur la conversion, la méthode empty() peut être utilisée pour construire une liste vide de Paulis qubit-sparse phasés agissant sur un nombre donné de qubits.
Conversions
Un fichier existant PhasedQubitSparsePauliList peut être converti dans d'autres formats.
Méthode | Récapitulatif |
|---|---|
to_sparse_list() | Exprimer l'observable sous la forme d'une liste clairsemée dont les éléments sont (phase, paulis, indices). |
Attributs
num_qubits
Le nombre de qubits sur lesquels agissent les opérateurs de la liste.
Cela ne peut être déduit d'aucune autre forme ou valeur, puisque les identités ne sont pas stockées explicitement.
num_terms
Le nombre d'éléments de la liste.
Méthodes
apply_layout
apply_layout(layout, num_qubits=None)
Appliquer un schéma de transposition à cette liste de Pauli clairsemée de qubits phasés.
Cela permet de remapper les indices des qubits, par exemple si la liste est définie en termes d'étiquettes de qubits virtuels.
Paramètres
- layout (TranspileLayout |list[int] | None) – La mise en page à appliquer. Dans la plupart des cas, cette fonction devrait recevoir le
QuantumCircuit.layoutchamp provenant d'un circuit qui a été transpilé pour le matériel. De plus, vous pouvez transmettre une liste de nouveaux indices de qubits.NoneSi cette option est explicitement spécifiée, aucun remappage n'est appliqué (mais vous pouvez tout de même utilisernum_qubitspour développer les qubits de la liste). - num_qubits (int | None) – Le nombre de qubits à ajouter aux éléments de la liste. S'il n'est pas fourni, la sortie sera aussi large que l'élément donné, ou de la même largeur que l'élément donné si l'élément est donné sous une autre forme
TranspileLayoutou de la même largeur que l'entrée si l'adresselayoutest donnée sous une autre forme.
Retours
Un nouveau QubitSparsePauli avec la mise en page fournie.
clear
clear()
Efface tous les éléments de la liste, ce qui la rend à nouveau égale à la liste vide.
Cela ne modifie pas la capacité des allocations internes; par conséquent, les opérations d'addition ou de soustraction ultérieures résultant de la composition ne nécessiteront peut-être pas de réallocation.
Exemples
>>> pauli_list = PhasedQubitSparsePauliList.from_list(["IXXXYY", "ZZYZII"])
>>> pauli_list.clear()
>>> assert pauli_list == PhasedQubitSparsePauliList.empty(pauli_list.num_qubits)copy
copy()
Obtenez une copie de cette liste de Pauli éparse de qubits.
Exemples
>>> phased_qubit_sparse_pauli_list = PhasedQubitSparsePauliList.from_list(["IXZXYYZZ", "ZXIXYYZZ"])
>>> assert phased_qubit_sparse_pauli_list == phased_qubit_sparse_pauli_list.copy()
>>> assert phased_qubit_sparse_pauli_list is not phased_qubit_sparse_pauli_list.copy()empty
static empty(num_qubits)
Obtenir la liste vide pour un nombre donné de qubits.
La liste vide ne contient aucun élément et constitue l'élément d'identité pour joindre deux instances PhasedQubitSparsePauliList instances.
Exemples
Obtenir la liste vide sur 100 qubits :
>>> PhasedQubitSparsePauliList.empty(100)
<PhasedQubitSparsePauliList with 0 elements on 100 qubits: []>from_label
static from_label(label, /)
Construire une liste avec un seul terme à partir d'une chaîne de caractères dense.
L'étiquette doit être une séquence de l'alphabet 'IXYZ'. L'étiquette est interprétée de manière analogue à une chaîne de bits. En d'autres termes, la lettre la plus à droite est associée au qubit 0, et ainsi de suite. C'est la même chose que les étiquettes pour Pauli et SparsePauliOp.
Paramètres
label (str) – l'étiquette dense.
Exemples
>>> PhasedQubitSparsePauliList.from_label("IIIIXZI")
<PhasedQubitSparsePauliList with 1 element on 7 qubits: [X_2 Z_1]>
>>> label = "IYXZI"
>>> pauli = Pauli(label)
>>> assert PhasedQubitSparsePauliList.from_label(label) == PhasedQubitSparsePauliList.from_pauli(pauli)Une généralisation de cette méthode qui construit une liste à partir de plusieurs étiquettes.
from_list
static from_list(iter, /, *, num_qubits=None)
Construire une liste de Pauli qubit-sparse phasée à partir d'une liste d'étiquettes denses.
Ceci est analogue à SparsePauliOp.from_list(). Dans ce formulaire dense, vous devez fournir toutes les identités explicitement dans chaque étiquette.
L'étiquette doit être une séquence de l'alphabet 'IXYZ'. L'étiquette est interprétée de manière analogue à une chaîne de bits. En d'autres termes, la lettre la plus à droite est associée au qubit 0, et ainsi de suite. C'est la même chose que les étiquettes pour Pauli et SparsePauliOp.
Paramètres
- iter (list[str]) – Liste d'étiquettes de chaînes denses.
- num_qubits (int | None) – Il n'est pas nécessaire de le préciser si vous êtes sûr que
itern'est pas une séquence vide, puisqu'elle peut être déduite de la longueur des étiquettes. Siiterpeut être vide, vous devez spécifier cet argument pour déterminer le nombre de qubits sur lesquels les opérateurs agissent. Si cette valeur est donnée et queitern'est pas vide, la valeur doit correspondre à la longueur des étiquettes.
Exemples
Construire une liste de Pauli éparse de qubits à partir d'une liste d'étiquettes :
>>> PhasedQubitSparsePauliList.from_list([
... "IIIXX",
... "IIYYI",
... "IXXII",
... "ZZIII",
... ])
<PhasedQubitSparsePauliList with 4 elements on 5 qubits:
[X_1 X_0, Y_2 Y_1, X_3 X_2, Z_4 Z_3]>Utiliser num_qubits pour désambiguïser les entrées potentiellement vides :
>>> PhasedQubitSparsePauliList.from_list([], num_qubits=10)
<PhasedQubitSparsePauliList with 0 elements on 10 qubits: []>Cette méthode est équivalente aux appels à from_sparse_list() avec le champ explicite qubit-arguments fixé à des entiers décroissants :
>>> labels = ["XYXZ", "YYZZ", "XYXZ"]
>>> from_list = PhasedQubitSparsePauliList.from_list(labels)
>>> from_sparse_list = PhasedQubitSparsePauliList.from_sparse_list([
... (label, (3, 2, 1, 0))
... for label in labels
... ])
>>> assert from_list == from_sparse_listConstruire la liste à partir d'étiquettes sans identités explicites, mais en indiquant explicitement les qubits auxquels s'applique chaque terme d'opérateur de qubit unique.
from_pauli
static from_pauli(pauli, /)
Construire un PhasedQubitSparsePauliList à partir d'une seule instance de Pauli instance.
La liste de sortie ne comportera qu'un seul terme. Notez que la phase est supprimée.
Paramètres
pauli (Pauli) – le seul Pauli à convertir.
Exemples
>>> label = "IYXZI"
>>> pauli = Pauli(label)
>>> PhasedQubitSparsePauliList.from_pauli(pauli)
<PhasedQubitSparsePauliList with 1 element on 5 qubits: [Y_3 X_2 Z_1]>
>>> assert PhasedQubitSparsePauliList.from_label(label) == PhasedQubitSparsePauliList.from_pauli(pauli)from_phased_qubit_sparse_paulis
static from_phased_qubit_sparse_paulis(obj, /, num_qubits=None)
Construire un PhasedQubitSparsePauliList à partir d'instances individuelles de PhasedQubitSparsePauli individuelles.
Tous les termes doivent avoir le même nombre de qubits. S'il est fourni, l'argument num_qubits doit correspondre aux termes.
Paramètres
- obj (Iterable[PhasedQubitSparsePauli]) – Itérable de termes individuels à partir desquels la liste est construite.
- num_qubits (int | None) – Le nombre de qubits sur lesquels les éléments de la liste doivent agir. Elle est généralement déduite de l'entrée, mais peut être explicitement donnée pour gérer le cas d'un itérable vide.
Retours
La liste correspondante.
from_sparse_list
static from_sparse_list(iter, /, num_qubits)
Construire une liste de Pauli éparse de qubits en phase à partir d'une liste d'étiquettes et des qubits auxquels chaque élément s'applique.
Ceci est analogue à SparsePauliOp.from_sparse_list().
Les champs "labels" et "indices" des tuples sont associés en les zippant ensemble. Par exemple, cela signifie qu'un appel à from_list() peut être converti dans la forme utilisée par cette méthode en fixant le champ "indices" de chaque triple à (num_qubits-1, ..., 1, 0).
Paramètres
- iter (list[tuple[int, str, Sequence[int]]]) – tuples d'exposants de phase, d'étiquettes et de qubits auxquels s'applique chaque terme de qubit unique.
- num_qubits (int) – le nombre de qubits sur lesquels agissent les opérateurs de la liste.
Exemples
Construire une liste simple :
>>> PhasedQubitSparsePauliList.from_sparse_list(
... [(0, "ZX", (1, 4)), (1, "YY", (0, 3))],
... num_qubits=5,
... )
<PhasedQubitSparsePauliList with 2 elements on 5 qubits: [X_4 Z_1, (-i)Y_3 Y_0]>Cette méthode peut reproduire le comportement de from_list()si le champ qubit-arguments du tuple est réglé sur des nombres entiers décroissants :
>>> labels = ["XYXZ", "YYZZ", "XYXZ"]
>>> from_list = PhasedQubitSparsePauliList.from_list(labels)
>>> from_sparse_list = PhasedQubitSparsePauliList.from_sparse_list([
... (label, (3, 2, 1, 0))
... for label in labels
... ])
>>> assert from_list == from_sparse_listL'inverse de cette méthode.
to_pauli_list
to_pauli_list()
Retourne un PauliList représentant la même liste de Paulis.
to_sparse_list
to_sparse_list()
Exprime la liste en termes de format de liste clairsemée.
Cela peut être considéré comme une contre-opération de PhasedQubitSparsePauliList.from_sparse_list()mais il n'est pas garanti que l'ordre des termes soit le même après un aller-retour vers une liste clairsemée.
Exemples
>>> phased_qubit_sparse_list = PhasedQubitSparsePauliList.from_list(["IIXIZ", "IIZIX"])
>>> reconstructed = PhasedQubitSparsePauliList.from_sparse_list(phased_qubit_sparse_list.to_sparse_list(), qubit_sparse_list.num_qubits)Le constructeur qui peut interpréter ces listes.