Men-debug dan menguji kode kuantum Anda
Seperti halnya pemrograman klasik, penting untuk dapat memeriksa bahwa program kuantum bertindak sebagaimana dimaksud, dan untuk dapat mendiagnosis perilaku yang salah. Artikel ini membahas alat yang ditawarkan oleh Azure Quantum Development Kit untuk menguji dan men-debug program kuantum.
Men-debug program Anda Q#
Ekstensi Visual Studio Code Azure Quantum Development Kit (Modern QDK) menyertakan debugger untuk Q# program. Anda dapat mengatur titik henti, menelusuri kode Anda dan ke setiap fungsi atau operasi, dan melacak tidak hanya variabel lokal, tetapi juga status kuantum qubit.
Catatan
Debugger Visual Studio Code hanya berfungsi dengan Q# file (.qs), dan tidak berfungsi dengan Q# sel di Jupyter Notebook. Untuk menguji sel Jupyter Notebook, lihat Menguji kode Anda.
Contoh berikut menunjukkan fitur dasar debugger. Untuk informasi lengkap tentang menggunakan debugger Visual Studio Code, lihat Penelusuran kesalahan.
Di Visual Studio Code, buat dan simpan file .qs baru dengan kode berikut:
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;
}
}
- Atur titik henti pada baris
H(qubit)
dengan mengklik di sebelah kiri nomor baris. - Pilih ikon debugger untuk membuka panel debugger dan pilih Jalankan dan Debug. Kontrol debugger ditampilkan di bagian atas layar.
- Pilih F5 untuk memulai penelusuran kesalahan dan lanjutkan ke titik henti. Di panel Variabel debugger, perluas kategori Status Kuantum . Anda dapat melihat bahwa kubit telah diinisialisasi dalam status |0> .
- Masuk ke (F11)
H
operasi dan kode sumber untukH
operasi ditampilkan. Saat Anda menelusuri operasi, perhatikan perubahan nilai kuantum saatH
operasi menempatkan qubit ke dalam superposisi. - Saat Anda melangkahi (F10)
M
operasi, nilai kuantum diselesaikan menjadi |0> atau |1> sebagai hasil pengukuran, dan nilai variabelresult
klasik ditampilkan. - Saat Anda melangkahi
Reset
operasi, kubit diatur ulang ke |0>.
Menguji kode Anda
Meskipun debugger Visual Studio Code Q# tidak tersedia untuk Q# sel di Jupyter Notebook, QDK Modern menyediakan beberapa ekspresi dan fungsi yang dapat membantu memecahkan masalah kode Anda.
Ekspresi gagal
fail
Ekspresi mengakhiri komputasi sepenuhnya, sesuai dengan kesalahan fatal yang menghentikan program.
Pertimbangkan contoh sederhana ini yang memvalidasi nilai parameter:
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 │ }
╰────
Di sini, fail
ekspresi mencegah program terus berjalan dengan data yang tidak valid.
Fungsi Fact()
Anda dapat menerapkan perilaku yang sama dengan contoh sebelumnya menggunakan Fact()
fungsi dari Microsoft.Quantum.Diagnostics
namespace. Fungsi ini Fact()
mengevaluasi kondisi klasik tertentu dan melemparkan pengecualian jika salah.
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 │ }
╰────
Fungsi DumpMachine()
DumpMachine()
adalah Q# fungsi yang memungkinkan Anda untuk membuang informasi tentang status target komputer saat ini ke konsol dan terus menjalankan program Anda.
Catatan
Dengan rilis Azure Quantum Development Kit, DumpMachine()
fungsi sekarang menggunakan pemesanan big-endian untuk outputnya.
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() fungsi
dump_machine
adalah fungsi Python yang mengembalikan jumlah qubit yang dialokasikan saat ini dan kamus Python dari amplitudo status jarang yang dapat Anda uraikan. Menggunakan salah satu fungsi ini dalam Jupyter Notebook memungkinkan Anda menelusuri operasi seperti debugger. Menggunakan contoh program sebelumnya:
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)
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk