量子コードのデバッグとテスト
従来のプログラミングと同様に、量子プログラムが意図したとおりに動作することの確認が可能で、正しくない動作の診断が可能であることが非常に重要です。 この記事では、量子プログラムのテストとデバッグのために Azure Quantum Development Kit によって提供されるツールについて説明します。
プログラムの Q# デバッグ
Azure Quantum Development Kit (モダン QDK) Visual Studio Code 拡張機能には、プログラム用 Q# のデバッガーが含まれています。 ブレークポイントを設定し、コードをステップ実行し、各関数または操作にステップインし、ローカル変数だけでなく量子ビットの量子状態も追跡できます。
注意
VS Code デバッガーは (.qs) ファイルでのみ動作Q#し、Jupyter Notebook内のセルでは機能Q#しません。 セルJupyter Notebookテストについては、「コードのテスト」を参照してください。
次の例では、デバッガーの基本的な機能を示します。 VS Code デバッガーの使用の詳細については、「 デバッグ」を参照してください。
VS Code で、次のコードを使用して新しい .qs ファイルを作成して保存します。
namespace Sample {
open Microsoft.Quantum.Arrays;
open Microsoft.Quantum.Convert;
@EntryPoint()
operation Superposition() : Result {
use qubit = Qubit();
H(qubit);
let result = M(qubit);
Reset(qubit);
return result;
}
}
- 行番号の左側をクリックして、行
H(qubit)
にブレークポイントを設定します。 - デバッガー アイコンを選択してデバッガー ウィンドウを開き、[ 実行とデバッグ] を選択します。 デバッガー コントロールが画面の上部に表示されます。
- F5 キーを押してデバッグを開始し、ブレークポイントに進みます。 デバッガーの [変数 ] ウィンドウで、 Quantum State カテゴリを展開します。 量子ビットが |0> 状態で初期化されていることがわかります。
- ステップ イン (F11) 操作
H
と操作のソース コードがH
表示されます。 操作をステップ実行するときに、演算によって量子ビットが重ね合わせに設定されるとH
、量子値が変化します。 - 操作をステップ オーバー (F10)
M
すると、測定の結果として量子値が |0> または |1> に解決され、従来の変数result
の値が表示されます。 - 操作を
Reset
ステップ オーバーすると、量子ビットは |0> にリセットされます。
コードのテスト
VS Code Q# デバッガーはJupyter Notebook内のQ#セルでは使用できませんが、Modern QDK には、コードのトラブルシューティングに役立ついくつかの式と関数が用意されています。
Fail 式
式は fail
、プログラムを停止する致命的なエラーに対応して、計算を完全に終了します。
パラメーター値を検証する次の簡単な例を考えてみましょう。
import qsharp
# import qsharp package to acccess the %%qsharp magic command
%%qsharp
// use the %%qsharp magic command to change the cell type from Python to Q#
function PositivityFact(value : Int) : Unit {
if value <= 0 {
fail $"{value} isn't a positive number.";
}
}
PositivityFact(0);
Error: program failed: 0 isn't a positive number.
Call stack:
at PositivityFact in line_2
Qsc.Eval.UserFail
× runtime error
╰─▶ program failed: 0 isn't a positive number.
╭─[line_2:5:1]
5 │
6 │ fail $"{value} isn't a positive number.";
· ────────────────────┬───────────────────
· ╰── explicit fail
7 │ }
╰────
ここで、 式を fail
使用すると、プログラムが無効なデータで実行され続けなくなります。
Fact() 関数
名前空間の 関数を使用して Fact()
、前の例と同じ動作を Microsoft.Quantum.Diagnostics
実装できます。 関数は Fact()
、指定された従来の条件を評価し、false の場合は例外をスローします。
import qsharp
# import qsharp package to acccess the %%qsharp magic command
%%qsharp
// use the %%qsharp magic command to change the cell type from Python to Q#
function PositivityFact(value : Int) : Unit {
Fact(value > 0, "Expected a positive number.");
}
PositivityFact(4);
Error: program failed: Expected a positive number.
Call stack:
at Microsoft.Quantum.Diagnostics.Fact in diagnostics.qs
at PositivityFact in line_4
Qsc.Eval.UserFail
× runtime error
╰─▶ program failed: Expected a positive number.
╭─[diagnostics.qs:29:1]
29 │ if (not actual) {
30 │ fail message;
· ──────┬─────
· ╰── explicit fail
31 │ }
╰────
DumpMachine() 関数
DumpMachine()
は、コンピューターの Q# 現在の target 状態に関する情報をコンソールにダンプし、プログラムの実行を続行できるようにする関数です。
注意
Azure Quantum Development Kitのリリースでは、関数は出力に DumpMachine()
ビッグ エンディアン順序を使用するようになりました。
import qsharp
%%qsharp
open Microsoft.Quantum.Diagnostics;
operation MultiQubitDumpMachineDemo() : Unit {
use qubits = Qubit[2];
X(qubits[1]);
H(qubits[1]);
DumpMachine();
R1Frac(1, 2, qubits[0]);
R1Frac(1, 3, qubits[1]);
DumpMachine();
ResetAll(qubits);
}
MultiQubitDumpMachineDemo();
Basis State
(|𝜓ₙ…𝜓₁⟩) Amplitude Measurement Probability Phase
|00⟩ 0.7071+0.0000𝑖 50.0000% ↑ 0.0000
|10⟩ −0.7071+0.0000𝑖 50.0000% ↑ -3.1416
Basis State
(|𝜓ₙ…𝜓₁⟩) Amplitude Measurement Probability Phase
|00⟩ 0.5879−0.3928𝑖 50.0000% ↑ -0.5890
|10⟩ −0.6935+0.1379𝑖 50.0000% ↑ 2.9452
dump_machine() 関数
dump_machine
は、現在割り当てられている量子ビット数と、解析できるスパース状態の振幅の Python ディクショナリを返す Python 関数です。 これらの関数のいずれかをJupyter Notebookで使用すると、デバッガーと同様に操作をステップ実行できます。 前のプログラム例を使用します。
import qsharp
# import qsharp package to acccess the %%qsharp magic command
%%qsharp
// use the %%qsharp magic command to change the cell type from Python to Q#
use qubits = Qubit[2];
X(qubits[0]);
H(qubits[1]);
dump = qsharp.dump_machine()
dump
Basis State
(|𝜓ₙ…𝜓₁⟩) Amplitude Measurement Probability Phase
|11⟩ 0.7071+0.0000𝑖 50.0000% ↑ 0.0000
|01⟩ 0.7071+0.0000𝑖 50.0000% ↑ 0.0000
%%qsharp
R1Frac(1, 2, qubits[0]);
R1Frac(1, 3, qubits[1]);
dump = qsharp.dump_machine()
dump
Basis State
(|𝜓ₙ…𝜓₁⟩) Amplitude Measurement Probability Phase
|11⟩ 0.5879+0.3928𝑖 50.0000% ↑ 0.5890
|01⟩ 0.6935+0.1379𝑖 50.0000% ↑ 0.1963
# you can print an abbreviated version of the values
print(dump)
STATE:
|11⟩: 0.5879+0.3928𝑖
|01⟩: 0.6935+0.1379𝑖
# you can access the current qubit count
dump.qubit_count
2
# you can access individal states by their index
dump[1]
(0.6935199226610738, 0.1379496896414715)
dump[3]
(0.5879378012096794, 0.3928474791935511)
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示