Skip to main content
IBM Quantum Platform

DAG依存関係

class qiskit.dagcircuit.DAGDependency

GitHub

ベース: 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_clbits(clbits)

GitHub

個々のクラビット線を追加する。

add_creg

add_creg(creg)

GitHub

古典的なレジスタにclbitsを追加する。

add_op_node

add_op_node(operation, qargs, cargs)

GitHub

グラフに DAGDepNode を追加し、エッジを更新する。

パラメーター

  • operation (qiskit.circuit.Operation) – 量子ゲートとしての動作
  • qargs (list[Qubit]) – 演算が作用する量子ビットのリスト
  • cargs (list[Clbit]) – クラシック・ワイヤー・リスト

add_qreg

add_qreg(qreg)

GitHub

量子レジスタに量子ビットを追加する。

add_qubits

add_qubits(qubits)

GitHub

個々の量子ビットワイヤーを追加する。

copy

copy()

GitHub

DAGDependency オブジェクトをコピーする関数 :returns: DAGDependency オブジェクトのコピー :rtype:DAGDependency

depth

depth()

GitHub

return: 回路の深さ :rtype: int

direct_predecessors

direct_predecessors(node_id)

GitHub

指定されたノードの直接の前任者 ID をソートしたリスト。

パラメーター

node_id (int) – ノードのラベル。

戻り値

ソートされたリストとしての直接の前任者ID

戻りの型

リスト

direct_successors

direct_successors(node_id)

GitHub

指定されたノードの直接の後継者 ID をソートしたリスト。

パラメーター

node_id (int) – ノードのラベル。

戻り値

ソートされたリストとしての直接の後継者ID

戻りの型

リスト

draw

draw(scale=0.7, filename=None, style='color')

GitHub

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_all_edges()

GitHub

すべてのエッジの列挙。

戻り値

ラベルに対応する。

戻りの型

リスト

get_edges

get_edges(src_id, dest_id)

GitHub

get_all_edge_dataメソッドによる2ノード間のエッジ列挙。

パラメーター

  • src_id (int) – 最初のノードのラベル。
  • dest_id (int) – 2番目のノードのラベル。

戻り値

2つのノード間のすべてのエッジに対応する。

戻りの型

リスト

get_in_edges

get_in_edges(node_id)

GitHub

与えられたノードのすべての入力エッジの列挙。

パラメーター

node_id (int) – ノードのラベル。

戻り値

対応する受信エッジデータ。

戻りの型

リスト

get_node

get_node(node_id)

GitHub

パラメーター

node_id (int) – ノードのラベル。

戻り値

ラベルに対応する。

戻りの型

ノード

get_nodes

get_nodes()

GitHub

戻り値

すべてのノードを対象とするイテレータ。

戻りの型

ジェネレータ (dict )

get_out_edges

get_out_edges(node_id)

GitHub

指定されたノードのすべての送信エッジの列挙。

パラメーター

node_id (int) – ノードのラベル。

戻り値

対応する発信エッジのデータ。

戻りの型

リスト

predecessors

predecessors(node_id)

GitHub

指定されたノードの前任者 ID をソートしたリスト。

パラメーター

node_id (int) – ノードのラベル。

戻り値

ソートされたリストとしてのすべての前任者ID

戻りの型

リスト

replace_block_with_op

replace_block_with_op(node_block, op, wire_pos_map, cycle_check=True)

GitHub

ノードのブロックを単一のノードに置き換える。

これは、 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_checkTrue に設定されていて、指定されたブロックを置き換えるとサイクルが発生する場合、または node_block が空の場合。

size

size()

GitHub

回路のゲート数を返す

successors

successors(node_id)

GitHub

指定されたノードの後継者 ID をソートしたリスト。

パラメーター

node_id (int) – ノードのラベル。

戻り値

ソートされたリストとしてのすべての後継者ID

戻りの型

リスト

to_retworkx

to_retworkx()

GitHub

DAGDependency を retworkx 形式で返します。

topological_nodes

topological_nodes()

GitHub

トポロジー順にノードを降ろす。

戻り値

ノードをトポロジカルに並べる。

戻りの型

ジェネレータ (DAGNode )

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