Skip to main content
IBM Quantum Platform

PhasedQubitSparsePauliList

class qiskit.quantum_info.PhasedQubitSparsePauliList(data, /, num_qubits=None)

GitHub

Basen: object

Eine Liste von Pauli-Operatoren mit Phasen, die in einem Qubit-armen Format gespeichert sind.


Darstellung

Jeder einzelne Pauli-Operator in der Liste ist ein Tensorprodukt aus Ein-Qubit-Pauli-Operatoren der Form P=(−i)n⨂nAi(n)P = (-i)^n\bigotimes_n A^{(n)}_i, für Ai(n)∈{I,X,Y,Z}A^{(n)}_i \in \{I, X, Y, Z\}, und einer ganzen Zahl nn, dem sogenannten Phasenexponenten. Die interne Darstellung von a PhasedQubitSparsePauliList speichert nur die nicht-identischen Ein-Qubit-Pauli-Operatoren.

Indexierung

PhasedQubitSparsePauliList 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 PhasedQubitSparsePauli instanzen.


Bauwesen

PhasedQubitSparsePauliList 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 PhasedQubitSparsePauliList.
from_list()Konstruieren Sie aus einer Liste von dichten String-Labels.
from_sparse_list()Elemente, die als Liste von Tupeln des Phasenexponenten, sparse string labels und der Qubits, auf die sie sich beziehen, angegeben sind.
from_pauli()Erhöhen Sie ein einzelnes Pauli in ein Einzelelement PhasedQubitSparsePauliList.
from_phased_qubit_sparse_paulis()Konstruieren Sie aus einer Liste von PhasedQubitSparsePaulis.

__new__

__new__(data, /, num_qubits=None)

Der Standardkonstruktor von PhasedQubitSparsePauliList.

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 PhasedQubitSparsePauliListsein, in diesem Fall wird die Eingabe kopiert, oder es kann eine Liste in einem gültigen Format für entweder from_list() oder sein from_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() kann verwendet werden, um eine leere Liste von phasengesteuerten Qubit-sparse Paulis zu konstruieren, die auf eine bestimmte Anzahl von Qubits wirken.


Konvertierungen

Ein bestehendes PhasedQubitSparsePauliList 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 (phase, 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)

Wenden Sie ein Transpiler-Layout auf diese phasenweise spärliche Pauli-Liste mit Bits an.

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.layout Feld 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 verwenden num_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, wenn layout in 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 = PhasedQubitSparsePauliList.from_list(["IXXXYY", "ZZYZII"])
>>> pauli_list.clear()
>>> assert pauli_list == PhasedQubitSparsePauliList.empty(pauli_list.num_qubits)

copy

copy()

Besorgen Sie sich eine Kopie dieser spärlichen Pauli-Liste.

Beispiele

>>> 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)

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 PhasedQubitSparsePauliList instanzen.

Beispiele

Holen Sie sich die leere Liste auf 100 Qubits:

>>> PhasedQubitSparsePauliList.empty(100)
<PhasedQubitSparsePauliList 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

>>> 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)
Siehe auch

from_list()

Eine Verallgemeinerung dieser Methode, die eine Liste aus mehreren Labels konstruiert.

from_list

static from_list(iter, /, *, num_qubits=None)

Konstruieren Sie eine phasenweise 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 iter keine leere Sequenz ist, da sie aus den Etikettenlängen abgeleitet werden kann. Wenn iter leer sein kann, müssen Sie dieses Argument angeben, um zu verdeutlichen, auf wie viele Qubits die Operatoren wirken. Wenn dies angegeben wird und iter nicht leer ist, muss der Wert mit den Etikettenlängen übereinstimmen.

Beispiele

Konstruieren Sie eine spärliche Pauli-Liste aus einer Liste von Bezeichnungen:

>>> 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]>

Verwenden Sie num_qubits , um potenziell leere Eingaben zu disambiguieren:

>>> PhasedQubitSparsePauliList.from_list([], num_qubits=10)
<PhasedQubitSparsePauliList 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 = 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_list
Siehe auch

from_sparse_list()

Konstruieren 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 PhasedQubitSparsePauliList 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)
>>> 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)

Konstruieren Sie eine PhasedQubitSparsePauliList aus einzelnen PhasedQubitSparsePauli 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[PhasedQubitSparsePauli]) – 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 phasenweise 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[int, str, Sequence[int]]]) – tupel von Phasenexponenten, Bezeichnungen und den Qubits, für die jeder Ein-Qubit-Term gilt.
  • num_qubits (int) – die Anzahl der Qubits, auf die die Operatoren in der Liste wirken.

Beispiele

Erstellen Sie eine einfache Liste:

>>> 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]>

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 = 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_list
Siehe auch

to_sparse_list()

Die Umkehrung dieser Methode.

to_pauli_list

to_pauli_list()

Rückgabe einer PauliList zurück, das dieselbe Liste von Paulis darstellt.

to_sparse_list

to_sparse_list()

Drücken Sie die Liste im Format einer dünn besetzten Liste aus.

Dies kann als Gegenoperation von PhasedQubitSparsePauliList.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

>>> 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)
Siehe auch

from_sparse_list()

Der Konstruktor, der diese Listen interpretieren kann.

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.