Skip to main content
IBM Quantum Platform

伝搬

pauli_prop.propagation

パウリ伝播を行うための関数。

RotationGates

class RotationGates(gates, qargs, thetas)

GitHub

ベース: NamedTuple

.の中間的な最小表現 QuantumCircuit

サポートされているパウリ回転:rx/rxx、ry/ryy、rz/rzz、 PauliEvolutionGate

RotationGates(gates, qargs, thetas) の新しいインスタンスを作成する

パラメーター

append_circuit_instruction

append_circuit_instruction(inst, qargs, num_qubits, *, clifford=None)

GitHub

回路命令を解析し、そのデータを内部リストに追加します。

パラメーター

  • inst (CircuitInstruction) – 解析して追加する回路命令
  • qargs (list[int]) – その回路における命令の量子ビットインデックスの一覧
  • num_qubits (int) – この命令を含む回路の量子ビット数
  • clifford (Clifford | None) – 提供された命令を移動させる対象となる、オプションのクリフォード。 クリフォード演算は、回路内のすべての量子ビットに対して作用しなければならない。

昇給

  • ValueError – 回路内で未サポートのゲートが検出されました
  • ValueError – 指定された場合、回路内のすべての量子ビットに対して作用 clifford しなければならない

戻りの型

なし

count

count(value, /)

値の出現回数を返します。

gates

型: list[ndarray[tuple[int,...], dtype[bool]]]

ZX-calculus風のゲートの表現。

index

index(value, start=0, stop=9223372036854775807, /)

値の最初のインデックスを返す。

値が存在しない場合、 ValueError が発生します。

qargs

種類: list[list[int]]

各ゲートによって操作される量子ビットのインデックス。

thetas

タイプ: list[float]

すべてのゲートの回転角度。

circuit_to_rotation_gates

circuit_to_rotation_gates(circuit)

GitHub

指定された回路を中間表現に変換します。

PauliLindbladError 命令として指定される、パウリ回転ゲート(「rx/rxx」、「ry/ryy」、「rz/rzz」、 ‘PauliEvolutionGate’ )およびパウリ・リンドブラッド誤差チャネルをサポートしています。

パラメーター

circuit (QuantumCircuit) –

変換する回路。 パウリ回転(rx/rxx、ry/ryy、rz/rzz、 PauliEvolutionGate )を含む場合があり、必要に応じて PauliLindbladError 命令も含まれる。

戻り値

回路に PauliLindbladError 命令が含まれていない場合は A インスタンス RotationGates を返し、それ以外の場合は A インスタンス NoisyRotationGates を返します。

昇給

ValueError –. でサポートされていないゲートが検出された場合 circuit

戻りの型

RotationGates | NoisyRotationGates

propagate_through_rotation_gates

propagate_through_rotation_gates(operator, rot_gates, max_terms, atol, frame)

GitHub

疎なパウリ演算子 OO を、回路(で表される rot_gatesUU を通じて伝播させる。

シュレーディンガー伝播については: UOUU O U^{\dagger}。ハイゼンベルク伝播については: UOUU^{\dagger} O U

が の NoisyRotationGates インスタンス rot_gates である場合、その演算子は各ノイズ生成器を通じて伝播されます。 cic_i における各項に関連する係数は operator、各反交換誤差発生源のレート rir_i に応じて減衰される: ci=exp(2.0ri)c_i *= exp(-2.0 * r_i)

一般に、回路内を伝播するために必要なメモリと時間は、パウリ基底における演算子の項数が指数関数的に増加するため、回路内の演算数に比例して指数関数的に増加する。 この指数関数的な難易度を抑制するために、小さなパウリ項を切り捨てる(すなわち、それらをゼロに設定する)ことが可能であり、その結果、切り捨てられた項の大きさに比例したバイアスが生じる。 回路内の各演算を経て伝播した後、2つのパラメータに関して項が切り捨てられます:

  • 最も max_terms 大きなパウリ成分のみが保持され、それより小さい項は切り捨てられます。 このオプションを使用すると、計算にどれだけの時間とメモリが必要になるかを事前に見積もることができます。
  • 絶対値が 未満の項は切り捨てられます atol (ゼロに設定されます)。

この関数は、フルサイズの演算子および演算子バッファ用にメモリ領域を事前に確保します。 用語 max_terms を含むオペレータを格納するのに十分なメモリが確保されていることを確認するのは、呼び出し側の責任です。 が の max_terms とき None、メモリおよび時間要件は、通常、回路内の演算数に比例して指数関数的に増加する。

パラメーター

  • operator (SparsePauliOp) – 伝播させる演算子
  • rot_gates (RotationGates | NoisyRotationGates) – の形で表される回路 RotationGates
  • max_terms (int) – 演算子が伝播される際に含むことができる項の最大数
  • atol (float) – この値よりも係数の絶対値が小さい項は、演算子の伝播の際に演算子に加算されません。 このパラメータは、返される演算子の正確性を保証するものではありません。
  • frame (str) –s シュレーディンガー発展 h ハイゼンベルク発展

戻り値

すべての切り捨て係数の進化した演算子および1-ノルム。

昇給

戻りの型

tuple [ SparsePauliOp, float ]

propagate_through_circuit

propagate_through_circuit(operator, circuit, max_terms, atol, frame)

GitHub

スパースなパウリ演算子 OO を、回路 UU を通じて伝播させる。

PauliLindbladError 命令として指定される、パウリ回転ゲート(「rx/rxx」、「ry/ryy」、「rz/rzz」、 ‘PauliEvolutionGate’ )およびパウリ・リンドブラッド誤差チャネルをサポートしています。

シュレーディンガー伝播については: UOUU O U^{\dagger}。ハイゼンベルク伝播については: UOUU^{\dagger} O U

にパウリ・リンドブラッドノイズに関する指示が含ま circuit れている場合、その演算子は各ノイズ発生器を通じて伝播されます。 cic_i における各項に関連する係数は operator、各反交換誤差発生源のレート rir_i に応じて減衰される: ci=exp(2.0ri)c_i *= exp(-2.0 * r_i)

一般に、回路内を伝播するために必要なメモリと時間は、パウリ基底における演算子の項数が指数関数的に増加するため、回路内の演算数に比例して指数関数的に増加する。 この指数関数的な難易度を抑制するために、小さなパウリ項を切り捨てる(すなわち、それらをゼロに設定する)ことが可能であり、その結果、切り捨てられた項の大きさに比例したバイアスが生じる。 回路内の各演算を経て伝播した後、2つのパラメータに関して項が切り捨てられます:

  • 最も max_terms 大きなパウリ成分のみが保持され、それより小さい項は切り捨てられます。 このオプションを使用すると、計算にどれだけの時間とメモリが必要になるかを事前に見積もることができます。
  • 絶対値が 未満の項は切り捨てられます atol (ゼロに設定されます)。

この関数は、フルサイズの演算子および演算子バッファ用にメモリ領域を事前に確保します。 用語 max_terms を含むオペレータを格納するのに十分なメモリが確保されていることを確認するのは、呼び出し側の責任です。 が の max_terms とき None、メモリおよび時間要件は、通常、回路内の演算数に比例して指数関数的に増加する。

パラメーター

  • operator (SparsePauliOp) – 伝播させる演算子
  • circuit (QuantumCircuit) – オペレータが伝播する回路
  • max_terms (int) – 演算子が伝播される際に含むことができる項の最大数
  • atol (float) – この値よりも係数の絶対値が小さい項は、演算子の伝播の際に演算子に加算されません。 このパラメータは、返される演算子の正確性を保証するものではありません。
  • frame (str) –s シュレーディンガー発展 h ハイゼンベルク発展

戻り値

進化したオペレーター

昇給

戻りの型

tuple [ SparsePauliOp, float ]

propagate_through_operator

propagate_through_operator(op1, op2, max_terms=None, coerce_op1_traceless=False, num_leading_terms=0, frame='s', atol=0.0, search_step=4)

GitHub

演算子「 op1 」または「 OO 」を、別の演算子「 op2 」または「 UU 」を通じて展開します。

シュレーディンガー方程式の時間発展については、 UOUU O U^{\dagger} を参照のこと。

ハイゼンベルク進化については、 UOUU^{\dagger} O U を参照のこと。

進化は、 UiOjUkU_i O_j U_k という形の項を合計することで、パウリ基底において行われる(ダガー記号は無視する。以下の注を参照)。 このような項の数は、演算子のサイズに3乗で比例します(len( op1 ) × len( op2 ) × 2)。また、一般に多くの重複するパウリ項が含まれます。

max_terms を設定すると、近似結果が得られ、係数の絶対値が最大である max_terms 個の項のみが計算されます。 この方法の方がはるかに高速ですが、小さな項が切り捨てられるため、多少の誤差が生じます。

近似計算は、保持すべき項の検索と、それらの項の計算という2つの部分から成ります。 検索回数を大幅に search_step (3乗)増やすと、検索速度が向上しますが、その代償として精度が多少低下することがよくあります。

保持された項に含まれる一部のパウリが、切り捨てられた項にも現れていた可能性がある。 このような切り捨てられた項は決して計算されないため、同じパウリ状態を共有する保持項に統合されることはあり得ない。 したがって、 は非単調となり得る n``th-largest term in the approximate result is not guaranteed to equal the nth-largest term in the exact result. Likewise, convergence to the exact result with increasing ``max_terms

OO はエルミートであるものと仮定する( OjO_j = OjO_j^{\dagger}

パラメーター

  • op1 (SparsePauliOp) – 伝播させる演算子

  • op2 (SparsePauliOp) – 伝播を行うオペレータ

  • max_terms (int | None) –

    そうでない場合 None、パウリ空間における3つの演算子の直積のうち、最も max_terms 大きな項のみを含んだ近似結果が得られる。

    max_terms であり None 、量子ビットの数が < 12, the propagation will be performed in the computational basis using matrix multiplication. For systems > 12量子ビットである場合、すべてのパウリ項が計算され、合計される。しかし、重複する項が多数存在するため、通常、これは厳密な進化を計算する上で適切な方法とは言えない。

  • coerce_op1_traceless (bool) – 出力演算子から恒等項を除去するかどうかを示すフラグ。

  • num_leading_terms (int) – の各項を、の各項ごとに活用 op1 する項の数 op2。 含まれる項の集合は、 j<numleadingtermsj < num_leading_terms となるように、項の集合 UiOjUiU_i O_j U_i^{\dagger} との和集合を含むように拡張される。これにより、ある程度の計算時間コストを伴うものの、出力の O の主要な成分に対する精度を向上させることができる。

  • frame (str) – s:シュレーディンガー発展、h:ハイゼンベルク発展

  • atol (float) – の閾値未満の大きさを持つ、進化演算子内の項は切り捨てられます atol

  • search_step (int) – 3D の非常に大規模な空間を高速に検索し、製品に含まれる最も max_terms 大きな項を特定するためのパラメータ。 このステップサイズを 1 より大きく設定すると、その探索速度は 倍に加速しますが search_step**3、その代償として精度が低下する可能性があります。 この誤差は、. については小さいと予想される search_step**3 << max_terms

戻り値

変換された演算子

昇給

  • ValueErrorframe は でも でも s ない h
  • ValueError – は search_step 正ではない。
  • ValueError – 無効な値が含ま max_terms れています。

戻りの型

SparsePauliOp

evolve_through_cliffords

evolve_through_cliffords(circuit)

GitHub

回路内のすべてのクリフォードゲートを通じて、クリフォードでないすべての命令を(シュレーディンガー・フレームで)進化させる。

これにより、認識されたすべてのクリフォードゲートが回路の先頭に移動し、パウリ回転ゲート(例: RxGate, RzzGate, PauliEvolutionGate)および PauliLindbladError チャネルの基底が更新されます。 その他の操作はサポートされていません。 クリフォードによるパウリの進化に関する詳細については、 Pauli.evolve のドキュメントを参照してください。

この効果は、 arXiv:2306.04797 に記載されているクリフォード相互作用図に移行する場合と似ていますが、すべての回転角の大きさを π/4\leq \pi/4 に写像することはありません。

この関数は、回路のクリフォード部分と非クリフォード部分を表す2つのオブジェクトを返します。

パラメーター

circuit (QuantumCircuit) – 「」を変換する QuantumCircuit 。 パウリ回転ゲート( PauliLindbladError 回路に量子チャネルとして追加されるもの)および認識されたクリフォードゲートのみを含めることができる。

戻り値

  • クリフォード演算 — 回路の最初の部分を表す、単一のオールキュービット ・クリフォード演算
  • QuantumCircuit - 回路の残りの、変換された部分を含む回路

昇給

ValueError – 入力回路に未サポートのゲートが含まれています

戻りの型

タプル [ Clifford, QuantumCircuit ]

このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。