GateFolding
class GateFolding
ベース: MitigationTask
ゲートフォールディング低減手法を用いたゼロノイズ外挿法(ZNE)により、観測可能量の期待値を計算します。
このクラスを使用すると、ゲートフォールディング法を用いたZNEによる回路の緩和処理が施された QuantumProgram を作成できます。このは、Executorを使用してハードウェア上で実行可能であり、結果のポスト処理を通じて、指定された観測量の緩和された期待値を計算することができます。 タスクのパラメータはprepare関数への入力として指定する必要があり、後処理に必要な関連変数は内部で保存されます:
gf_task = GateFolding()
program = gf_task.prepare(circuit=circuit,
observables=observables,
parameters=parameter_values,
noise_factors=noise_factors_array,
extrapolator=extrapolators_list)
job = executor.run(program)
results = job.result()
mitigated_result = gf_task.postprocess(results)ロードされたジョブ結果の期待値を計算するには、後処理に必要なすべての内部変数を含むジョブ結果から、 GateFolding タスクを作成することができます。 あるいは、後処理に必要な変数を、静的 compute_expectation_value メソッドに直接入力として渡すこともできます。 読み込んだ結果に対して後処理を実行する例:
gf_task = GateFolding()
program = gf_task.prepare(circuit=circuit,
observables=observables,
parameters=parameter_values,
noise_factors=noise_factors_array,
extrapolator=extrapolators_list)
job_id = executor.run(program).job_id
job = service.job(job_id)
results = job.result()
gf_task = load_tasks_from_result(results)[0]
mitigated_result = gf_task.postprocess(results)GateFolding タスクをインスタンス化します。
属性
バージョン
デフォルト値: '0.1'
方法
compute_expectation_value
static compute_expectation_value(item_result, observables, param_shape=None, param_basis_pairs=None, meas_bases=None, broadcast_obs_and_params=False, measure_noise_data=None)
単一項目の結果に対する期待値を処理します。
この関数を使用すると、新しいクラスのインスタンスを作成することなく、単一の「未緩和」項目結果の期待値を計算することができます。
パラメーター
- item_result (QuantumProgramItemResult) – その項目の結果。
- observables (ObservablesArray |Sequence[SparsePauliOp]) – 期待値を計算するための観測量。
- param_shape (tuple[int, ...] | None) – パラメータ値の形式。
- param_basis_pairs (list[tuple[tuple[int, ...], str]] | None) – 基底を測定するための、パラメータとインデックスの間の対応関係を示すマップ。
- meas_bases (Sequence[Pauli] | Sequence[str] | PauliList | None) – 測定されたパウリ基の一覧。 第
i項は、データ内の第iスライスに対応すると仮定される測定基底であるitem_result。 - broadcast_obs_and_params (bool) – オブザーバブルとパラメータの値を配信するかどうか。
- measure_noise_data (PauliLindbladMap |ndarray | None) – TREXの低減のための測定ノイズ校正データ。
戻り値
データにフィールド および evs std を含む PubResult。ここで、 evs は期待値、 は期待値の標準偏差 std である。 が True に設定 broadcast_obs_and_params されている場合、データには、異なるランダム化間の標準偏差を表すフィールド twirl_stds も含まれます。
昇給
- ValueError – に
item_resultという'_meas'キーがない場合。 - ValueError – 軸の数が不正
item_result['_meas']な場合。 - ValueError – と
param_shapeが互いにブロードキャストできないobservables.shape場合。
戻りの型
compute_expectation_value_gate_folding
static compute_expectation_value_gate_folding(item_results, observables, param_shape, param_basis_pairs, noise_factors, extrapolator, extrapolated_noise_factors=None, meas_bases=None, broadcast_obs_and_params=False, measure_noise_data=None, custom_fit=None)
単一項目の結果に対する期待値を処理します。
この関数を使用すると、新しいクラスインスタンスを生成することなく、ゲート・フォールディングの緩和が適用された単一の項目の結果に対する期待値を計算することができます。
パラメーター
-
item_results (list[QuantumProgramItemResult]) – 項目結果の一覧 - ノイズ要因ごとに1つずつ。
-
observables (ObservablesArray |Sequence[SparsePauliOp]) – 期待値を計算するための観測量。
-
param_basis_pairs (list[tuple[tuple[int, ...], str]] | None) – 基底を測定するための、パラメータとインデックスの間の対応関係を示すマップ。
-
extrapolated_noise_factors (float |int |list[float] | None) – 適合度を評価するためのノイズ係数。
-
extrapolator (list[Literal['linear', 'exponential', 'double_exponential', 'polynomial_degree_1', 'polynomial_degree_2', 'polynomial_degree_3', 'polynomial_degree_4', 'polynomial_degree_5', 'polynomial_degree_6', 'polynomial_degree_7', 'fallback', 'custom']]) –
使用する外挿モデル(1つまたは複数)。 モデルは優先順位に従って試行されます。 対応モデル(それぞれ、ノイズ係数の指定された関数に適合する
x):"linear":a + b*x"polynomial_degree_k"(1 ≤ k ≤ 7):次数 k の多項式"exponential":a*exp(b*x)"double_exponential":a*exp(b*x) + c*exp(d*x)(減衰に制限された率)"fallback": 適合せず;ノイズ係数が最も低いときの測定値custom: パラメータcustom_fitで指定されたカスタム外挿関数
-
meas_bases (Sequence[Pauli] | Sequence[str] | PauliList | None) – 測定されたパウリ基の一覧。 第 番
i目の項目は、各 におけるデータの第iスライスに対応すると仮定される測定基準であるitem_results。 -
broadcast_obs_and_params (bool) – オブザーバブルとパラメータの値を配信するかどうか。
-
measure_noise_data (PauliLindbladMap |ndarray | None) – TREXの低減のための測定ノイズ校正データ。 事前に学習されたノイズモデルの PauliLindbladMap である場合もあれば、キャリブレーション回路による結果である場合もあります。
-
custom_fit (tuple[Callable[[...], ndarray], list[float], tuple[float, ...] | tuple[list[float], ...]] | None) – 外挿に使用されるカスタムフィッティング関数。 次のような形式のタプルを含める必要があります:
(function, p_0, bounds). この関数は、独立変数を最初の引数として受け取り、適合させるパラメータをそれ以降の個別の引数として受け取るようにすべきです。 p_0 はパラメータの初期推定値の配列であり、bounds はパラメータの上限と下限を表します。 これらのパラメータは、関scipy.optimize.curve_fit数の引数として渡されます。
戻り値
-
evs: ノイズがゼロの点で評価された期待値。 -
std: ノイズゼロ点で評価された外挿期待値の標準偏差。 -
evs_noise_factors: noise_factors の各点で計算された期待値。 -
stds_noise_factors: noise_factors の各点で算出された標準偏差。 -
stds_twirl_noise_factors: 異なる無作為化群間の標準偏差は、以下の時点で算出されたnoise_factors ポイント。
-
evs_extrapolated: extrapolated_noise_factors の各点で評価された期待値。extrapolated_noise_factorsが None の場合は、None に設定します。 -
stds_extrapolated: extrapolated_noise_factors の各点で計算された標準偏差。extrapolated_noise_factorsが None の場合は、None に設定します。
PubResult には、メタデータ内に「field selected_extrapolators 」というフィールドも含まれます。これは、ノイズゼロの外挿点において、各観測項のデータを外挿するために使用される有効な外挿関数です。
戻りの型
以下のフィールドを含む PubResult
昇給
- ValueError – もしそのうちの1つに キー
'_meas'がないitem_results場合。 - ValueError –
item_results``'_meas'データのいずれかで、軸の数が不正な場合。 - ValueError – と
param_shapeが互いにブロードキャストできないobservables.shape場合。 - ValueError – 任意の外挿器に対して、 が未指定である
noise_factors場合。
create_instance_from_passthrough_data
static create_instance_from_passthrough_data(passthrough, trex=None)
量子プログラムの実行結果から読み込まれたパススルー辞書から、 GateFolding インスタンスを作成します。
パラメーター
- passthrough (dict[str, Any]) – 量子プログラムの実行結果から読み込まれた Passthrough_data ディクショナリ。
- trex (TREX | None) – 同じ量子プログラム内で実行された、キャリブレーション回路の結果を含むTREXインスタンス。 TREXの緩和措置が適用されなかった場合
None、または同じ量子プログラムの一環としてTREXのキャリブレーションが実行されなかった場合は、そのまま残しておく必要があります。
戻り値
GateFolding のインスタンス。
戻りの型
find_unique_layers
find_unique_layers(circuit, custom_boxing_options=None)
指定されたボクシングオプションを使用して、指定された回路の固有のボックス化されたレイヤーを返します。
パラメーター
- circuit (QuantumCircuit) – その回路は、独自の層を形成する。
- custom_boxing_options (dict | None) – function
generate_boxing_pass_manager()で使用されるカスタム・ボクシングのオプション。
戻り値
指定された回路の、一意なボックス化されたレイヤー。
戻りの型
postprocess
postprocess(results, measure_noise_data=None, *, noise_factors=None, extrapolator=None, extrapolated_noise_factors=None, custom_fit=None)
GateFolding の単一タスクの結果に対する期待値を処理します。
パラメーター
-
results (list[QuantumProgramItemResult] | QuantumProgramResult) – 実行結果。 結果オブジェクト全体、またはこのタスクのゲートフォールディングの影響が軽減された項目のいずれかです。 量子プログラムにTREXキャリブレーションタスクが追加された場合、結果オブジェクト全体が指定されていれば、その結果が測定ノイズデータの計算に使用されます。
-
noise_factors (Sequence[float] | None) – ノイズを増幅するために用いられたノイズ係数。
-
extrapolated_noise_factors (list[float] | None) – 適合度を評価するためのノイズ係数。
-
extrapolator (Sequence[Literal['linear', 'exponential', 'double_exponential', 'polynomial_degree_1', 'polynomial_degree_2', 'polynomial_degree_3', 'polynomial_degree_4', 'polynomial_degree_5', 'polynomial_degree_6', 'polynomial_degree_7', 'fallback', 'custom']] | None) –
使用する外挿モデル(1つまたは複数)。 モデルは優先順位に従って試行されます。 対応モデル(それぞれ、ノイズ係数の指定された関数に適合する
x):"linear":a + b*x"polynomial_degree_k"(1 ≤ k ≤ 7):次数 k の多項式"exponential":a*exp(b*x)"double_exponential":a*exp(b*x) + c*exp(d*x)(減衰に制限された率)"fallback": 適合せず;ノイズ係数が最も低いときの測定値custom: パラメータcustom_fitで指定されたカスタム外挿関数
-
measure_noise_data (PauliLindbladMap |ndarray | None) – TREXの低減のための測定ノイズ校正データ。 事前に学習されたノイズモデルの PauliLindbladMap である場合もあれば、キャリブレーション回路による結果である場合もあります。
-
custom_fit (tuple[Callable[[...], ndarray], list[float], tuple[float, ...] | tuple[list[float], ...]] | None) – 外挿に使用されるカスタムフィッティング関数。 次のような形式のタプルを含める必要があります:
(function, p_0, bounds). この関数は、独立変数を最初の引数として受け取り、適合させるパラメータをそれ以降の個別の引数として受け取るようにすべきです。 p_0 はパラメータの初期推定値の配列であり、bounds はパラメータの上限と下限を表します。 これらのパラメータは、関scipy.optimize.curve_fit数の引数として渡されます。
戻り値
-
evs: ノイズがゼロの点で評価された期待値。 -
std: ノイズゼロ点で評価された外挿期待値の標準偏差。 -
evs_noise_factors: noise_factors の各点で計算された期待値。 -
stds_noise_factors: noise_factors の各点で算出された標準偏差。 -
stds_twirl_noise_factors: 異なる無作為化群間の標準偏差は、以下の時点で算出されたnoise_factors ポイント。
-
evs_extrapolated: extrapolated_noise_factors の各点で評価された期待値。extrapolated_noise_factorsが None の場合は、None に設定します。 -
stds_extrapolated: extrapolated_noise_factors の各点で計算された標準偏差。extrapolated_noise_factorsが None の場合は、None に設定します。
PubResult には、メタデータ内に「field selected_extrapolators 」というフィールドも含まれます。これは、ノイズゼロの外挿点において、各観測項のデータを外挿するために使用される有効な外挿関数です。
戻りの型
以下のフィールドを含む PubResult
昇給
- ValueError – タスクの項目結果のいずれかに
'_meas'キーがない場合。 - ValueError – 検索結果の項目のデータ
'_meas'のうち、いずれかの軸の数が不正な場合。 - ValueError – と
param_shapeが互いにブロードキャストできないobservables.shape場合。
prepare
prepare(circuit, observables, parameters, custom_boxing_options=None, shots_per_randomization=64, num_randomizations=128, broadcast_obs_and_params=False, trex=None, quantum_program=None, *, folding_method='random', noise_factors=(1, 3, 5), extrapolator=None, extrapolated_noise_factors=None)
Executor 経由で実行するための、 GateFoldingQuantumProgram による緩和措置が施されたアイテムを作成します。
Executorを介して実行可能で QuantumProgram、 GateFolding によるノイズ低減処理が施された(ゲートフォールディング技術を用いてノイズを増幅し、ノイズゼロ点まで外挿する)アイテムを作成します。 が指定 quantum_program された場合、新しい項目は既存のプログラムに追加されます。指定されない場合は、作成された項目のみを格納する新しいプログラムが作成されます。 broadcast_obs_and_params が True の場合、観測可能変数とパラメータは、samplomatic のブロードキャスト規則に従ってブロードキャストされ、一部のパラメータを一部の観測可能変数に関連付けることが可能になります。 そうしないと、各オブザーバブルに対してすべてのパラメータが実行されてしまいます(パラメータとオブザーバブルの外積)。 なお、外積の後処理の方が通常は高速であることに注意してください。
パラメーター
-
circuit (QuantumCircuit) – 量子回路。
-
observables (ObservablesArray |Sequence[SparsePauliOp]) – 期待値を計算するための観測量。
-
parameters (ndarray | None) – パラメトリック回路のパラメータ。
-
custom_boxing_options (dict | None) – function
generate_boxing_pass_manager()で使用されるカスタム・ボクシングのオプション。 -
shots_per_randomization (int) – 無作為割付あたりの投与回数。
-
num_randomizations (int) – 無作為化の回数。
-
broadcast_obs_and_params (bool) – オブザーバブルとパラメータを送信するかどうか。
-
trex (TREX | None) – 読み出しエラーの軽減に使用されるTREX軽減インスタンス。
-
quantum_program (QuantumProgram | None) – 項目を追加するための量子プログラム。 「None」の場合、新しいプログラムが作成されます。
-
folding_method (Literal['random', 'front', 'back']) –
ノイズを増幅するために、2量子ビットゲートを折りたたむ際に用いる手法。 ノイズファクタの関係上、ゲートの一部のみを増幅する必要がある場合は、以下の方法に従ってそれらのゲートが選択される:
"random"(デフォルト):ゲートはランダムに選択されます。"front": ゲートは、トポロジカルに順序付けられたDAG回路の先頭から選択される。"back": ゲートは、トポロジカルに順序付けられたDAG回路の末端から選択される。
-
extrapolator (Sequence[Literal['linear', 'exponential', 'double_exponential', 'polynomial_degree_1', 'polynomial_degree_2', 'polynomial_degree_3', 'polynomial_degree_4', 'polynomial_degree_5', 'polynomial_degree_6', 'polynomial_degree_7', 'fallback', 'custom']] | None) –
後処理で使用する予定の補外モデル(1つまたは複数)。 これらの外挿器を用いて有効なフィッティングを行うために、十分なノイズ因子が存在することを検証するための準備として使用されます。 の場合
None、検証は行われません。 対応モデル(それぞれ、ノイズ係数の指定された関数に適合しますx):"linear":a + b*x"polynomial_degree_k"(1 ≤ k ≤ 7):次数 k の多項式"exponential":a*exp(b*x)"double_exponential":a*exp(b*x) + c*exp(d*x)(減衰に制限された率)"fallback": 適合せず;ノイズ係数が最も低いときの測定値
-
extrapolated_noise_factors (list[float] | None) – 後処理において、適合度を評価するためのノイズ係数を使用する予定である。 後処理を容易にするために、データを保存するために使用されます。 後処理で上書きすることができます。
戻り値
GateFolding による緩和措置が施されたAで QuantumProgram 、Executorを介して実行可能な項目。
戻りの型