CollectMultiQBlocks
class qiskit.transpiler.passes.CollectMultiQBlocks(*args, **kwargs)
ベース: AnalysisPass
量子ビットのグループに作用する中断のないゲートシーケンスを収集する。 max_block_size 一つのゲート群で処理できる量子ビットの最大数を指定する
DAGを走査し、量子ビットのグループに連続して作用するゲートのブロックを見つける。 ブロックを property_set 、ブロックのリストとして記述する:
[[g0, g1, g2], [g4, g5]]ブロックは有効なトポロジー順序で報告される。 さらに、各ブロック内のゲートもトポロジー順に報告される。一部のゲートは、どのブロックにも存在しないかもしれない(例えば、オペランドの数が max_block_size より大きい場合)
デフォルトでは、ブロックはDAGの入力から出力に向かう方向に収集される。 オプション collect_from_back 、この方向を変更することができる。つまり、出力から入力に向かってブロックを集めることができる。 ブロックはまだ有効なトポロジー順序で報告されていることに注意。
ゲートが処理される際にブロックを維持するために、不連続集合ユニオンデータ構造(DSU)が使用される。 このデータ構造は、常に各クォビットを集合に指し示し、集合は現在のブロックに対応する。 これらは時間の経過とともに変化するものであり、データ構造によってこれらの変更を素早く行うことができる。
属性
is_analysis_pass
パスが分析パスかどうかをチェックする。
パスが AnalysisPass,、パスがDAGを分析し、その分析結果をプロパティセットに書き込むことができることを意味する。 この種のパスでは、DAGの変更は許されない。
is_transformation_pass
パスが変形パスかどうかをチェックする。
パスが TransformationPass, の場合、そのパスはDAGを操作することはできるが、プロパティセットを変更することはできない(ただし、読み取ることはできる)ことを意味する。
方法
execute
execute(passmanager_ir, state, callback=None)
入力Qiskit IRに対して最適化タスクを実行する。
パラメーター
- passmanager_ir (Any) – Qiskit IRを最適化する。
- state (PassManagerState) – パスマネージャー自身によるワークフロー実行に関連する状態。
- callback (Callable | None) – 最適化タスクの実行ごとに呼び出されるコールバック関数。
戻り値
Qiskit IRとワークフローの状態を最適化。
戻りの型
タプル [ Any, PassManagerState ]
find_set
find_set(index)
アイテムの集合のルートを見つけるDSU関数 親が自分である場合、自分がルートである。 そうでなければ、再帰的に親のルートを探す。 その後、私の親を私のルートに割り当て、将来の再帰を節約する。
name
run
run(dag)
ダグに CollectMultiQBlocks。
ブロックは、ブロック内のすべてのゲートが同じ量子ビット集合に作用し、回路内で隣接するように、トポロジカル・ソート順に「オペ」ノードを含む。
ブロックは、回路内の "cx "ゲートの前任者と後任者を調べることによって構築される。 u1, u2, u3, cx, id ゲートが含まれる。
実行後、 property_set['block_list'] は、 DAGNode オブジェクトのタプルのリストに設定される
union_set
union_set(set1, set2)
2つの集合を和集合とするDSU関数。各集合の根を求めよ。 次に、一方のセットをもう一方の親として設定し、両方のセットを関連付けます。 実行時間を短縮するために、小さい集合を大きい集合に統合する
update_status
update_status(state, run_state)
ワークフローのステータスを更新する。
パラメーター
- state (PassManagerState) – 更新するマネージャーの状態を渡す。
- run_state (RunState) – 現在のタスクの完了状況。
戻り値
パスマネージャーの状態を更新。
戻りの型