ContextAwareDynamicalDecoupling
class qiskit.transpiler.passes.ContextAwareDynamicalDecoupling(*args, **kwargs)
Bases: TransformationPass
Implementar un desacoplamiento dinámico de la secuencia X teniendo en cuenta el contexto de la puerta y del qubit.
Este paso implementa un desacoplamiento dinámico (DD) [1] sensible al contexto, que garantiza que
- las secuencias DD que se producen simultáneamente en qubits adyacentes al dispositivo son mutuamente ortogonales, y
- Las secuencias DD en los qubits espectadores de las puertas ECR y CX son ortogonales a los pulsos de eco en los qubits objetivo/control vecinos.
Las secuencias DD mutuamente ortogonales son actualmente secuencias Walsh-Hadamard, que constan sólo de X puertas. Por lo tanto, en algunos casos puede resultar beneficioso utilizar PadDynamicalDecoupling con secuencias más genéricas, como XY4.
Este paso funciona mejor si las interacciones de los dos qubits tienen la misma duración en el dispositivo, ya que permite alinear las secuencias de retardo y tener en cuenta las posibles operaciones de control y de destino en los qubits vecinos. Sin embargo, sigue siendo válida si no es el caso.
Si este pase se ejecuta dentro de un gestor de pases (como en el ejemplo siguiente), se ejecutará automáticamente PadDelay para asignar los retrasos. Si en cambio se ejecuta como independiente (no dentro de un PassManager), los retardos ya deben estar insertados.
Ejemplo:
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))Referencias
[1] A. Seif et al. (2024). Supresión del ruido correlacionado en los ordenadores cuánticos mediante
Compilación contextual, arXiv:2403.06852.
Parámetros
- objetivo - El
Targetdel dispositivo para ejecutar el circuito. - min_duration - Duración mínima del retardo (en
dt) para insertar una secuencia DD. Esto puede ser útil, por ejemplo, si un gran bloque de retardo se interrumpiera y dividiera en bloques más pequeños debido a un retardo adyacente muy corto. SiNone, se establece para que sea al menos el doble de la diferencia de la puerta CX o ECR más larga/más corta. - skip_reset_qubits - Omite los retardos iniciales y los retardos tras un reinicio.
- skip\dd_threshold - Omite el desacoplamiento dinámico en un qubit inactivo, si la duración de la secuencia de desacoplamiento supera esta fracción de la ventana inactiva. Por ejemplo, para omitir una secuencia DD si ocupara más del 95% del tiempo de inactividad, establezca este valor en 0.95. Un valor de 1. significa que la secuencia DD se aplica si cabe en la ventana.
- pulse_alignment - Las restricciones de hardware (en
dt) para la asignación de temporización de puertas. Si se proporciona, las puertas insertadas sólo se ejecutarán en múltiplos enteros de este valor. Suele facilitarse enbackend.configuration().timing_constraints. SiNone, se extrae detarget. - coloring_strategy - La estrategia de coloreado utilizada para
rx.greedy_graph_color. Por defecto se utiliza una estrategia de saturación, que es óptima en grafos bipartitos, véase la sección 1.2.2.8 de [2].
Referencias
[2] A. Kosowski, y K. Manuszewski, Classical Coloring of Graphs, Graph Colorings,
2-19, 2004. ISBN 0-8218-3458-4.
Atributos
is_analysis_pass
Comprueba si el pase es un pase de análisis.
Si el pase es un AnalysisPass, significa que el pase puede analizar el DAG y escribir los resultados de ese análisis en el conjunto de propiedades. Este tipo de paso no permite realizar modificaciones en el DAG.
is_transformation_pass
Comprueba si el pase es un pase de transformación.
Si el pase es un TransformationPass, significa que el pase puede manipular el DAG, pero no puede modificar el conjunto de propiedades (pero se puede leer).
Métodos
execute
execute(passmanager_ir, state, callback=None)
Ejecutar la tarea de optimización para la entrada Qiskit IR.
Parámetros
- passmanager_ir (Any) – Qiskit IR para optimizar.
- state (PassManagerState) – Estado asociado a la ejecución del flujo de trabajo por el propio gestor de pases.
- callback (Callable | None) – Una función de devolución de llamada que se invoca cada vez que se ejecuta una tarea de optimización.
Devuelve
Qiskit IR optimizado y estado del flujo de trabajo.
Tipo de retorno
tupla [ Any, PassManagerState ]
get_orthogonal_sequence
get_orthogonal_sequence(order)
Devuelve una secuencia DD de orden dado, donde diferentes órdenes son ortogonales.
Parámetros
order (int)
Tipo de retorno
tupla [ lista [ número real ], lista [ puerta ]]
name
run
run(dag)
Ejecutar un pase en el DAGCircuit. Esto lo implementa el desarrollador del pase.
Parámetros
dag (DAGCircuit) – el dag en el que se ejecuta el pase.
Eleva
NotImplementedError - cuando esto se deja sin implementar para un pase.
Tipo de retorno
update_status
update_status(state, run_state)
Actualizar el estado del flujo de trabajo.
Parámetros
- state (PassManagerState) – Pasar estado de gestor a actualizar.
- run_state (RunState) – Estado de finalización de la tarea actual.
Devuelve
Estado del gestor de pases actualizado.
Tipo de retorno