本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 错误
如果在设备功能中将 requiresContiguousQubitIndices 设置为 true 的设备上使用非连续 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,请首先通过检查 device.properties.action[DeviceActionType.OPENQASM].supportPhysicalQubits 来确认设备使用的是物理 qubits,然后通过选中 device.properties.paradigm.connectivity.connectivityGraph 或 device.properties.paradigm.connectivity.fullyConnected 来验证连接图。
OPENQASM 3; cnot $0, $14;
该代码生成错误消息:[line 3] has disconnected qubits 0 and 14
本地模拟器支持警告
LocalSimulator支持 OpenQasm 中的高级功能,这些功能可能无法在按需模拟 QPUs 器上使用。如果您的程序仅包含对 LocalSimulator 特定的语言功能(如以下示例所示),您将收到一条警告。
qasm_string = """ qubit[2] q; h q[0]; ctrl @ x q[0], q[1]; """ qasm_program = Program(source=qasm_string)
此代码生成警告:`此程序使用仅支持的 OpenQasm 语言功能。 LocalSimulator QPUs 或按需模拟器可能不支持其中一些功能。
有关受支持的 OpenQASM 功能的更多信息,请浏览本地模拟器上对 OpenQASM 的高级功能支持页面。