OpenQASM のトラブルシューティング - 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 のエラー

デバイス機能で requiresContiguousQubitIndicestrue に設定されているデバイスで、隣接していない 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 の高度な機能のサポート」ページを参照してください。