Quasi-Wahrscheinlichkeitszerlegung (QPD)
qiskit_addon_cutting.qpd
Wichtigste Funktionalität der Quasiprobabilitätszerlegung.
Kolumne „ 1 “ | Kolumne „ 2 “ |
|---|---|
QPDBasis | Basis, in die ein Vorgang zerlegt werden kann. |
BaseQPDGate | Basisklasse für ein Gatter, das mittels Quasi-Wahrscheinlichkeitszerlegung zerlegt werden soll. |
SingleQubitQPDGate | Ein-Qubit-Gatter, das mit Hilfe der Quasiprobabilitätszerlegung zerlegt werden soll. |
TwoQubitQPDGate | Zwei-Qubit-Gatter, das mit Hilfe der Quasi-Wahrscheinlichkeitszerlegung zerlegt wird. |
WeightType
class WeightType(value)
Basen: Enum
Art des Gewichts, das mit einer QPD-Probe verbunden ist.
EXAKT
Standardwert: 1
Ein Gewicht, das im Verhältnis zu seinem genauen Gewicht angegeben wird
SAMPLED
Standardwert: 2
Ein Gewicht, das durch ein Stichprobenverfahren ermittelt wurde
generate_qpd_weights
generate_qpd_weights(qpd_bases, num_samples=1000)
Erzeugen Sie Gewichte aus der gemeinsamen Quasi-Wahrscheinlichkeitsverteilung.
Jedes Gewicht, dessen absoluter Wert über einem Schwellenwert von 1 / num_samples liegt, wird genau bewertet. Aus den verbleibenden Gewichten - denjenigen am Ende der Verteilung - wird dann eine Stichprobe gezogen, was zu höchstens num_samples eindeutigen Gewichten führt.
Parameter
- qpd_bases (
Sequence[QPDBasis]) – DieQPDBasisobjekte, aus denen Gewichte erzeugt werden sollen - num_samples (
float) – Steuert die Anzahl der zu erzeugenden Gewichte
Rückgabetyp
dict[tuple[int, ...], tuple[float, WeightType]]
Rückgabe
Eine Abbildung von einer gegebenen Zerlegung auf ihr Gewicht. Schlüssel sind Tupel von Indizes - ein Index pro Eingabe QPDBasis. Die Indizes entsprechen einer bestimmten Zersetzungsabbildung in der Basis.
Werte sind Tupel. Das erste Element ist eine Zahl, die dem Gewicht des Beitrags entspricht. Das zweite Element ist die WeightType, entweder EXACT oder SAMPLED.
decompose_qpd_instructions
decompose_qpd_instructions(circuit, instruction_ids, map_ids=None, *, inplace=False)
Ersetzen Sie alle QPD-Anweisungen in der Schaltung durch lokale Qiskit-Operationen und -Messungen.
Parameter
- circuit (QuantumCircuit) – Die Schaltung mit QPD-Befehlen
- instruction_ids (Sequence[Sequence[int]]) – Eine 2D Sequenz, so dass jede innere Sequenz den Indizes der Befehle entspricht, die eine Zerlegung in der Schaltung umfassen. Die Elemente innerhalb einer gemeinsamen Sequenz gehören zu einer gemeinsamen Zerlegung und sollten zusammen abgetastet werden.
- map_ids (Sequence[int] | None) – Indizes für eine bestimmte lineare Abbildung, die auf die Zerlegungen im Schaltkreis anzuwenden ist. Wenn keine Map-IDs angegeben werden, wird der Schaltkreis nach dem Zufallsprinzip gemäß der gemeinsamen Wahrscheinlichkeitsverteilung der Zerlegungen zerlegt.
- inplace (bool) – Unter
Truewird diecircuitan Ort und Stelle geändert.
Rückgabetyp
QuantumCircuit
Rückgabe
Kreislauf, bei dem alle seine BaseQPDGate instanzen in lokale Operationen zerlegt wurden.
Die Schaltung enthält ein neues, endgültiges klassisches Register, das die Ergebnisse der QPD-Messung enthält (zugänglich unter retval.cregs[-1]).
Erhöht
- ValueError - Ein Index in
instruction_idsentspricht einem Gatter, das keineBaseQPDGateinstanz ist. - ValueError - Eine Liste in instruction_ids hat nicht die Länge 1 oder 2.
- ValueError - Die Gesamtzahl der Indizes in
instruction_idsist nicht gleich der Anzahl derBaseQPDGateinstanzen in der Schaltung. - ValueError - Gatter innerhalb ein und derselben Zerlegung enthalten unterschiedliche QPD-Basen.
- ValueError - Die Länge von
map_idsist nicht gleich der Anzahl der Zerlegungen in der Schaltung.
qpdbasis_from_instruction
qpdbasis_from_instruction(gate, /)
Erzeugen Sie ein QPDBasis objekt, das eine unterstützte Operation enthält.
Alle Zwei-Qubit-Gatter, die die Methode to_matrix() methode implementieren, werden unterstützt. Dies sollte die große Mehrheit der Gates ohne ungebundene Parameter einschließen, aber es gibt einige Sonderfälle (siehe z.B. qiskit issue #10396 ).
Die Move wird ebenfalls unterstützt und kann zur Angabe eines Drahtschnitts verwendet werden.
Rückgabetyp
Rückgabe
Das neu instanziierte QPDBasis objekt
Erhöht
- ValueError - Anweisung wird nicht unterstützt.
- ValueError - Befehl mit ungebundenen Parametern kann nicht zerlegt werden.
- ValueError -
to_matrixUmwandlung eines Zwei-Qubit-Gatters fehlgeschlagen.
Parameter
gate (Instruction)