Skip to main content
IBM Quantum Platform

ContextAwareDynamicalDecoupling

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

GitHub

Bases: TransformationPass

Implemente um desacoplamento dinâmico da sequência X considerando o contexto de porta e qubit.

Essa passagem implementa um desacoplamento dinâmico (DD) com reconhecimento de contexto [1], que garante que

  1. as sequências DD que ocorrem simultaneamente em qubits adjacentes ao dispositivo são mutuamente ortogonais, e
  2. As sequências DD nos qubits espectadores das portas ECR e CX são ortogonais aos pulsos de eco nos qubits vizinhos de alvo/controle.

As sequências DD mutuamente ortogonais são atualmente sequências Walsh-Hadamard, que consistem em apenas X portas. Portanto, em alguns casos, pode ser vantajoso usar PadDynamicalDecoupling com sequências mais genéricas, como XY4.

Essa passagem terá melhor desempenho se as interações de dois qubits tiverem as mesmas durações no dispositivo, pois permite alinhar as sequências de atraso e levar em conta o controle potencial e as operações de destino nos qubits vizinhos. No entanto, ela ainda é válida se esse não for o caso.

Nota

Se essa passagem for executada em um gerenciador de passagens (como no exemplo abaixo), ela será executada automaticamente PadDelay para alocar os atrasos. Se, em vez disso, ele for executado como autônomo (não dentro de um PassManager), os atrasos já deverão estar inseridos.

Exemplo:

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

Referências

[1] A. Seif et al. (2024). Supressão de ruído correlacionado em computadores quânticos por meio de

Compilação com reconhecimento de contexto, arXiv:2403.06852.

Parâmetros

  • alvo - O Target do dispositivo para executar o circuito.
  • min_duration - Duração mínima do atraso (em dt) para inserir uma sequência DD. Isso pode ser útil, por exemplo, se um grande bloco de atraso for interrompido e dividido em blocos menores devido a um atraso adjacente muito curto. Se None, isso é definido para ser pelo menos duas vezes a diferença da porta CX ou ECR mais longa/mais curta.
  • skip_reset_qubits - Ignora atrasos iniciais e atrasos após uma reinicialização.
  • skip_dd_threshold - Ignora a dissociação dinâmica em um qubit ocioso, se a duração da sequência de dissociação exceder essa fração da janela de ociosidade. Por exemplo, para ignorar uma sequência DD se ela ocupar mais de 95% do tempo ocioso, defina esse valor como 0.95. Um valor de 1 significa que a sequência DD será aplicada se couber na janela.
  • pulse_alignment - As restrições de hardware (em dt) para alocação de tempo de porta. Se fornecido, as portas inseridas só serão executadas em múltiplos inteiros desse valor. Isso geralmente é fornecido em backend.configuration().timing_constraints. Se for None, isso será extraído do site target.
  • coloring_strategy - A estratégia de coloração usada para rx.greedy_graph_color. O padrão é uma estratégia de saturação, que é ótima em gráficos bipartidos, consulte a Seção 1.2.2.8 de [2].

Referências

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

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


Atributos

is_analysis_pass

Verificar se o passe é um passe de análise.

Se a passagem for um AnalysisPass,, isso significa que a passagem pode analisar o DAG e escrever os resultados dessa análise no conjunto de propriedades. As modificações no DAG não são permitidas por esse tipo de passe.

is_transformation_pass

Verifique se o passe é um passe de transformação.

Se a passagem for um TransformationPass,, isso significa que a passagem pode manipular o DAG, mas não pode modificar o conjunto de propriedades (mas pode ser lido).


Métodos

execute

execute(passmanager_ir, state, callback=None)

GitHub

Executar a tarefa de otimização para a entrada Qiskit IR.

Parâmetros

  • passmanager_ir (Any) – Qiskit IR para otimizar.
  • state (PassManagerState) – Estado associado à execução do fluxo de trabalho pelo próprio gerenciador de passes.
  • callback (Callable | None) – Uma função de retorno de chamada que é chamada a cada execução da tarefa de otimização.

Retorna

Qiskit IR otimizado e estado do fluxo de trabalho.

Tipo de retorno

tupla [ Any, PassManagerState ]

get_orthogonal_sequence

get_orthogonal_sequence(order)

GitHub

Retorna uma sequência DD de determinada ordem, em que ordens diferentes são ortogonais.

Parâmetros

order (int)

Tipo de retorno

tupla [ lista [ float ], lista [ Gate ]]

name

name()

GitHub

Nome do passe.

Tipo de retorno

str

run

run(dag)

GitHub

Execute uma passagem no DAGCircuit. Isso é implementado pelo desenvolvedor do passe.

Parâmetros

dag (DAGCircuit) – o dag no qual o passe é executado.

Aumentos

NotImplementedError - quando isso não é implementado em uma passagem.

Tipo de retorno

DAGCircuit

update_status

update_status(state, run_state)

GitHub

Atualizar o status do fluxo de trabalho.

Parâmetros

  • state (PassManagerState) – Passar o estado do gerenciador para atualizar.
  • run_state (RunState) – Status de conclusão da tarefa atual.

Retorna

Estado do gerenciador de passes atualizado.

Tipo de retorno

PassManagerState

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.