Braket 支援哪些 OpenQASM 功能? - Amazon Braket

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Braket 支援哪些 OpenQASM 功能?

下一節列出 Braket 支援的 OpenQASM 3.0 資料類型、陳述式和 pragma 指示。

支援的 OpenQASM 資料類型

Amazon Braket 支援下列 OpenQASM 資料類型。

  • 非負整數用於 (虛擬和實體) qubit 索引:

    • cnot q[0], q[1];

    • h $0;

  • 浮點數或常數可用於閘道旋轉角度:

    • rx(-0.314) $0;

    • rx(pi/4) $0;

注意

pi 是 OpenQASM 中的內建常數,無法用作參數名稱。

  • 複雜數字陣列 (具有虛構部分的 OpenQASM im表示法) 允許使用結果類型 pragmas 來定義一般疱疹可觀測值,並以單一 pragmas 表示:

    • #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 宣告:

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

注意

pi 是 OpenQASM 中的內建常數,無法用作參數名稱。

Braket OpenQASM pragmas

Amazon Braket 支援下列 OpenQASM pragma 說明。

  • 雜訊計

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

  • 結果類型 pragmas

    • 基礎不可變的結果類型:

      • 狀態向量: #pragma braket result state_vector

      • 密度矩陣: #pragma braket result density_matrix

    • 梯度運算 pragmas:

      • 接合漸層: #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 上執行。不過,Raket 支援的 OpenQASM 3.0 功能有一些次要的語法差異,例如 qreg vs cregqubit vs bit。測量語法也有差異,而且這些需要以正確的語法支援。

Local Simulator 上 OpenQASM 的進階功能支援

LocalSimulator 支援進階 OpenQASM 功能,這些功能不會作為 Braket 的 QPU 或隨需模擬器的一部分提供。僅 支援下列功能清單LocalSimulator

  • 閘道修改器

  • OpenQASM 內建閘道

  • 傳統變數

  • 傳統操作

  • 自訂閘道

  • 傳統控制

  • QASM 檔案

  • 子例行程序

如需每個進階功能的範例,請參閱此範例筆記本。如需完整的 OpenQASM 規格,請參閱 OpenQASM 網站

使用 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 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); }