Braket はどのような OpenQASM 機能をサポートしていますか? - Amazon Braket

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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 ステートメント

Braket では、次の OpenQASM Amazon ステートメントがサポートされています。

  • 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; }
  • qubit またはレジスタqubits全体に対する測定と測定の割り当て。

    • measure $0;

    • measure q;

    • measure q[0];

    • b = measure q;

    • measure q → b;

注記

pi は OpenQASM に組み込まれた定数であり、パラメータ名として使用することはできません。

Braket OpenQASM プラグマ

以下の OpenQASM プラグマ手順は Braket Amazon でサポートされています。

  • ノイズプラグマ

    • #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

      • 密度マトリックス: #pragma braket result density_matrix

    • グラデーション計算プラグマ:

      • 結合勾配: #pragma braket result adjoint_gradient expectation(2.2 * x[0] @ x[1]) all

    • 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 の機能には、 qregcreg、 など、構文のわずかな違いqubitがありますbit。測定構文にも違いがあり、これらは正しい構文でサポートされる必要があります。

Local Simulator での OpenQASM の高度な機能のサポート

は、Braket の QPU またはオンデマンドシミュレーターの一部として提供されていない高度な OpenQASM 機能LocalSimulatorをサポートしています。以下の機能のリストは、 でのみサポートされていますLocalSimulator

  • ゲート修飾子

  • OpenQASM 組み込みゲート

  • クラシック変数

  • クラシックオペレーション

  • カスタムゲート

  • クラシックコントロール

  • QASM ファイル

  • サブルーチン

各高度な機能の例については、このサンプルノートブック を参照してください。OpenQASM の完全な仕様については、OpenQASM ウェブサイト を参照してください。

でサポートされているオペレーションと文法 OpenPulse

サポートされている OpenPulse データ型

Cal ブロック:

cal { ... }

デフォルトブロック:

// 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 my_frame = newframe(port_0, 4.5e9, 0.0);

ウェーブフォーム:

// 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); }