Skip to main content
IBM Quantum Platform

Passagens de programação do transpiler

qiskit_ibm_runtime.transpiler.passes.scheduling

Uma coleção de passes de agendamento para trabalhar com os back-ends de última geração do IBM Quantum que oferecem suporte a recursos avançados de "circuito dinâmico". Ou seja, circuitos com suporte para fluxo de controle/feedback clássico com base em resultados de medição. Para obter mais informações sobre circuitos dinâmicos, consulte nosso guia de fluxo de controle e feedforward clássico.

Aviso

Você não deve misturar esses passes de agendamento com os passes de agendamento integrados do Qiskit, pois eles interagirão negativamente com as rotinas de agendamento para circuitos dinâmicos. Isso inclui a configuração de scheduling_method em transpile() ou generate_preset_pass_manager().


Classes

BlockBasePadderA classe base do passe de preenchimento.
ALAPScheduleAnalysisPasse de análise de agendamento de circuitos dinâmicos como o mais tardio possível (ALAP).
ASAPScheduleAnalysisPasse de análise de agendamento de circuitos dinâmicos do tipo "tão logo quanto possível" (ASAP).
DynamicCircuitInstructionDurationsDuração dinâmica das instruções do circuito.
PadDelayPreenchimento do tempo ocioso com instruções de atraso.
PadDynamicalDecouplingPasse de inserção de desacoplamento dinâmico para IBM backends de circuitos dinâmicos.

Exemplo de uso

A seguir, demonstramos como programar e preencher um circuito de teletransporte com atrasos para um modelo de execução de backend de circuito dinâmico:

from qiskit.circuit import ClassicalRegister, QuantumCircuit, QuantumRegister
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit.transpiler.passmanager import PassManager

from qiskit_ibm_runtime.transpiler.passes.scheduling import ALAPScheduleAnalysis
from qiskit_ibm_runtime.transpiler.passes.scheduling import PadDelay
from qiskit_ibm_runtime.fake_provider import FakeJakartaV2

backend = FakeJakartaV2()

# Use this duration class to get appropriate durations for dynamic
# circuit backend scheduling
# Generate the main Qiskit transpile passes.
pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
# Configure the as-late-as-possible scheduling pass
pm.scheduling = PassManager([
    ALAPScheduleAnalysis(target=backend.target),
    PadDelay(target=backend.target)]
    )

qr = QuantumRegister(3)
crz = ClassicalRegister(1, name="crz")
crx = ClassicalRegister(1, name="crx")
result = ClassicalRegister(1, name="result")

teleport = QuantumCircuit(qr, crz, crx, result, name="Teleport")

teleport.h(qr[1])
teleport.cx(qr[1], qr[2])
teleport.cx(qr[0], qr[1])
teleport.h(qr[0])
teleport.measure(qr[0], crz)
teleport.measure(qr[1], crx)
with teleport.if_test((crz, 1)):
    teleport.z(qr[2])
with teleport.if_test((crx, 1)):
    teleport.x(qr[2])
teleport.measure(qr[2], result)

# Transpile.
scheduled_teleport = pm.run(teleport)

scheduled_teleport.draw(output="mpl", style="iqp")
Diagrama de circuito gerado pelo código anterior.

Em vez de preencher com atrasos, também podemos inserir uma sequência de desacoplamento dinâmico usando o comando PadDynamicalDecoupling pass, conforme mostrado a seguir:

from qiskit.circuit.library import XGate

from qiskit_ibm_runtime.transpiler.passes.scheduling import PadDynamicalDecoupling


dd_sequence = [XGate(), XGate()]

pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
pm.scheduling = PassManager(
    [
        ALAPScheduleAnalysis(target=backend.target),
        PadDynamicalDecoupling(target=backend.target, dd_sequences=dd_sequence),
    ]
)

dd_teleport = pm.run(teleport)

dd_teleport.draw(output="mpl", style="iqp")
Diagrama de circuito gerado pelo código anterior.

Ao compilar um circuito com o Qiskit, é mais eficiente e mais robusto realizar todas as transformações em uma única transpilação. Isso foi feito acima, ampliando os gerenciadores de passes predefinidos do Qiskit. Por exemplo, a função transpile() do Qiskit constrói internamente seu conjunto de passes usando generate_preset_pass_manager(). Isso retorna instâncias de StagedPassManagerque podem ser estendidas.

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