Kuantum kodunuzun hatalarını ayıklama ve test etme
Klasik programlamada olduğu gibi kuantum programlarının amaçlanan şekilde davranıp davranmadığını denetleyebilmek ve yanlış davranışları tanılayabilmek çok önemlidir. Bu makalede, Azure Quantum Development Kit tarafından kuantum programlarını test etme ve hatalarını ayıklama için sunulan araçlar ele alınmaktadır.
Programınızda Q# hata ayıklama
Azure Quantum Development Kit (Modern QDK) Visual Studio Code uzantısı programlar için Q# bir hata ayıklayıcı içerir. Kesme noktaları ayarlayabilir, kodunuzda ilerleyip her işleve veya işleme gidebilir ve yalnızca yerel değişkenleri değil, kubitlerin kuantum durumunu da izleyebilirsiniz.
Not
VS Code hata ayıklayıcısı yalnızca (.qs) dosyalarıyla Q# çalışır ve Jupyter Notebook hücrelerle Q# çalışmaz. Jupyter Notebook hücreleri test etme için bkz. Kodunuzu test etme.
Aşağıdaki örnekte hata ayıklayıcının temel özellikleri gösterilmektedir. VS Code hata ayıklayıcılarını kullanma hakkında tam bilgi için bkz. Hata ayıklama.
VS Code'da aşağıdaki kodla yeni bir .qs dosyası oluşturun ve kaydedin:
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;
}
}
- Satır numarasının soluna tıklayarak satırda
H(qubit)
bir kesme noktası ayarlayın. - Hata ayıklayıcı simgesini seçerek hata ayıklayıcı bölmesini açın ve Çalıştır ve Hata Ayıkla'ya tıklayın. Hata ayıklayıcı denetimleri ekranın en üstünde görüntülenir.
- Hata ayıklamayı başlatmak ve kesme noktasına devam etmek için F5'i seçin. Hata ayıklayıcısı Değişkenleri bölmesinde Kuantum Durumu kategorisini genişletin. Kubitin |0> durumunda başlatıldığını görebilirsiniz.
- İşlemin
H
içine adımlayın (F11) ve işlemin kaynak koduH
görüntülenir. İşlemde adım adım ilerlerken, işlem kubiti süper konuma yerleştirdiği için kuantum değerininH
değiştiğine dikkat edin. - İşlemin üzerine (F10)
M
geçtikçe, ölçüm sonucunda kuantum değeri |0> veya |1> olarak çözümlenir ve klasik değişkeninresult
değeri görüntülenir. - İşlemin
Reset
üzerinden geçtikçe kubit |0> olarak sıfırlanır.
Kodunuzu test etme
VS Code Q# hata ayıklayıcısı Jupyter Notebook hücrelerde kullanılamasa Q# da, Modern QDK kodunuzun sorunlarını gidermenize yardımcı olabilecek bazı ifadeler ve işlevler sağlar.
Başarısız ifadesi
İfade fail
, programı durduran önemli bir hataya karşılık gelen hesaplamayı tamamen sonlandırır.
Bir parametre değerini doğrulayan şu basit örneği göz önünde bulundurun:
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 │ }
╰────
Burada ifade, fail
programın geçersiz verilerle çalışmaya devam etmesini engeller.
Fact() işlevi
Ad alanından işlevini Microsoft.Quantum.Diagnostics
kullanarak önceki örnekle Fact()
aynı davranışı uygulayabilirsiniz. İşlev, Fact()
belirli bir klasik koşulu değerlendirir ve false ise bir özel durum oluşturur.
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() işlevi
DumpMachine()
, makinenin geçerli durumu target hakkındaki bilgileri konsola dökümleyip programınızı çalıştırmaya devam etmenizi sağlayan bir Q# işlevdir.
Not
Azure Quantum Development KitDumpMachine()
sürümü ile işlev artık çıkışı için big-endian sıralamasını kullanır.
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() işlevi
dump_machine
, geçerli ayrılmış kubit sayısını ve ayrıştırabileceğiniz seyrek durum genliklerinden oluşan bir Python sözlüğü döndüren bir Python işlevidir. Bu işlevlerden birini bir Jupyter Notebook kullanarak işlemlerinizde hata ayıklayıcıya çok benzer bir adım atabilirsiniz. Önceki örnek programı kullanarak:
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)
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin