StarPreRouting
class qiskit.transpiler.passes.StarPreRouting
ベース: TransformationPass
スターからリニアへのプレルーティング
このパスは論理最適化パスであり、 2q ゲートのみのスター接続サブサーキットを、スワップを伴う線形接続等価回路として書き換える。
例:
from qiskit.circuit import QuantumCircuit from qiskit.transpiler.passes import StarPreRouting qc = QuantumCircuit(10) qc.h(0) qc.cx(0, range(1, 5)) qc.h(9) qc.cx(9, range(8, 4, -1)) qc.measure_all() StarPreRouting()(qc).draw("mpl")![]()
このパスは、セクションIVで説明した同様のパスにヒントを得たものである:C. キャンベルら 「Superstaq: Deep Optimization of Quantum Programs," 2023 IEEE International Conference on Quantum Computing and Engineering (QCE), Bellevue, WA, USA, 2023, pp.1020-1032, doi: 10.1109/QCE57702.2023.00116.
属性
is_analysis_pass
パスが分析パスかどうかをチェックする。
パスが AnalysisPass,、パスがDAGを分析し、その分析結果をプロパティセットに書き込むことができることを意味する。 この種のパスでは、DAGの変更は許されない。
is_transformation_pass
パスが変形パスかどうかをチェックする。
パスが TransformationPass, の場合、そのパスはDAGを操作することはできるが、プロパティセットを変更することはできない(ただし、読み取ることはできる)ことを意味する。
方法
collect_all_matching_blocks
collect_all_matching_blocks(dag, min_block_size=2)
与えられたフィルタリング関数filter_fnにマッチする全てのブロックを収集する。 これは、filter_fnにマッチしない最大のブロックを見つけ、次にfilter_fnにマッチする最大のブロックを見つけ、というように、未回収のノードがなくなるまで繰り返し見つける。 直感的に言えば、非マッチング・ノードの大きなブロックを見つけることは、後でマッチング・ノードの大きなブロックを見つけるのに役立つ。 オプション min_block_size は、収集するブロックの最小ゲート数を指定する。
デフォルトでは、ブロックは回路の入力から出力に向かう方向に収集される。 オプション( collect_from_back )により、この方向を変更することができる。つまり、出力から回路の入力に向かってブロックを集めることができる。
マッチするブロックのリストのみを返す。
collect_matching_block
collect_matching_block(dag, filter_fn)
与えられたフィルタリング関数にマッチする入力ノードの最大ブロック(つまり、 _in_degree が 0 に等しいノード)を反復的に収集する。 その例としては、スワップ・ゲートのブロック、リニア・ゲート(CXとSWAP)のブロック、クリフォード・ゲートのブロック、1量子ビット・ゲートのブロック、2量子ビット・ゲートのブロックなどを集めることが挙げられる。 ここで「反復的」とは、ノードが収集されると、その直後の各ノードの _in_degree が1ずつ減少し、より多くのノードが入力されるようになり、現在のブロックに収集されるようになることを意味する。 集めたノードのブロックを返す。
determine_star_blocks_processing
determine_star_blocks_processing(dag, min_block_size)
param dag: スターブロックを決定するダグ :type dag:param min_block_size: スターブロック内の2量子ビットゲートの最小数 :type min_block_size: int
戻り値
与えられたダグ内のスターブロックのリスト Union[ [ListDAGOpNode], [ListDAGDepNode] ]: 処理順序を指定する操作のリスト
戻りの型
[リストスターブロック]
パラメーター
- dag (DAGCircuit |DAGDependency)
- min_block_size (int)
execute
execute(passmanager_ir, state, callback=None)
入力Qiskit IRに対して最適化タスクを実行する。
パラメーター
- passmanager_ir (Any) – Qiskit IRを最適化する。
- state (PassManagerState) – パスマネージャー自身によるワークフロー実行に関連する状態。
- callback (Callable | None) – 最適化タスクの実行ごとに呼び出されるコールバック関数。
戻り値
Qiskit IRとワークフローの状態を最適化。
戻りの型
タプル [ Any, PassManagerState ]
name
run
run(dag)
DAGCircuitでパスを実行する。 これはパス開発者によって実装される。
パラメーター
dag - パスが実行されるダグ。
レイズ
NotImplementedError - パスが未実装の場合。
star_preroute
star_preroute(dag, blocks, processing_order)
DAG 内のスター ブロックと、これらのスター ブロック内のノードの処理順序を返します。:param dag: スター プレルーティングを実行する DAG。:type dag: DAGCircuit または DAGDependency。:param blocks: 指定された DAG 内のスター ブロックのリスト。:type blocks: List [StarBlock。:param] processing_order: 指定する操作のリスト。:type processing_order: Union[List [DAGOpNode]、 List [DAGDepNode] ]。:param processing order:
戻り値
qubit_mapping: プレルート後の最終的な量子ビットマッピング
戻りの型
new_dag
update_status
update_status(state, run_state)
ワークフローのステータスを更新する。
パラメーター
- state (PassManagerState) – 更新するマネージャーの状態を渡す。
- run_state (RunState) – 現在のタスクの完了状況。
戻り値
パスマネージャーの状態を更新。
戻りの型