DAG依存関係
class qiskit.dagcircuit.DAGDependency
ベース: object
量子回路をDAG(Directed Acyclic Graph)として表現するためのオブジェクト。
グラフのノードは量子ゲートで表現される演算である。 エッジは2つのオペレーション間の非整合(すなわち依存関係)に対応する。 ノードAからノードBへの有向エッジは、操作Aが操作Bと交わらないことを意味する。 このオブジェクトのメソッドによって回路を構築することができる。
グラフのノードは以下の属性を持つ:operation'、'successors'、'predecessors'。
例:
測定不能のベル回路。
┌───┐
qr_0: ┤ H ├──■──
└───┘┌─┴─┐
qr_1: ─────┤ X ├
└───┘上記の回路の依存関係DAGは、2つのノードで表される。 最初のゲートはハダマードゲート、2番目のゲートはCNOTゲートに対応し、2つのノード間にはエッジが存在する。
参照:
[1] Iten, R、 モイヤード、R、 メトガー、T、 サッター、D.とヴォーナー、S、 2020。 量子回路最適化のための正確で実用的なパターンマッチング。 arXiv:1909.05270
空の DAGDependency を作成する。
属性
global_phase
回路のグローバル位相を返す。
方法
add_clbits
add_creg
add_op_node
add_op_node(operation, qargs, cargs)
グラフに DAGDepNode を追加し、エッジを更新する。
パラメーター
- operation (qiskit.circuit.Operation) – 量子ゲートとしての動作
- qargs (list[Qubit]) – 演算が作用する量子ビットのリスト
- cargs (list[Clbit]) – クラシック・ワイヤー・リスト
add_qreg
add_qubits
copy
depth
direct_predecessors
direct_predecessors(node_id)
指定されたノードの直接の前任者 ID をソートしたリスト。
パラメーター
node_id (int) – ノードのラベル。
戻り値
ソートされたリストとしての直接の前任者ID
戻りの型
リスト
direct_successors
direct_successors(node_id)
指定されたノードの直接の後継者 ID をソートしたリスト。
パラメーター
node_id (int) – ノードのラベル。
戻り値
ソートされたリストとしての直接の後継者ID
戻りの型
リスト
draw
draw(scale=0.7, filename=None, style='color')
DAGDependency グラフを描画します。
この機能を使用するにはpydotが必要ですが、 p ydotを実行するにはGraphvizがインストールされている必要があります。
この関数は、ユーザーが制御可能な文字列(ゲートラベルやレジスタ名など)を含むファイルに対して、システムのGraphvizツールを呼び出します。 この関数は、信頼できる入力に対してのみ呼び出すことを推奨します。
パラメーター
- scale (float) – スケーリングファクター
- filename (str) – 画像を保存するファイルパス(形式はファイル名から判別されます)
- style (str) – plain':B&W グラフ 'color' (デフォルト): カラー入出力/ポップノード
戻り値
Jupyterノートブックでファイルに保存しない場合はNone。
戻りの型
IPython.display.Image
get_all_edges
get_edges
get_edges(src_id, dest_id)
get_all_edge_dataメソッドによる2ノード間のエッジ列挙。
パラメーター
戻り値
2つのノード間のすべてのエッジに対応する。
戻りの型
リスト
get_in_edges
get_in_edges(node_id)
与えられたノードのすべての入力エッジの列挙。
パラメーター
node_id (int) – ノードのラベル。
戻り値
対応する受信エッジデータ。
戻りの型
リスト
get_node
get_nodes
get_out_edges
get_out_edges(node_id)
指定されたノードのすべての送信エッジの列挙。
パラメーター
node_id (int) – ノードのラベル。
戻り値
対応する発信エッジのデータ。
戻りの型
リスト
predecessors
predecessors(node_id)
指定されたノードの前任者 ID をソートしたリスト。
パラメーター
node_id (int) – ノードのラベル。
戻り値
ソートされたリストとしてのすべての前任者ID
戻りの型
リスト
replace_block_with_op
replace_block_with_op(node_block, op, wire_pos_map, cycle_check=True)
ノードのブロックを単一のノードに置き換える。
これは、 DAGDepNodes のブロックを1つのオペレーションに統合するために使用される。 典型的な例は、CXゲートとSWAPゲートのブロックを LinearFunction に統合したものである。 この関数は、DAGCircuitの同様の関数を応用したものである。
このような統合は、DAGDependencyに存在する可換性の仮定を維持することが重要である。 例として、ブロック [A、B、C、] Dの各ノードが別のノードEとコミュートしているとする。 Fを連結ノードとし、F=A o B o C o Dとする。 したがって、 [A,B,C,Dを] Fで置き換えた結果は有効なDAGDependencyとなる。 つまり、連結DAGDependencyにおける可換性に関する演繹はすべて正しい。 一方、ノードの少なくとも1つ、例えばBがEと交わらないとする。 その場合、連結DAG依存性は、FがEと通約しないことを意味する。 FとEが実際に通勤している可能性はあるにせよ、そうでないと考えて差し支えない。 つまり、現在のコンソリデーションの実施は、最適とは言えないが、間違った結果にはつながらない可能性がある。
パラメーター
- node_block (List[DAGDepNode]) – 置換されるノードブロックを表すdagノードのリスト
- op (qiskit.circuit.Operation) – ブロックを
- wire_pos_map (Dict[Qubit, int]) – qargと位置を対応付ける辞書。 これは、結合されたシングル・オペアンプ・ノードの複数のゲートのqarg順序を再構築するために必要である。
- cycle_check (bool) – Trueに設定すると、このメソッドは、提供された
node_blockを単一のノードで置き換えるとサイクルが発生するかどうかをチェックし(これはDAGDependencyを無効にする)、サイクルが発生する場合はDAGDependencyError。 このチェックには走行時間のペナルティが伴う。 入力node_blockが連続したブロックであり、1つのノードに収縮するときにサイクルが発生しないことを保証できる場合、このメソッドの実行時のパフォーマンスを向上させるために、これをFalseに設定することができる。
レイズ
DAGDependencyError - cycle_check が True に設定されていて、指定されたブロックを置き換えるとサイクルが発生する場合、または node_block が空の場合。
size
successors
successors(node_id)
指定されたノードの後継者 ID をソートしたリスト。
パラメーター
node_id (int) – ノードのラベル。
戻り値
ソートされたリストとしてのすべての後継者ID
戻りの型
リスト