QubitSparsePauliList
class qiskit.quantum_info.QubitSparsePauliList(data, /, num_qubits=None)
Basen: object
Eine Liste phasenloser Pauli-Operatoren, die in einem Qubit-sparsen Format gespeichert ist.
Darstellung
Jeder einzelne Pauli-Operator in der Liste ist ein Tensorprodukt von Ein-Qubit-Pauli-Operatoren der Form , für . Die interne Darstellung von a QubitSparsePauliList speichert nur die nicht-identischen Ein-Qubit-Pauli-Operatoren. Dies macht es wesentlich effizienter, Listen von Pauli-Operatoren mit niedrigen Gewichten auf einer großen Anzahl von Qubits darzustellen. Zum Beispiel kann die Liste der :math`n`-Qubit-Operatoren , wobei für den Operator auf dem Qubit und für die Identität auf allen anderen steht, gespeichert werden in QubitSparsePauliList gespeichert werden, wobei der Speicherbedarf linear zur Anzahl der Qubits ist.
Indexierung
QubitSparsePauliList verhält sich wie eine Python Folge (die Standardform, nicht die erweiterte collections.abc.Sequence). Die Elemente der Liste können durch ganze Zahlen indiziert werden, und es kann auch durch sie hindurchgegangen werden. Ob durch Indizierung oder Iteration, die Elemente der Liste werden als QubitSparsePauli instanzen.
Bauwesen
QubitSparsePauliList definiert mehrere Konstruktoren. Der Standardkonstruktor versucht, einen der spezifischeren Konstruktoren zu delegieren, der auf dem Typ der Eingabe basiert. Sie können jederzeit die spezifischen Konstruktoren verwenden, um mehr Kontrolle über die Konstruktion zu haben.
Methode | Zusammenfassung |
|---|---|
from_label() | Konvertierung eines dichten String-Labels in ein Einzelelement QubitSparsePauliList. |
from_list() | Konstruieren Sie aus einer Liste von dichten String-Labels. |
from_sparse_list() | Elemente in Form einer Liste von Tupeln mit spärlichen String-Bezeichnungen und den Qubits, auf die sie sich beziehen. |
from_pauli() | Erhöhen Sie ein einzelnes Pauli in ein Einzelelement QubitSparsePauliList. |
from_qubit_sparse_paulis() | Konstruieren Sie aus einer Liste von QubitSparsePaulis. |
__new__
__new__(data, /, num_qubits=None)
Der Standardkonstruktor von QubitSparsePauliList.
Dies delegiert an eine der expliziten Konvertierungs-Konstruktor-Methoden, basierend auf dem Typ des data Arguments. Wenn num_qubits übergeben wird und der Konstruktor, der durch den Typ von data impliziert wird, keine Zahl akzeptiert, muss die angegebene Ganzzahl mit der Eingabe übereinstimmen.
Parameter
- data - Der Datentyp der Eingabe. Dies kann eine andere
QubitSparsePauliListsein, in diesem Fall wird die Eingabe kopiert, oder es kann eine Liste in einem gültigen Format für entwederfrom_list()oder seinfrom_sparse_list(). - num_qubits (int|None) – Optionale Anzahl von Qubits für die Liste. Bei den meisten Dateneingaben kann dies abgeleitet werden und muss nicht angegeben werden. Sie ist nur für leere Listen oder das Sparse-List-Format erforderlich. Wenn sie unnötig angegeben wird, muss sie mit den eingegebenen Daten übereinstimmen.
Zusätzlich zu den umwandlungsbasierten Konstruktoren kann die Methode empty() verwendet werden, um eine leere Liste von Qubit-sparse Paulis zu konstruieren, die auf eine bestimmte Anzahl von Qubits wirken.
Konvertierungen
Ein bestehendes QubitSparsePauliList kann in andere Formate konvertiert werden.
Methode | Zusammenfassung |
|---|---|
to_sparse_list() | Drücken Sie die Beobachtungsgröße in einem spärlichen Listenformat mit den Elementen (paulis, indices) aus. |
Attribute
num_qubits
Die Anzahl der Qubits, auf die die Operatoren in der Liste wirken.
Dies lässt sich nicht aus anderen Formen oder Werten ableiten, da Identitäten nicht explizit gespeichert werden.
num_terms
Die Anzahl der Elemente in der Liste.
Methoden
apply_layout
apply_layout(layout, num_qubits=None)
Anwendung eines Transpiler-Layouts auf diese spärliche Pauli-Liste mit Bits.
Dies ermöglicht die Neuzuordnung von Qubit-Indizes, z. B. wenn die Liste in Form von virtuellen Qubit-Labels definiert ist.
Parameter
- layout (TranspileLayout |list[int] | None) – Das anzuwendende Layout. In den meisten Fällen sollte bei der Verwendung dieser Funktion das
QuantumCircuit.layoutFeld aus einem Schaltkreis übergeben werden, der für die Hardware transpiliert wurde. Außerdem können Sie eine Liste mit neuen Qubit-Indizes übergeben.NoneWird dies explizit angegeben, wird keine Neuzuordnung vorgenommen (Sie können jedoch weiterhin verwendennum_qubits, um die Qubits in der Liste zu erweitern). - num_qubits (int | None) – Die Anzahl der Qubits, auf die die Listenelemente erweitert werden sollen. Falls nicht angegeben, ist die Ausgabe so breit wie die angegebene
TranspileLayoutoder die gleiche Breite wie die Eingabe, wennlayoutin einer anderen Form angegeben wird.
Rückgabe
Eine neue QubitSparsePauli mit dem angegebenen Layout.
clear
clear()
Löscht alle Elemente aus der Liste, so dass sie wieder der leeren Liste entspricht.
Dies hat keinen Einfluss auf die Kapazität der internen Zuweisungen, sodass bei nachfolgenden Additions- oder Subtraktionsoperationen, die sich aus der Zusammensetzung ergeben, möglicherweise keine Neuzuweisung erforderlich ist.
Beispiele
>>> pauli_list = QubitSparsePauliList.from_list(["IXXXYY", "ZZYZII"])
>>> pauli_list.clear()
>>> assert pauli_list == QubitSparsePauliList.empty(pauli_list.num_qubits)commutes
commutes(other)
Prüfe, ob die Elemente von self` mit einer anderen spärlichen Pauli-Liste eines anderen Qubits kommutieren.
Parameter
other (QubitSparsePauliList) – die spärliche Pauli-Liste der Qubits, anhand derer die Kommutierung überprüft werden soll.
copy
copy()
Besorgen Sie sich eine Kopie dieser spärlichen Pauli-Liste.
Beispiele
>>> qubit_sparse_pauli_list = QubitSparsePauliList.from_list(["IXZXYYZZ", "ZXIXYYZZ"])
>>> assert qubit_sparse_pauli_list == qubit_sparse_pauli_list.copy()
>>> assert qubit_sparse_pauli_list is not qubit_sparse_pauli_list.copy()empty
static empty(num_qubits)
Ermittelt die leere Liste für eine bestimmte Anzahl von Qubits.
Die leere Liste enthält keine Elemente und ist das Identitätselement für die Verbindung zweier QubitSparsePauliList instanzen.
Beispiele
Holen Sie sich die leere Liste auf 100 Qubits:
>>> QubitSparsePauliList.empty(100)
<QubitSparsePauliList with 0 elements on 100 qubits: []>from_label
static from_label(label, /)
Konstruieren Sie eine Liste mit einem Einzelbegriff aus einer dichten Zeichenkette label.
Die Bezeichnung muss eine Folge des Alphabets 'IXYZ' sein. Das Label wird analog zu einem Bitstring interpretiert. Mit anderen Worten: Der Buchstabe ganz rechts ist dem Qubit 0 zugeordnet usw. Dies ist dasselbe wie die Bezeichnungen für Pauli und SparsePauliOp.
Parameter
label (str) – das dichte Etikett.
Beispiele
>>> QubitSparsePauliList.from_label("IIIIXZI")
<QubitSparsePauliList with 1 element on 7 qubits: [X_2 Z_1]>
>>> label = "IYXZI"
>>> pauli = Pauli(label)
>>> assert QubitSparsePauliList.from_label(label) == QubitSparsePauliList.from_pauli(pauli)Eine Verallgemeinerung dieser Methode, die eine Liste aus mehreren Labels konstruiert.
from_list
static from_list(iter, /, *, num_qubits=None)
Konstruieren Sie eine Qubit-sparse Pauli-Liste aus einer Liste von dichten Etiketten.
Dies ist vergleichbar mit SparsePauliOp.from_list(). In dieser dichten Form müssen Sie alle Identitäten explizit in jedem Etikett angeben.
Die Bezeichnung muss eine Folge des Alphabets 'IXYZ' sein. Das Label wird analog zu einem Bitstring interpretiert. Mit anderen Worten: Der Buchstabe ganz rechts ist dem Qubit 0 zugeordnet usw. Dies ist dasselbe wie die Bezeichnungen für Pauli und SparsePauliOp.
Parameter
- iter (list[str]) – Liste der dichten Stringbezeichnungen.
- num_qubits (int | None) – Es ist nicht notwendig, dies anzugeben, wenn Sie sicher sind, dass
iterkeine leere Sequenz ist, da sie aus den Etikettenlängen abgeleitet werden kann. Wenniterleer sein kann, müssen Sie dieses Argument angeben, um zu verdeutlichen, auf wie viele Qubits die Operatoren wirken. Wenn dies angegeben wird unditernicht leer ist, muss der Wert mit den Etikettenlängen übereinstimmen.
Beispiele
Konstruieren Sie eine spärliche Pauli-Liste aus einer Liste von Bezeichnungen:
>>> QubitSparsePauliList.from_list([
... "IIIXX",
... "IIYYI",
... "IXXII",
... "ZZIII",
... ])
<QubitSparsePauliList with 4 elements on 5 qubits:
[X_1 X_0, Y_2 Y_1, X_3 X_2, Z_4 Z_3]>Verwenden Sie num_qubits , um potenziell leere Eingaben zu disambiguieren:
>>> QubitSparsePauliList.from_list([], num_qubits=10)
<QubitSparsePauliList with 0 elements on 10 qubits: []>Diese Methode ist äquivalent zu Aufrufen von from_sparse_list() mit dem expliziten Feld qubit-arguments, das auf abnehmende Ganzzahlen gesetzt ist:
>>> labels = ["XYXZ", "YYZZ", "XYXZ"]
>>> from_list = QubitSparsePauliList.from_list(labels)
>>> from_sparse_list = QubitSparsePauliList.from_sparse_list([
... (label, (3, 2, 1, 0))
... for label in labels
... ])
>>> assert from_list == from_sparse_listKonstruieren Sie die Liste aus Bezeichnungen ohne explizite Identitäten, aber mit den explizit aufgeführten Qubits, auf die sich jeder Ein-Qubit-Operatorbegriff bezieht.
from_pauli
static from_pauli(pauli, /)
Konstruieren Sie eine QubitSparsePauliList aus einer einzelnen Pauli instanz.
Die Ausgabeliste wird einen einzigen Begriff enthalten. Beachten Sie, dass die Phase entfallen ist.
Parameter
pauli (Pauli) – den einzelnen Pauli zu konvertieren.
Beispiele
>>> label = "IYXZI"
>>> pauli = Pauli(label)
>>> QubitSparsePauliList.from_pauli(pauli)
<QubitSparsePauliList with 1 element on 5 qubits: [Y_3 X_2 Z_1]>
>>> assert QubitSparsePauliList.from_label(label) == QubitSparsePauliList.from_pauli(pauli)from_qubit_sparse_paulis
static from_qubit_sparse_paulis(obj, /, num_qubits=None)
Konstruieren Sie eine QubitSparsePauliList aus einzelnen QubitSparsePauli instanzen.
Alle Begriffe müssen die gleiche Anzahl von Qubits haben. Falls angegeben, muss das Argument num_qubits mit den Begriffen übereinstimmen.
Parameter
- obj (Iterable[QubitSparsePauli]) – Iterable der einzelnen Begriffe, aus denen die Liste erstellt werden soll.
- num_qubits (int | None) – Die Anzahl der Qubits, auf die die Elemente der Liste wirken sollen. Dies wird normalerweise aus der Eingabe abgeleitet, kann aber auch explizit angegeben werden, um den Fall einer leeren Iterable zu behandeln.
Rückgabe
Die entsprechende Liste.
from_sparse_list
static from_sparse_list(iter, /, num_qubits)
Konstruieren Sie eine spärliche Pauli-Liste aus einer Liste von Bezeichnungen und den Qubits, auf die jedes Element zutrifft.
Dies ist vergleichbar mit SparsePauliOp.from_sparse_list().
Die Felder "labels" und "indices" der Tupel werden durch Zipping miteinander verbunden. Das bedeutet zum Beispiel, dass ein Aufruf von from_list() in die von dieser Methode verwendete Form umgewandelt werden kann, indem das Feld "indices" jedes Tripels auf (num_qubits-1, ..., 1, 0) gesetzt wird.
Parameter
- iter (list[tuple[str, Sequence[int]]]) – tupel von Bezeichnungen und die Qubits, auf die sich jeder Ein-Qubit-Term bezieht.
- num_qubits (int) – die Anzahl der Qubits, auf die die Operatoren in der Liste wirken.
Beispiele
Erstellen Sie eine einfache Liste:
>>> QubitSparsePauliList.from_sparse_list(
... [("ZX", (1, 4)), ("YY", (0, 3))],
... num_qubits=5,
... )
<QubitSparsePauliList with 2 elements on 5 qubits: [X_4 Z_1, Y_3 Y_0]>Diese Methode kann das Verhalten von from_list()replizieren, wenn das Feld qubit-arguments des Tupels auf abnehmende Ganzzahlen gesetzt wird:
>>> labels = ["XYXZ", "YYZZ", "XYXZ"]
>>> from_list = QubitSparsePauliList.from_list(labels)
>>> from_sparse_list = QubitSparsePauliList.from_sparse_list([
... (label, (3, 2, 1, 0))
... for label in labels
... ])
>>> assert from_list == from_sparse_listDie Umkehrung dieser Methode.
to_dense_array
to_dense_array()
Drücken Sie die Liste in einem dichten Array-Format aus.
Jeder Eintrag ist eine u8, die der Pauli darstellung, wobei die Zeilen bestimmte Paulis und die Spalten bestimmte Qubits indizieren.
Beispiele
>>> paulis = QubitSparsePauliList.from_sparse_list(
... [("ZX", (1, 4)), ("YY", (0, 3)), ("XX", (0, 1))],
... num_qubits=5,
... )
>>> paulis.to_dense_array()to_pauli_list
to_pauli_list()
Rückgabe a PauliList zurück, das dieselbe phasenlose Liste von Paulis darstellt.
to_sparse_list
to_sparse_list()
Ausdrücken der Liste in Form eines spärlichen Listenformats.
Dies kann als Gegenoperation von QubitSparsePauliList.from_sparse_list()gesehen werden, allerdings ist nicht garantiert, dass die Reihenfolge der Terme nach einem Roundtrip zu einer Sparse-Liste und zurück dieselbe ist.
Beispiele
>>> qubit_sparse_list = QubitSparsePauliList.from_list(["IIXIZ", "IIZIX"])
>>> reconstructed = QubitSparsePauliList.from_sparse_list(qubit_sparse_list.to_sparse_list(), qubit_sparse_list.num_qubits)Der Konstruktor, der diese Listen interpretieren kann.