A kvantumkód hibakeresése és tesztelése
A klasszikus programozáshoz hasonlóan elengedhetetlen annak ellenőrzése, hogy a kvantumprogramok a kívánt módon működnek-e, és hogy képesek legyenek-e a helytelen viselkedés diagnosztizálására. Ez a cikk az Azure Quantum Development Kit által a kvantumprogramok teszteléséhez és hibakereséséhez kínált eszközöket ismerteti.
A program hibakeresése Q#
Az Azure Quantum Development Kit (QDK) Visual Studio Code bővítmény tartalmaz egy programok hibakeresőt Q# . Beállíthat töréspontokat, végiglépkedhet a kódon és az egyes függvényeken vagy műveleteken, és nemcsak a helyi változókat, hanem a qubitek kvantumállapotát is nyomon követheti.
Feljegyzés
A VS Code hibakeresője csak (.qs) fájlokkal Q# működik, és nem működik a Jupyter Notebook celláival Q# . A Jupyter Notebook-cellák teszteléséről a kód tesztelése című témakörben olvashat.
Az alábbi példa a hibakereső alapvető funkcióit mutatja be. A VS Code hibakeresőinek használatával kapcsolatos teljes információkért lásd a hibakeresést.
A VS Code-ban hozzon létre és mentsen egy új .qs-fájlt a következő kóddal:
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;
}
}
- Állítson be egy töréspontot a vonalon
H(qubit)
a sor számától balra kattintva. - A hibakereső panel megnyitásához válassza a hibakereső ikont, majd válassza a Futtatás és hibakeresés lehetőséget. A hibakereső vezérlők a képernyő tetején jelennek meg.
- A hibakeresés megkezdéséhez válassza az F5 lehetőséget, és folytassa a törésponttal. A Hibakereső változók paneljén bontsa ki a Quantum State kategóriát. Láthatja, hogy a qubit inicializálása |0> állapotban történt.
- Lépjen be (F11) a
H
műveletbe és a művelet forráskódjábaH
. A művelet során figyelje meg a kvantumérték változásait, mivel aH
művelet a qubitet szuperpozícióba helyezi. - A művelet (F10)
M
elvégzésekor a kvantumérték a mérés eredményeként |0> vagy |1> lesz, és megjelenik a klasszikus változóresult
értéke. - A művelet végrehajtása során a
Reset
qubit alaphelyzetbe áll a következőre: |0>.
A kód tesztelése
Bár a VS Code Q# hibakeresője nem érhető el a Jupyter Notebook celláihoz Q# , az Azure QDK olyan kifejezéseket és függvényeket biztosít, amelyek segíthetnek a kód hibaelhárításában.
Feladatkifejezés
A fail
kifejezés teljes egészében befejezi a számítást, amely a programot leálló végzetes hibának felel meg.
Tekintse meg ezt az egyszerű példát, amely egy paraméter értékét érvényesíti:
import qsharp
# import qsharp package to access 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 │ }
╰────
Itt a fail
kifejezés megakadályozza, hogy a program továbbra is érvénytelen adatokkal fusson.
Fact() függvény
Ugyanazt a viselkedést valósíthatja meg, mint az előző példában a Fact()
Microsoft.Quantum.Diagnostics
névtérből származó függvény használatával. A Fact()
függvény kiértékel egy adott klasszikus feltételt, és kivételt ad, ha hamis.
import qsharp
# import qsharp package to access 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() függvény
DumpMachine()
egy Q# olyan függvény, amely lehetővé teszi, hogy a gép aktuális állapotával target kapcsolatos információkat a konzolra írja, és folytassa a program futtatását.
Feljegyzés
Az Azure Quantum Development Kitkiadásával a DumpMachine()
függvény most már big-endian rendezést használ a kimenetéhez.
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() függvény
dump_machine
Egy Python-függvény, amely az aktuálisan lefoglalt qubitszámot adja vissza, valamint egy Python-szótárt, amely a ritkán elemezhető állapot amplitúdóit tartalmazza. Ezeknek a függvényeknek a Jupyter Notebookban való használatával a hibakeresőhöz hasonlóan végiglépkedhet a műveleteken. Az előző példaprogram használata:
import qsharp
# import qsharp package to access 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)
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: