進化
class Evolution(num_modes, operator, time=1.0, *, synthesis=None, atomic=False)
ベース: FermionicGate
演算子の時間発展を実装します。
フェルミオン operator と進化 が与えられたとき time 、このゲートはユニタリー演算を実装する
がユニタリであるためには、 がエルミートでなければならない。 これは発信者の責任であり、確認は行われていません。
フェルミオン空間においてこのゲートを(より小さなゲ Evolution ートの回路に)分解することは任意であり、これを制御するのがこの属性 synthesis です。 このゲートは、フェルミオンから量子ビットへの変換ステージにそのまま渡すことも可能です。このステージでは、ゲート operator に含まれる項の数がいくら多くても、ゲート全体をマッピングして合成します。 参照 synthesis。
(例えば decompose()、によって)分解される際、その方法を決定 synthesis する。 デフォルトでは に設定されており FermionicLieTrotter、に が割り当て operatorgroups られている場合は進化をグループごとに分割し( 「グループ演算子の項:演算子構造の使用 」を参照)、それ以外の場合は項ごとに分割します(個々の因子が互いに可換である場合にのみ正確になります)。 トランスパイレーションの過程で、分解がさらに変化する場合があります。例えば QDriftTrotterization、進化は、その項のランダムなサンプルに置き換えられます。 それが放出するゲートは であるため atomic、 synthesis はもはやそれらには適用されません。
状態ベクトルによるシミュレーション経路は、を経由しません synthesis。状態ベクトル全体を正確 operator に指数関数的に変換するからです。 したがって、このゲートをシミュレートしてもトロッター誤差は生じないが、分解された回路では一般的に生じる。
このゲートのインスタンスの初期化は、以下に挙げる引数を使用して行うことができます。
パラメーター
- num_modes (int) – このゲートが作用するフェルミオンモードの数。
- operator (OperatorTrait) – 作用を受けるフェルミオンモードを時間発展させるためのエルミート演算子 。
- time (float) – 進化時間 に、 の指数を入力します。負の値を入力すると、時間が逆方向に遡って進化します。
- synthesis (FermionicEvolutionSynthesis | None) – このゲートを分解する場合(もし分解されるのであれば)、その際に用いるフェルミオン間合成法。
None(デフォルトの場合)、インスタンスFermionicLieTrotterが使用されます。 - atomic (bool) – このゲートが、フェルミオン空間においてこれ以上分解してはならない、完全に分解された因数であるかどうか。
atomicを参照してください。
属性
atomic
このゲートが、これ以上分解してはならない要素であるかどうか。
A は、自身が放出する因子に「原子」というマークを FermionicEvolutionSynthesis 付けます。なぜなら、それらは A が実行することを選択した分裂の結果であり、それらをさらに分解してしまうと、その選択が無効になってしまうからです。 単一の演算子項の展開が原子的なのは、これ以上分割できるものが残っていないという、より強力な理由によるものである。
アトミックゲートには定義がまったくないため、それを展開するのではなく、そのまま decompose() 残す。 フェルミオンからクビットへのレベルでは、依然として通常通りマッピングと合成が行われており、この段階で因子が実際の演算に変換されます。
これは読み取り専用です。その理由は、. と同じです synthesis。
synthesis
このゲートを分解するフェルミオン間合成法。
これは読み取り専用です。ゲートの定義は一度構築されるとキャッシュされるため、事後に割り当てられた合成手法は反映されません。 その代わりに、コンストラクタに渡してください。
operator
作用を受けたフェルミオンモードを時間発展させる際の演算子。
方法
inverse
inverse(annotated=False)
このゲートの逆関数である を返します。
パラメーター
annotated (bool) – 無視された。 このゲートの逆は別のゲートであるため Evolution、それがになる必要は決してない AnnotatedOperation。
戻り値
否定された時間に対して同じ演算子を変化させるアン・ Evolution ゲート。
戻りの型
プロトコルの手法
_apply_unitary_placed_
_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)
オペレータをグローバルモードに再ラベル付けした exp(-i * time * operator) 後に適用されます。
演算子はグローバルモードに再ラベル付けされ、に変換されてに渡し ffsim.FermionOperatorffsim.linear_operator() 、その後、を介してベクトルに適用される scipy.sparse.linalg.expm_multiply()。 まだ ではない演算子は、まず プロトコル SupportsFermionOperator を通じて変換される FermionOperator ため、このパッケージのあらゆる演算子型を進化させることができます。
パラメーター
- vec (np.ndarray) – 作用させる状態ベクトル。
- norb (int) – グローバル状態ベクトルの空間軌道数。
- nelec (int |tuple[int, int]) – スピンを持たない系の場合は単一の整数、あるいはスピンαおよびスピンβのフェルミオンの数を表す整数のペアのいずれか。 整数を選ぶと、スピンなしモードの解釈(演算子のモード
norbはアルファ軌道である)が選択され、ペアを選ぶと、演算子のモード2 * norbのスピンあり解釈(orb, spin)が選択される。 - copy (bool) – 操作を行う前にベクトルをコピーするかどうか。
- freg_indices (list[int]) – このゲートのローカルモードがマッピングされる絶対(グローバル)モードのインデックス。 この演算子は、適用される前に、そのローカルモードからこれらのグローバルモードへと再ラベル付けされます。これは、トランスパイラの合成パスを反映したものです。
戻り値
変換後のベクトル。
昇給
- MissingOptionalLibraryError – ffsim がインストールされていない場合。
- ValueError – 演算子がセクター
(norb, nelec)を保存しない場合。 Evolving under は、 がセクターをそれ自体に写像operatorする場合にexp(-i * time * operator)のみユニタリとなるため、ffsim は、粒子数もスピンの z 成分も保存しない演算子を拒否する。
戻りの型
np.ndarray