对 OpenQASM 进行故障 - Amazon Braket

通过以下方式学习量子计算的基础 AWS!注册 Amazon Braket 数字学习计划,完成一系列学习课程和数字评估后,即可获得自己的数字徽章。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

对 OpenQASM 进行故障

本节提供了在使用 OpenQasm 3.0 时遇到错误时可能有用的疑难解答指针。

包含语句错误

Braket 目前没有标准的门库文件可以包含在 OpenQasm 程序中。例如,以下示例引发了解析器错误。

OPENQASM 3; include "standardlib.inc";

以下代码生成错误消息:No terminal matches '"' in the current parser context, at line 2 col 17.

非连续错误 qubits

在设备功能true中设置为的requiresContiguousQubitIndices设备qubits上使用非连续会导致错误。

在模拟器和上运行量子任务时IonQ,以下程序会触发错误。

OPENQASM 3; qubit[4] q; h q[0]; cnot q[0], q[2]; cnot q[0], q[3];

以下代码生成错误消息:Device requires contiguous qubits. Qubit register q has unused qubits q[1], q[4].

将物理错误qubits与虚拟qubits错误混为一谈

不允许在同一个程序qubits中混合物理qubits和虚拟,这会导致错误。以下代码生成错误。

OPENQASM 3; qubit[2] q; cnot q[0], $1;

以下代码生成错误消息:[line 4] mixes physical qubits and qubits registers.

请求结果类型并在同一个程序错误qubits中进行测量

请求在同一程序qubits中明确测量的结果类型会导致错误。以下代码生成错误。

OPENQASM 3; qubit[2] q; h q[0]; cnot q[0], q[1]; measure q; #pragma braket result expectation x(q[0]) @ z(q[1])

以下代码生成错误消息:Qubits should not be explicitly measured when result types are requested.

经典限值和qubit寄存器限值超出误差

只允许使用一个经典寄存器和一个qubit寄存器。以下代码生成错误。

OPENQASM 3; qubit[2] q0; qubit[2] q1;

以下代码生成错误消息:[line 4] cannot declare a qubit register. Only 1 qubit register is supported.

方框前面没有逐字编译指示错误

所有方框前面都必须有逐字编译指示。以下代码生成错误。

box{ rx(0.5) $0; }

以下代码生成错误消息:In verbatim boxes, native gates are required. x is not a device native gate.

逐字记录框缺少本机门错误

逐字记录箱应该有原生大门和实体门。qubits以下代码生成原生门错误。

#pragma braket verbatim box{ x $0; }

以下代码生成错误消息:In verbatim boxes, native gates are required. x is not a device native gate.

逐字记录框缺少物理错误 qubits

逐字记录框必须有实物。qubits以下代码生成缺失的物理qubits错误。

qubit[2] q; #pragma braket verbatim box{ rx(0.1) q[0]; }

以下代码生成错误消息:Physical qubits are required in verbatim box.

逐字编译指示缺少 “braket” 错误

您必须在逐字记录编译指示中包含 “braket”。以下代码生成错误。

#pragma braket verbatim // Correct #pragma verbatim // wrong

以下代码生成错误消息:You must include “braket” in the verbatim pragma

qubits无法为单曲编制索引错误

qubits无法为单曲编制索引。以下代码生成错误。

OPENQASM 3; qubit q; h q[0];

以下代码会生成错误:[line 4] single qubit cannot be indexed.

但是,可以按如下方式对单个qubit数组进行索引:

OPENQASM 3; qubit[1] q; h q[0]; // This is valid

双qubit门qubits中的物理未连接错误

要使用物理设备qubits,请首先qubits通过检查来确认设备使用物理设备,device.properties.action[DeviceActionType.OPENQASM].supportPhysicalQubits然后通过选中device.properties.paradigm.connectivity.connectivityGraph或来验证连接图device.properties.paradigm.connectivity.fullyConnected

OPENQASM 3; cnot $0, $14;

以下代码生成错误消息:[line 3] has disconnected qubits 0 and 14

GetDevice 不返回 OpenQasm 结果错误

如果您在使用 Braket SDK 时在 GetDevice 响应中看不到 OpenQASM 结果,则可能需要设置 AWS_EXECUTION_ENV 环境变量来配置用户代理。有关如何为 Go 和 Java SDK 执行此操作,请参阅下面提供的代码示例。

要将 AWS_EXECUTION_ENV 环境变量设置为在使用时配置用户代理,请执行以下操作: AWS CLI

% export AWS_EXECUTION_ENV="aws-cli BraketSchemas/1.8.0" # Or for single execution % AWS_EXECUTION_ENV="aws-cli BraketSchemas/1.8.0" aws braket <cmd> [options]

要将 AWS_EXECUTION_ENV 环境变量设置为在使用 Boto3 时配置用户代理,请执行以下操作:

import boto3 import botocore client = boto3.client("braket", config=botocore.client.Config(user_agent_extra="BraketSchemas/1.8.0"))

要将 AWS_EXECUTION_ENV 环境变量设置为在使用/ (SDK v2) 时配置用户代理,请执行以下操作: JavaScriptTypeScript

import Braket from 'aws-sdk/clients/braket'; const client = new Braket({ region: 'us-west-2', credentials: AWS_CREDENTIALS, customUserAgent: 'BraketSchemas/1.8.0' });

要将 AWS_EXECUTION_ENV 环境变量设置为在使用/ (SDK v3) 时配置用户代理,请执行以下操作: JavaScriptTypeScript

import { Braket } from '@aws-sdk/client-braket'; const client = new Braket({ region: 'us-west-2', credentials: AWS_CREDENTIALS, customUserAgent: 'BraketSchemas/1.8.0' });

要将 AWS_EXECUTION_ENV 环境变量设置为在使用 Go SDK 时配置用户代理,请执行以下操作:

os.Setenv("AWS_EXECUTION_ENV", "BraketGo BraketSchemas/1.8.0") mySession := session.Must(session.NewSession()) svc := braket.New(mySession)

要将 AWS_EXECUTION_ENV 环境变量设置为在使用 Java 开发工具包时配置用户代理,请执行以下操作:

ClientConfiguration config = new ClientConfiguration(); config.setUserAgentSuffix("BraketSchemas/1.8.0"); BraketClient braketClient = BraketClientBuilder.standard().withClientConfiguration(config).build();

本地模拟器支持警告

LocalSimulator支持 OpenQasm 中的高级功能,这些功能在 QPU 或按需模拟器上可能不可用。如果您的程序仅包含特定于的LocalSimulator语言功能(如以下示例所示),您将收到一条警告。

qasm_string = """ qubit[2] q; h q[0]; ctrl @ x q[0], q[1]; """ qasm_program = Program(source=qasm_string)

此代码生成警告:`此程序使用仅支持的 OpenQasm 语言功能。 LocalSimulatorQPU 或按需模拟器可能不支持其中一些功能。

有关支持的 OpenQasm 功能的更多信息,请单击此处。