Skip to main content
IBM Quantum Platform

ContextAwareDynamicalDecoupling

class qiskit.transpiler.passes.ContextAwareDynamicalDecoupling(*args, **kwargs)

GitHub

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

  1. gleichzeitig auftretende DD-Sequenzen auf benachbarten Qubits orthogonal zueinander sind, und
  2. 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.

Anmerkung

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 Target des 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. Bei None wird 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 auf backend.configuration().timing_constraints bereitgestellt. Wenn None, wird dies aus der target extrahiert.
  • coloring_strategy - Die für rx.greedy_graph_color verwendete 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)

GitHub

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

Tupel [ DAGCircuit, PassManagerState ]

get_orthogonal_sequence

get_orthogonal_sequence(order)

GitHub

Rückgabe einer DD-Sequenz der gegebenen Ordnung, wobei verschiedene Ordnungen orthogonal sind.

Parameter

order (int)

Rückgabetyp

Tupel [ Liste [ Float ], Liste [ Gate ]]

name

name()

GitHub

Name des Passes.

Rückgabetyp

str

run

run(dag)

GitHub

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

DAGCircuit

update_status

update_status(state, run_state)

GitHub

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

PassManagerState

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