ContextAwareDynamicalDecoupling
class qiskit.transpiler.passes.ContextAwareDynamicalDecoupling(*args, **kwargs)
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
- le sequenze DD che si verificano simultaneamente su qubit adiacenti al dispositivo sono reciprocamente ortogonali e
- 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.
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
Targetdel 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. SeNone, 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 subackend.configuration().timing_constraints. SeNone, questo viene estratto datarget. - 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)
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
get_orthogonal_sequence
get_orthogonal_sequence(order)
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
run
run(dag)
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
update_status
update_status(state, run_state)
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