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 diagnosztizálni a helytelen viselkedést. 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 (Modern QDK) Visual Studio Code bővítmény tartalmaz egy program hibakeresőt Q# . Beállíthat töréspontokat, lépegethet 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.
Megjegyzés
A VS Code-hibakereső csak (.qs) fájlokkal Q# működik, és nem működik a Jupyter Notebook celláivalQ#. A Jupyter Notebook cellák teszteléséhez lásd: A kód tesztelése.
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: Hibakeresés.
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 töréspontot a vonalon
H(qubit)
úgy, hogy a sorszámtól balra kattint. - Válassza a hibakereső ikont a hibakereső panel megnyitásához, majd válassza a Futtatás és hibakeresés lehetőséget. A hibakereső vezérlői a képernyő tetején jelennek meg.
- Válassza az F5 lehetőséget a hibakeresés megkezdéséhez, és folytassa a töréspontot. A Változók hibakereső panelen 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 megjelenik a művelet forráskódjaH
. A művelet során figyelje meg a kvantumérték változásait, mivel aH
művelet szuperpozícióba helyezi a qubitet. - A művelet (F10)
M
fölé lépve 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ásakor 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áihozQ#, a Modern 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, ami egy végzetes hibának felel meg, amely leállítja a programot.
Fontolja meg ezt az egyszerű példát, amely ellenőrzi a paraméter értékét:
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 │ }
╰────
Itt a fail
kifejezés megakadályozza, hogy a program továbbra is érvénytelen adatokkal fusson.
Fact() függvény
Az előző példához hasonló viselkedést valósíthat meg a Fact()
névtérből származó Microsoft.Quantum.Diagnostics
függvénnyel. 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 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() függvény
DumpMachine()
egy Q# olyan függvény, amely lehetővé teszi a gép aktuális állapotára vonatkozó információk memóriaképét target a konzolon, és folytathatja a program futtatását.
Megjegyzés
Az Azure Quantum Development Kitkiadásával a DumpMachine()
függvény most 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ális lefoglalt qubitszámot és az elemezhető ritka állapotú amplitúdók Python-szótárát adja vissza. Ezen függvények Jupyter Notebook való használata lehetővé teszi, hogy a hibakeresőhöz hasonlóan végiglépkedjen a műveleteken. Az előző példaprogram használata:
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)
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: