Skip to main content
IBM Quantum Platform

ContextAwareDynamicalDecoupling

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

GitHub

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

  1. las secuencias DD que se producen simultáneamente en qubits adyacentes al dispositivo son mutuamente ortogonales, y
  2. 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.

Nota

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 Target del 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. Si None, 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 en backend.configuration().timing_constraints. Si None, se extrae de target.
  • 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)

GitHub

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)

GitHub

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

name()

GitHub

Nombre del pase.

Tipo de retorno

str

run

run(dag)

GitHub

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

Circuito DAG

update_status

update_status(state, run_state)

GitHub

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

PassManagerState

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.