FermionicTrotterization
class FermionicTrotterization(synthesis, *, apply=True, filter=None)
基底: GenericPass[DAGCircuit, DAGCircuit]
フェルミオン空間におけるゲ Evolution ートのトロッター化を行うトランスパイレーションパス。
各ゲート Evolution は、フェルミオン空間において分解される合成法を備えている(参照 Evolution.synthesis)。 ゲートごとに設定するということは、ゲートを構成するすべての要素(内部で独自のゲートを構築する や UCC も含む UCJ)に対して、その選択を反映させることを意味します。 このパスでは、代わりに回路内の Evolution すべての要素に対して1つのメソッドを適用するため、トランスパイレーション・パイプライン全体に対して一度だけ選択を行えば済みます:
pm.optimization = FermionicPassManager(
[FermionicTrotterization(FermionicSuzukiTrotter(order=2, reps=4))]
)選択された各ゲートは、そのメソッドが生成する因数に置き換えられるため、このパスでは式が選択されると同時に、その式の実行も行われる。 ゲート Evolution ではないノードは、オプションのによって拒否されたノードと同様に、そのまま残されます filter。
このパスを再度実行しても問題はありません。合成手法が生成する因子はであり Evolution.atomic、アトミックゲートは終端因子であるため、このパスではさらに分割されることなくそのまま残されます。 この同じ例外により、このパスはの出力の固定点となります QDriftTrotterization。この出力のサンプリングされたゲートは、ランダムな抽出が実行されるトロッター化そのものであるため、 アトミックです。
を に apply 設定すると False 、メソッドのみを選択し、展開は Qiskit の や Decompose decompose() 呼び出しなど、他の手段に委ねられます。 拡張されないゲートは、フェルミオンから量子ビットへの段階にそのまま到達し、そこで読み出される Evolution.synthesis ことなくマッピングされることに注意してください。その場合、どの合成手法を用いても、出力はすべて同一になります。
すべての合成法が、すべての操作者に適しているわけではありません。 演算子がすべて互いに可換である(例えば UCJ、の対角クーロン演算子など)ような は Evolution 、任意の次元で厳密に合成されるため、高次になるほど単に深さが増すだけである。 を使用して、パスを恩恵を受けるゲートに限定 filter します。
分割 groups を伴わない演算子を展開すると、項ごとに分解されますが、単独の はエルミート演算子ではないため、その指数関数はユニタリではありません。 マッピングされた演算子が に到達するまでは何もエラーは発生せず PauliEvolutionGate、そこで が発生します ValueError: Operator contains complex coefficients, which are not supported。 共役対となる群を割り当てることによって、各因子がハーミティアンとなるのです。
このトランスパイラー・パスの初期化は、以下に挙げる引数を使用して行うことができます。
パラメーター
- synthesis (FermionicEvolutionSynthesis) – 回路のゲート
Evolutionに適用するフェルミオン間合成法。 - apply (bool) – 選択された各ゲートを因数に展開するかどうか
synthesis。 の場合False、ゲートには のみがタグ付けされsynthesis、後で別の何かがそれを展開する必要があります。 参照apply。 - filter (Callable[[DAGOpNode], bool] | None) – どのノード
Evolutionsynthesisに適用するかを決定する、オプションの述語。 これは で呼び出されDAGOpNode、 が返されない限り、そのノードは変更されませんTrue。None(デフォルトの場合)、すべてのノードEvolutionが選択されます。
属性
synthesis
選択されたゲートに適用されたフェルミオン間合成法。
apply
選択された各ゲートを因数に展開するかどうかが、結果 synthesis をもたらす。
これがの場合 False、このパスはメソッドのみを選択します。つまり、選択された各ゲートに を付与し synthesis 、展開は、Qiskitの や Decompose decompose() 呼び出しなど、後でそのゲートの定義を構築する処理に委ねます。 なお、一度も展開されないゲートは、フェルミオンからクビットへの段階にそのまま到達し、そこで読み出される Evolution.synthesis ことなくマッピングされるため、どの合成手法を用いても同一の出力が得られることに留意されたい。
filter
方法
run
run(dag)
このトランスパイル処理を実行します。
によって受け入れられたすべてのノード Evolution は、が生成 synthesis する因子に置き換えられる filter か、あるいは(が apply の場合 False)単にを伝達するだけの同等のゲートに置き換えられる synthesis。 その他のノードはすべてそのままにしておきます。 入力DAGはその場で変更されます。
パラメーター
dag (DAGCircuit) – フェルミオンベースの命令を用いた入力回路。 インスタンス FermionicGate が である DAGOpNode 場合のみ、これ op らがサポートされます。
戻り値
依然としてフェルミオンレジスタに作用している出力回路。
戻りの型
継承されるメソッド
execute
execute(passmanager_ir, state, callback=None)
入力された Qiskit IR に対して最適化タスクを実行します。
パラメーター
- passmanager_ir (IR) – 最適化対象のQiskit IR。
- state (PassManagerState) – パスマネージャー自身によるワークフローの実行に関連する状態。
- callback (Callable[[Task, IR_OUT, PropertySet, float, int], None] | None) – 最適化タスクの実行ごとに呼び出されるコールバック関数。
戻り値
Qiskit IRの最適化とワークフローの現状。
戻りの型
タプル [ IR_OUT, PassManagerState ]
name
update_status
update_status(state, run_state)
ワークフローのステータスを更新します。
パラメーター
- state (PassManagerState) – 更新対象のマネージャーの状態を渡します。
- run_state (RunState) – 現在のタスクの完了状況。
戻り値
パスマネージャーの状態を更新しました。
戻りの型