SolovayKitaev
class qiskit.transpiler.passes.SolovayKitaev(*args, **kwargs)
ベース: TransformationPass
Solovay-Kitaevアルゴリズムを使用して、 1q ゲートを離散ベースに約分解する。
Solovay-Kitaevの定理 [1は]、任意の単一量子ビットゲートは、その集合が において密な部分集合を生成する場合、固定された単一量子ビットゲートの集合によって任意の精度で近似できるというものである。これは、任意の単一量子ビットゲートを、フォールト・トレラントに実装する方法がわかっている離散的で普遍的なゲート集合で表現できることを意味するので、重要な結果です。 したがって、ソロベイ・キタエフ・アルゴリズムは、フォールトトレラントでない回路をフォールトトレラントに言い換えることを可能にする。
このソロヴェイ・キタエフ・アルゴリズムの実装は、 [2].
例えば、次のような回路である
┌─────────┐
q_0: ┤ RX(0.8) ├
└─────────┘に分解できる
global phase: 7π/8
┌───┐┌───┐┌───┐
q_0: ┤ H ├┤ T ├┤ H ├
└───┘└───┘└───┘L2-error は約 0.01 である。
例
デフォルトでは、ベーシスゲートセットは ["t", "tdg", "h"] である:
import numpy as np
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler.passes.synthesis import SolovayKitaev
from qiskit.quantum_info import Operator
circuit = QuantumCircuit(1)
circuit.rx(0.8, 0)
print("Original circuit:")
print(circuit.draw())
skd = SolovayKitaev(recursion_degree=2)
discretized = skd(circuit)
print("Discretized circuit:")
print(discretized.draw())
print("Error:", np.linalg.norm(Operator(circuit).data - Operator(discretized).data))Original circuit:
┌─────────┐
q: ┤ Rx(0.8) ├
└─────────┘
Discretized circuit:
global phase: 7π/8
┌───┐┌───┐┌───┐
q: ┤ H ├┤ T ├┤ H ├
└───┘└───┘└───┘
Error: 2.828408279166474個々のベースゲートセットは初期化子で指定できます。
from qiskit.transpiler.passes import SolovayKitaev
basis = ["s", "sdg", "t", "tdg", "z", "h"]
skd = SolovayKitaev(recursion_degree=2, basis_gates=basis)異なるインスタンス間で基本的な近似値を生成・保存するには、および save_basic_approximations()SolovayKitaevDecomposition そのメソッドを使用できます。
from qiskit.transpiler.passes import SolovayKitaev
from qiskit.synthesis import SolovayKitaevDecomposition
# generate basic approximations
basis = ["s", "sdg", "t", "tdg", "z", "h"]
decomp = SolovayKitaevDecomposition(basis_gates=basis, depth=5)
# store them in a local file
fname = "sk_approx.bin"
decomp.save_basic_approximations(fname)
# load them for running Solovay-Kitaev
skd = SolovayKitaev(recursion_degree=2, basic_approximations=fname)参照資料:
[1] キタエフ, A Yu (1997). 量子計算:アルゴリズムと誤り訂正 ロシア数学調査 52 (6): 1191–1249. オンライン。
[2] ダウソン、クリストファー・M; ニールセン, マイケル・A. (2005) 『ソロベイ=キタエフアルゴリズム』 arXiv:quant-ph/0505030.
パラメーター
- recursion_degree - ソロヴェイ・キタエフ・アルゴリズムの再帰深度。 再帰の深さが大きいほど、分解の精度と長さが増す。
- basic_approximations - 最良の離散分解を再帰のルートで見つけるための基本的な近似。 文字列の場合、近似値を読み込むファイルを指定します。 辞書の場合は、
{label: SO(3)-matrix}ペアが含まれる。Noneの場合、深さ16までの 、 、 ゲートに基づくデフォルトが生成される。basic_approximationsが渡された場合、basis_gatesとdepthは設定できないことに注意。 - basis_gates - 基本近似のネットを構築するために使用される基底ゲート。 デフォルトは
["h", "t", "tdg"]。 この引数は、basic_approximations。 - depth - 基本近似で使用されるゲートの最大深度. この引数は、
basic_approximations。
属性
is_analysis_pass
パスが分析パスかどうかをチェックする。
パスが AnalysisPass,、パスがDAGを分析し、その分析結果をプロパティセットに書き込むことができることを意味する。 この種のパスでは、DAGの変更は許されない。
is_transformation_pass
パスが変形パスかどうかをチェックする。
パスが TransformationPass, の場合、そのパスはDAGを操作することはできるが、プロパティセットを変更することはできない(ただし、読み取ることはできる)ことを意味する。
方法
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)
ダグに SolovayKitaev 。
パラメーター
dag (DAGCircuit) – 入力ダグ。
戻り値
離散ターゲットベースで合成された 1q ゲートによる出力ダグ。
レイズ
TranspilerError – ゲートに_matrixが必要ない場合
戻りの型
update_status
update_status(state, run_state)
ワークフローのステータスを更新する。
パラメーター
- state (PassManagerState) – 更新するマネージャーの状態を渡す。
- run_state (RunState) – 現在のタスクの完了状況。
戻り値
パスマネージャーの状態を更新。
戻りの型