Skip to main content
IBM Quantum Platform

トランスパイラースケジューリングパス

qiskit_ibm_runtime.transpiler.passes.scheduling

高度な「ダイナミックサーキット」機能をサポートする IBM Quantum の次世代バックエンドと連携するためのスケジューリングパスのコレクション。 つまり...、 測定結果に基づく古典的な制御フロー/フィードバックをサポートする回路。 ダイナミック回路の詳細については、 クラシック・フィードフォワードとコントロール・フロー ・ガイドをご覧ください。

警告

これらのスケジューリングパスをQiskitの組み込みスケジューリングパスと混ぜてはいけません。ダイナミック回路のスケジューリングルーチンと悪影響を及ぼします。 これには、 scheduling_method の設定も含まれる。 transpile() または generate_preset_pass_manager()


クラス

BlockBasePadderパディング・パスの基本クラス。
ALAPScheduleAnalysis動的回路のas-late-as-possible(ALAP)スケジューリング解析パス。
ASAPScheduleAnalysis動的回路のASAP(as-soon-as-possible)スケジューリング分析パス。
DynamicCircuitInstructionDurations動的な回路命令の持続時間。
PadDelayDelay命令によるアイドル時間の水増し。
PadDynamicalDecouplingIBM 動的回路バックエンドのための動的デカップリング挿入パス。

使用例

以下では、動的回路バックエンドの実行モデルに対して、遅延を伴うテレポーテーション回路をスケジューリングし、パッド化する方法を示す:

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")
先のコードで出力された回路図。

遅延で埋め合わせる代わりに、以下に示すように pass PadDynamicalDecoupling を使用して動的なデカップリングシーケンスを挿入することもできます:

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")
先のコードで出力された回路図。

Qiskitで回路をコンパイルする場合、1回のトランスパイルですべての変換を行う方が効率的で、よりロバストです。 これはQiskitのプリセットパスマネージャーを拡張することで実現しました。 例えば、Qiskitの transpile() 関数は内部的に generate_preset_pass_manager() を使ってパスセットを構築します。 のインスタンスを返す。 StagedPassManagerのインスタンスを返す。

このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。