Skip to main content
IBM Quantum Platform

ContextAwareDynamicalDecoupling

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

GitHub

Basi: TransformationPass

Implementare un disaccoppiamento dinamico della sequenza X considerando il contesto del gate e del qubit.

Questo passaggio implementa un disaccoppiamento dinamico (DD) [1] consapevole del contesto, che garantisce che

  1. le sequenze DD che si verificano simultaneamente su qubit adiacenti al dispositivo sono reciprocamente ortogonali e
  2. Le sequenze DD sui qubit spettatore delle porte ECR e CX sono ortogonali agli impulsi eco sui qubit target/di controllo vicini.

Le sequenze DD mutuamente ortogonali sono attualmente sequenze di Walsh-Hadamard, costituite da soli X gate. In alcuni casi, quindi, potrebbe essere utile usare PadDynamicalDecoupling con sequenze più generiche, come XY4.

Questo passaggio funziona meglio se le interazioni tra due qubit hanno la stessa durata sul dispositivo, in quanto consente di allineare le sequenze di ritardo e di tenere conto delle potenziali operazioni di controllo e di destinazione sui qubit vicini. Tuttavia, è ancora valido se questo non è il caso.

Nota

Se questo passaggio è eseguito all'interno di un gestore di passaggi (come nell'esempio seguente), verrà eseguito automaticamente PadDelay per allocare i ritardi. Se invece viene eseguito come standalone (non all'interno di un file PassManager), i ritardi devono essere già inseriti.

Esempio:

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))

Riferimenti

[1] A. Seif et al. (2024). Soppressione del rumore correlato nei computer quantistici mediante

Compilazione consapevole del contesto, arXiv:2403.06852.

Parametri

  • target - Il Target del dispositivo per l'esecuzione del circuito.
  • min_duration - Durata minima del ritardo (in dt) per inserire una sequenza DD. Questo può essere utile, ad esempio se un grande blocco di ritardo viene interrotto e suddiviso in blocchi più piccoli a causa di un ritardo adiacente molto breve. Se None, questo valore è impostato per essere almeno il doppio della differenza tra il gate CX o ECR più lungo e quello più corto.
  • skip_reset_qubits - Salta i ritardi iniziali e i ritardi dopo un reset.
  • skip_dd_threshold - Salta il disaccoppiamento dinamico su un qubit inattivo, se la durata della sequenza di disaccoppiamento supera questa frazione della finestra di inattività. Ad esempio, per saltare una sequenza DD se occupa più del 95% del tempo di inattività, impostare questo valore su 0.95. Un valore di 1. significa che la sequenza DD viene applicata se rientra nella finestra.
  • pulse_alignment - I vincoli hardware (in dt) per l'allocazione dei tempi dei gate. Se fornito, le porte inserite verranno eseguite solo su multipli interi di questo valore. Di solito viene fornito su backend.configuration().timing_constraints. Se None, questo viene estratto da target.
  • coloring\strategy - La strategia di colorazione utilizzata per rx.greedy_graph_color. La strategia predefinita è quella della saturazione, che è ottimale su grafi bipartiti, si veda la sezione 1.2.2.8 di [2].

Riferimenti

[2] A. Kosowski, e K. Manuszewski, Classical Coloring of Graphs, Graph Colorings,

2-19, 2004. ISBN 0-8218-3458-4.


Attributi

is_analysis_pass

Controlla se il passaggio è un passaggio di analisi.

Se il passo è un AnalysisPass,, significa che il passo può analizzare il DAG e scrivere i risultati di tale analisi nel set di proprietà. Questo tipo di passaggio non consente di modificare il DAG.

is_transformation_pass

Controlla se il passaggio è un passaggio di trasformazione.

Se il passaggio è un TransformationPass,, significa che il passaggio può manipolare il DAG, ma non può modificare il set di proprietà (ma può essere letto).


Metodi

execute

execute(passmanager_ir, state, callback=None)

GitHub

Eseguire l'attività di ottimizzazione per l'IR Qiskit in ingresso.

Parametri

  • passmanager_ir (DAGCircuit) – Qiskit IR da ottimizzare.
  • state (DAGCircuit) – Stato associato all'esecuzione del flusso di lavoro da parte dello stesso gestore dei passaggi.
  • callback (Callable[[Task, DAGCircuit, PropertySet, float, int], None] | None) – Una funzione di callback che viene chiamata ad ogni esecuzione di un'attività di ottimizzazione.

Risultati

Qiskit IR ottimizzato e stato del flusso di lavoro.

Tipo di restituzione

tuple [ DAGCircuit, PassManagerState ]

get_orthogonal_sequence

get_orthogonal_sequence(order)

GitHub

Restituisce una sequenza DD di ordine dato, dove ordini diversi sono ortogonali.

Parametri

order (int)

Tipo di restituzione

tupla [ lista [ numero reale ], lista [ Gate ]]

name

name()

GitHub

Nome del passo.

Tipo di restituzione

STR

run

run(dag)

GitHub

Eseguire un passaggio sul circuito DAG. Questo viene implementato dallo sviluppatore del passaggio.

Parametri

dag (DAGCircuit) – il dag su cui viene eseguito il passaggio.

Aumenti

NotImplementedError - quando questo viene lasciato non implementato per un passaggio.

Tipo di restituzione

DAGCircuito

update_status

update_status(state, run_state)

GitHub

Aggiornare lo stato del flusso di lavoro.

Parametri

  • state (PassManagerState) – Passare lo stato del gestore da aggiornare.
  • run_state (RunState) – Stato di completamento dell'attività corrente.

Risultati

Stato aggiornato del gestore dei passaggi.

Tipo di restituzione

PassManagerState

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.