ContextAwareDynamicalDecoupling
class qiskit.transpiler.passes.ContextAwareDynamicalDecoupling(*args, **kwargs)
Basen: TransformationPass
Implementierung einer dynamischen X-Sequenz-Entkopplung unter Berücksichtigung des Gate- und Qubit-Kontextes.
Dieser Durchgang implementiert eine kontextabhängige dynamische Entkopplung (DD) [1], die sicherstellt, dass
- gleichzeitig auftretende DD-Sequenzen auf benachbarten Qubits orthogonal zueinander sind, und
- Die DD-Sequenzen auf den Spektator-Qubits der ECR- und CX-Gatter sind orthogonal zu den Echoimpulsen auf den benachbarten Ziel-/Kontroll-Qubits.
Die zueinander orthogonalen DD-Sequenzen sind derzeit Walsh-Hadamard-Sequenzen, die nur aus X Gattern bestehen. In einigen Fällen kann es daher von Vorteil sein, die PadDynamicalDecoupling mit allgemeineren Sequenzen zu verwenden, wie z. B. XY4.
Dieser Durchgang funktioniert am besten, wenn die Interaktionen zwischen zwei Qubits auf dem Gerät gleich lang dauern, da er es ermöglicht, Verzögerungssequenzen abzugleichen und potenzielle Kontroll- und Zieloperationen auf benachbarten Qubits zu berücksichtigen. Sie ist jedoch auch dann gültig, wenn dies nicht der Fall ist.
Wenn dieser Durchlauf innerhalb eines Durchlaufmanagers ausgeführt wird (wie im folgenden Beispiel), wird er automatisch ausgeführt PadDelay um die Verzögerungen zuzuweisen. Wenn es stattdessen als eigenständiges Programm ausgeführt wird (nicht innerhalb einer PassManager), müssen die Verzögerungen bereits eingefügt sein.
Beispiel:
from qiskit.circuit import QuantumCircuit
from qiskit.circuit.library import QFTGate
from qiskit.transpiler import PassManager
from qiskit.transpiler.passes import ALAPScheduleAnalysis, ContextAwareDynamicalDecoupling
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime.fake_provider import FakeSherbrooke
num_qubits = 10
circuit = QuantumCircuit(num_qubits)
circuit.append(QFTGate(num_qubits), circuit.qubits)
circuit.measure_all()
target = FakeSherbrooke().target
pm = generate_preset_pass_manager(optimization_level=2, target=target)
dd = PassManager([
ALAPScheduleAnalysis(target=target),
ContextAwareDynamicalDecoupling(target=target),
])
transpiled = pm.run(circuit)
with_dd = dd.run(transpiled)
print(with_dd.draw(idle_wires=False))Referenzen
[1] A. Seif et al. (2024). Unterdrückung von korreliertem Rauschen in Quantencomputern durch
Kontextabhängige Kompilierung, arXiv:2403.06852.
Parameter
- ziel - Die
Targetdes Geräts, mit dem der Stromkreis betrieben wird. - min_duration - Minimale Verzögerungsdauer (in
dt) zum Einfügen einer DD-Sequenz. Dies kann nützlich sein, wenn z. B. ein großer Verzögerungsblock durch eine sehr kurze, benachbarte Verzögerung unterbrochen und in kleinere Blöcke aufgeteilt würde. BeiNonewird dieser Wert auf mindestens das Doppelte der Differenz zwischen dem längsten und dem kürzesten CX- oder ECR-Tor festgelegt. - skip_reset_qubits - Überspringt anfängliche Verzögerungen und Verzögerungen nach einem Reset.
- skip_dd_threshold - Überspringt die dynamische Entkopplung auf einem inaktiven Qubit, wenn die Dauer der Entkopplungssequenz diesen Bruchteil des inaktiven Fensters überschreitet. Um beispielsweise eine DD-Sequenz zu überspringen, wenn sie mehr als 95% der Leerlaufzeit in Anspruch nehmen würde, setzen Sie diesen Wert auf 0.95. Ein Wert von 1. bedeutet, dass die DD-Sequenz angewendet wird, wenn sie in das Fenster passt.
- pulse_alignment - Die Hardware-Einschränkungen (in
dt) für die Gatterzeitzuweisung. Falls angegeben, werden die eingefügten Gates nur bei ganzzahligen Vielfachen dieses Wertes ausgeführt. Diese wird in der Regel aufbackend.configuration().timing_constraintsbereitgestellt. WennNone, wird dies aus dertargetextrahiert. - coloring_strategy - Die für
rx.greedy_graph_colorverwendete Färbungsstrategie. Standardmäßig wird eine Sättigungsstrategie verwendet, die für zweiseitige Graphen optimal ist, siehe Abschnitt 1.2.2.8 von [2].
Referenzen
[2] A. Kosowski, und K. Manuszewski, Classical Coloring of Graphs, Graph Colorings,
2-19, 2004. ISBN 0-8218-3458-4.
Attribute
is_analysis_pass
Prüfen Sie, ob der Pass ein Analysepass ist.
Wenn der Pass ein AnalysisPass, ist, bedeutet dies, dass der Pass die DAG analysieren und die Ergebnisse dieser Analyse in den Eigenschaftssatz schreiben kann. Änderungen an der DAG sind bei dieser Art von Pass nicht zulässig.
is_transformation_pass
Prüfen Sie, ob der Pass ein Transformationspass ist.
Wenn es sich bei dem Pass um TransformationPass, handelt, bedeutet dies, dass der Pass die DAG manipulieren kann, aber den Eigenschaftssatz nicht ändern kann (aber er kann gelesen werden).
Methoden
execute
execute(passmanager_ir, state, callback=None)
Ausführen der Optimierungsaufgabe für die Eingabe Qiskit IR.
Parameter
- passmanager_ir (DAGCircuit) – Qiskit IR zur Optimierung.
- state (DAGCircuit) – Zustand, der mit der Ausführung des Workflows durch den Pass-Manager selbst verbunden ist.
- callback (Callable[[Task, DAGCircuit, PropertySet, float, int], None] | None) – Eine Callback-Funktion, die bei jeder Ausführung einer Optimierungsaufgabe aufgerufen wird.
Rückgabe
Optimierte Qiskit IR und Stand des Workflows.
Rückgabetyp
get_orthogonal_sequence
get_orthogonal_sequence(order)
Rückgabe einer DD-Sequenz der gegebenen Ordnung, wobei verschiedene Ordnungen orthogonal sind.
Parameter
order (int)
Rückgabetyp
name
run
run(dag)
Führen Sie einen Durchlauf auf dem DAGCircuit durch. Dies wird durch den Entwickler des Ausweises umgesetzt.
Parameter
dag (DAGCircuit) – der Tag, an dem der Pass ausgeführt wird.
Erhöht
NotImplementedError - wenn dies für einen Durchgang nicht implementiert wird.
Rückgabetyp
update_status
update_status(state, run_state)
Aktualisieren Sie den Workflow-Status.
Parameter
- state (PassManagerState) – Übergeben Sie den Status des Managers zur Aktualisierung.
- run_state (RunState) – Erledigungsstatus der aktuellen Aufgabe.
Rückgabe
Aktualisierter Status des Passmanagers.
Rückgabetyp