QubitSparsePauli
class qiskit.quantum_info.QubitSparsePauli(data, /, num_qubits=None)
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 , für . 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" | (Identität) | Nicht gespeichert. | Nicht gespeichert. |
"X" | (Pauli X) | 0b10 (2) | X |
"Y" | (Pauli Y) | 0b11 (3) | Y |
"Z" | (Pauli Z) | 0b01 (1) | Z |
Attribut | Länge | Beschreibung |
|---|---|---|
paulis | Jeder der nicht-identischen Ein-Qubit-Pauli-Operatoren. Diese entsprechen den nicht-identischen in der Liste, wobei die Einträge in der Reihenfolge der aufsteigenden zuerst gespeichert werden, und in der Reihenfolge der aufsteigenden innerhalb jedes Begriffs. | |
indices | Das entsprechende Qubit ( ) 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 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
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.XSie 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 Operator. Verwendet die einbuchstabige Bezeichnung "X".
Y
Standardwert: 3
Der Pauli Operator. Verwendet die einbuchstabige Bezeichnung "Y".
Z
Standardwert: 1
Der Pauli 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 entwederfrom_label()oder seinfrom_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 mitPauli). - indizes - sortierte Liste der Qubits, denen jeder Ein-Qubit-Term entspricht. Dies sollte ein Numpy-Array mit dtype sein
uint32.
Beispiele
Konstruieren Sie einen 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_labelidentity
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.