Skip to main content
IBM Quantum Platform

QubitSparsePauli

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

GitHub

Basen: object

Ein phasenloser Pauli-Operator, der in einem Qubit-armen Format gespeichert ist.


Darstellung

Ein Pauli-Operator ist ein Tensorprodukt von Ein-Qubit-Pauli-Operatoren der Form P=⨂nAi(n)P = \bigotimes_n A^{(n)}_i, für Ai(n)∈{I,X,Y,Z}A^{(n)}_i \in \{I, X, Y, Z\}. Die interne Darstellung von a QubitSparsePauli speichert nur die nicht-identischen Ein-Qubit-Pauli-Operatoren.

Intern wird jeder Pauli-Operator für ein einzelnes Qubit explizit mit einem numerischen Wert gespeichert:

Bezeichnung (Label)
Bediener
Numerischer Wert
Pauli attribut
"I"II (Identität)Nicht gespeichert.Nicht gespeichert.
"X"XX (Pauli X)0b10 (2)X
"Y"YY (Pauli Y)0b11 (3)Y
"Z"ZZ (Pauli Z)0b01 (1)Z
Attribut
Länge
Beschreibung
paulisssJeder der nicht-identischen Ein-Qubit-Pauli-Operatoren. Diese entsprechen den nicht-identischen Ai(n)A^{(n)}_i in der Liste, wobei die Einträge in der Reihenfolge der aufsteigenden ii zuerst gespeichert werden, und in der Reihenfolge der aufsteigenden nn innerhalb jedes Begriffs.
indicesssDas entsprechende Qubit ( nn ) für jeden der Operatoren in paulis. QubitSparsePauli erfordert, dass diese Liste begrifflich sortiert ist, und Algorithmen können sich darauf verlassen, dass diese Invariante eingehalten wird.

Der Parameter ss ist die Gesamtzahl der nicht-identischen Ein-Qubit-Terme.

Das skalare Element des paulis arrays wird als numerisches Byte gespeichert. Die numerischen Werte beziehen sich auf die symplektische Pauli-Darstellung, die SparsePauliOp verwendet, und sind mit benanntem Zugriff durch eine Aufzählung zugänglich:

Pauli

class Pauli

GitHub

Eine IntEnum das einen benannten Zugriff auf die numerischen Werte bietet, die zur Darstellung der einzelnen Begriffe des Ein-Qubit-Alphabets verwendet werden, die in Alphabet of single-qubit Pauli operators used in QubitSparsePauliList aufgezählt sind.

Diese Klasse ist angehängt an QubitSparsePauli. Zugriff als QubitSparsePauli.Pauli. Wenn Ihnen das zu viel Tipparbeit ist und Sie sich nur mit QubitSparsePauliList objekten zu tun haben und der Pauli name nicht zweideutig ist, können Sie ihn abkürzen als:

>>> ops = QubitSparsePauli.Pauli
>>> assert ops.X is QubitSparsePauli.Pauli.X

Sie können auf alle Werte der Aufzählung entweder mit Attributzugriff oder mit einer wörterbuchähnlichen Indizierung nach Zeichenketten zugreifen:

>>> assert QubitSparsePauli.Pauli.X is QubitSparsePauli.Pauli["X"]

Die Bits, die jedes Pauli-Einqubit repräsentieren, sind die (phasenlose) symplektische Darstellung des Pauli-Operators.

Werte

X

Standardwert: 2

Der Pauli XX Operator. Verwendet die einbuchstabige Bezeichnung "X".

Y

Standardwert: 3

Der Pauli YY Operator. Verwendet die einbuchstabige Bezeichnung "Y".

Z

Standardwert: 1

Der Pauli ZZ Operator. Verwendet die einbuchstabige Bezeichnung "Z".

Jedes der array-ähnlichen Attribute verhält sich wie eine Python Sequenz. Sie können diese indizieren und mit der Standard list-wie Semantik. Das Slicen eines Attributs liefert ein Numpy ndarray zurück, das eine Kopie der relevanten Daten mit der natürlichen dtype des Feldes enthält; so können Sie leicht mathematische Operationen mit den Ergebnissen durchführen, wie etwa bitweise Operationen auf paulis.


Bauwesen

QubitSparsePauli 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()Konvertiert eine dichte Zeichenkette in eine QubitSparsePauli.
from_sparse_label()Erstellen einer QubitSparsePauli aus einem Tupel einer spärlichen Zeichenkettenbezeichnung und den Qubits, auf die sie sich beziehen.
from_pauli()Heben Sie eine einzelne Pauli in eine QubitSparsePauli.
from_raw_parts()Erstellen Sie den Operator aus den Rohdaten-Arrays.

__new__

__new__(data, /, num_qubits=None)

Der Standardkonstruktor von QubitSparsePauli.

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 ein anderes QubitSparsePaulisein, in welchem Fall die Eingabe kopiert wird, oder es kann ein gültiges Format für entweder from_label() oder sein from_sparse_label().
  • num_qubits (int|None) – Optionale Anzahl von Qubits für den Operator. Bei den meisten Dateneingaben kann dies abgeleitet werden und muss nicht angegeben werden. Sie ist nur für das Sparse-Label-Format erforderlich. Wenn sie unnötig angegeben wird, muss sie mit den eingegebenen Daten übereinstimmen.

Attribute

indices

Nur-Lese-Ansicht auf die Indizes jedes nicht-identischen Ein-Qubit-Terms.

Die Indizes werden immer in sortierter Reihenfolge angezeigt.

num_qubits

Die Anzahl der Qubits, für die der Begriff definiert ist.

paulis

Nur-Lese-Ansicht auf die einzelnen Ein-Qubit-Terme.

Die einzigen gültigen Werte im Array sind die mit einem entsprechenden Pauli.


Methoden

commutes

commutes(other)

Prüfe, ob „self`“ mit einem anderen spärlichen Pauli-Qubit kommutiert.

Parameter

other (QubitSparsePauli) – das sparse Pauli Qubit, mit dem die Kommutation zu prüfen ist.

compose

compose(other)

Phasenlose Zusammensetzung mit einem anderen QubitSparsePauli.

Parameter

other (QubitSparsePauli) – das Qubit sparse Pauli, mit dem man komponieren kann.

copy

copy()

Besorgen Sie sich eine Kopie dieses Begriffs.

from_label

static from_label(label, /)

Konstruieren Sie aus einer dichten Zeichenfolge 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

>>> QubitSparsePauli.from_label("IIIIXZI")
<QubitSparsePauli on 7 qubits: X_2 Z_1>
>>> label = "IYXZI"
>>> pauli = Pauli(label)
>>> assert QubitSparsePauli.from_label(label) == QubitSparsePauli.from_pauli(pauli)

from_pauli

static from_pauli(pauli, /)

Konstruieren Sie eine QubitSparsePauli aus einer einzelnen Pauli instanz.

Beachten Sie, dass die Phase des Pauli entfällt.

Parameter

pauli (Pauli) – den einzelnen Pauli zu konvertieren.

Beispiele

>>> label = "IYXZI"
>>> pauli = Pauli(label)
>>> QubitSparsePauli.from_pauli(pauli)
<QubitSparsePauli on 5 qubits: Y_3 X_2 Z_1>
>>> assert QubitSparsePauli.from_label(label) == QubitSparsePauli.from_pauli(pauli)

from_raw_parts

static from_raw_parts(num_qubits, paulis, indices)

Konstruieren Sie eine QubitSparsePauli aus rohen Numpy-Arrays, die der in der Dokumentation auf Klassenebene beschriebenen erforderlichen Datendarstellung entsprechen.

Die Daten aus jedem Array werden in neue, erweiterbare Rust-Space-Zuweisungen kopiert.

Parameter

  • num_qubits - Anzahl der Qubits, auf die der Operator wirkt.
  • paulis - Liste der Ein-Qubit-Terme. Dies sollte ein Numpy-Array mit dtype sein uint8 (der kompatibel ist mit Pauli).
  • indizes - sortierte Liste der Qubits, denen jeder Ein-Qubit-Term entspricht. Dies sollte ein Numpy-Array mit dtype sein uint32.

Beispiele

Konstruieren Sie einen ZZ Operator, der auf Qubit 50 von 100 Qubits wirkt.

>>> num_qubits = 100
>>> terms = np.array([QubitSparsePauli.Pauli.Z], dtype=np.uint8)
>>> indices = np.array([50], dtype=np.uint32)
>>> QubitSparsePauli.from_raw_parts(num_qubits, terms, indices)
<QubitSparsePauli on 100 qubits: Z_50>

from_sparse_label

static from_sparse_label(sparse_label, num_qubits)

Konstruieren Sie ein sparse Pauli-Bit aus einem sparse label, das als Tupel aus einer Kette von Paulis und den Indizes der entsprechenden Qubits gegeben ist.

Dies ist vergleichbar mit SparsePauliOp.from_sparse_list().

Parameter

  • sparse_label (tuple[str, Sequence[int]]) – bezeichnungen und die Qubits, auf die sich jeder Ein-Qubit-Term bezieht.
  • num_qubits (int) – die Anzahl der Qubits, auf die der Operator wirkt.

Beispiele

Konstruieren Sie ein einfaches Pauli:

>>> QubitSparsePauli.from_sparse_label(
...     ("ZX", (1, 4)),
...     num_qubits=5,
... )
<QubitSparsePauli on 5 qubits: X_4 Z_1>

Diese Methode kann das Verhalten von from_label()replizieren, wenn das Feld qubit-arguments des Tupels auf abnehmende Ganzzahlen gesetzt wird:

>>> label = "XYXZ"
>>> from_label = QubitSparsePauli.from_label(label)
>>> from_sparse_label = QubitSparsePauli.from_sparse_label(
...     (label, (3, 2, 1, 0)),
...     num_qubits=4
... )
>>> assert from_label == from_sparse_label

identity

static identity(num_qubits)

Ermittelt den Identitätsoperator für eine bestimmte Anzahl von Qubits.

Beispiele

Ermitteln Sie die Identität von 100 Qubits:

>>> QubitSparsePauli.identity(100)
<QubitSparsePauli on 100 qubits: >

to_pauli

to_pauli()

Rückgabe a Pauli zurück, das denselben phasenlosen Pauli darstellt.

to_qubit_sparse_pauli_list

to_qubit_sparse_pauli_list()

Dieses Pauli in ein einzelnes Element umwandeln QubitSparsePauliList.

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