PauliList
class qiskit.quantum_info.PauliList(data)
Basen: BasePauli, LinearMixin, GroupMixin
Liste der N-Qubit Pauli-Operatoren.
Diese Klasse ist eine effiziente Darstellung einer Liste von Pauli operatoren. Es unterstützt 1D numpy array indexing und gibt ein Pauli für Integer-Indizes oder ein PauliList für Slice- oder Listen-Indizes.
Initialisierung
Ein PauliList Objekt kann auf verschiedene Weise initialisiert werden.
PauliList(list[str])wobei die Zeichenketten die gleiche Darstellung wie bei
Pauli.
PauliList(Pauli) and PauliList(list[Pauli])wo Pauli ist
Pauli.
PauliList.from_symplectic(z, x, phase)wobei
zundx2-dimensionale booleschenumpy.ndarrayssind undphaseeine ganze Zahl in[0, 1, 2, 3]ist.
Beispiel:
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']Datenzugriff
Auf die einzelnen Paulis kann mit dem Operator [] zugegriffen werden, der Ganzzahlen, Listen oder Slices zur Auswahl von Teilmengen von PauliList akzeptiert. Wenn eine ganze Zahl angegeben wird, wird Pauli und nicht PauliList zurückgegeben.
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'])Iteration
Über die Zeilen der Pauli-Tabelle kann wie über eine Liste iteriert werden. Die Iteration kann auch unter Verwendung der Beschriftung oder der Matrixdarstellung jeder Zeile erfolgen, indem die label_iter() und matrix_iter() methoden.
Initialisieren Sie die PauliList.
Parameter
data (Pauli orlist) – eingabedaten für Paulis. Wenn die Eingabe eine Liste ist, muss jedes Element in der Liste ein Pauli-Objekt oder ein Pauli-Str. sein.
Erhöht
QiskitError – wenn das Eingabe-Array eine ungültige Form hat.
Weitere Informationen:
Das Eingabefeld wird nicht kopiert, so dass mehrere Pauli-Tabellen dasselbe zugrunde liegende Feld verwenden können.
Attribute
dim
Rückgabe Tupel (input_shape, output_shape).
num_qubits
Gibt die Anzahl der Qubits zurück, wenn es sich um einen N-Qubit-Operator handelt, andernfalls None.
phase
Rückgabe des Phasenexponenten der PauliList.
qargs
Gibt die qargs für den Operator zurück.
settings
Einstellungen zurückgeben.
shape
Die vollständige Form des array()
size
Die Anzahl der Pauli-Zeilen in der Tabelle.
x
Das x-Feld für die symplektische Darstellung.
z
Das z-Feld für die symplektische Darstellung.
Methoden
adjoint
anticommutes
anticommutes(other, qargs=None)
Gib zurück True , wenn der andere Pauli-Operator mit diesem antikommutiert.
Parameter
- other (PauliList) – einen anderen PauliList Betreiber.
- qargs (list) – qubits, auf die das Punktprodukt angewendet werden soll (Standard:
None).
Rückgabe
True wenn Paulis nicht pendeln, False wenn sie pendeln.
Rückgabetyp
anticommutes_with_all
anticommutes_with_all(other)
Gibt die Indizes der Zeilen zurück, die mit der anderen Pauli-Liste antikommutieren.
Wenn other eine mehrzeilige Pauli-Liste ist, indiziert der zurückgegebene Vektor die Zeilen der aktuellen PauliList, die mit allen Paulis in anderen antikommutieren. Wenn keine Zeilen die Bedingung erfüllen, ist das zurückgegebene Array leer.
Parameter
other (PauliList) – eine einzelne Pauli- oder mehrreihige PauliList.
Rückgabe
index-Array der Anti-Commuting-Zeilen.
Rückgabetyp
argsort
argsort(weight=False, phase=False)
Rückgabe von Indizes für die Sortierung der Zeilen der Tabelle.
Die Standardsortiermethode ist die lexikografische Sortierung nach Qubit-Nummer. Durch die Verwendung des Gewichts kwarg kann die Ausgabe zusätzlich nach der Anzahl der nicht-identischen Terme im Pauli sortiert werden, wobei die Menge aller Paulis eines bestimmten Gewichts weiterhin lexikographisch geordnet wird.
Parameter
- weight (bool) – Optional kann nach Gewicht sortiert werden, wenn
True(Standard:False). - phase (bool) – Wahlweise Sortierung nach Phase vor Gewicht oder Reihenfolge (Standard:
False).
Rückgabe
die Indizes für die Sortierung der Tabelle.
Rückgabetyp
commutes
commutes(other, qargs=None)
Gibt True für jedes Pauli zurück, das mit einem anderen pendelt.
Parameter
- other (PauliList) – einen anderen PauliList Betreiber.
- qargs (list) – qubits, auf die das Punktprodukt angewendet werden soll (Standard:
None).
Rückgabe
True wenn Paulis pendeln, False wenn sie nicht pendeln.
Rückgabetyp
commutes_with_all
commutes_with_all(other)
Gibt Indizes von Zeilen zurück, die other entsprechen.
Wenn other eine mehrzeilige Pauli-Liste ist, indiziert der zurückgegebene Vektor die Zeilen der aktuellen PauliList, die mit allen Paulis der anderen Liste übereinstimmen. Wenn keine Zeilen die Bedingung erfüllen, ist das zurückgegebene Array leer.
Parameter
other (PauliList) – eine einzelne Pauli- oder mehrreihige PauliList.
Rückgabe
index-Array der Pendelzeilen.
Rückgabetyp
compose
compose(other, qargs=None, front=False, inplace=False)
Rückgabe der Zusammensetzung self∘other für jedes Pauli in der Liste.
Parameter
- other (PauliList) – eine weitere PauliList.
- qargs (None or list) – qubits, auf die das Punktprodukt angewendet werden soll (Voreinstellung:
None). - front (bool) – Wenn True, wird die Methode der Punktkomposition verwendet [Standard:
False]. - inplace (bool) – Wenn
Truedie Aktualisierung an Ort und Stelle vornimmt (Standard:False).
Rückgabe
die Liste der verfassten Paulis.
Rückgabetyp
Erhöht
qargsQiskitError – wenn andere nicht in eine „ PauliList, “ konvertiert werden können, weil diese entweder nicht 1 oder nicht die gleiche Anzahl an Paulis wie die aktuelle Liste aufweist oder die falsche Anzahl an Qubits für die angegebene Liste hat.
conjugate
copy
delete
delete(ind, qubit=False)
Gibt eine Kopie zurück, in der die Pauli-Zeilen aus der Tabelle gelöscht sind.
Beim Löschen von Qubits ist der Qubit-Index derselbe wie der Spaltenindex der zugrunde liegenden Arrays X und Z .
Parameter
- ind (int orlist) – zu löschende(n) Index(e).
- qubit (bool) – wenn
TrueQubit-Spalten löschen, sonst Pauli-Zeilen löschen (Standard:False).
Rückgabe
die resultierende Tabelle, aus der die Einträge entfernt wurden.
Rückgabetyp
Erhöht
QiskitError – wenn ind außerhalb des zulässigen Bereichs für die Array-Größe oder die Anzahl der Qubits liegt.
dot
dot(other, qargs=None, inplace=False)
Rückgabe der Zusammensetzung other∘self für jeden Pauli in der Liste.
Parameter
- other (PauliList) – eine weitere PauliList.
- qargs (None or list) – qubits, auf die das Punktprodukt angewendet werden soll (Voreinstellung:
None). - inplace (bool) – Wenn True, wird die Aktualisierung an Ort und Stelle durchgeführt (Standard:
False).
Rückgabe
die Liste der verfassten Paulis.
Rückgabetyp
Erhöht
qargsQiskitError – wenn andere nicht in eine „ PauliList, “ konvertiert werden können, weil diese entweder nicht 1 oder nicht die gleiche Anzahl an Paulis wie die aktuelle Liste aufweist oder die falsche Anzahl an Qubits für die angegebene Liste hat.
equiv
equiv(other)
Eingangsweiser Vergleich der Pauli-Äquivalenz bis zur globalen Phase.
Parameter
other (PauliList orPauli) – ein Vergleichsobjekt.
Rückgabe
Eine Reihe von True oder False für eingangsbezogene Gleichwertigkeit
der aktuellen Tabelle.
Rückgabetyp
np.ndarray
evolve
evolve(other, qargs=None, frame='h')
Führt entweder die Heisenberg- (Standard) oder die Schrödinger-Bildentwicklung des Pauli-Bildes durch ein Clifford-Bild durch und gibt das entwickelte Pauli-Bild zurück.
Die Entwicklung des Schrödinger-Bildes kann durch Übergabe des Parameters frame='s' gewählt werden. Diese Option führt zu einer schnelleren Berechnung.
Heisenbergs Bild entwickelt das Pauli als .
Schrödingers Bild entfaltet das Pauli-Bild als .
Parameter
- other (Pauli orClifford orQuantumCircuit) – Der Clifford-Operator, nach dem die Entwicklung erfolgen soll.
- qargs (list) – eine Liste von Qubits, auf die das Clifford-Verfahren angewendet werden soll.
- frame (string) –
'h'für Heisenberg (Standard) oder's'für das Schrödinger-System.
Rückgabe
das Pauli (Heisenberg-Bild) oder das Pauli (Schrödinger-Bild).
Rückgabetyp
Erhöht
QiskitError – wenn die Clifford-Zahl der Qubits und die der Qargs nicht übereinstimmen.
expand
expand(other)
Gibt das Expand-Produkt jedes Pauli in der Liste zurück.
Parameter
other (PauliList) – eine weitere PauliList.
Rückgabe
die Liste der Tensorprodukte Paulis.
Rückgabetyp
Erhöht
QiskitError – wenn „other“ nicht in „ PauliList, “ umgewandelt werden kann, da es weder 1 noch dieselbe Anzahl an Paulis wie die aktuelle Liste enthält.
from_symplectic
classmethod from_symplectic(z, x, phase=0)
Konstruieren Sie eine PauliList aus symplektischen Daten.
Parameter
- z (np.ndarray) – 2D boolesches Numpy-Array.
- x (np.ndarray) – 2D boolesches Numpy-Array.
- phase (np.ndarray or None) – 1D Ganzzahl-Array von Z_4.
Rückgabe
die konstruierte PauliList.
Rückgabetyp
group_commuting
group_commuting(qubit_wise=False)
Partitionieren Sie eine PauliList in Mengen von kommutierenden Pauli-Strings.
Parameter
qubit_wise (bool) –
ob die Kommutierungsregel auf den gesamten Operator oder auf ein einzelnes Qubit angewendet wird. Zum Beispiel:
>>> 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'])]Rückgabe
Liste von PauliLists, in der jede PauliList kommutierende Pauli-Operatoren enthält.
Rückgabetyp
group_qubit_wise_commuting
group_qubit_wise_commuting()
Partitionierung von PauliList in Gruppen von wechselseitig Qubit-weise kommutierenden Pauli-Strings.
Rückgabe
Liste von PauliLists, in der jede PauliList kommutable Pauli-Operatoren enthält.
Rückgabetyp
input_dims
input_dims(qargs=None)
Rückgabe eines Tupels der Eingabedimension für die angegebenen Teilsysteme.
insert
insert(ind, value, qubit=False)
Fügen Sie Paulis in die Tabelle ein.
Beim Einfügen von Qubits ist der Qubit-Index derselbe wie der Spaltenindex der zugrunde liegenden Arrays X und Z .
Parameter
- ind (int) – index zum Einfügen bei.
- value (PauliList) – werte einzufügen.
- qubit (bool) – wenn
TrueQubit-Spalten einfügen, sonst Pauli-Zeilen einfügen (Standard:False).
Rückgabe
die resultierende Tabelle mit den eingefügten Einträgen.
Rückgabetyp
Erhöht
QiskitError – wenn der Einfügeindex ungültig ist.
inverse
label_iter
label_iter()
Gibt einen Iterator für die Darstellung von Etiketten zurück.
Dies ist ein träger Iterator, der jede Zeile nur dann in die Zeichenfolge label umwandelt, wenn sie verwendet wird. Um die gesamte Tabelle in Beschriftungen umzuwandeln, verwenden Sie die to_labels() methode.
Rückgabe
label-Iterator-Objekt für die PauliList.
Rückgabetyp
LabelIterator
matrix_iter
matrix_iter(sparse=False)
Gibt einen Iterator für die Matrixdarstellung zurück.
Dies ist ein träger Iterator, der jede Zeile nur dann in die Pauli-Matrix-Darstellung umwandelt, wenn sie verwendet wird. Um die gesamte Tabelle in Matrizen umzuwandeln, verwenden Sie die to_matrix() methode.
Parameter
sparse (bool) – Gibt optional spärliche CSR-Matrizen zurück, wenn True, andernfalls Numpy-Array-Matrizen (Standard: False)
Rückgabe
matrix-Iterator-Objekt für die PauliList.
Rückgabetyp
MatrixIterator
noncommutation_graph
noncommutation_graph(qubit_wise)
Erstellen Sie den Nicht-Kommutationsgraphen dieser PauliList.
Dadurch wird das Problem der Gruppierung von Messoperatoren in ein Problem der Graphenfärbung umgewandelt. Der konstruierte Graph enthält einen Knoten für jeden Pauli. Die Knoten verbinden sich für zwei beliebige Pauli-Terme, die sich nicht vertauschen.
Parameter
qubit_wise (bool) – ob die Kommutierungsregel auf den gesamten Operator oder auf ein einzelnes Qubit angewendet wird.
Rückgabe
der Nicht-Kommutationsgraph mit Knoten für jedes Pauli und Kanten
was auf eine Nicht-Kommutationsbeziehung hinweist. Jeder Knoten enthält den Index des Pauli-Terms, dem er in seinen Daten entspricht. Die Kanten des Graphen enthalten keine Daten.
Rückgabetyp
output_dims
output_dims(qargs=None)
Rückgabe eines Tupels der Ausgabedimension für die angegebenen Teilsysteme.
power
power(n)
Gibt das Ergebnis der n-maligen Anwendung eines Operators auf sich selbst zurück.
Parameter
n (int) – die Anzahl der Kompositionen mit sich selbst ( n>0 ).
Rückgabe
der n-fach zusammengesetzte Operator.
Rückgabetyp
Erhöht
QiskitError – wenn die Eingabe- und Ausgabedimensionen des Operators nicht gleich sind oder die Potenz keine positive ganze Zahl ist.
reshape
reshape(input_dims=None, output_dims=None, num_qubits=None)
Rückgabe einer flachen Kopie mit umgestalteten Dimensionen des Eingangs- und Ausgangssubsystems.
Parameter
- input_dims (None or tuple) – neue Subsystem-Eingangsmaße. Wenn Keine, werden die ursprünglichen Eingangsdimms beibehalten [Standard: Keine].
- output_dims (None or tuple) – neue Dimensionen der Teilsystemleistung. Wenn Keine, werden die ursprünglichen Ausgangsdimms beibehalten [Standard: Keine].
- num_qubits (None or int) – in einen N-Qubit-Operator umwandeln [Standard: Keine].
Rückgabe
gibt self mit umgestalteten Eingabe- und Ausgabeabmessungen zurück.
Rückgabetyp
BaseOperator
Erhöht
QiskitError – wenn die Summe aller Eingangs- oder Ausgangsabmessungen der Teilsysteme nicht konstant ist.
sort
sort(weight=False, phase=False)
Sortieren Sie die Zeilen der Tabelle.
Die Standardsortiermethode ist die lexikografische Sortierung nach Qubit-Nummer. Durch die Verwendung des Gewichts kwarg kann die Ausgabe zusätzlich nach der Anzahl der nicht-identischen Terme im Pauli sortiert werden, wobei die Menge aller Paulis eines bestimmten Gewichts weiterhin lexikographisch geordnet wird.
Beispiel
Betrachten wir eine zufällige Sortierung aller 2-Qubit-Paulis
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']Parameter
- weight (bool) – optional nach Gewicht sortieren, wenn
True(Standard:False). - phase (bool) – Wahlweise Sortierung nach Phase vor Gewicht oder Reihenfolge (Standard:
False).
Rückgabe
eine sortierte Kopie der Originaltabelle.
Rückgabetyp
tensor
tensor(other)
Gibt das Tensorprodukt mit jedem Pauli in der Liste zurück.
Parameter
other (PauliList) – eine weitere PauliList.
Rückgabe
die Liste der Tensorprodukte Paulis.
Rückgabetyp
Erhöht
QiskitError – wenn „other“ nicht in „ PauliList, “ umgewandelt werden kann, da es weder 1 noch dieselbe Anzahl an Paulis wie die aktuelle Liste enthält.
to_labels
to_labels(array=False)
Konvertiert eine PauliList in eine Liste Pauli-String-Labels.
Bei großen PauliLists ist die Konvertierung mit array=True kwarg effizienter, da es im Voraus Speicher für das gesamte Numpy-Array von Labels zuweist.
Bezeichnung (Label) | Symplektisch | Matrix |
|---|---|---|
"I" | ||
"X" | ||
"Y" | ||
"Z" |
Parameter
array (bool) – gibt ein Numpy-Array zurück, wenn True, andernfalls eine Liste (Standard: False).
Rückgabe
Die Zeilen der PauliList in Form von Etiketten.
Rückgabetyp
to_matrix
to_matrix(sparse=False, array=False)
Umwandlung in eine Liste oder ein Array von Pauli-Matrizen.
Für große PauliLists ist die Konvertierung mit dem array=True kwarg effizienter, da es den Speicher für ein komplettes rank-3 Numpy-Array von Matrizen im Voraus zuweist.
Bezeichnung (Label) | Symplektisch | Matrix |
|---|---|---|
"I" | ||
"X" | ||
"Y" | ||
"Z" |
Parameter
- sparse (bool) – wenn
Truespärliche CSR-Matrizen zurückgibt, andernfalls dichte Numpy-Arrays (Standard:False). - array (bool) – rückgabe als rank-3 Numpy-Array, wenn
True, sonst Rückgabe einer Liste von Numpy-Arrays (Standard:False).
Rückgabe
Eine Liste dichter Pauli-Matrizen, wenn array=False und sparse=False. Liste: Eine Liste spärlicher Pauli-Matrizen, wenn array=False und sparse=True. array: Ein dichtes Array von Pauli-Matrizen vom Typ rank-3, wenn array=True.
Rückgabetyp
transpose
unique
unique(return_index=False, return_counts=False)
Geben Sie die einzigartigen Paulis vom Tisch zurück.
Beispiel
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']Parameter
- return_index (bool) – Wenn
Trueja, gib auch die Indizes zurück, die zu dem eindeutigen Array führen. (Standard:False) - return_counts (bool) – Falls
True, wird auch die Anzahl der Vorkommen jedes einzelnen Elements in der Tabelle zurückgegeben.
Rückgabe
eindeutg
die Tabelle mit den eindeutigen Zeilen.
unique_indices: np.ndarray, optional
Die Indizes des ersten Auftretens der eindeutigen Werte im ursprünglichen Array. Nur verfügbar, wenn return_index True ist.
unique_counts: np.array, optional
Die Anzahl, wie oft jeder der eindeutigen Werte im ursprünglichen Array auftaucht. Nur verfügbar, wenn return_counts True ist.
Rückgabetyp