ContextAwareDynamicalDecoupling
class qiskit.transpiler.passes.ContextAwareDynamicalDecoupling(*args, **kwargs)
Bases : TransformationPass
Mettre en œuvre un découplage dynamique de la séquence X en tenant compte du contexte de la grille et du qubit.
Cette passe met en œuvre un découplage dynamique (DD) [1] tenant compte du contexte, qui garantit que
- les séquences DD apparaissant simultanément sur des qubits adjacents au dispositif sont mutuellement orthogonales, et
- Les séquences DD sur les qubits spectateurs des portes ECR et CX sont orthogonales aux impulsions d'écho sur les qubits cibles/contrôles voisins.
Les séquences DD mutuellement orthogonales sont actuellement des séquences de Walsh-Hadamard, composées de seulement X portes. Dans certains cas, il peut donc être utile d'utiliser PadDynamicalDecoupling avec des séquences plus génériques, telles que XY4.
Cette passe donne de meilleurs résultats si les interactions entre deux qubits ont les mêmes durées sur le dispositif, car elle permet d'aligner les séquences de retard et de prendre en compte les opérations de contrôle et de ciblage potentielles sur les qubits voisins. Toutefois, elle reste valable si ce n'est pas le cas.
Si cette passe est exécutée dans un gestionnaire de passe (comme dans l'exemple ci-dessous), elle exécutera automatiquement PadDelay pour allouer les délais. Si, au contraire, il est exécuté de manière autonome (pas à l'intérieur d'un fichier PassManager), les délais doivent déjà être insérés.
Exemple :
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))Références
[1] A. Seif et al. (2024). Suppression des bruits corrélés dans les ordinateurs quantiques par l'intermédiaire d'un système d'information sur l'environnement
Compilation tenant compte du contexte, arXiv:2403.06852.
Paramètres
- cible - La
Targetde l'appareil pour faire fonctionner le circuit. - min_duration - Durée minimale du délai (en
dt) pour l'insertion d'une séquence DD. Cela peut être utile, par exemple, si un bloc de retard important est interrompu et divisé en blocs plus petits en raison d'un retard adjacent très court. SiNone, cette valeur est fixée à au moins deux fois la différence entre la porte CX ou ECR la plus longue et la plus courte. - skip_reset_qubits - Sauter les délais initiaux et les délais après une réinitialisation.
- skip_dd_threshold - Sauter le découplage dynamique sur un qubit inactif, si la durée de la séquence de découplage dépasse cette fraction de la fenêtre d'inactivité. Par exemple, pour sauter une séquence DD si elle occupe plus de 95 % du temps d'inactivité, réglez cette valeur sur 0.95. Une valeur de 1 signifie que la séquence DD est appliquée si elle entre dans la fenêtre.
- pulse_alignment - Contraintes matérielles (en
dt) pour l'attribution de la synchronisation des portes. Si elle est fournie, les portes insérées ne seront exécutées que pour les multiples entiers de cette valeur. Ces informations sont généralement fournies sur le sitebackend.configuration().timing_constraints. S'il s'agit deNone, il est extrait du sitetarget. - coloring_strategy - La stratégie de coloration utilisée pour
rx.greedy_graph_color. La stratégie par défaut est la stratégie de saturation, qui est optimale sur les graphes bipartis, voir la section 1.2.2.8 de [2.]
Références
[2] A. Kosowski, et K. Manuszewski, Classical Coloring of Graphs, Graph Colorings,
2-19, 2004. ISBN 0-8218-3458-4.
Attributs
is_analysis_pass
Vérifier si la passe est une passe d'analyse.
Si le passe est un AnalysisPass,, cela signifie qu'il peut analyser le DAG et écrire les résultats de cette analyse dans l'ensemble de propriétés. Les modifications sur le DAG ne sont pas autorisées par ce type de passe.
is_transformation_pass
Vérifier si le laissez-passer est un laissez-passer de transformation.
Si la passe est une TransformationPass,, cela signifie qu'elle peut manipuler le DAG, mais qu'elle ne peut pas modifier l'ensemble des propriétés (mais qu'elle peut les lire).
Méthodes
execute
execute(passmanager_ir, state, callback=None)
Exécuter la tâche d'optimisation pour l'entrée Qiskit IR.
Paramètres
- passmanager_ir (DAGCircuit) – IR Qiskit à optimiser.
- state (DAGCircuit) – État lié à l'exécution du flux de travail par le gestionnaire de passes lui-même.
- callback (Callable[[Task, DAGCircuit, PropertySet, float, int], None] | None) – Une fonction de rappel qui est appelée à chaque exécution d'une tâche d'optimisation.
Retours
Qiskit IR optimisé et état du flux de travail.
Type de retour
get_orthogonal_sequence
get_orthogonal_sequence(order)
Renvoie une séquence DD d'un ordre donné, les différents ordres étant orthogonaux.
Paramètres
order (int)
Type de retour
name
run
run(dag)
Effectuer une passe sur le circuit DAG. C'est le développeur du laissez-passer qui s'en charge.
Paramètres
dag (DAGCircuit) – le dag sur lequel la passe est exécutée.
Augmentations
NotImplementedError - lorsqu'il n'est pas mis en œuvre pour un passage.
Type de retour
update_status
update_status(state, run_state)
Mettre à jour le statut du flux de travail.
Paramètres
- state (PassManagerState) – Transmettre l'état du gestionnaire à mettre à jour.
- run_state (RunState) – Statut d'achèvement de la tâche en cours.
Retours
Mise à jour de l'état du gestionnaire de passe.
Type de retour