スライス
qiskit_addon_utils.slicing
回路スライシングのためのユーティリティ・メソッド。
詳しくは、このサブモジュールについて説明したハウツーガイドをご覧ください。
combine_slices
combine_slices(slices, include_barriers=False)
N量子ビットのスライス回路を1つの回路にまとめる。
パラメーター
- slices (Sequence[QuantumCircuit]) – N量子ビット回路スライス。
- include_barriers (bool) –
True、各スライスの間にバリヤーを置く。
戻り値
A QuantumCircuit を順番にスライスしていく。
レイズ
ValueError - 2つの入力スライスは異なる量子ビット数で定義された。
戻りの型
QuantumCircuit | なし
slice_by_barriers
slice_by_barriers(circuit)
QuantumCircuit 、全回路バリアの周囲をスライスする。
全ての回路量子ビットに作用しないバリアは通常の動作として扱われ、スライスに含まれる。 全ての量子ビットに作用するバリアはスライス位置と解釈され、出力スライスには含まれない。
パラメーター
circuit (QuantumCircuit) – 分割される回路。
戻り値
一連の QuantumCircuit オブジェクトの並び。
戻りの型
slice_by_coloring
slice_by_coloring(circuit, coloring)
QuantumCircuit 、付属のエッジカラーを使ってスライスに分割する。
CollectOpColor同じ色の量子ビット間の接続(エッジ)に作用する2量子ビットゲートは、... を用いて貪欲法によりスライスごとにグループ化される。 これは、色値(各エッジに割り当てられた整数値)の昇順で行われます。
このことは、値の低いカラースライスが回路内で一番左に来ることを保証するものではないことに注意してください。 以下はそのことを強調するための例である。
>>> from qiskit import QuantumCircuit
>>> circuit = QuantumCircuit(5)
>>> _ = circuit.cx(0, 1)
>>> _ = circuit.cx(3, 4)
>>> _ = circuit.cx(2, 3)
>>> circuit.draw()
q_0: ──■───────
┌─┴─┐
q_1: ┤ X ├─────
└───┘
q_2: ───────■──
┌─┴─┐
q_3: ──■──┤ X ├
┌─┴─┐└───┘
q_4: ┤ X ├─────
└───┘
>>> coloring = {(0, 1): 0, (2, 3): 0, (3, 4): 1}
>>> from qiskit_addon_utils.slicing import combine_slices, slice_by_coloring
>>> slices = slice_by_coloring(circuit, coloring)
# for illustration purposes, we are recombining the slices with barriers
>>> recombined = combine_slices(slices, include_barriers=True)
>>> recombined.draw()
░
q_0: ──────░───■──
░ ┌─┴─┐
q_1: ──────░─┤ X ├
░ └───┘
q_2: ──────░───■──
░ ┌─┴─┐
q_3: ──■───░─┤ X ├
┌─┴─┐ ░ └───┘
q_4: ┤ X ├─░──────
└───┘ ░CollectOpSize単一量子ビットゲートは、…を用いて単一のスライスにまとめられます。
パラメーター
- circuit (QuantumCircuit) – 分割される回路。
- coloring (dict[tuple[int, int], int]) – エッジ(整数のペア)を色値にマッピングする辞書。
戻り値
一連の QuantumCircuit オブジェクトの並び。
レイズ
- ValueError - 入力エッジのカラーリングが無効。
- ValueError - 回路命令に色を割り当てられなかった。
戻りの型
slice_by_depth
slice_by_depth(circuit, max_slice_depth)
QuantumCircuit を深さに基づいてスライスに分割する。
この関数は、入力回路を DAGCircuit に変換し、 depth-1 から出力されるレイヤーのシーケンスを、 を超えない深さのスライスに分割する。 layers() から出力される一連の層を、 max_slice_depth を超えない深さのスライスに分割する。 これは、最大スライス深度に達するまでレイヤーをスライスに分割し、次のレイヤーで新しいスライスを開始することで達成される。 最終的なスライスは、 max_slice_depth より少ない層で構成されることもある。
パラメーター
- circuit (QuantumCircuit) – 分割される回路。
- max_slice_depth (int) – 与えられたスライスの最大深度。
戻り値
一連の QuantumCircuit オブジェクトの並び。
戻りの型
slice_by_gate_types
slice_by_gate_types(circuit)
QuantumCircuit を depth-1 同じタイプの操作のスライスに分割する。
注:量子ビットを共有しない隣接スライスは任意に並べることができる。
パラメーター
circuit (QuantumCircuit) – 分割される回路。
戻り値
一連の QuantumCircuit オブジェクトの並び。
戻りの型