BlockCollector
class qiskit.dagcircuit.BlockCollector(dag)
ベース: object
このクラスは、DAG(有向非巡回グラフ)を、特定の条件を満たすノードのブロックに分割するためのさまざまな戦略を実装しています。 これは、DAGの および DAGDependency DAGCircuit の表現の両方で機能し、後者はノード間の可換性を考慮に入れています。
DAGDependencyからノードを収集することは、一般的に、より最適な結果を導くが、事前にDAGDependencyを構築する必要があるため、時間がかかる。 したがって、DAGCircuitはトランスパイラの設定を低くして使用し、DAGDependencyはトランスパイラの設定を高くして使用すべきである。
一般的に、最大ブロックを集める方法は複数ある。 ここで使用されるアプローチは、「DAGの入力ノードから出発して、特定の基準に一致するノードの最大のブロックを貪欲に収集する」という形式である。 詳細については https://github.com/Qiskit/qiskit/issues/5775.
パラメーター
dag (Union[DAGCircuit, DAGDependency]) – 入力DAG。
レイズ
DAGCircuitError - の場合、入力オブジェクトはDAGではない。
方法
collect_all_matching_blocks
collect_all_matching_blocks(filter_fn, split_blocks=True, min_block_size=2, split_layers=False, collect_from_back=False, max_block_width=None)
与えられたフィルタリング関数filter_fnにマッチする全てのブロックを収集する。 これは、filter_fnにマッチしない最大のブロックを見つけ、次にfilter_fnにマッチする最大のブロックを見つけ、というように、未回収のノードがなくなるまで繰り返し見つける。 直感的に言えば、非マッチング・ノードの大きなブロックを見つけることは、後でマッチング・ノードの大きなブロックを見つけるのに役立つ。
ブロックが収集された後、必要に応じて精製することができます。 このオプションは、収集したブロックを互いに交わらない split_blocks 量子ビット部分集合に分割することを可能にします。 このオプションは、収集されたブロックを重複 split_layers しない命令のレイヤーに分割することを可能にします。 このオプションは、ブロックが収集対象 min_block_size となるための最小ゲート数を指定します。 このオプションは、ブロックを定義できる量子 max_block_width ビットの最大数を指定します。
デフォルトでは、ブロックは回路の入力から出力に向かう方向に収集される。 オプション( collect_from_back )により、この方向を変更することができる。つまり、出力から回路の入力に向かってブロックを集めることができる。
マッチするブロックのリストのみを返す。
collect_matching_block
collect_matching_block(filter_fn, max_block_width)
与えられたフィルタリング関数にマッチする入力ノードの最大ブロック(つまり、 _in_degree が 0 に等しいノード)を反復的に収集する。 その例としては、スワップ・ゲートのブロック、リニア・ゲート(CXとSWAP)のブロック、クリフォード・ゲートのブロック、1量子ビット・ゲートのブロック、2量子ビット・ゲートのブロックなどを集めることが挙げられる。 ここで「反復的」とは、ノードが収集されると、その直後の各ノードの _in_degree が1ずつ減少し、より多くのノードが入力されるようになり、現在のブロックに収集されるようになることを意味する。 集めたノードのブロックを返す。
パラメーター
戻りの型
リスト [ DAGOpNode | DAGDepNode ]