Ladění a testování kvantového kódu
Stejně jako u klasického programování je nezbytné mít možnost zkontrolovat, že kvantové programy fungují podle očekávání, a umět diagnostikovat nesprávné chování. Tento článek popisuje nástroje, které Azure Quantum Development Kit nabízí pro testování a ladění kvantových programů.
Ladění Q# programu
Rozšíření Azure Quantum Development Kit (Modern QDK) Visual Studio Code obsahuje ladicí program pro Q# programy. Můžete nastavit zarážky, procházet kód a do každé funkce nebo operace a sledovat nejen místní proměnné, ale také kvantový stav qubitů.
Poznámka
Ladicí program VS Code funguje jenom se Q# soubory (.qs) a nepracuje s buňkami Q# v Jupyter Notebook. Informace o testování Jupyter Notebook buněk najdete v tématu Testování kódu.
Následující příklad ukazuje základní funkce ladicího programu. Úplné informace o používání ladicích programů VS Code najdete v tématu Ladění.
Ve VS Code vytvořte a uložte nový soubor .qs s následujícím kódem:
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;
}
}
- Nastavte zarážku na řádku
H(qubit)
kliknutím nalevo od čísla řádku. - Výběrem ikony ladicího programu otevřete podokno ladicího programu a vyberte Spustit a ladit. Ovládací prvky ladicího programu se zobrazují v horní části obrazovky.
- Výběrem klávesy F5 spusťte ladění a pokračujte k zarážce. V podokně Proměnné ladicího programu rozbalte kategorii Stav kvanta . Vidíte, že qubit byl inicializován ve stavu |0> .
- Krok do (F11)
H
operace a zdrojovéhoH
kódu operace se zobrazí. Při procházení operace si všimněte, že se mění kvantová hodnota, protožeH
operace převede qubit do superpozice. - Při krokování operace (F10)
M
se v důsledku měření přeloží kvantová hodnota na hodnotu |0> nebo |1> a zobrazí se hodnota klasické proměnnéresult
. - Při krokování
Reset
operace se qubit resetuje na |0>.
Testování kódu
I když ladicí program VS Code Q# není dostupný pro Q# buňky v Jupyter Notebook, moderní sada QDK poskytuje některé výrazy a funkce, které vám můžou pomoct s řešením potíží s kódem.
Výraz selhání
Výraz fail
zcela ukončí výpočet, což odpovídá závažné chybě, která program zastaví.
Podívejte se na tento jednoduchý příklad, který ověřuje hodnotu parametru:
%%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 │ }
╰────
fail
Výraz v této části brání programu v dalším spuštění s neplatnými daty.
Fact()
Pomocí funkce z oboru názvů můžete implementovat stejné chování jako v předchozím příkladu Fact()
Microsoft.Quantum.Diagnostics
. Funkce Fact()
vyhodnotí danou klasickou podmínku, a pokud je nepravda, vyvolá výjimku.
%%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() – funkce
DumpMachine()
Q# je funkce, která umožňuje výpis informací o aktuálním stavu target počítače do konzoly a pokračovat v spouštění programu.
Poznámka
Ve verzi Azure Quantum Development KitDumpMachine()
teď funkce pro výstup používá big-endian řazení.
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()
dump_machine
je funkce Pythonu, která vrací aktuální přidělený počet qubitů a slovník Pythonu s řídkými amplitudami stavu, které můžete analyzovat. Použití některé z těchto funkcí v Jupyter Notebook vám umožní procházet operace podobně jako ladicí program. Použití předchozího ukázkového programu:
import qsharp
%%qsharp
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)
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro