Eğitim
Modül
Azure Quantum Geliştirme Seti'ni kullanarak ilk Q# programınızı oluşturma - Training
Bir kuantum rastgele sayı oluşturucu derleyerek Q# ile programlamaya başlayın.
Bu tarayıcı artık desteklenmiyor.
En son özelliklerden, güvenlik güncelleştirmelerinden ve teknik destekten faydalanmak için Microsoft Edge’e yükseltin.
Klasik programlamada olduğu gibi kuantum programlarının amaçlandığı gibi davranıp davranmadığını denetleyebilmek ve yanlış davranışı tanılayabilmek çok önemlidir. Bu makalede, Azure Quantum Development Kit tarafından kuantum programlarının test edilmesi ve hata ayıklaması için sunulan araçlar ele alınmaktadır.
Azure Quantum Development Kit (QDK) Visual Studio Code uzantısı, programlar için Q# bir hata ayıklayıcı içerir. Kesme noktaları ayarlayabilir, kodunuzda adım adım ilerleyebilir 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'taki hücrelerle Q# çalışmaz. Jupyter Notebook hücrelerini 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:
import Microsoft.Quantum.Arrays.*;
import Microsoft.Quantum.Convert.*;
operation Main() : Result {
use qubit = Qubit();
H(qubit);
let result = M(qubit);
Reset(qubit);
return result;
}
H(qubit)
bir kesme noktası ayarlayın.H
(F11) içine adımlayın ve işlemin kaynak kodu H
görüntülenir. İşlemi adım adım ilerlettikçe, işlem kubiti süper pozisyona getirirken kuantum değerinin H
değiştiğine dikkat edin.M
geçtikçe, ölçüm sonucunda kuantum değeri |0> veya |1> olarak çözümlenir ve klasik değişkenin result
değeri görüntülenir.Reset
üzerinden geçtikçe kubit |0> olarak sıfırlanır.Jupyter Notebook'taki hücreler için Q# VS Code Q# hata ayıklayıcısı kullanılamasa da, Azure QDK kodunuzun sorunlarını gidermeye yardımcı olabilecek bazı ifadeler ve işlevler sağlar.
İfade, fail
programı durduran önemli bir hataya karşılık gelen hesaplamayı tamamen sonlandırır.
Parametre değerini doğrulayan şu basit örneği göz önünde bulundurun:
# import qsharp package to access the %%qsharp magic command
import qsharp
// use the %%qsharp magic command to change the cell type from Python to Q#
%%qsharp
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.
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
%%qsharp
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()
, makinenin geçerli durumu target hakkındaki bilgileri konsola döküm etmenizi ve programınızı çalıştırmaya devam etmenizi sağlayan bir Q# işlevdir.
Not
Azure Quantum Development KitDumpMachine()
sürümüyle işlev artık çıktısı için büyük endian sıralamasını kullanıyor.
import qsharp
%%qsharp
import 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
|01⟩ −0.7071+0.0000𝑖 50.0000% ↓ -3.1416
Basis State
(|𝜓₁…𝜓ₙ⟩) Amplitude Measurement Probability Phase
|00⟩ 0.7071+0.0000𝑖 50.0000% ↑ 0.0000
|01⟩ −0.6533−0.2706𝑖 50.0000% ↙ -2.7489
dump_machine
, ayrılmış geçerli kubit sayısını ve ayrıştırabileceğiniz seyrek durum genliklerinin Python sözlüğü döndüren bir Python işlevidir. Jupyter Notebook'ta bu işlevlerden birini kullanmak, işlemlerinizde hata ayıklayıcı gibi adım adım ilerleyebilirsiniz. Önceki örnek programı kullanarak:
import qsharp
%%qsharp
use qubits = Qubit[2];
X(qubits[0]);
H(qubits[1]);
dump = qsharp.dump_machine()
dump
Basis State
(|𝜓₁…𝜓ₙ⟩) Amplitude Measurement Probability Phase
|10⟩ 0.7071+0.0000𝑖 50.0000% ↑ 0.0000
|11⟩ 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
|10⟩ 0.5000+0.5000𝑖 50.0000% ↗ 0.7854
|11⟩ 0.2706+0.6533𝑖 50.0000% ↗ 1.1781
# you can print an abbreviated version of the values
print(dump)
STATE:
|10⟩: 0.5000+0.5000𝑖
|11⟩: 0.2706+0.6533𝑖
# you can access the current qubit count
dump.qubit_count
2
# you can access individual states by their index
dump[2]
(0.5+0.5000000000000001j)
dump[3]
(0.27059805007309845+0.6532814824381883j)
CheckZero()
ve CheckAllZero()
bir Q# kubit veya kubit dizisinin geçerli durumunun CheckZero()
, kubit false
başka bir durumdaysa döndürürtrue
. CheckAllZero()
dizideki tüm kubitler false
kubitler başka bir durumdaysa döndürürtrue
.
import Microsoft.Quantum.Diagnostics.*;
operation Main() : Unit {
use qs = Qubit[2];
X(qs[0]);
if CheckZero(qs[0]) {
Message("X operation failed");
}
else {
Message("X operation succeeded");
}
ResetAll(qs);
if CheckAllZero(qs) {
Message("Reset operation succeeded");
}
else {
Message("Reset operation failed");
}
}
dump_operation
bir işlemi veya işlem tanımını ve kullanılacak bir dizi kubiti alan ve işlemin çıkışını temsil eden karmaşık sayıların kare matrisini döndüren bir Python işlevidir.
uygulamasından qsharp.utils
içeri aktarırsınızdump_operation
.
import qsharp
from qsharp.utils import dump_operation
Bu örnekte tek kubitli kimlik kapısı ve Hadamard kapısı matrisi yazdırılır.
res = dump_operation("qs => ()", 1)
print(res)
res = dump_operation("qs => H(qs[0])", 1)
print(res)
[[(1+0j), 0j], [0j, (1+0j)]]
[[(0.707107+0j), (0.707107+0j)], [(0.707107+0j), (-0.707107-0j)]]
Ayrıca kullanarak qsharp.eval()
bir işlev veya işlem tanımlayabilir ve ardından içinden bu işleve dump_operation
başvurabilirsiniz. Daha önce temsil edilen tek kubit de
qsharp.eval("operation SingleQ(qs : Qubit[]) : Unit { }")
res = dump_operation("SingleQ", 1)
print(res)
[[(1+0j), 0j], [0j, (1+0j)]]
Bu örnekte ikinci kubite döndürme uygulamak için bir geçit kullanılır Controlled Ry
qsharp.eval ("operation ControlRy(qs : Qubit[]) : Unit {qs[0]; Controlled Ry([qs[0]], (0.5, qs[1]));}")
res = dump_operation("ControlRy", 2)
print(res)
[[(1+0j), 0j, 0j, 0j], [0j, (1+0j), 0j, 0j], [0j, 0j, (0.968912+0j), (-0.247404+0j)], [0j, 0j, (0.247404+0j), (0.968912+0j)]]
Aşağıdaki kod işlemi ApplySWAP
tanımlar Q# ve matrisini iki kubitli kimlik işlemininkiyle birlikte yazdırır.
qsharp.eval("operation ApplySWAP(qs : Qubit[]) : Unit is Ctl + Adj { SWAP(qs[0], qs[1]); }")
res = dump_operation("qs => ()", 2)
print(res)
res = dump_operation("ApplySWAP", 2)
print(res)
[[(1+0j), 0j, 0j, 0j], [0j, (1+0j), 0j, 0j], [0j, 0j, (1+0j), 0j], [0j, 0j, 0j, (1+0j)]]
[[(1+0j), 0j, 0j, 0j], [0j, 0j, (1+0j), 0j], [0j, (1+0j), 0j, 0j], [0j, 0j, 0j, (1+0j)]]
kullanarak dump_operation()
test işlemlerine daha fazla örnek, QDK'daki Test İşlemleri örnek sayfasında bulunabilir.
Eğitim
Modül
Azure Quantum Geliştirme Seti'ni kullanarak ilk Q# programınızı oluşturma - Training
Bir kuantum rastgele sayı oluşturucu derleyerek Q# ile programlamaya başlayın.
Belgeler
Projeleri ve Özel Kitaplıkları Geliştirme ve Yönetme Q# - Azure Quantum
Birden çok kaynak dosya kullanan bir Q# proje tanımlamayı ve projelerinizi yeniden kullanılabilir özel kitaplıklar olarak kullanmayı öğrenin.
Visual Studio Code'daki Q# özellikleri - Azure Quantum
VS Code için Azure Quantum Geliştirme Seti uzantısına dahil edilen özellikler hakkında bilgi edinin.
VS Code ile Q# Programları Gönderme - Azure Quantum
Bu belge, Azure portal, Python, Jupyter Notebooks veya Azure CLI kullanarak Azure Quantum'u göndermek ve çalıştırmak için temel bir kılavuz sağlar.