回路合成
qiskit.synthesis
進化の統合
EvolutionSynthesis() | 進化合成アルゴリズムのインターフェイス。 |
ProductFormula(オーダー[、レップ、...] ) | 非共約作用素指数分解のための積公式基底クラス。 |
LieTrotter([レップス、挿入バリア、...] ) | リー・トロッター積の公式。 |
SuzukiTrotter([オーダー、レップ、...] ) | 高次の)スズキ・トロッター積の公式。 |
MatrixExponential() | 行列の指数化とユニタリー合成による厳密な演算子展開。 |
QDrift([レップス、挿入バリア、...] ) | QDrift Trotterization法は、Trotterizationの各項を、その重みに比例した確率でランダムに選択する。 |
線形関数合成
synth_cnot_count_full_pmh
qiskit.synthesis.synth_cnot_count_full_pmh(state, section_size=None)
Patel、Markov、Hayes法を用いて、All-to-Allアーキテクチャの線形可逆回路を合成する。
この関数は、 行列で指定された、全対全アーキテクチャの線形可逆回路を最適合成するための Patel, Markov and Hayes [アルゴリズムを]実装したものである。
パラメーター
- state (list[list[bool]] | ndarray[bool]) – 入力回路の状態を表すブール値の可逆行列。
- section_size (int | None) – Patel-Markov-Hayesアルゴリズムにおける各セクションのサイズ [1].
None、 、 [1] 式で与えられる行操作数の上限をほぼ最小化する 。 (3).
戻り値
線形変換を実装したCX専用回路。
レイズ
ValueError - section_size 、列数より大きい場合。
戻りの型
参考文献
- パテル、ケタンN、 Igor L. Markov, and John P. Hayes, Optimal synthesis of linear reversible circuits, Quantum Information & Computation 8.3 (2008):282-294. arXiv:quant-ph/0302002 [quant-ph].
synth_cnot_depth_line_kms
qiskit.synthesis.synth_cnot_depth_line_kms(mat)
Kutin、Moulton、Smithline法を用いて、線形最近傍アーキテクチャの線形可逆回路を合成する。
[1の]第7節にある線形可逆回路の合成アルゴリズム。 このアルゴリズムでは、 量子ビットの線形可逆回路を、深さ最大 のCXゲートを用いて、線形最近傍アーキテクチャ上で合成する。
パラメーター
mat (ndarray[bool]) – ブール型の可逆行列。
戻り値
合成された量子回路。
レイズ
QiskitError - mat が反転可能でない場合。
戻りの型
参考文献
- クティン、S、 モールトン、D. スミスライン、L、 遠距離での計算、Chicago J. Theor. コンピュート 科学..、 vol. 2007, (2007)、 arXiv:quant-ph/0701194
線形位相合成
synth_cz_depth_line_mr
qiskit.synthesis.synth_cz_depth_line_mr(mat)
MaslovとRoettelerに基づく、線形最近傍(LNN)接続のためのCZ回路の合成。
このメソッドは、回路内の量子ビットの順序を戻し、以下の回路を含む回路を返すことに注意してください。 CXGateと位相ゲート(SGate, SdgGate または ZGate).
パラメーター
mat (ndarray) – CZ回路を表す、ブール値の2次元上対角行列。 mat[i][j]=1 for i<j ゲートを cz(i,j) 表す。 読み込まれるのは上部の三角形のみであり、対角線と下部の三角形は影響を与えません。
戻り値
LNN接続のための深さ のCZ回路の回路実装。
戻りの型
参考文献
- Dmitri Maslov、Martin Roetteler、 「Bruhat 分解と量子回路変換による短縮安定回路」、 arXiv:1705.09176。
synth_cx_cz_depth_line_my
qiskit.synthesis.synth_cx_cz_depth_line_my(mat_x, mat_z)
MaslovとYangに基づく、2量子ビット深さ最大 5n の線形最近傍(LNN)接続のための-CZ-CX-回路の共同合成。 この方法は、位相ゲートの挿入によってCX回路の中にCZ回路を計算する。
パラメーター
戻り値
CZ 回路に続く CX 回路の回路実装。-CZ-CX- 回路と表記。LNN 接続の場合、2量子ビット深さは最大 5n である。
戻りの型
参考文献
- クティン、S、 モールトン、D. スミスライン、L、 遠距離での計算、Chicago J. Theor. コンピュート 科学..、 vol. 2007, (2007)、 arXiv:quant-ph/0701194
- ドミトリー・マスロフ、ウィラーズ・ヤン、 CNOT回路は、それらが生成する任意のハダマード・フリー・クリフォード変換を実装するのに、ほとんど助けを必要としない、 arXiv:2210.16195.
synth_cnot_phase_aam
qiskit.synthesis.synth_cnot_phase_aam(cnots, angles, section_size=2)
この関数は、Amy、Azimadeh、Moscaの GraySynth アルゴリズムの実装である。
GraySynth は[、1] に示された、小規模なパリティネットワークを合成するためのヒューリスティックアルゴリズムである。 これはグレイコードに着想を得たものです。 二進文字列の集合 (以下、 cnots と呼ぶ)が与えられたとき、このアルゴリズムは、 に対するパリティネットワークを合成する。具体的には、展開するインデックス を繰り返し選択し、その後、文字列 からなる共因子 および に対して、それぞれ または を用いて事実上再帰処理を行う。 が再帰的に展開される際、指定されたターゲットビットが(部分的な)パリティ cx を含むようにゲートが適用される。ここで、 となるのは、すべての について が成立する場合に限られる。もし が単一の要素 を含むならば、 となり、ターゲットビットは期待どおり という値を含むことになる。
注目すべきは、サブセット の合成が終了したときに、この一連の cx (CNOT)ゲートの計算を解除するのではなく、アルゴリズムは、計算されるべき残りのパリティが現在のビットの状態上で表現されるという不変性を維持することである。 これによって、アルゴリズムが、非計算ベースの手法に特有の「バックトラック」を回避することができる。
アルゴリズムについては、セクション [1の] 4で詳しく説明する。
パラメーター
-
合成されるパリティを列とする行列。 g.:
[[0, 1, 1, 1, 1, 1], [1, 0, 0, 1, 1, 1], [1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 1, 0]]に相当する:
x1^x2 + x0 + x0^x3 + x0^x1^x2 + x0^x1^x3 + x0^x1 -
angles (list[str]) –
cnotsと同じ順序で、適用されるすべての位相シフトゲートを含むリスト。 数値は の角度と解釈され、それ以外の要素は't','tdg','s','sdg','z'となる。 -
section_size (int) – Patel-Markov-Hayesアルゴリズムの各セクションのサイズ。
section_sizeは量子ビット数のファクターでなければならない。
戻り値
分解された量子回路。
レイズ
QiskitError - cnots と angles の寸法が合わない場合。
戻りの型
参考文献
- マシュー・エイミー、パルシアド・アジムザデ、ミケーレ・モスカ。 制御されたNOT相回路の複雑さについて..、 Quantum Science and Technology 4.1 (2018): 015002. arXiv:1712.01859
順列合成
synth_permutation_depth_lnn_kms
qiskit.synthesis.synth_permutation_depth_lnn_kms(pattern)
Kutin、Moulton、Smithline法を用いて、線形最近傍アーキテクチャの並べ替え回路を合成する。
これは [1の]第6節の順列合成アルゴリズムである。 これは、深さ最大 、サイズ最大 (深さとサイズは両方ともSWAPを基準として測定される)のSWAPゲートを使用して、線形最近傍アーキテクチャ上でn個の量子ビットの任意の並べ替えを合成する。
パラメーター
pattern (list[int] | ndarray[int]) – 置換パターン。置換を適用した後に、どの量子ビットが位置0、1、2などを占めるかを記述する。 すなわち、置換が量子 pattern[k] = m ビットを m 位置に写す kとき。 例えば、パターン は、量子ビット 2 が位置 0へ、量子 [2, 4, 3, 0, 1] ビット 4 が位置 1へ、というように移行することを意味する。
戻り値
合成された量子回路。
戻りの型
参考文献
- サミュエル・A・クティン、デイヴィッド・ペトリー・モールトン、ローレン・M・スミスライン 遠距離での計算..、 arXiv:quant-ph/0701194v1
synth_permutation_basic
qiskit.synthesis.synth_permutation_basic(pattern)
並べ替えを使用して、完全接続アーキテクチャの並べ替え回路を合成する。
より正確には、入力順列が長さ m のサイクルである場合、 m-1 SWAP(そして深さ m-1 )を持つ量子回路が生成される。入力順列が複数の不連続なサイクルから構成される場合、各サイクルは基本的に独立に扱われる。
パラメーター
pattern (list[int] | ndarray[int]) – 置換パターン。置換を適用した後に、どの量子ビットが位置0、1、2などを占めるかを記述する。 すなわち、置換が量子 pattern[k] = m ビットを m 位置に写す kとき。 例えば、パターン は、量子ビット 2 が位置 0へ、量子 [2, 4, 3, 0, 1] ビット 4 が位置 1へ、というように移行することを意味する。
戻り値
合成された量子回路。
戻りの型
synth_permutation_acg
qiskit.synthesis.synth_permutation_acg(pattern)
Alon、Chung、Grahamの方法を使用して、完全接続アーキテクチャの並べ替え回路を合成する。
これは深さ2(SWAPの数で測定)の量子回路を生成する。
この実装は、参考文献 [1の]命題 4.1、その詳細な証明は参考文献 [2の]定理2に示されている
パラメーター
pattern (list[int] | ndarray[int]) – 置換パターン。置換を適用した後に、どの量子ビットが位置0、1、2などを占めるかを記述する。 すなわち、置換が量子 pattern[k] = m ビットを m 位置に写す kとき。 例えば、パターン は、量子ビット 2 が位置 0へ、量子 [2, 4, 3, 0, 1] ビット 4 が位置 1へ、というように移行することを意味する。
戻り値
合成された量子回路。
戻りの型
参考文献
- N。 アロン、F. R. K. チョン、R. L. グラハム。 マッチングによるグラフ上の順列のルーティング..、 第25回ACM計算理論シンポジウム予稿集(1993). 583-591ページ。 (拡大抄録) 10.1145/167088.167239
- N。 アロン、F. R. K. チョン、R. L. グラハム。 マッチングによるグラフ上の順列のルーティング..、 (論文全文)
synth_permutation_reverse_lnn_kms
qiskit.synthesis.synth_permutation_reverse_lnn_kms(num_qubits)
Kutin、Moulton、Smithline法を用いて、線形最近傍アーキテクチャの逆順列を合成する。
[1の] 5節にある逆順列の合成アルゴリズム。 このアルゴリズムは、 の深さを持つCXゲートを用いて、 の量子ビット上の逆順列を線形最近傍アーキテクチャ上で合成する。
パラメーター
num_qubits (int) – 量子ビットの数。
戻り値
合成された量子回路。
戻りの型
参考文献
- クティン、S、 モールトン、D. スミスライン、L、 遠距離での計算、Chicago J. Theor. コンピュート 科学..、 vol. 2007, (2007)、 arXiv:quant-ph/0701194
クリフォード合成
synth_clifford_full
qiskit.synthesis.synth_clifford_full(clifford, method=None)
演算子を Clifford 演算子を QuantumCircuit.
、参考文献 [1の]最適CXコスト分解に基づいている。 。これは参考文献 [3の]一般的な非最適貪欲コンパイルルーチンを用いて行われ、典型的には [2の] AG法と比較してより良いCXコストが得られる。
パラメーター
- clifford (Clifford) – クリフォード・オペレーター。
- method (str | None) – 合成法(
'AG'または'greedy')。 これを設定すると、 量子ビットに対する最適分解が上書きされます。
戻り値
クリフォードの回路実装。
戻りの型
参考文献
- S. Bravyi, D. Maslov, Hadamard-free回路がクリフォード群の構造を暴露, arXiv:2003.09412 [quant-ph]
- S. Aaronson, D. Gottesman, Improved Simulation of Stabilizer Circuits, Phys. Rev. A 70, 052328 (2004). arXiv:quant-ph/0406196
- Sergey Bravyi, Shaohan Hu, Dmitri Maslov, Ruslan Shaydulin, Templates and Symbolic Pauli Gatesによるクリフォード回路の最適化, arXiv:2105.02291 [quant-ph]
synth_clifford_ag
qiskit.synthesis.synth_clifford_ag(clifford)
演算子を Clifford 演算子を QuantumCircuit Aaronson-Gottesman法に基づく [1].
パラメーター
clifford (Clifford) – クリフォード・オペレーター。
戻り値
クリフォードの回路実装。
戻りの型
参考文献
- S. Aaronson, D. Gottesman, Improved Simulation of Stabilizer Circuits, Phys. Rev. A 70, 052328 (2004). arXiv:quant-ph/0406196
synth_clifford_bm
qiskit.synthesis.synth_clifford_bm(clifford)
の最適なCXコスト分解。 Clifford 演算子の最適CXコスト分解。 QuantumCircuit Bravyi-Maslov法に基づく [1].
パラメーター
clifford (Clifford) – クリフォード・オペレーター。
戻り値
クリフォードの回路実装。
レイズ
QiskitError - クリフォードが3量子ビット以上ある場合。
戻りの型
参考文献
- S. Bravyi, D. Maslov, Hadamard-free回路がクリフォード群の構造を暴露, arXiv:2003.09412 [quant-ph]
synth_clifford_greedy
qiskit.synthesis.synth_clifford_greedy(clifford)
演算子を Clifford 演算子を QuantumCircuit は、Bravyi, Hu, Maslov and Shaydulin [1の]付録Aに記述されている貪欲なCliffordコンパイラに基づいている。
この方法は、Aaronson-Gottesman法と比較して、一般的に優れたCXコストをもたらす。
この関数は、 [1の]付録Aにある貪欲なクリフォード・コンパイラのみを実装しており、同じ論文で言及されているテンプレートや記号的パウリゲートの最適化は実装していないことに注意。
パラメーター
clifford (Clifford) – クリフォード・オペレーター。
戻り値
クリフォードの回路実装。
レイズ
QiskitError - シンプレクティック・ガウス消去が失敗した場合。
戻りの型
参考文献
- Sergey Bravyi, Shaohan Hu, Dmitri Maslov, Ruslan Shaydulin, Templates and Symbolic Pauli Gatesによるクリフォード回路の最適化, arXiv:2105.02291 [quant-ph]
synth_clifford_layers
qiskit.synthesis.synth_clifford_layers(cliff, cx_synth_func=<function _default_cx_synth_func>, cz_synth_func=<function _default_cz_synth_func>, cx_cz_synth_func=None, cz_func_reverse_qubits=False, validate=False)
の合成 Clifford を層に分解すると、Bravyi and Maslov [1の] Lemma 8で説明されている合成と同様の分解ができる。
例えば、5量子ビットのクリフォード回路は以下のレイヤーに分解される:
┌─────┐┌─────┐┌────────┐┌─────┐┌─────┐┌─────┐┌─────┐┌────────┐
q_0: ┤0 ├┤0 ├┤0 ├┤0 ├┤0 ├┤0 ├┤0 ├┤0 ├
│ ││ ││ ││ ││ ││ ││ ││ │
q_1: ┤1 ├┤1 ├┤1 ├┤1 ├┤1 ├┤1 ├┤1 ├┤1 ├
│ ││ ││ ││ ││ ││ ││ ││ │
q_2: ┤2 S2 ├┤2 CZ ├┤2 CX_dg ├┤2 H2 ├┤2 S1 ├┤2 CZ ├┤2 H1 ├┤2 Pauli ├
│ ││ ││ ││ ││ ││ ││ ││ │
q_3: ┤3 ├┤3 ├┤3 ├┤3 ├┤3 ├┤3 ├┤3 ├┤3 ├
│ ││ ││ ││ ││ ││ ││ ││ │
q_4: ┤4 ├┤4 ├┤4 ├┤4 ├┤4 ├┤4 ├┤4 ├┤4 ├
└─────┘└─────┘└────────┘└─────┘└─────┘└─────┘└─────┘└────────┘この分解は、デフォルトの cz_synth_func 、 cx_synth_func 関数に対するものである。他の関数では、わずかに異なる分解が見られるかもしれない。
パラメーター
- cliff (Clifford) – クリフォード・オペレーター。
- cx_synth_func (Callable[[ndarray], QuantumCircuit]) – CXサブ回路を分解する関数。 入力としてブール値の可逆行列を受け取り、出力として.
QuantumCircuitを出力する。 - cz_synth_func (Callable[[ndarray], QuantumCircuit]) – CZサブサーキットを分解する関数。 これは、入力としてブール対称行列を受け取り、出力として
QuantumCircuit. - cx_cz_synth_func (Callable) – オプションで、CZとCXの両サブサーキットを分解する関数。
- validate (Boolean) – もしTrueなら、合成プロセスを検証する。
- cz_func_reverse_qubits (Boolean) –
cz_synth_funcがsynth_cz_depth_line_mr()なぜなら、この関数は量子ビットの順序を戻す回路を返すからである。
戻り値
クリフォードの回路実装。
戻りの型
参考文献
- S. Bravyi, D. Maslov, Hadamard-free回路がクリフォード群の構造を暴露, arXiv:2003.09412 [quant-ph]
synth_clifford_depth_lnn
qiskit.synthesis.synth_clifford_depth_lnn(cliff)
の合成。 Clifford 線形最近傍接続のためのレイヤーへの合成。
合成されたn量子ビット回路の深さは 、最適ではない。 このアルゴリズムは、 [3] で囲まれた深さを提供する、より優れたアルゴリズムに置き換えられるべきである。
パラメーター
cliff (Clifford) – クリフォード演算子。
戻り値
クリフォードの回路実装。
戻りの型
参考文献
- S. Bravyi, D. Maslov, Hadamard-free回路がクリフォード群の構造を暴露, arXiv:2003.09412 [quant-ph]
- Dmitri Maslov、Martin Roetteler、 「Bruhat 分解と量子回路変換による短縮安定回路」、 arXiv:1705.09176。
- ドミトリー・マスロフ、ウィラーズ・ヤン、 CNOT回路は、それらが生成する任意のハダマード・フリー・クリフォード変換を実装するのに、ほとんど助けを必要としない、 arXiv:2210.16195.
CNOT二面体合成
synth_cnotdihedral_full
qiskit.synthesis.synth_cnotdihedral_full(elem)
要素を CNOTDihedral 要素を QuantumCircuit.
、参考文献 [1の]最適CXコスト分解に基づいている。 、参考文献 [2に]ある一般的な非最適コンパイル・ルーチンを使用する。
パラメーター
elem (CNOTDihedral) – A CNOTDihedral 要素である。
戻り値
素子の回路実装。 CNOTDihedral 素子を実装したものです。
戻りの型
参考文献
- Shelly Garion and Andrew W. Cross, 最適な2量子ゲート数を持つCNOT-Dihedral回路の合成, Quantum 4(369), 2020
- Andrew W. Cross, Easwar Magesan, Lev S. Bishop, John A. Smolin and Jay M. Gambetta, Scalable randomized benchmarking of non-Clifford gates, npj Quantum Inf 2, 16012 (2016).
synth_cnotdihedral_two_qubits
qiskit.synthesis.synth_cnotdihedral_two_qubits(elem)
を分解する。 CNOTDihedral 要素に分解する。 QuantumCircuit. この分解は CXGates.
パラメーター
elem (CNOTDihedral) – A CNOTDihedral 要素である。
戻り値
素子の回路実装。 CNOTDihedral 素子を実装したものです。
レイズ
QiskitError – 要素が1量子ビットまたは2量子ビットでない CNOTDihedral場合。
戻りの型
参考文献
- Shelly Garion and Andrew W. Cross, CNOT-Dihedral群の構造について, arXiv:2006.12042 [quant-ph]
synth_cnotdihedral_general
qiskit.synthesis.synth_cnotdihedral_general(elem)
要素を CNOTDihedral 要素を QuantumCircuit.
一般的な CNOTDihedral 要素を分解する。 CXゲートの数は必ずしも最適ではない。 1qubitまたは2qubitの要素を分解する場合、次のように呼ぶ。 synth_cnotdihedral_two_qubits().
パラメーター
elem (CNOTDihedral) – A CNOTDihedral 要素である。
戻り値
素子の回路実装。 CNOTDihedral 素子を実装したものです。
レイズ
QiskitError - 素子を回路に分解できなかった場合。
戻りの型
参考文献
- Andrew W. Cross, Easwar Magesan, Lev S. Bishop, John A. Smolin and Jay M. Gambetta, Scalable randomized benchmarking of non-Clifford gates, npj Quantum Inf 2, 16012 (2016).
安定化状態合成
synth_stabilizer_layers
qiskit.synthesis.synth_stabilizer_layers(stab, cz_synth_func=<function _default_cz_synth_func>, cz_func_reverse_qubits=False, validate=False)
スタビライザー状態の層への合成。
これは、 [参照]文献1の補題8で述べられている合成と同様の分解を提供するが、安定化器の状態に影響を与えない初期のハダマール成分を含まない部分回路は含まれていない。
例えば、5量子ビットのスタビライザー状態は以下のレイヤーに分解される:
┌─────┐┌─────┐┌─────┐┌─────┐┌────────┐
q_0: ┤0 ├┤0 ├┤0 ├┤0 ├┤0 ├
│ ││ ││ ││ ││ │
q_1: ┤1 ├┤1 ├┤1 ├┤1 ├┤1 ├
│ ││ ││ ││ ││ │
q_2: ┤2 H2 ├┤2 S1 ├┤2 CZ ├┤2 H1 ├┤2 Pauli ├
│ ││ ││ ││ ││ │
q_3: ┤3 ├┤3 ├┤3 ├┤3 ├┤3 ├
│ ││ ││ ││ ││ │
q_4: ┤4 ├┤4 ├┤4 ├┤4 ├┤4 ├
└─────┘└─────┘└─────┘└─────┘└────────┘パラメーター
- stab (StabilizerState) – スタビライザー状態。
- cz_synth_func (Callable[[ndarray], QuantumCircuit]) – CZサブサーキットを分解する関数。 これは、入力としてブール対称行列を受け取り、出力として
QuantumCircuit. - cz_func_reverse_qubits (bool) –
Trueがcz_synth_funcの場合のみ。synth_cz_depth_line_mr()この関数は量子ビットの順序を戻す回路を返すからである。 - validate (bool) –
Trueの場合、合成プロセスを検証する。
戻り値
スタビライザー状態の回路実装。
レイズ
QiskitError - 入力が StabilizerState.
戻りの型
参考文献
- S. Bravyi, D. Maslov, Hadamard-free回路がクリフォード群の構造を暴露, arXiv:2003.09412 [quant-ph]
synth_stabilizer_depth_lnn
qiskit.synthesis.synth_stabilizer_depth_lnn(stab)
2量子ビットの深さ 、2つの異なるCXレイヤーを用いた、線形最近傍接続のためのn量子ビットスタビライザー状態の合成。 CXGatesと位相ゲート(SGate, SdgGate または ZGate).
パラメーター
stab (StabilizerState) – スタビライザー状態。
戻り値
スタビライザー状態の回路実装。
戻りの型
参考文献
- S. Bravyi, D. Maslov, Hadamard-free回路がクリフォード群の構造を暴露, arXiv:2003.09412 [quant-ph]
- Dmitri Maslov、Martin Roetteler、 「Bruhat 分解と量子回路変換による短縮安定回路」、 arXiv:1705.09176。
synth_circuit_from_stabilizers
qiskit.synthesis.synth_circuit_from_stabilizers(stabilizers, allow_redundant=False, allow_underconstrained=False, invert=False)
クリフォードゲートによるガウス消去を用いて、スタビライザーによって安定化された状態を生成する回路の合成。 スタビライザーが過小制約であり、 allow_underconstrained が True である場合、回路はスタビライザーによって安定化された状態のいずれかを出力する。 刺激的な実施に基づく。
パラメーター
- stabilizers (Collection[str]) – スタビライザーのストリング一覧
- allow_redundant (bool) – 冗長な安定化子(すなわち、一部の安定化子が他の安定化子の積となる場合)を許容する
- allow_underconstrained (bool) – 制約が不十分な安定化子セットを許可する(すなわち、安定化子が一意の状態を指定しない)
- invert (bool) – リターン・インバース回路
戻り値
stabilizers によって安定した状態を生成する回路。
レイズ
QiskitError - リストが制約不足で allow_underconstrained が False である場合、またはリストが冗長で allow_redundant が False である場合。
戻りの型
参考文献
離散基底合成
SolovayKitaevDecomposition([...]) | Solovay Kitaev離散分解アルゴリズム。 |
gridsynth_rz
qiskit.synthesis.gridsynth_rz(angle, epsilon=1e-10)
ロス・セリンジャー法を用いた近似RZ回転
アルゴリズムは [1].に記述されている。 ソースコード(Rust言語)は で公開されています https://github.com/qiskit-community/rsgridsynth。
パラメーター
戻り値
1量子ビット回路による近似 RZ(angle)。
戻りの型
参照資料:
[1] ニール・J・ロス、ピーター・セリンジャー、z回転に対する最適な補助変数なしクリフォード+T近似
gridsynth_unitary
qiskit.synthesis.gridsynth_unitary(matrix, epsilon=1e-10)
ロス・セリンジャーアルゴリズムを用いて1量子ビットユニタリ行列を近似する。
アルゴリズムは [1].に記述されている。 ソースコード(Rust言語)は で公開されています https://github.com/qiskit-community/rsgridsynth。
パラメーター
戻り値
1量子ビット回路による近似 matrix。
戻りの型
参照資料:
[1] ニール・J・ロス、ピーター・セリンジャー、z回転に対する最適な補助変数なしクリフォード+T近似
generate_basic_approximations
qiskit.synthesis.generate_basic_approximations(basis_gates, depth, filename=None)
basis_gates のゲートを持つ GateSequences のリストを生成する。
関数 は Qiskit 2.3qiskit.synthesis.discrete_basis.generate_basis_approximations.generate_basic_approximations() 以降で非推奨となりました。 リリース日から3ヶ月以上経過した時点で削除されます。 SolovayKitaevDecomposition クラスを直接使用して、基本的な近似値を生成、保存、および読み込みます。
パラメーター
- basis_gates (list[str |Gate]) – ゲート列を作成するためのゲート。
- depth (int) – 近似の最大深度。
- filename (str | None) – 提供された場合、基本近似値はこのファイルに保存される。
戻り値
basis_gates のゲートを使用した GateSequenceのリスト。
レイズ
ValueError - basis_gates に無効なゲート識別子が含まれている場合。
戻りの型
[GateSequence] のリスト
基底変換合成
synth_qft_line
qiskit.synthesis.synth_qft_line(num_qubits, do_swaps=True, approximation_degree=0)
線形近傍接続を用いて量子フーリエ変換の回路を構成する。
構成はFowlerらの図 2.b に基づいている [1]。
デフ ォル ト 値を do_swaps = True に設定す る と、 こ の合成アルゴ リ ズ ム は QFT 演算を忠実に実装す る 回路を作成 し ます。 do_swaps = False、この合成アルゴリズムは「QFT-with-reversal」に相当する回路を作成する。つまり、QFTを適用し、その出力量子ビットの順序を逆にする。
パラメーター
- num_qubits (int) – 量子フーリエ変換が作用する量子ビットの数。
- approximation_degree (int) – 近似の度合い(0は近似なし)。 ある閾値以下の角度で制御された位相回転を無視することで、QFTを近似的に実装することが可能である。 で詳しく説明している。 https://arxiv.org/abs/quant-ph/9601018 または https://arxiv.org/abs/quant-ph/0403071.
- do_swaps (bool) – QFT」と「QFT-with-reversal」のどちらの演算を合成するか。
戻り値
QFT演算を実装した回路。
戻りの型
参考文献
- A.(1)量子力学は、量子力学と量子力学を融合させることにより、量子力学と量子力学を融合させ、量子力学と量子力学を融合させることにより、量子力学と量子力学を融合させ、量子力学と量子力学を融合させることにより、量子力学と量子力学を融合させることができる。 コンピュート 4, 4 (July 2004), 237-251. arXiv:quant-ph/0402196 [quant-ph]
synth_qft_full
qiskit.synthesis.synth_qft_full(num_qubits, do_swaps=True, approximation_degree=0, insert_barriers=False, inverse=False, name=None)
全対全接続を使用して量子フーリエ変換の回路を構築する。
デフ ォル ト 値を do_swaps = True に設定す る と、 こ の合成アルゴ リ ズ ム は QFT 演算を忠実に実装す る 回路を作成 し ます。 この回路は、出力量子ビットの順序を逆にするスワップ・ゲートのシーケンスを最後に含んでいる。 アプリケーションによっては、この反転順列を避けることができる。 do_swaps = False を設定すると、この反転順列のない回路が作成されるが、この回路はQFTの代わりに「QFT-with-reversal」を実装することになる。 あるいは ElidePermutations トランスパイラー・パスは、これらのスワップ・ゲートを取り除くことができる。
パラメーター
- num_qubits (int) – 量子フーリエ変換が作用する量子ビットの数。
- do_swaps (bool) – QFT」と「QFT-with-reversal」のどちらの演算を合成するか。
- approximation_degree (int) – 近似の度合い(0は近似なし)。 ある閾値以下の角度で制御された位相回転を無視することで、QFTを近似的に実装することが可能である。 で詳しく説明している。 https://arxiv.org/abs/quant-ph/9601018 または https://arxiv.org/abs/quant-ph/0403071.
- insert_barriers (bool) –
Trueの場合、バリアが挿入され、可視性が向上する。 - inverse (bool) –
Trueとすれば、逆量子フーリエ変換が成り立つ。 - name (str | None) – 回路の名前。
戻り値
QFT演算を実装した回路。
戻りの型
単一合成
任意の数の量子ビットに対する一般的な ユニタリー行列の分解。
qs_decomposition
qiskit.synthesis.qs_decomposition(mat, opt_a1=None, opt_a2=None, decomposer_1q=None, decomposer_2q=None, *, _depth=0)
ブロックZXZ分解に基づく量子シャノン分解を用いて、ユニタリー行列を1量子ビットと2量子ビットのゲートに分解する。
この分解はKrol and Al-Ars [2に]記載されており、Shendeら [1].の方法を改良したものである。
┌───┐ ┌───┐ ┌───┐
─┤ ├─ ────□──┤ H ├──□──┤ H ├──□──
│ │ ≃ ┌─┴─┐└───┘┌─┴─┐└───┘┌─┴─┐
/─┤ ├─ ──┤ C ├─────┤ B ├─────┤ A ├
└───┘ └───┘ └───┘ └───┘の数は、最適化なしの分解で生成される CXGate最適化なしの分解で生成される's の数は、 [1の]最適化なしの方法と同じである:
opt_a1 = True の場合、CXのカウントは [1つ]減り、改善される:
各ステップで CXGateを保存する。
opt_a2 = True の場合、CXのカウントは [1と]同様、減少する:
したがって CXGateである
パラメーター
- mat (ndarray) – 単元行列を分解する
- opt_a1 (bool | None) – 最適化を試みるかどうか A.1 [1, 2から]。 これで、1回の通話につき2つの
cx。 - opt_a2 (bool | None) – 最適化を試みるかどうか A.2 [1, 2]. これにより、2量子ビットのユニタリーが対角ゲートと2つの
cxユニタリーに分解され、全体のcxカウントが 減ります。元のユニタリーが制御されている場合、この最適化は行うべきではありません。 - decomposer_1q (Callable[[ndarray], QuantumCircuit] | None) – オプションの 1Q デコンポーザー。 「None」の場合、. を使用します
OneQubitEulerDecomposer。 - decomposer_2q (Callable[[ndarray], QuantumCircuit] | None) – オプションの 2Q デコンポーザー。 「None」の場合、. を使用します
TwoQubitBasisDecomposer。
戻り値
分解された量子回路。
戻りの型
参考文献
- Shende, Bullock, Markov, Synthesis of Quantum Logic Circuits, arXiv:0406176 [quant-ph]
- Krol, Al-Ars, " Beyond Quantum Shannon: Circuit Construction for General n-Qubit Gates Based on Block ZXZ-Decomposition "、 arXiv:2403.13692
近似量子コンパイラは、モジュール qiskit.synthesis.unitary.aqc.
ワンキュービット合成
OneQubitEulerDecomposer([basis, use_dag] ) | 1量子ビットのユニタリーをオイラー角回転に分解するクラス。 |
2量子ビット合成
TwoQubitBasisDecomposer(ゲート[、...] ) | 2qubitユニタリーを2qubit基底ゲートの最小使用回数に分解するクラス。 |
XXDecomposer([basis_fidelity, euler_basis,...] ) | 2量子ビットユニタリー演算を、タイプ XX の2量子ビット基底ゲート(すなわち、 が変化する場合もあるが、局所的にはそれぞれ と同値であるもの)に最適に分解するクラス。 |
TwoQubitWeylDecomposition(unitary_matrix[,...] ) | 2量子ビットWeyl分解。 |
TwoQubitControlledUDecomposer(...[, euler_basis] ) | 2量子ビットのユニタリーを、局所的に等価な ゲートで分解する。 RXXGate. |
two_qubit_cnot_decompose
qiskit.synthesis.two_qubit_cnot_decompose(*args, **kwargs)
のインスタンスである。 TwoQubitBasisDecomposer のインスタンスであり、基底分解のためのKAKゲートとして常に cx 。 この関数は、 cx-based 2-qubit decompositionへのクイックアクセスとして使用できます。
パラメーター
- unitary (Operator or np.ndarray) – 4x4 合成するユニタリー。
- basis_fidelity (float or None) – のアプリケーションで想定される忠実度が与えられたとする。
CXGate. - approximate (bool) –
basis_fidelityが よりも小さい場合、 の近似値。 1.0True
戻り値
入力ユニタリーの合成回路。
戻りの型
マルチ制御合成
synth_mcmt_vchain
qiskit.synthesis.synth_mcmt_vchain(gate, num_ctrl_qubits, num_target_qubits, ctrl_state=None)
V鎖を使ってMCMTを合成する。
これは、 num_ctrl_qubits - 1 補助量子ビットを使ったCCXゲートの連鎖を使う。
例えば、3コントロール、2ターゲットのHゲートは次のように合成される:
q_0: ──■────────────────────────■──
│ │
q_1: ──■────────────────────────■──
│ │
q_2: ──┼────■──────────────■────┼──
│ │ ┌───┐ │ │
q_3: ──┼────┼──┤ H ├───────┼────┼──
│ │ └─┬─┘┌───┐ │ │
q_4: ──┼────┼────┼──┤ H ├──┼────┼──
┌─┴─┐ │ │ └─┬─┘ │ ┌─┴─┐
q_5: ┤ X ├──■────┼────┼────■──┤ X ├
└───┘┌─┴─┐ │ │ ┌─┴─┐└───┘
q_6: ─────┤ X ├──■────■──┤ X ├─────
└───┘ └───┘パラメーター
- gate (Gate) – ターゲットに適用されるベースゲート。
- num_ctrl_qubits (int) – 制御量子ビットの数。
- num_target_qubits (int) – ターゲット量子ビットの数。
- ctrl_state (int | None) – オプションの制御状態を整数で指定する。
戻り値
MCMTゲートの合成回路。
戻りの型
synth_mcmt_xgate
qiskit.synthesis.synth_mcmt_xgate(num_ctrl_qubits, num_target_qubits, ctrl_state=None)
MCMT Xゲートを合成する。
これは、MCMT Xゲートに効率的な特殊な回路構造を使用している。 これは補助的な量子ビットを必要とせず、効率的なMCX分解の恩恵を受ける。
E.g. 3コントロール、3ターゲットのXゲートは次のように合成される:
q_0: ─────────────■────────────
|
q_1: ─────────────■────────────
|
q_2: ─────────────■────────────
┌─┴─┐
q_3: ────────■──┤ X ├──■───────
┌─┴─┐└───┘┌─┴─┐
q_4: ───■──┤ X ├─────┤ X ├──■──
┌─┴─┐└───┘ └───┘┌─┴─┐
q_5: ─┤ X ├───────────────┤ X ├
└───┘ └───┘パラメーター
- num_ctrl_qubits (int) – 制御量子ビットの数。
- num_target_qubits (int) – ターゲット量子ビットの数。
- ctrl_state (int | None) – オプションの制御状態を整数で指定する。
戻り値
MCMT Xゲートの合成回路。
戻りの型
synth_mcx_1_clean_kg24
qiskit.synthesis.synth_mcx_1_clean_kg24(num_ctrl_qubits)
セクションで説明されているように、 のクリーンな補助量子ビットを用いて、 の制御を持つマルチ制御Xゲートを合成し、 のトッフォリゲートまたは のCXゲート、および深度 を持つ回路を生成する。 5.1 の [1]. の場合、返される回路は単一の X、CX、または CCX ゲート(それぞれ に対応)で構成され、補助量子ビットは使用されません。
パラメーター
num_ctrl_qubits (int) – 制御量子ビットの数。
戻り値
合成された量子回路。
レイズ
QiskitError – が不正 num_ctrl_qubits な場合。
戻りの型
参考文献
1. KhattarとGidney, 量子回路最適化のための条件付きクリーンアンキレーの台頭 arXiv:2407.17966
synth_mcx_1_dirty_kg24
qiskit.synthesis.synth_mcx_1_dirty_kg24(num_ctrl_qubits)
セクションで説明されているように、 の汚染補助量子ビットを用いて、 の制御を持つマルチ制御Xゲートを合成し、 のトッフォリゲートまたは のCXゲート、および深度 を持つ回路を生成する。 5.3 の [1]. の場合、返される回路は単一の X、CX、または CCX ゲート(それぞれ に対応)で構成され、補助量子ビットは使用されません。
パラメーター
num_ctrl_qubits (int) – 制御量子ビットの数。
戻り値
合成された量子回路。
レイズ
QiskitError – が不正 num_ctrl_qubits な場合。
戻りの型
参考文献
1. KhattarとGidney, 量子回路最適化のための条件付きクリーンアンキレーの台頭 arXiv:2407.17966
synth_mcx_2_clean_kg24
qiskit.synthesis.synth_mcx_2_clean_kg24(num_ctrl_qubits)
セクションで説明されているように、 のクリーンな補助量子ビットを用いて、 の制御を持つマルチ制御Xゲートを合成し、 のトッフォリゲートまたは のCXゲートからなる回路を生成し、深度を とする。 5.2 の [1]. の場合、返される回路は単一の X、CX、または CCX ゲート(それぞれ に対応)で構成され、補助量子ビットは使用されません。
パラメーター
num_ctrl_qubits (int) – 制御量子ビットの数。
戻り値
合成された量子回路。
レイズ
QiskitError – が不正 num_ctrl_qubits な場合。
戻りの型
参考文献
1. KhattarとGidney, 量子回路最適化のための条件付きクリーンアンキレーの台頭 arXiv:2407.17966
synth_mcx_2_dirty_kg24
qiskit.synthesis.synth_mcx_2_dirty_kg24(num_ctrl_qubits)
セクションで説明されているように、 のダーティ補助量子ビットを用いて、 の制御を持つマルチ制御Xゲートを合成し、 のトッフォリゲートまたは のCXゲートからなる回路を生成し、深さを とする。 5.4 の [1]. の場合、返される回路は単一の X、CX、または CCX ゲート(それぞれ に対応)で構成され、補助量子ビットは使用されません。
パラメーター
num_ctrl_qubits (int) – 制御量子ビットの数。
戻り値
合成された量子回路。
レイズ
QiskitError – が不正 num_ctrl_qubits な場合。
戻りの型
参考文献
1. KhattarとGidney, 量子回路最適化のための条件付きクリーンアンキレーの台頭 arXiv:2407.17966
synth_mcx_n_dirty_i15
qiskit.synthesis.synth_mcx_n_dirty_i15(num_ctrl_qubits, relative_phase=False, action_only=False)
Itenらの論文に基づき、 制御のマルチ制御Xゲートを合成する [1]。
の場合、この手法では 個のダーティ・アンシラリー量子ビットを使用し、 個の量子ビットと、最大 個の CX ゲートからなる回路を生成します。 では、補助量子ビットを必要としない、明示的に構築された効率的な回路が代わりに用いられる。
パラメーター
- num_ctrl_qubits (int) – 制御量子ビットの数。
- relative_phase (bool) –
Trueに設定された場合、本方法は、 [1の]レンマ8により、 の相対位相が の位相と相殺される方法で、最適化されたマルチ制御Xゲートを相対位相まで適用する。action partreset part - action_only (bool) – を
Trueに設定すると、この方法は [1の]レンマ8のaction partのみを適用する。
戻り値
合成された量子回路。
レイズ
QiskitError – が不正 num_ctrl_qubits な場合。
戻りの型
参考文献
- イテンら。 ら、 「等長写像のための量子回路 」、Phys. 改訂版 A 93、2018年3月23日 (2016年)、 arXiv:1501.06911
synth_mcx_n_clean_m15
qiskit.synthesis.synth_mcx_n_clean_m15(num_ctrl_qubits)
Maslov [1] に従い、 個のクリーンな補助量子ビットを用いて、 個の制御を持つ多重制御Xゲートを合成し、 個の量子ビットと、最大 個のCXゲートからなる回路を生成する。 の場合、返される回路は単一の X、CX、または CCX ゲート(それぞれ に対応)で構成され、補助量子ビットは使用されません。
パラメーター
num_ctrl_qubits (int) – 制御量子ビットの数。
戻り値
合成された量子回路。
レイズ
QiskitError – が不正 num_ctrl_qubits な場合。
戻りの型
参考文献
- マスロフ フィジーク。 Rev. A 93, 022311 (2016)、 arXiv:1508.03273
synth_mcx_1_clean_b95
qiskit.synthesis.synth_mcx_1_clean_b95(num_ctrl_qubits)
単一のクリーンな補助量子ビットを用いて、 個の制御を持つマルチ制御Xゲートを合成し、 個の量子ビットと、最大 個のCXゲートからなる回路を生成すること( [1], [2] )。 の場合、返される回路は単一の X、CX、または CCX ゲート(それぞれ に対応)で構成され、補助量子ビットは使用されません。
パラメーター
num_ctrl_qubits (int) – 制御量子ビットの数。
戻り値
合成された量子回路。
レイズ
QiskitError – が不正 num_ctrl_qubits な場合。
戻りの型
参考文献
- Barenco et. ...そして..、 量子計算のための初等ゲート, Phys.Rev. A52 3457 (1995), arXiv:quant-ph/9503016
- イテンら。 ら、 「等長写像のための量子回路 」、Phys. 改訂版 A 93、2018年3月23日 (2016年)、 arXiv:1501.06911
synth_mcx_noaux_v24
qiskit.synthesis.synth_mcx_noaux_v24(num_ctrl_qubits)
MCPhaseGate の実装に基づき、 制御を持つマルチ制御Xゲートを合成する。
一方、MCPhaseゲートは、 [1].で説明したマルチ制御特殊ユニタリーの分解を使用する。
の量子ビットを持つ量子回路を生成する。 CXゲートの数は の2乗である。
パラメーター
num_ctrl_qubits (int) – 制御量子ビットの数。
戻り値
合成された量子回路。
レイズ
QiskitError – が不正 num_ctrl_qubits な場合。
戻りの型
参考文献
- ヴェイルら。 ...そして..、 多制御特殊単一キュービットゲートの回路分解, IEEE TCAD 43(3) (2024)、 arXiv:2302.06377
synth_mcx_noaux_hp24
qiskit.synthesis.synth_mcx_noaux_hp24(num_ctrl_qubits)
HuangとPalsbergの研究に基づき、 制御によるマルチ制御Xゲートを合成する。
の量子ビットを持つ量子回路を生成する。 CXゲートの数は に比例する。
パラメーター
num_ctrl_qubits (int) – 制御量子ビットの数。
戻り値
合成された量子回路。
レイズ
QiskitError – が不正 num_ctrl_qubits な場合。
戻りの型
参考文献
- Huang and Palsberg, Compiling Conditional Quantum Gates without Using Helper Qubits, PLDI (2024), <https://dl.acm.org/doi/10.1145/3656436> ୧-͈ᴗ-͈
synth_mcx_gray_code
qiskit.synthesis.synth_mcx_gray_code(num_ctrl_qubits)
グレイコードを用いて、 の制御信号を持つマルチコントロールXゲートを合成してください。
個の量子ビットからなる量子回路を生成します。 この手法では指数関数的に多くのCXゲートが生成されるため、 の値が小さい場合にのみ使用すべきである。 の場合、返される回路は単一のX、CX、またはCCXゲート(それぞれ に対応)で構成され、補助量子ビットは使用しない。
パラメーター
num_ctrl_qubits (int) – 制御量子ビットの数。
レイズ
QiskitError – が不正 num_ctrl_qubits な場合。
戻り値
合成された量子回路。
戻りの型
synth_c3x
synth_c4x
二進算術合成
毒蛇
adder_qft_d00
qiskit.synthesis.adder_qft_d00(num_state_qubits, kind='half', annotated=False)
QFTを用いて2つの量子ビットレジスタのインプレース加算を行う回路。
ク ビ ッ ト を持つレ ジ ス タ の場合、QFT 加算器は加算モジュロ ( kind="fixed" を使用)、 またはキ ャ リ ー ク ビ ッ ト を加算す る 通常の加算 ( kind="half" を使用) を実行で き ます。 固定加算器は CPhaseGate 演算子を使用し、さらに半加算器用に 。
例として、2つの2qubitサイズのレジスタの加算を行う非固定小数点QFT加算回路は以下の通りである:
a_0: ─────────■──────■────────■──────────────────────────────────
│ │ │
a_1: ─────────┼──────┼────────┼────────■──────■──────────────────
┌──────┐ │ │ │P(π/4) │ │P(π/2) ┌─────────┐
b_0: ┤0 ├─┼──────┼────────■────────┼──────■───────┤0 ├
│ │ │ │P(π/2) │P(π) │ │
b_1: ┤1 Qft ├─┼──────■─────────────────■──────────────┤1 qft_dg ├
│ │ │P(π) │ │
cout: ┤2 ├─■───────────────────────────────────────┤2 ├
└──────┘ └─────────┘パラメーター
- num_state_qubits (int) – 状態 または のどちらかの入力レジスタの量子ビット数。 2つの入力レジスタは同じ数の量子ビットを持たなければならない。
- kind (str) – 加算器の種類は、半加算器の場合は
"half"、固定サイズ加算器の場合は"fixed"。 半加算器には、最上位ビットを表すキャリーアウトが含まれているが、固定サイズ加算器には含まれていないため、加算モジュロは2 ** num_state_qubits。 - annotated (bool) –
Trueの場合、 オブジェクトとして適切なコントロールと逆オペレーションを作成する。AnnotatedOperation
戻りの型
参照資料:
[1] T. G. Draper, Addition on a Quantum Computer, 2000. arXiv:quant-ph/0008033
[2] Ruiz-Perezら、 量子フーリエ変換による量子算術、2017年。 arXiv:1411.5949
[3] ヴェドラル他 初等算術演算のための量子ネットワーク, 1995. arXiv:quant-ph/9511018
adder_ripple_c04
qiskit.synthesis.adder_ripple_c04(num_state_qubits, kind='half')
2つの量子ビットレジスタのインプレース加算を行うリップルキャリー回路。
この回路は、 CCXゲートと CXゲートを、 [1の]深さで使用している。 この定数は、実装されている加算器の種類によって異なる。
例として、キャリーインビット(kind="full")を持つ2つの3qubitサイズのレジスタに対して加算を行うリップルキャリー加算回路は以下のようになる:
┌──────┐ ┌──────┐
cin_0: ┤2 ├─────────────────────────────────────┤2 ├
│ │┌──────┐ ┌──────┐│ │
a_0: ┤0 ├┤2 ├─────────────────────┤2 ├┤0 ├
│ ││ │┌──────┐ ┌──────┐│ ││ │
a_1: ┤ MAJ ├┤0 ├┤2 ├─────┤2 ├┤0 ├┤ UMA ├
│ ││ ││ │ │ ││ ││ │
a_2: ┤ ├┤ MAJ ├┤0 ├──■──┤0 ├┤ UMA ├┤ ├
│ ││ ││ │ │ │ ││ ││ │
b_0: ┤1 ├┤ ├┤ MAJ ├──┼──┤ UMA ├┤ ├┤1 ├
└──────┘│ ││ │ │ │ ││ │└──────┘
b_1: ────────┤1 ├┤ ├──┼──┤ ├┤1 ├────────
└──────┘│ │ │ │ │└──────┘
b_2: ────────────────┤1 ├──┼──┤1 ├────────────────
└──────┘┌─┴─┐└──────┘
cout_0: ────────────────────────┤ X ├────────────────────────
└───┘ここで MAJ ゲートと UMA ゲートは [1.] で紹介したゲートに対応する。 この実装では、入力レジスタの量子ビットは、最初の入力レジスタからの全ての量子ビットの後に、2番目の入力レジスタからの全ての量子ビットが続くように並べられていることに注意されたい。
種類の加算器がサポートされている。 引数 kind を設定することで、キャリーインを持たない半加算器や、キャリーインもキャリーアウトも持たない固定サイズの加算器を選択することもできる。 全加算器とは異なり、これらの回路はヘルパー量子ビットを1つ追加する必要がある。
3qubitサイズの入力に対する固定小数点加算器(kind="fixed")の回路図は以下の通り
┌──────┐┌──────┐ ┌──────┐┌──────┐
a_0: ┤0 ├┤2 ├────────────────┤2 ├┤0 ├
│ ││ │┌──────┐┌──────┐│ ││ │
a_1: ┤ ├┤0 ├┤2 ├┤2 ├┤0 ├┤ ├
│ ││ ││ ││ ││ ││ │
a_2: ┤ ├┤ MAJ ├┤0 ├┤0 ├┤ UMA ├┤ ├
│ ││ ││ ││ ││ ││ │
b_0: ┤1 MAJ ├┤ ├┤ MAJ ├┤ UMA ├┤ ├┤1 UMA ├
│ ││ ││ ││ ││ ││ │
b_1: ┤ ├┤1 ├┤ ├┤ ├┤1 ├┤ ├
│ │└──────┘│ ││ │└──────┘│ │
b_2: ┤ ├────────┤1 ├┤1 ├────────┤ ├
│ │ └──────┘└──────┘ │ │
help_0: ┤2 ├────────────────────────────────┤2 ├
└──────┘ └──────┘キャリーアウトを持たないので、フル・アダーより1量子ビットが少ないが、キャリーインの代わりにヘルパー量子ビットを使うので、2量子ビットではなく1量子ビット少ないだけである。
パラメーター
- num_state_qubits (int) – 状態 または のどちらかの入力レジスタの量子ビット数。 2つの入力レジスタは同じ数の量子ビットを持たなければならない。
- kind (str) – 加算器の種類は、全加算器の場合は
"full"、半加算器の場合は"half"、固定サイズ加算器の場合は"fixed"。 フル加算器にはキャリーインとキャリーアウトの両方が含まれ、ハーフ加算器にはキャリーアウトのみが含まれ、固定サイズ加算器にはキャリーインもキャリーアウトも含まれない。
レイズ
ValueError - num_state_qubits が1より小さい場合。
戻りの型
参照資料:
[1] クーカロほか 新しい量子リップルキャリー加算回路, 2004. arXiv:quant-ph/0410184
[2] Vedral et al、 初等算術演算のための量子ネットワーク, 1995. arXiv:quant-ph/9511018
adder_ripple_v95
qiskit.synthesis.adder_ripple_v95(num_state_qubits, kind='half')
VBEリップルキャリー加算器 [1]。
この方法では、 CCXゲートと CXゲートを [2の]深さで使用する。
この回路は、2つの等しいサイズの量子レジスタのインプレース加算を行う。 一例として、2qubitサイズの2つのレジスタに対して完全加算(すなわちキャリーインビットを含む)を行う古典的な加算回路は以下の通りである:
┌────────┐ ┌───────────┐┌──────┐
cin_0: ┤0 ├───────────────────────┤0 ├┤0 ├
│ │ │ ││ │
a_0: ┤1 ├───────────────────────┤1 ├┤1 ├
│ │┌────────┐ ┌──────┐│ ││ Sum │
a_1: ┤ ├┤1 ├──■──┤1 ├┤ ├┤ ├
│ ││ │ │ │ ││ ││ │
b_0: ┤2 Carry ├┤ ├──┼──┤ ├┤2 Carry_dg ├┤2 ├
│ ││ │┌─┴─┐│ ││ │└──────┘
b_1: ┤ ├┤2 Carry ├┤ X ├┤2 Sum ├┤ ├────────
│ ││ │└───┘│ ││ │
cout_0: ┤ ├┤3 ├─────┤ ├┤ ├────────
│ ││ │ │ ││ │
helper_0: ┤3 ├┤0 ├─────┤0 ├┤3 ├────────
└────────┘└────────┘ └──────┘└───────────┘ここで、 Carry ゲートと Sum ゲートは [1].で紹介したゲートに対応する。 Carry_dgは Carry ゲートの逆数に相当する。 この実装では、入力レジスタの量子ビットは、最初の入力レジスタからの全ての量子ビットの後に、2番目の入力レジスタからの全ての量子ビットが続くように並べられていることに注意されたい。 これは、 [1の]図2と比べて順序が異なるため、回路の図面が異なることになる。
パラメーター
- num_state_qubits (int) – レジスタのサイズ。
- kind (str) – 加算器の種類は、全加算器の場合は
"full"、半加算器の場合は"half"、固定サイズ加算器の場合は"fixed"。 フル加算器にはキャリーインとキャリーアウトの両方が含まれ、ハーフ加算器にはキャリーアウトのみが含まれ、固定サイズ加算器にはキャリーインもキャリーアウトも含まれない。
レイズ
ValueError - num_state_qubits が1より小さい場合。
戻りの型
参照資料:
[1] Vedralら、 初等算術演算のための量子ネットワーク, 1995. arXiv:quant-ph/9511018
[2] クーカロほか 新しい量子リップルキャリー加算回路, 2004. arXiv:quant-ph/0410184
adder_ripple_r25
qiskit.synthesis.adder_ripple_r25(num_qubits)
RVリップルキャリー加算器 [1]. [1に]示すRVリップルキャリー加算器をベースに、アンシラフリーの量子加算回路をサブリニアデプスで構成する。 実装の深さは 、使用するゲートはmath:O(n log n)である。
例として、2つの4qubitサイズのレジスタの加算を行うリップルキャリー加算回路は以下の通りである:
┌───────────┐ ┌────────┐
a_0: ─────────────────────────┤0 ├────────────────────┤0 ├───────────────■─────────────────
┌────────┐│ │ │ │┌───────────┐ │
a_1: ──■────────────┤0 ├┤2 ├──■─────────────────┤2 ├┤0 ├──┼────■────────────
│ │ ││ │ │ │ ││ │ │ │
a_2: ──┼────■───────┤1 ├┤4 ├──┼────■────────────┤4 ├┤1 LAD_1_dg ├──┼────┼────■───────
│ │ │ ││ │ │ │ │ ││ │ │ │ │
a_3: ──┼────┼────■──┤2 ├┤6 ├──┼────┼────■───────┤6 LAD_2 ├┤2 ├──┼────┼────┼────■──
│ │ │ │ ││ │ │ │ │ │ │└───────────┘┌─┴─┐ │ │ │
b_0: ──┼────┼────┼──┤ ├┤1 LAD_2_dg ├──┼────┼────┼───────┤1 ├─────────────┤ X ├──┼────┼────┼──
┌─┴─┐ │ │ │ LAD_1 ││ │┌─┴─┐ │ │ ┌───┐│ │ ┌───┐ └───┘┌─┴─┐ │ │
b_1: ┤ X ├──┼────┼──┤ ├┤3 ├┤ X ├──┼────┼──┤ X ├┤3 ├────┤ X ├─────────┤ X ├──┼────┼──
└───┘┌─┴─┐ │ │ ││ │└───┘┌─┴─┐ │ ├───┤│ │ ├───┤ └───┘┌─┴─┐ │
b_2: ─────┤ X ├──┼──┤ ├┤5 ├─────┤ X ├──┼──┤ X ├┤5 ├────┤ X ├──────────────┤ X ├──┼──
└───┘┌─┴─┐│ ││ │ └───┘┌─┴─┐└───┘└────────┘ └───┘ └───┘┌─┴─┐
b_3: ──────────┤ X ├┤ ├┤7 ├──────────┤ X ├───────────────────────────────────────────┤ X ├
└───┘│ ││ │ └───┘ └───┘
cout: ───────────────┤3 ├┤8 ├───────────────────────────────────────────────────────────────
└────────┘└───────────┘そして LAD_1 と LAD_2 はそれぞれ [1.] で紹介したCXとCCXのラダーである。 この実装では、入力レジスタの量子ビットは、最初の入力レジスタからの全ての量子ビットの後に、2番目の入力レジスタからの全ての量子ビットが続くように並べられていることに注意されたい。
パラメーター
num_qubits (int) – レジスタのサイズ。
戻り値
RVリップル・キャリー加算器を実装した量子回路。
レイズ
ValueError - num_qubits が1より小さい場合。
戻りの型
参照資料:
1. Remaud and Vandaele, Ancilla-free Quantum Adder with Sublinear Depth, 2025. arXiv:2501.16802
adder_modular_v17
qiskit.synthesis.adder_modular_v17(num_qubits)
[1の]図15のVan Rentergem式加算器に基づいて、補助量子ビットを持たないモジュラー加算器回路を構成する。 この実装では、各レジスタにk個の量子ビットを持つ加算器(k = num_qubits)に対して、最大で CXゲートを使用する。
パラメーター
num_qubits (int) – レジスタのサイズ。
戻り値
モジュラー加算器を実装した量子回路。
レイズ
ValueError - num_qubits が1より小さい場合。
戻りの型
参照資料:
[1] Gidney, Factoring with n+2 clean qubits and n-1 dirty qubits, 2017. arxiv:1706.07884
乗数
multiplier_cumulative_h18
qiskit.synthesis.multiplier_cumulative_h18(num_state_qubits, num_result_qubits=None)
2つの入力レジスタの積を場外に保存する乗算回路。
この回路は、Ref. [1]. 一例として、3qubitサイズの2つのレジスタに対して非変調乗算を行う乗算回路は以下の通りである:
from qiskit.synthesis.arithmetic import multiplier_cumulative_h18
num_state_qubits = 3
circuit = multiplier_cumulative_h18(num_state_qubits)
circuit.draw("mpl")
この回路における乗算は、入力レジスタの1つを使用して一連のシフト加算を実行する古典的なアプローチで実装され、もう1つの入力レジスタからの量子ビットは加算器の制御量子ビットとして機能する。
パラメーター
- num_state_qubits (int) – 状態 または のどちらかの入力レジスタの量子ビット数。 2つの入力レジスタは同じ数の量子ビットを持たなければならない。
- num_result_qubits (int | None) – 出力を制限する結果量子ビットの数。 結果の量子ビット数が の場合、乗算モジュロ が実行され、出力が指定された量子ビット数に制限される。 デフォルト値は
2 * num_state_qubits、2つの入力の乗算から得られる可能性のある結果を表す。
レイズ
ValueError - num_result_qubits が与えられ、有効でない場合、つまり [num_state_qubits, 2 * num_state_qubits] にないことを意味する。
戻りの型
参照資料:
[1] Häner et al、 算術演算のための量子回路の最適化, 2018. arXiv:1805.12445
multiplier_qft_r17
qiskit.synthesis.multiplier_qft_r17(num_state_qubits, num_result_qubits=None)
2つの入力レジスタの積をout-of-placeで格納するQFT乗算回路。
この回路での乗算は、図3の [1の]手順で実行され、重み付き和回転は図5の [1に]示すように実行される。 QFTは出力レジスタに使用され、入力レジスタによって制御される回転がそれに続く。 回転により、状態はQFTベースの2つの入力レジスタの積に変換され、逆QFTを使用してQFTベースから戻される。 例えば、3量子ビットの場合、完全な乗算器は次式で与えられる:
from qiskit.synthesis.arithmetic import multiplier_qft_r17
num_state_qubits = 3
circuit = multiplier_qft_r17(num_state_qubits)
circuit.draw("mpl")
パラメーター
- num_state_qubits (int) – 状態 または のどちらかの入力レジスタの量子ビット数。 2つの入力レジスタは同じ数の量子ビットを持たなければならない。
- num_result_qubits (int | None) – 出力を制限する結果量子ビットの数。 結果の量子ビット数が の場合、乗算モジュロ が実行され、出力が指定された量子ビット数に制限される。 デフォルト値は
2 * num_state_qubits、2つの入力の乗算から得られる可能性のある結果を表す。
レイズ
ValueError - num_result_qubits が与えられ、有効でない場合、つまり [num_state_qubits, 2 * num_state_qubits] にないことを意味する。
戻りの型
参照資料:
[1] Ruiz-Perezら、 量子フーリエ変換による量子算術、2017年。 arXiv:1411.5949
合計
synth_weighted_sum_carry
qiskit.synthesis.synth_weighted_sum_carry(weighted_sum)
状態量子ビットの数と量子ビットの重みによって重み付き和ゲートを合成する。
この方法は [1の]付録Aに記載されている。
参照:
[1] Stamatopoulos et al. 量子コンピュータを使ったオプション・プライシング(2020年)
パラメーター
weighted_sum (WeightedSumGate)
戻りの型
一項演算の合成
整数比較器
synth_integer_comparator_2s
qiskit.synthesis.synth_integer_comparator_2s(num_state_qubits, value, geq=True)
2s の補数に基づいて整数比較を実装する。
これは [1の]付録Bに基づいている。
パラメーター
- num_state_qubits (int) – 比較する値をエンコードする量子ビットの数。
- value (int) – 比較する値。
- geq (bool) – もし
True、量子ビットの状態が 、その値より大きければターゲットビットを反転させ、そうでなければ 。
戻り値
整数比較器を実装した回路。
戻りの型
参考文献
[1] J. Gacon他 "量子拡張シミュレーションに基づく最適化"
synth_integer_comparator_greedy
qiskit.synthesis.synth_integer_comparator_greedy(num_state_qubits, value, geq=True)
値ごとの比較に基づく整数比較を実装する。
2 ** (num_state_qubits - 1) よりも小さい value の場合、この回路は、 value 制御状態0, 1,..., value - 1 を持つマルチ制御ゲートを実装し、量子ビットの状態が許容値のいずれかを表す場合にターゲット量子ビットが反転するようになっている。 value 、それ以上の場合は geq 。 この実装では、指数関数的な数のゲートを必要とする可能性がある。 補助量子ビットが利用可能であれば synth_integer_comparator_2s() が提供する実装がより効率的である。
パラメーター
- num_state_qubits (int) – 比較する値をエンコードする量子ビットの数。
- value (int) – 比較する値。
- geq (bool) – もし
True、量子ビットの状態が 、その値より大きければターゲットビットを反転させ、そうでなければ 。
戻り値
整数比較器を実装した回路。
戻りの型