DAG回路
class qiskit.dagcircuit.DAGCircuit
ベース: object
有向無サイクルグラフとしての量子回路。
グラフには、入力、出力、操作の3種類のノードがある。 ノードは、量子ビットとビットに対応する有向辺で接続されている。
属性
clbits
現在登録されている Clbit インスタンスをリストとして返します。
このリストを自分で修正しないでください。 データ構造を無効にする DAGCircuit データ構造を無効にする。
戻り値
現在登録されているビット列。
戻りの型
リスト(Clbit)
cregs
回路の ClassicalRegisters を含む dict を返す
duration
スケジューリングトランスパイラパスによって設定された、回路の合計時間を返します。 その単位は unit
Qiskit 1.3.0 以降は廃止され、Qiskit では削除される予定です。 3.0.0
global_phase
回路のグローバル位相を返す。
input_map
metadata
サーキットのメタデータ
name
サーキット名。 一般的に、これはDAGが生成された QuantumCircuit の名前に相当する。
node_counter
ダグ内のノードの数を返します。
num_captured_stretches
回路によって追跡されたキャプチャされたストレッチの数。
num_captured_vars
回路が追跡した古典変数の捕捉数。
num_declared_stretches
サーキットが追跡している宣言されたローカルストレッチの数。
num_declared_vars
回路が追跡する宣言されたローカル古典変数の数。
num_input_vars
回路が追跡する入力古典変数の数。
num_stretches
サーキットが追跡したストレッチの総数。
num_vars
回路が追跡する古典変数の総数。
output_map
qregs
回路内の QuantumRegisters を含む dict を返す
qubits
現在登録されている Qubit インスタンスをリストとして返します。
このリストを自分で修正しないでください。 データ構造を無効にする DAGCircuit データ構造を無効にする。
戻り値
現在登録されている量子ビットのシーケンス。
戻りの型
リスト(Qubit)
unit
duration が指定された単位を返します。
Qiskit 1.3.0 以降は廃止され、Qiskit では削除される予定です。 3.0.0
wires
ワイヤーのリストを順番に返す。
方法
add_captured_stretch
add_captured_stretch(stretch)
サーキットにストレッチを加える。
パラメーター
stretch - 追加するストレッチ。
add_captured_var
add_captured_var(var)
回路にキャプチャした変数を追加する。
パラメーター
var - 追加する変数。
add_clbits
add_clbits(clbits)
個々のクラビット線を追加する。
add_creg
add_creg(creg)
古典的なレジスタにすべてのワイヤーを追加する。
add_declared_stretch
add_declared_stretch(stretch)
サーキットに宣言ストレッチを加える。
パラメーター
stretch - 追加するストレッチ。
add_declared_var
add_declared_var(var)
宣言されたローカル変数を回路に追加する。
パラメーター
var - 追加する変数。
add_input_var
add_input_var(var)
回路に入力変数を追加する。
パラメーター
var - 追加する変数。
add_qreg
add_qreg(qreg)
すべてのワイヤーを量子レジスタに追加する。
add_qubits
add_qubits(qubits)
個々の量子ビットワイヤーを追加する。
ancestors
ancestors(node)
ノードの祖先の集合を DAGOpNodeと DAGInNodes.
祖先は、ターゲット・ノードに到達できるすべてのノードの集合である。 が直前の先人を含むのに対し DAGCircuit.predecessors() は直接の前任者のみを含むが、祖先は再帰的に各前任者の前任者を含む。
apply_operation_back
apply_operation_back(op, qargs=None, cargs=None, *, check=True)
回路の出力に操作を加える。
パラメーター
- op (qiskit.circuit.Operation) – DAGノードに関連する操作
- qargs (tuple[Qubit]) – opが適用される量子ビット
- cargs (tuple[Clbit]) – オペが適用されるビット
- check (bool) –
True(デフォルト)の場合、この関数はDAGCircuitデータ構造の不変性が維持されることを強制する(すべてのqargsがQubit\ である、すべてがDAG内にある、など)。Falseの場合、呼び出し元自身がこれらの不変性を保持しなければならないが、いくつかのチェックのコストはスキップされる。 これは、既知の良好なノードのソースから新しいDAGを構築するときに最も役に立つ。
戻り値
ダグに追加されたオペのノード
戻りの型
レイズ
DAGCircuitError - リーフノードが複数の出力に接続されている場合
apply_operation_front
apply_operation_front(op, qargs=None, cargs=None, *, check=True)
回路の入力に操作を加える。
パラメーター
- op (qiskit.circuit.Operation) – DAGノードに関連する操作
- qargs (tuple[Qubit]) – opが適用される量子ビット
- cargs (tuple[Clbit]) – オペが適用されるビット
- check (bool) –
True(デフォルト)の場合、この関数はDAGCircuitデータ構造の不変性が維持されることを強制する(すべてのqargsがQubit\ である、すべてがDAG内にある、など)。Falseの場合、呼び出し元自身がこれらの不変性を保持しなければならないが、いくつかのチェックのコストはスキップされる。 これは、既知の良好なノードのソースから新しいDAGを構築するときに最も役に立つ。
戻り値
ダグに追加されたオペのノード
戻りの型
レイズ
DAGCircuitError - 初期ノードが複数のアウトエッジに接続されている場合
bfs_successors
bfs_successors(node)
(DAGNode, [DAGNodes]) のタプルのイテレータを返す。 DAGNode は現在のノードで、 [DAGNodes] は BFS 順の後継者のリスト。
classical_predecessors
classical_predecessors(node)
DAGOpNodes および DAGInNodes として、古典的なエッジで接続されているノードの前任者のイテレータを返す。
classical_successors
classical_successors(node)
DAGOpNodes および DAGOutNodes として、古典的なエッジで接続されているノードの後継ノードのイテレータを返す。
collect_1q_runs
collect_1q_runs()
1q "op "ノードの無条件実行のセットを返す。
collect_2q_runs
collect_2q_runs()
2q "op "ノードの無条件実行のセットを返す。
collect_runs
collect_runs(namelist)
与えられた名前を持つ "op "ノードの無条件実行セットを返す。
例えば、"... h [q0]; cx [q0], [q1]; cx [q0], [q1]; h [q1];..." となる を呼び出すと、collect_runs( ["cx"]) の呼び出しから返されるセットの 要素として、cxノードのタプルが生成される。 代わりにcxノードが "cx [q0], [q1]; cx [q] 1,q [0]; "であったとしても、このメソッドはペアをタプルで返す。 namelistには、回路の基礎にない名前を含めることができる。
ノードが走行を続けるには、後継者が1人しかいなければならない。
compose
compose(other, qubits=None, clbits=None, front=False, inplace=True, *, inline_captures=False)
この回路の出力に other 。
other の入力配線のサブセットは、この回路の出力配線のサブセットにマッピングされる。
other の幅は、 self の幅より狭くすることも、同じ幅にすることもできる。
パラメーター
- other (DAGCircuit) – セルフコンポジション回路
- qubits (list[Qubit|int]) – 自己を構成する量子ビット。
- clbits (list[Clbit|int]) – 自己の断片を合成する。
- front (bool) – Trueの場合、フロントコンポジションが実行されます(未実装)
- inplace (bool) – Trueの場合、オブジェクトを修正する。 そうでなければ、構成された回路を返す。
- inline_captures (bool) –
Trueの場合、 のDAGで「キャプチャ」とマークされた変数は、 の同じ変数の既存の用途にインライン化される。otherselfFalseの場合、otherの変数はすべてselfと区別される必要があり、selfに追加される。
戻り値
構成されたダグ(inplace==Trueの場合はNoneを返す)。
戻りの型
レイズ
DAGCircuitError - other の幅が広いか、エッジマッピングが重複している場合。
control_flow_op_nodes
control_flow_op_nodes()
制御フロー命令を含むダグ内の "op "ノードのリストを取得する。
戻り値
コントロール・フローOPSを含むdagノードのリスト。
戻りの型
copy_empty_like
copy_empty_like(*, vars_mode=Ellipsis)
同じ構造を持つが空のselfのコピーを返す。
その構造には以下のようなものがある:
- 名前とその他のメタデータ
- グローバルフェーズ
- 期間
- レジスタを含むすべてのqubitsとclbits。
戻り値
selfの空のコピー。
戻りの型
count_ops
count_ops(*, recurse=True)
オペレーション名の出現回数を数える。
パラメーター
recurse - True (デフォルト)の場合、コントロールフロー操作に再帰する。 if-elesの両方の分岐がカウントされ、for-loopとwhile-loopのブロックは1回だけカウントされる。
戻り値
作戦名とその作戦が登場する回数の対応表。
戻りの型
count_ops_longest_path
count_ops_longest_path()
最長パス上の操作名の出現回数を数える。
操作名をキーとするカウントの辞書を返します。
depth
depth(*, recurse=False)
回路の深さを返す。 制御フローが存在する場合、完全な制御フロー経路を静的に知ることができないため、このカウントは推定値に過ぎない可能性がある。
パラメーター
recurse - True の場合、コントロール・フロー操作に再帰する。 既知の長さのイテレータを持つForループは、ループが手動で展開されたかのようにカウントされる (つまり、ループ本体の各反復が明示的に書き出される)。 if-elseブロックは、2つの分岐のうち長い方を取る。 Whileループは、ループ本体が1回だけ実行されたものとしてカウントされる。 デフォルトは False 。 DAGCircuitError を返す。
戻り値
回路の深さ
戻りの型
レイズ
- DAGCircuitError - 有向無サイクルグラフでない場合
- DAGCircuitError - 再帰呼に未知の制御フローが存在する場合、または非再帰呼に何らかの制御フローが存在する場合。
descendants
descendants(node)
ノードの子孫の集合を DAGOpNodeと DAGOutNodes.
子ノードとは、対象ノードから到達可能なすべてのノードの集合である。 これに対し、 DAGCircuit.successors() は直後の後継要素を順にたどるイテレータであるのに対し、このメソッドにはその後継要素のすべてが含まれている。
draw
draw(scale=0.7, filename=None, style='color')
ダグ回路を引く。
この機能を使用するには、 Graphvizがインストールされている必要があります。 Graphvizはpythonパッケージではないため、pipでインストールすることはできません( PyPI の graphviz パッケージはGraphvizの Python インターフェースライブラリであり、実際にはGraphvizはインストールされません)。 インストール方法については、 Graphvizのドキュメントを参照してください。
この関数は、ユーザーが制御可能な文字列(ゲートラベルやレジスタ名など)を含むファイルに対して、システムのGraphvizツールを呼び出します。 この関数は、信頼できる入力に対してのみ呼び出すことを推奨します。
パラメーター
- scale (float) – スケーリングファクター
- filename (str) – 画像を保存するファイルパス(形式はファイル名から判別されます)
- style (str) – plain':color' (デフォルト): カラー入出力/ポップノード
戻り値
Jupyterノートブックでファイルに保存しない場合はNone。
戻りの型
Ipython.display.Image
edges
edges(nodes=None)
送信元ノードと宛先ノードを持つエッジ値のイテレータ。
これは、指定したノードからの発信エッジを返すことで動作する。 ノードを指定しない場合は、グラフのすべてのエッジが返される。
パラメーター
nodes (DAGOpNode, DAGInNode, or DAGOutNode|list(DAGOpNode, DAGInNode, or DAGOutNode) – ノードのリストまたは単一の入力ノード。 何も指定しない場合は、すべてのエッジがグラフから返される。
生成数
エッジ
という形式のタプルとしてエッジを返します。
(送信元ノード, 送信先ノード, エッジワイヤ)
find_bit
find_bit(bit)
QubitとClbitを位置インデックスにマッピングすることにより、回路内の位置を検索する BitLocations は次のように定義される: BitLocations = namedtuple( “BitLocations”, ("index", "registers"))
パラメーター
bit (Bit) – 場所を特定するビット。
戻り値
2タプル。 最初の要素 (index)
には、 Bit が見つかるインデックスが含まれる。 qubits, clbitsのいずれか)。 番目の要素(registers)は、 (register, index) のペアのリストで、 Bit を含む回路内の各 Register のエントリ(と、それが見つかる Register のインデックス)である。
戻りの型
名前付きタプル(int, リストタプル ([レジスタ, int] ))
レイズ
DAGCircuitError: 提供された Bit が不明なタイプだった場合。 DAGCircuitError: 付属の Bit が回路上に見つからなかった場合。
front_layer
front_layer()
このダグの最初のレイヤーにある op ノードのリストを返す。
gate_nodes
has_identifier
has_identifier(var)
この識別子はDAGにありますか?
パラメーター
var - チェックする識別子または名前。
has_stretch
has_stretch(stretch)
このストレッチはDAGの中にあるのか?
パラメーター
var - チェックするストレッチまたは名前。
has_var
has_var(var)
このリアルタイム変数はDAGの中にあるのか?
パラメーター
var - チェックする変数名。
idle_wires
idle_wires(ignore=None)
アイドルワイヤーを戻す。
パラメーター
ignore (list(str)) – 無視するノード名のリスト。 デフォルト: []
生成数
ビット - アイドルワイヤーのビット。
レイズ
DAGCircuitError - DAGが無効な場合
is_empty
is_empty()
グラフ内に操作ノードが存在しない場合、trueを返す。
is_predecessor
is_predecessor(node, node_pred)
2番目のノードがノードの前任者の中にあるかどうかをチェックする。
is_successor
is_successor(node, node_succ)
ノードの後継者に2番目のノードがあるかどうかをチェックする。
iter_captured_stretches
iter_captured_stretches()
回路によって追跡されたキャプチャされたストレッチを反復可能。
iter_captured_vars
iter_captured_vars()
回路が追跡する古典変数を反復可能。
iter_captures
iter_captures()
回路が追跡しているすべてのキャプチャされた識別子を反復可能。
iter_declared_stretches
iter_declared_stretches()
回路が追跡する宣言されたストレッチを反復可能。
iter_declared_vars
iter_declared_vars()
回路が追跡する宣言された古典変数を反復可能。
iter_input_vars
iter_input_vars()
回路が追跡する入力古典変数を反復可能。
iter_stretches
iter_stretches()
回路が追跡するすべてのストレッチを反復可能。
iter_vars
iter_vars()
回路が追跡するすべての古典変数を反復可能。
layers
layers(*, vars_mode=Ellipsis)
このDAGCircuitのレイヤーの浅いビューを、この回路のすべてのd個のレイヤーに対して生成する。
レイヤーとは、ゲートが不連続な量子ビットに作用する回路であり、すなわちレイヤーの深さは1である。 層の総数は回路の深さdに等しい。 レイヤーは0から d-1、最も古いレイヤーがインデックス0である。 レイヤーは貪欲なアルゴリズムを使って構築される。 返される各レイヤーは、 {“graph”: circuit graph, “partition”: list of qubit lists} を含む dict です。
返されたレイヤーには、新しい(しかし意味的には等価な) DAGOpNodes, DAGInNodes, と DAGOutNodes が含まれる。 これらは元のダグのノードと同じではないが、 DAGNode.semantic_eq ( node1, node2 ) を介して等価である。
TODO: 現在の実装では、同じcbitsを使用するゲートは異なるレイヤーになってしまう。 これは望ましい行動ではないかもしれない。
longest_path
longest_path()
DAGOpNodes, DAGInNodes, と DAGOutNodes のリストとして、ダグ内の最長パスを返す。
make_physical
make_physical(num_qubits=None)
self 、指定された数の量子ビットを持つ、正規の物理的な形にする。
これはその場で機能し、DAGを横断する必要はない。 これは、DAGがすでに物理的な回路を表現していることが分かっていて、それが正統的な物理的形式であることを保証するだけでよい場合に使用することを意図している。
の仮想量子ビットの情報をすべて消去します。 DAGCircuit自分でこれを使う場合は、適切な Layout. 事実上、これは仮想量子ビット0を物理量子ビット0にマッピングする "つまらない "レイアウトを適用することになる。
パラメーター
num_qubits - 与えられた場合、出力中の物理的な量子ビットの総数。 もし与えられなければ、量子ビット数は変更されない。
multi_qubit_ops
multi_qubit_ops()
3以上の量子ビット演算のリストを取得する。 スナップショットやバリアなどのディレクティブは無視する。
multigraph_layers
multigraph_layers()
マルチグラフのレイヤーを降伏させる。
named_nodes
named_nodes(*names)
与えられた名前を持つ "op "ノードの集合を取得する。
node
nodes
nodes()
ノード値のイテレータ。
生成数
node - ノード。
nodes_on_wire
nodes_on_wire(wire, only_ops=False)
与えられたワイヤーに影響を与えるノードのイテレーター。
パラメーター
生成数
イテレータ - 与えられたワイヤー上の連続するノード
レイズ
DAGCircuitError - 指定されたワイヤーがDAGに存在しない場合
num_blocks
num_blocks()
この回路の基本ブロックの数を返す。
num_clbits
num_clbits()
回路が使用する古典的なビットの総数を返す。
num_ops
num_ops()
DAG内のopノードの数を取得する。
num_qubits
num_qubits()
回路が使用する量子ビットの総数を返す。 num_qubits()は、以前のwidth()の使用を置き換えた。 DAGCircuit.width () は Circuit.width () [qiskit-terra #2564] との整合性のため、qubits + clbits を返すようになった。
num_tensor_factors
num_tensor_factors()
回路がいくつのコンポーネントに分解できるかを計算する。
op_nodes
op_nodes(op=None, include_directives=True)
ダグ内の "op "ノードのリストを取得する。
パラメーター
- op (Type) –
qiskit.circuit.Operationサブクラスのopノードを返す。 None の場合、すべての op ノードを返す。 - include_directives (bool) – バリア、スナップショットなど
戻り値
与えられたopを含むdagノードのリスト。
戻りの型
op_predecessors
op_predecessors(node)
ダグ内のノードの "op "先行ノードのイテレータを返す。
op_successors
op_successors(node)
ダグ内のノードの "op "後継ノードのイテレータを返す。
predecessors
properties
properties()
回路のプロパティの辞書を返す。
quantum_causal_cone
quantum_causal_cone(qubit)
量子ビットの因果円錐を返す。
量子ビットの因果錐とは、相互作用を通じてその量子ビットの出力に影響を与えることができる量子ビットの集合のことで、マルチ量子ビット・ゲートや演算を通じたものである。 量子ビットの因果円錐を知ることは、どのワイヤーが問題を引き起こしているかを特定するのに役立つため、欠陥のある回路をデバッグする際に役立ちます。
この方法では、 DAGCircuit における古典的なデータ依存性は考慮されません。因果円錐を構築する目的で、古典的なビット・ワイヤーは無視されます。
パラメーター
qubit (Qubit) – 因果円錐を求めたい出力量子ビット。
戻り値
相互作用が qubit に影響する量子ビットの集合。
戻りの型
セット [*キュービット]*
quantum_predecessors
quantum_predecessors(node)
量子エッジで接続されたノードの前任者のイテレータを DAGOpNodes と DAGInNodes として返す。
quantum_successors
quantum_successors(node)
量子エッジで接続されたノードの後継ノードのイテレータを DAGOpNodes と DAGOutNodes として返す。
remove_all_ops_named
remove_all_ops_named(opname)
指定された名前の操作ノードをすべて削除する。
remove_ancestors_of
remove_ancestors_of(node)
node の祖先操作ノードをすべて削除する。
remove_clbits
remove_clbits(*clbits)
回路から古典的なビットを取り除く。 すべてのビットはアイドルでなければならない(MUST)。 指定されたビットの少なくとも1つを参照しているレジスタもすべて削除される。
この方法は、ビットインデックスを修正するためにDAG全体を反復しなければならないため、かなり時間がかかる。
パラメーター
clbits (List[Clbit]) – 除去するビット。
レイズ
DAGCircuitError - クリビットは Clbit回路内にないか、アイドル状態でない。
remove_cregs
remove_cregs(*cregs)
古典的なレジスタを回路から取り除き、基本的なビットはそのまま残す。
レイズ
- DAGCircuitError - クレッグは ClassicalRegister,、またはその中にない
- 回路 -
remove_descendants_of
remove_descendants_of(node)
node の子孫操作ノードをすべて削除する。
remove_nonancestors_of
remove_nonancestors_of(node)
nodeの非祖先操作ノードをすべて削除する。
remove_nondescendants_of
remove_nondescendants_of(node)
nodeの子孫でない操作ノードをすべて削除する。
remove_op_node
remove_op_node(node)
操作ノードnを削除する。
前任者から後任者へのエッジを追加する。
remove_qregs
remove_qregs(*qregs)
量子レジスタを回路から削除し、基礎となるビットを残す。
レイズ
- DAGCircuitError - qregは QuantumRegister,、または にない
- 回路 -
remove_qubits
remove_qubits(*qubits)
量子ビットを回路から取り除く。 すべてのビットはアイドルでなければならない(MUST)。 指定されたビットの少なくとも1つを参照しているレジスタもすべて削除される。
この方法は、ビットインデックスを修正するためにDAG全体を反復しなければならないため、かなり時間がかかる。
パラメーター
qubits (List[Qubit]) – 除去するビット。
レイズ
DAGCircuitError - 量子ビットは Qubit回路内にないか、アイドル状態でない。
replace_block_with_op
replace_block_with_op(node_block, op, wire_pos_map, cycle_check=True)
ノードのブロックを単一のノードに置き換える。
これは、 DAGOpNodes のブロックを1つの操作に統合するために使用される。 典型的な例は、ゲートのブロックが、そのブロックのユニタリー行列を表す単一の UnitaryGate に統合されることである。
パラメーター
- node_block (List[DAGNode]) – 置換されるノードブロックを表すdagノードのリスト
- op (qiskit.circuit.Operation) – ブロックを
- wire_pos_map (Dict[Bit, int]) – ビットを出力
qargsまたはcargsの位置にマッピングする辞書。 これは、結合されたシングルオペノードの複数のゲートにまたがるアーグ順序を再構築するために必要である。 辞書にBitこれは、conditionまたはtargetフィールドに固有のビットを持つコントロールフロー操作を扱うときに便利である。 - cycle_check (bool) – Trueに設定すると、このメソッドは、提供された
node_blockを単一のノードで置き換えるとサイクルが発生するかどうかをチェックし(これはDAGCircuitを無効にする)、サイクルが発生する場合はDAGCircuitError。 このチェックには走行時間のペナルティが伴う。 入力node_blockが連続したブロックであり、1つのノードに収縮するときにサイクルが発生しないことを保証できる場合、このメソッドの実行時のパフォーマンスを向上させるために、これをFalseに設定することができる。
レイズ
DAGCircuitError - cycle_check が True に設定されていて、指定されたブロックを置き換えるとサイクルが発生する場合、または node_block が空の場合。
戻り値
ブロックを置き換えるオペノード。
戻りの型
reverse_ops
separable_circuits
separable_circuits(remove_idle_qubits=False, *, vars_mode=Ellipsis)
回路をゲートのない量子ビットの集合に分解する。
パラメーター
remove_idle_qubits (bool) – 分離された回路からアイドル量子ビットを削除するかどうかを示すフラグ。 False の場合、各出力回路は self と同じ数の量子ビットを含む。
戻り値
** self を集合に分けた結果の回路**
切断された量子ビットの
戻りの型
リスト [DAGCircuit]
このメソッドが返す各 DAGCircuit このメソッドによって返される各インスタンスには、 self と同じ数の clbits が含まれる。 self のグ ローバル位相情報は、 こ の メ ソ ッ ド で返 さ れ る サブ回路では保持 さ れません。
serial_layers
serial_layers(*, vars_mode=Ellipsis)
この回路のすべてのゲートに対してレイヤーを生成する。
シリアル・レイヤーは、ゲートが1つの回路である。 レイヤーは、layers() と同じ構造を持つ。
size
size(*, recurse=False)
操作の回数を返す。 制御フローが存在する場合、完全な制御フロー経路を静的に知ることができないため、このカウントは推定値に過ぎない可能性がある。
パラメーター
recurse - True の場合、コントロール・フロー操作に再帰する。 既知の長さのイテレータを持つForループは、アンロールでカウントされる。 If-elseブロックは、2つの分岐の両方を合計する。 Whileループは、ループ本体が1回だけ実行されたものとしてカウントされる。 デフォルトは False 。 DAGCircuitError を返します。ほとんど意味のない数値を黙って返すことを避けるためです。
戻り値
回路サイズ
戻りの型
レイズ
DAGCircuitError - 未知の ControlFlowOprecurse=True が存在する場合、または非再帰呼び出しに制御フローが存在する場合。
structurally_equal
structurally_equal(other)
この2つのDAGは構造的に等しいのか?
この関数は、有効なノード・インデックスやエッジの順序などを含め、グラフ構造が互いに正確に同じである場合に真を返す。 これはグラフの等価性よりもはるかに厳しいチェックであり、2つのインスタンスがまったく同じ方法で構築され、操作されているかどうかをテストするのに役立つ。 DAGCircuit インスタンスが全く同じ方法で構築され、操作されているかどうかをテストするのに便利です。 例えば、この方法は、DAGの一連の操作が決定論的かどうかをテストするのに使うことができる。
この方法では、以下のようなトラッキング・メタデータは考慮されない。 metadata または nameなどの追跡メタデータは考慮しないが、内部表現の多くの低レベルの実装の詳細を考慮する。
この方法は一般的に、グラフの等価性チェックよりもはるかに高速であるはずだが、より多くの状況で False 。 このメソッドは、グラフの等価性チェックが False を返すような場合には、決して True を返してはならない。
制御フローの内部表現には技術的な制約があるため、現在のところ、これは制御フローを扱わず、制御フロー操作が存在すれば、たとえそれらが個々に等しくても偽を返す。
The == operator
DAGCircuit__eq__() を実装している。 DAGCircuit を実装している(この同じメソッドは QuantumCircuitの等質性チェックも強化する)。 これはセマンティックなデータフローの等質性チェックを実装するもので、オペレーションが定義された順番にあまり影響されない。 これは通常、ユーザーが平等性に関して気にすることである。
substitute_node
substitute_node(node, op, inplace=False, propagate_condition=None)
DAGOpNode を1回の操作で置き換える。 新しい操作のqargs、cargs、および条件は、置換されるノードから推測される。 新しいオペレーションは、置き換えられたオペレーションの形状と一致しているかチェックされる。
パラメーター
- node (DAGOpNode) – 交換するノード
- op (qiskit.circuit.Operation) – DAGに追加される
qiskit.circuit.OperationDAGに追加するインスタンス - inplace (bool) – オプション、デフォルトは False。 Trueの場合、既存のDAGノードがopを含むように変更される。 そうでない場合は、新しいDAGノードが使用される。
- propagate_condition (bool) – 制御フローの処理動作を制御するために使用されていたレガシーオプションを廃止した。 後方互換性のために残しておいた。 Qiskit 3.0 で削除される。
戻り値
追加された操作を含む新しいノード。
戻りの型
レイズ
- DAGCircuitError - 交換作業が
- location** of the ** target node. -
substitute_node_with_dag
substitute_node_with_dag(node, input_dag, wires=None, propagate_condition=None)
1つのノードをダグに置き換える。
パラメーター
- node (DAGOpNode) – ノードで代用する
- input_dag (DAGCircuit) – ノードに代わる回路
- wires (list[Bit] | Dict[Bit, Bit]) – は入力回路の(qu)ビットの順序を与える。 リストの場合、ビットは
input_dag、まずqargs、次にcargs、そしてconditionsの順でノードワイヤーにマッチする。 辞書の場合、input_dagのビットと、nodeが作用するビットとのマッピング。 - propagate_condition (bool) – 制御フローの処理動作を制御するために使用されていたレガシーオプションを廃止した。 後方互換性のために残しておいた。 Qiskit 3.0 で削除される。
戻り値
は、input_dagのノードIDをselfの新しいノードにマップする。
戻りの型
レイズ
DAGCircuitError - 予期せぬ前任者・後任者が現れた場合
successors
successors(node)
としてノードの後継ノードのイテレータを返す。 DAGOpNodeと DAGOutNodes.
swap_nodes
swap_nodes(node1, node2)
整流などにより、接続されたノードを入れ替える。
パラメーター
- node1 (OpNode) – 前ノード
- node2 (OpNode) – 後継ノード
レイズ
DAGCircuitError - いずれかのノードが OpNode、またはノードが接続されていない場合
to_circuit
to_circuit(*, copy_operations=True)
このDAGを. QuantumCircuitに変換してください。
これは単純なラッパーです dag_to_circuit()。
パラメーター
copy_operations – 個々の命令を完全コピーするかどうか。 に設定すると、操作コスト Falseは安くなりますが、回路内の命令への変更は元の回路に影響を与えます。
戻り値
a この同じ有向 QuantumCircuit 非巡回グラフ(DAG)を表す。
topological_nodes
topological_nodes(key=None, reverse=False)
トポロジー順にノードを降ろす。
パラメーター
- key (Callable) – DAGNodeオブジェクトを受け取り、文字列のソートキーを返す呼び出し可能。 指定しない場合は、ノードのビットqargsとcargsがソートに使われる。
- reverse (bool) – 真の場合、ノードを逆トポロジカル順序でyieldする。
戻り値
トポロジー順のノード
戻りの型
ジェネレータ (DAGOpNode, DAGInNode, または DAGOutNode )
topological_op_nodes
topological_op_nodes(key=None, reverse=False)
opノードをトポロジカルに並べる。
トップオーダーで同点に追いつくため、特定のキーでパスを許す
パラメーター
- key (Callable) – DAGNodeオブジェクトを受け取り、文字列のソートキーを返す呼び出し可能。 指定しない場合は、ノードのqargsとcargsがソートに使われる。
- reverse (bool) – 真の場合、トポロジカル順序の逆順で操作ノードを返す。
戻り値
トポロジー順のopノード
戻りの型
ジェネレータ( DAGOpNode )
two_qubit_ops
two_qubit_ops()
2量子ビット演算のリストを取得する。 スナップショットやバリアなどのディレクティブは無視する。
width
width()
回路が使用する総クビット数 + clbits を返す。 この関数は、以前はreturn len( self._wires ) - self.num_clbits ()という計算で量子ビット数を返していましたが、問題#2564により、以前の DAGCircuit.width ()のセマンティックに代わって、新しい関数 DAGCircuit.num_qubits で量子ビット数+ clbitsを返すように変更されました。