Foutopsporing en het testen van uw kwantumcode
Net als bij klassieke programmering is het essentieel om te kunnen controleren of kwantumprogramma's werken zoals bedoeld, en om onjuist gedrag te kunnen diagnosticeren. In dit artikel worden de hulpprogramma's besproken die azure Quantum Development Kit biedt voor het testen en opsporen van fouten in kwantumprogramma's.
Foutopsporing in uw Q# programma
De Visual Studio Code-extensie van Azure Quantum Development Kit (Modern QDK) bevat een foutopsporingsprogramma voor Q# programma's. U kunt onderbrekingspunten instellen, uw code doorlopen en in elke functie of bewerking gaan en niet alleen de lokale variabelen bijhouden, maar ook de kwantumstatus van de qubits.
Notitie
Het VS Code-foutopsporingsprogramma werkt alleen met Q# (.qs)-bestanden en werkt niet met Q# cellen in een Jupyter Notebook. Zie Uw code testen voor het testen van Jupyter Notebook cellen.
In het volgende voorbeeld ziet u de basisfuncties van het foutopsporingsprogramma. Zie Foutopsporing voor volledige informatie over het gebruik van VS Code-foutopsporingsprogramma's.
Maak in VS Code een nieuw .qs-bestand en sla dit op met de volgende code:
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;
}
}
- Stel een onderbrekingspunt op de regel
H(qubit)
in door links van het regelnummer te klikken. - Selecteer het pictogram van het foutopsporingsprogramma om het foutopsporingsvenster te openen en selecteer Uitvoeren en fouten opsporen. De besturingselementen van het foutopsporingsprogramma worden boven aan het scherm weergegeven.
- Selecteer F5 om de foutopsporing te starten en ga door naar het onderbrekingspunt. Vouw in het deelvenster Variabelen voor foutopsporing de categorie Kwantumstatus uit. U kunt zien dat de qubit is geïnitialiseerd met de status |0> .
- Stap in (F11) de
H
bewerking en de broncode voor deH
bewerking wordt weergegeven. Terwijl u de bewerking doorloopt, ziet u dat de kwantumwaarde verandert wanneer deH
bewerking de qubit in superpositie plaatst. - Wanneer u de
M
bewerking (F10) overtreedt, wordt de kwantumwaarde als resultaat van de meting omgezet in |0> of |1> en wordt de waarde van de klassieke variabeleresult
weergegeven. - Wanneer u de bewerking overzet
Reset
, wordt de qubit opnieuw ingesteld op |0>.
Uw code testen
Hoewel het VS Code-foutopsporingsprogramma Q# niet beschikbaar is voor Q# cellen in een Jupyter Notebook, biedt de moderne QDK enkele expressies en functies waarmee u problemen met uw code kunt oplossen.
Fail-expressie
De fail
expressie beëindigt de berekening volledig, wat overeenkomt met een fatale fout die het programma stopt.
Bekijk dit eenvoudige voorbeeld waarmee een parameterwaarde wordt gevalideerd:
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 │ }
╰────
Hier voorkomt de fail
expressie dat het programma wordt uitgevoerd met ongeldige gegevens.
De functie Fact()
U kunt hetzelfde gedrag implementeren als in het vorige voorbeeld met behulp van de Fact()
functie uit de Microsoft.Quantum.Diagnostics
naamruimte. De Fact()
functie evalueert een bepaalde klassieke voorwaarde en genereert een uitzondering als deze onwaar is.
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 │ }
╰────
De functie DumpMachine()
DumpMachine()
is een Q# functie waarmee u informatie over de huidige status van de computer naar de target console kunt dumpen en uw programma kunt blijven uitvoeren.
Notitie
Met de release van Azure Quantum Development Kitgebruikt de DumpMachine()
functie nu big-endian-volgorde voor de uitvoer.
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() functie
dump_machine
is een Python-functie die het huidige aantal toegewezen qubits retourneert en een Python-woordenlijst met sparse statusamplitudes die u kunt parseren. Als u een van deze functies in een Jupyter Notebook gebruikt, kunt u uw bewerkingen doorlopen zoals een foutopsporingsprogramma. Met behulp van het vorige voorbeeldprogramma:
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)
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor