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 语句

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;

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

  • Verbatim pragmas

    • #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 的功能确实存在一些细微的语法差异,例如 vs 和 qreg v creg s。qubit bit测量语法也有差异,需要用正确的语法来支持这些语法。

本地模拟器上对 OpenQasm 的高级功能支持

LocalSimulator支持高级 OpenQasm 功能,这些功能不是作为 Braket 的 QPU 或按需模拟器的一部分提供的。以下功能列表仅在中受支持LocalSimulator

  • 大门修改器

  • OpenQasm 内置大门

  • 经典变量

  • 经典运算

  • 定制大门

  • 古典控制

  • QASM 文件

  • 子例程

有关每项高级功能的示例,请参阅此示例笔记本。有关完整的 OpenQasm 规范,请访问 O pen Qasm 网站。

支持的操作和语法 OpenPulse

支持 OpenPulse 的数据类型

校准方块:

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