Skip to main content
IBM Quantum Platform

PadDynamicalDecoupling

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

GitHub

ベース: BasePadding

ダイナミック・デカップリング挿入パス。

このパスは、予定された物理的な回路で機能する。 回路をスキャンしてアイドル時間(つまり遅延命令を含む時間)を探し、その場所にDDゲートシーケンスを挿入する。 これらのゲートはアイデンティティに相当するため、回路の論理的な動作を変えることはないが、アイドル期間中のデコヒーレンスを緩和する効果がある。

特別なケースとして、パスは length-1 シーケンス(例: [XGate()] )を許可する。 この場合、DDの挿入は、ゲート・インバースが回路内の隣のゲートに吸収されることができる場合にのみ起こる(したがって、Delayをアイデンティティと等価なものに置き換えることに変わりはない)。 これは例えば、ハーン・エコーとして使うことができる。

このパスにより、挿入されたシーケンスが回路を正確に保持することが保証される(グローバル位相を含む)。

import numpy as np
from qiskit.circuit import QuantumCircuit
from qiskit.circuit.library import XGate
from qiskit.transpiler import PassManager, InstructionDurations, Target, CouplingMap
from qiskit.transpiler.passes import ALAPScheduleAnalysis, PadDynamicalDecoupling
from qiskit.visualization import timeline_drawer

circ = QuantumCircuit(4)
circ.h(0)
circ.cx(0, 1)
circ.cx(1, 2)
circ.cx(2, 3)
circ.measure_all()
durations = InstructionDurations(
    [("h", 0, 50), ("cx", [0, 1], 700), ("reset", None, 10),
     ("cx", [1, 2], 200), ("cx", [2, 3], 300),
     ("x", None, 50), ("measure", None, 1000)],
    dt=1e-7
)
target = Target.from_configuration(
    ["h", "cx", "reset", "x", "measure"],
    num_qubits=4,
    coupling_map=CouplingMap.from_line(4, bidirectional=False),
    instruction_durations=durations,
    dt=1e-7,
)

# balanced X-X sequence on all qubits
dd_sequence = [XGate(), XGate()]
pm = PassManager([ALAPScheduleAnalysis(durations),
                  PadDynamicalDecoupling(durations, dd_sequence)])
circ_dd = pm.run(circ)
timeline_drawer(circ_dd, target=target)

# Uhrig sequence on qubit 0
n = 8
dd_sequence = [XGate()] * n
def uhrig_pulse_location(k):
    return np.sin(np.pi * (k + 1) / (2 * n + 2)) ** 2
spacing = []
for k in range(n):
    spacing.append(uhrig_pulse_location(k) - sum(spacing))
spacing.append(1 - sum(spacing))
pm = PassManager(
    [
        ALAPScheduleAnalysis(durations),
        PadDynamicalDecoupling(durations, dd_sequence, qubits=[0], spacing=spacing),
    ]
)
circ_dd = pm.run(circ)
timeline_drawer(circ_dd, target=target)
前のコードからの出力。前のコードからの出力。

回路がアクイジション・アライメント制約を満たすことを保証するために、ダイナミック・デカップリングを実行する前にアライメント・パスを呼び出す必要があるかもしれません。

ダイナミック・デカップリング・イニシャライザー。

パラメーター

  • durations - スケジューリングに使用される命令の持続時間。

  • dd_sequence - アイドル・スポットで適用するゲートのシーケンス。

  • qubits - DDを適用する物理量子ビット。 Noneの場合、すべての量子ビットがDDを受ける(可能な場合)。

  • spacing - DDゲート間のスペーシングのリスト。 利用可能なスラックはこれに従って分割される。 リストの長さはdd_sequenceの長さより1つ多く、要素の和は1でなければならない。 None の場合は、バランスの取れた間隔 [d/2、d、d、…、d、d、 d/2 が]使用されます。

  • skip_reset_qubits - Trueの場合、初期化/リセットされた量子ビットの直後のアイド ル期間にDDを挿入しない(基底状態の量子ビットはデコヒーレンスに影響され にくいため)。

  • pulse_alignment - ゲートタイミング割り当てのハードウェア制約。 これは通常、 backend.configuration().timing_constraints から提供される。 提供された場合、遅延の長さ、すなわち spacing、 はこの制約を満たすように暗黙のうちに調整される。

  • extra_slack

    DDシーケンス生成の動作を制御するオプション。 DDシーケンスの継続時間は、スケジュールされた量子回路のアイドル時間と同一であるべきであるが、シーケンスを構成するゲート間の遅延はdt単位の整数であるべきであり、 pulse_alignment が指定された場合には、さらに切り捨てられる可能性がある。 この結果、作成されたシーケンスの持続時間が、シーケンスで埋めたいアイドル時間よりも短くなることがある。 このオプションは以下の値をとる。

    • "middle":余分なスラックをシーケンスの真ん中のインターバルに置く。
    • 「エッジ」:シークエンスの最初と最後に、余分なたるみをできるだけ均等に分ける。
  • target - 対象のバックエンドを表す Target ターゲットのバックエンドを表します。 ターゲットから推測できる場合、ターゲットは他の引数より優先される。 したがって、 durationspulse_alignment のような他の引数と同様に target を指定すると、他の引数は無視される。

レイズ

  • TranspilerError - 無効な DD シーケンスが指定された場合。
  • TranspilerError - アライメント制約値の倍数でない持続時間を持つパルスゲートが見つかったとき。
  • TypeError - dd_sequence が指定されていない場合

属性

is_analysis_pass

パスが分析パスかどうかをチェックする。

パスが AnalysisPass,、パスがDAGを分析し、その分析結果をプロパティセットに書き込むことができることを意味する。 この種のパスでは、DAGの変更は許されない。

is_transformation_pass

パスが変身パスかどうかをチェックする。

パスが TransformationPass, の場合、そのパスはDAGを操作することはできるが、プロパティセットを変更することはできない(ただし、読み取ることはできる)ことを意味する。


方法

execute

execute(passmanager_ir, state, callback=None)

GitHub

入力Qiskit IRに対して最適化タスクを実行する。

パラメーター

  • passmanager_ir (Any) – Qiskit IRを最適化する。
  • state (PassManagerState) – パスマネージャー自身によるワークフロー実行に関連する状態。
  • callback (Callable | None) – 最適化タスクの実行ごとに呼び出されるコールバック関数。

戻り値

Qiskit IRとワークフローの状態を最適化。

戻りの型

タプル [ Any, PassManagerState ]

get_duration

get_duration(node, dag)

GitHub

回路内の指定されたノードの持続時間を取得する。

name

name()

GitHub

パスの名前

戻りの型

str

run

run(dag)

GitHub

dag でパディングパスを実行する。

パラメーター

dag (DAGCircuit) – チェックするDAG。

戻り値

アイドリングタイムが命令で埋め尽くされたDAG。

戻りの型

DAGサーキット

レイズ

TranspilerError - 特定のノードがスケジューリングされていない場合、このノードが呼び出される前に何らかのトランスフォームパスが挿入される可能性が高い。

update_status

update_status(state, run_state)

GitHub

ワークフローのステータスを更新する。

パラメーター

  • state (PassManagerState) – 更新するマネージャーの状態を渡す。
  • run_state (RunState) – 現在のタスクの完了状況。

戻り値

パスマネージャーの状態を更新。

戻りの型

PassManagerState

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