翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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.
Classical and qubit register limits exceeded error
1 つの古典レジスタと 1 つの 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
2 つの 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 のサポートに関する警告
LocalSimulator は、QPU またはオンデマンドシミュレーターでは利用できない OpenQASM の高度な機能をサポートしています。次の例に示すように、プログラムに、LocalSimulator にのみ固有の言語機能が含まれている場合は、警告が表示されます。
qasm_string = """ qubit[2] q; h q[0]; ctrl @ x q[0], q[1]; """ qasm_program = Program(source=qasm_string)
このコードは、「This program uses OpenQASM language features only supported in the LocalSimulator」という警告を生成します。これらの機能の一部は、QPU またはオンデマンドシミュレーターではサポートされていない可能性があります。
サポートされている OpenQASM 機能の詳細については、「Local Simulator での OpenQASM の高度な機能のサポート」ページを参照してください。