翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Braket はどのような OpenQASM 機能をサポートしていますか?
以下のセクションでは、Braket でサポートされている OpenQASM 3.0 のデータ型、ステートメント、およびプラグマ命令を示します。
このセクションの内容:
サポートされている OpenQASM データ型
Amazon Braket では以下の OpenQASM データ型がサポートされています。
-
非負の整数は (仮想および物理) 量子ビットのインデックスに使用されます。
-
cnot q[0], q[1]; -
h $0;
-
-
浮動小数点数や定数は、ゲート回転角度に使用できます。
-
rx(-0.314) $0; -
rx(pi/4) $0;
-
注記
pi は OpenQASM の組み込み定数であり、パラメータ名として使用することはできません。
-
複素数の配列 (虚部については OpenQASM では「
im」と表記) は、一般エルミートオブザーバブルを定義するための結果タイププラグマ、およびユニタリプラグマで使用できます。-
#pragma braket unitary [[0, -1im], [1im, 0]] q[0] -
#pragma braket result expectation hermitian([[0, -1im], [1im, 0]]) q[0]
-
サポートされている OpenQASM ステートメント
Amazon Braket では、以下の OpenQASM ステートメントがサポートされています。
-
Header: OPENQASM 3; -
古典ビット宣言:
-
bit b1;(等価:creg b1;) -
bit[10] b2;(等価:creg b2[10];)
-
-
量子ビット宣言:
-
qubit b1;(等価:qreg b1;) -
qubit[10] b2;(等価:qreg b2[10];)
-
-
配列内のインデックス作成:
q[0] -
入力:
input float alpha; -
物理qubitsの指定:
$0 -
デバイスでサポートされているゲートとオペレーション:
-
h $0; -
iswap q[0], q[1];
-
注記
デバイスでサポートされているゲートは、OpenQASM アクションのデバイスプロパティにあります。これらのゲートを使用するのにゲート定義は必要ありません。
-
逐語的なボックスステートメント。現在、ボックス期間表記はサポートされていません。逐語的なボックスには、ネイティブゲートと物理 qubits が必要です。
#pragma braket verbatim box{ rx(0.314) $0; }
-
qubitsまたはqubitレジスタ全体の測定と測定の割り当て。
-
measure $0; -
measure q; -
measure q[0]; -
b = measure q; -
measure q → b;
-
-
障壁ステートメントは、障壁の境界を越えたゲートの順序変更と最適化を防止することで、回路のコンパイルと実行を明示的に制御します。また、実行中に厳密な時間順序を適用し、後続のオペレーションを開始する前に障壁が完了する前にすべてのオペレーションを確実に実行します。
-
barrier; -
barrier q[0], q[1]; -
barrier $3, $6;
-
Braket OpenQASM プラグマ
Amazon Braket でサポートされている OpenQASM プラグマ命令は、以下のとおりです。
-
ノイズプラグマ
-
#pragma braket noise bit_flip(0.2) q[0] -
#pragma braket noise phase_flip(0.1) q[0] -
#pragma braket noise pauli_channel
-
-
逐語的なプラグマ
-
#pragma braket verbatim
-
-
結果タイププラグマ
-
基底不変な結果タイプ:
-
状態ベクトル:
#pragma braket result state_vector -
密度マトリックス: <code>#pragma braket result density_matrix</code>
-
-
勾配計算プラグマ:
-
随伴勾配: <code>#pragma braket result adjoint_gradient expectation(2.2 * x[0] @ x[1]) all</code>
-
-
Z基底による結果タイプ:
-
振幅:
#pragma braket result amplitude "01" -
確率:
#pragma braket result probability q[0], q[1]
-
-
基底回転結果タイプ
-
期待値:
#pragma braket result expectation x(q[0]) @ y([q1]) -
分散:
#pragma braket result variance hermitian([[0, -1im], [1im, 0]]) $0 -
標本:
#pragma braket result sample h($1)
-
-
注記
OpenQASM 3.0 は OpenQASM 2.0 と下位互換性があるため、2.0 を使用して記述されたプログラムは Braket で実行できます。ただし、Braket でサポートされている OpenQASM 3.0 の機能には、qreg と creg の違いや qubit と bit の違いなど、構文の小さな違いがあります。測定構文にも違いがあり、これらの違いには正しい構文で対応する必要があります。
LocalSimulator での OpenQASM の高度な機能のサポート
LocalSimulator は、Braket の QPU またはオンデマンドシミュレーターの構成要素として提供されていない高度な OpenQASM 機能をサポートしています。LocalSimulator でのみサポートされている機能を次にリストします。
-
ゲート修飾子
-
OpenQASM 組み込みゲート
-
クラシカル変数
-
クラシカルオペレーション
-
カスタムゲート
-
クラシカル制御
-
QASM ファイル
-
サブルーチン
高度な各機能の例については、「sample notebook
OpenPulse でサポートされているオペレーションと文法
サポートされている OpenPulse データ型
Cal ブロック:
cal { ... }
Defcal ブロック:
// 1 qubit defcal x $0 { ... } // 1 qubit w. input parameters as constants defcal my_rx(pi) $0 { ... } // 1 qubit w. input parameters as free parameters defcal my_rz(angle theta) $0 { ... } // 2 qubit (above gate args are also valid) defcal cz $1, $0 { ... }
フレーム (frame):
frame my_frame = newframe(port_0, 4.5e9, 0.0);
波形 (waveform):
// prebuilt waveform my_waveform_1 = constant(1e-6, 1.0); //arbitrary waveform my_waveform_2 = {0.1 + 0.1im, 0.1 + 0.1im, 0.1, 0.1};
カスタムゲートキャリブレーションの例:
cal { waveform wf1 = constant(1e-6, 0.25); } defcal my_x $0 { play(wf1, q0_rf_frame); } defcal my_cz $1, $0 { barrier q0_q1_cz_frame, q0_rf_frame; play(q0_q1_cz_frame, wf1); delay[300ns] q0_rf_frame shift_phase(q0_rf_frame, 4.366186381749424); delay[300ns] q0_rf_frame; shift_phase(q0_rf_frame.phase, 5.916747563126659); barrier q0_q1_cz_frame, q0_rf_frame; shift_phase(q0_q1_cz_frame, 2.183093190874712); } bit[2] ro; my_x $0; my_cz $1,$0; c[0] = measure $0;
任意パルスの例:
bit[2] ro; cal { waveform wf1 = {0.1 + 0.1im, 0.1 + 0.1im, 0.1, 0.1}; barrier q0_drive, q0_q1_cross_resonance; play(q0_q1_cross_resonance, wf1); delay[300ns] q0_drive; shift_phase(q0_drive, 4.366186381749424); delay[300dt] q0_drive; barrier q0_drive, q0_q1_cross_resonance; play(q0_q1_cross_resonance, wf1); ro[0] = capture_v0(r0_measure); ro[1] = capture_v0(r1_measure); }