Arbeta med Q# projekt
Med versionen av Azure Quantum Development Kitkan du definiera Q# projekt, som är mappstrukturer med flera Q# filer som kan komma åt varandras resurser. Projekt är användbara för att skapa återanvändbara bibliotek och logiskt organisera källkoden.
Ett Q# projekt innehåller en Q# manifestfil med namnet qsharp.json och en eller flera *.qs-filer i en angiven mappstruktur. När en användare öppnar en *.qs-fil i VS Code, eller anger project_root
i en Jupyter Notebook- eller Python-fil, söker kompilatorn i den omgivande mapphierarkin efter manifestfilen och fastställer projektets omfång. Om ingen manifestfil hittas fungerar kompilatorn i ett enda filläge. Ett Q# projekt kan skapas manuellt eller direkt i VS Code.
Förutsättningar
- En Azure Quantum-arbetsyta i din Azure-prenumeration. Information om hur du skapar en arbetsyta finns i Skapa en Azure Quantum-arbetsyta.
- En Python-miljö med Python och Pip installerade.
- Visual Studio Code med Azure Quantum Development Kit - och Python-tillägget installerat.
- Azure Quantum
qsharp
ochazure-quantum
paket.
Definiera ett Q# projekt
Ett Q# projekt definieras av förekomsten av en qsharp.json manifestfil och en src-mapp (som innehåller källfilerna Q# ), som båda måste finnas i projektets rotmapp. För Q# program Q# identifierar kompilatorn projektmappen automatiskt. För Python-program och Jupyter Notebooks måste du ange projektmappen Q# med ett qsharp.init
anrop. Mappstrukturen för ett Q# projekt är dock densamma för alla typer av program.
Definiera projektmappen (Q# program)
När en *.qs-fil öppnas i VS Code Q# söker kompilatorn uppåt i mappstrukturen efter en qsharp.json manifestfil. Om den hittar en manifestfil söker kompilatorn nedåt genom alla undermappar i src-katalogen efter *.qs-filer och cachelagrar alla åtgärder eller funktioner, och gör dessa åtgärder och funktioner tillgängliga för alla *.qs-filer enligt manifestfilens undantagsregler.
Till exempel, med tanke på den här mappstrukturen:
- Teleportation_project
- qsharp.json
- src
- RunTeleport.qs
- TeleportOperations
- Teleport.qs
- PrepareState
- PrepareState.qs
när du öppnar filen /src/TeleportOperation/PrepareState/PrepareState.qs, Q# kompilatorn:
- Kontrollerar /src/TeleportOperation/PrepareState/ efter en qsharp.json fil.
- Kontrollerar /src/TeleportOperation för qsharp.json.
- Kontrollerar /src för qsharp.json.
- Söker efter /qsharp.json.
- Etablerar / som projektets rotkatalog och innehåller alla *.qs-filer under roten i projektet enligt manifestfilens inställningar.
Skapa en manifestfil
En manifestfil är en enkel .json fil med namnet qsharp.json som kan innehålla fälten författare, licens och .ints . Den minsta livskraftiga manifestfilen är strängen {}
. När du skapar ett Q# projekt i VS Code skapas en minimal manifestfil åt dig.
{}
Exempel på manifestfiler
Följande är några exempel på hur manifestfiler kan definiera projektets Q# omfattning.
I det här exemplet är författare det enda angivna fältet, och därför ingår alla *.qs-filer i den här katalogen och alla dess underkataloger i Q# projektet.
{
"author":"Microsoft"
}
{
"author":"Microsoft",
"license":"MIT"
}
I ett Q# projekt kan du också använda manifestfilen för att finjustera VS Code Q# Linter-inställningarna. Som standard är de tre Linter-reglerna:
needlessParens
: standard =allow
divisionByZero
: standard =warn
redundantSemicolons
: standard =warn
Med hjälp av manifestfilen kan du ställa in varje regel på antingen allow
, warn
eller error
, till exempel
{
"author":"Microsoft",
"lints": [
{
"lint": "needlessParens",
"level": "allow"
},
{
"lint": "redundantSemicolons",
"level": "warn"
},
{
"lint": "divisionByZero",
"level": "error"
}
]
}
Q# projektkrav och egenskaper
Följande krav och konfigurationer gäller för alla Q# projekt.
- Alla *.qs-filer som du vill ska ingå i projektet måste finnas under en mapp med namnet src, som måste finnas under projektrotmappen Q# . När du skapar ett Q# projekt i VS Code
/src
skapas mappen automatiskt. - Qsharp.json manifestfilen ska vara på samma nivå som src-mappen. När du skapar ett Q# projekt i VS Code skapas qsharp.json-filen automatiskt.
- Åtgärder och funktioner i tillgängliga källfiler kan nås med hjälp av
open
instruktioner:
open MyMathLib;
...
Multiply(x,y);
eller refererar till dem med namnområdet:
MyMathLib.Multiply(x,y);
Endast för Q# program
- Endast en *.qs-fil i ett Q# projekt kan ha en
@EntryPoint()
definierad. - Filen *.qs med
@EntryPoint()
definitionen kan finnas på valfri nivå under manifestfilen. - Alla åtgärder eller funktioner som cachelagras från en *.qs-fil var som helst i Q# projektet visas i förutsägelsetext i VS Code.
- Om namnområdet för en vald åtgärd eller funktion inte har lagts till ännu lägger VS Code automatiskt till den nödvändiga
open
instruktionen.
Steg för att skapa ett Q# projekt
I VS Code-utforskaren högerklickar du på den mapp som du vill använda för projektrotmappen Q# och väljer Skapa Q# projekt, eller öppnar mappen och väljer Visa > kommandopalett>Q#: Skapa ett Q# projekt....
VS Code skapar en minimal qsharp.json manifestfil i mappen och lägger till en
/src
mapp med enMain.qs
mallfil.Redigera manifestfilen efter behov. Se Exempel på manifestfil.
Lägg till och organisera källfilerna Q#
/src
under mappen.Om du kommer åt Q# projektet från ett Python-program eller Jupyter Notebook anger du sökvägen till rotmappen med hjälp av
qsharp.init
. Det här exemplet förutsätter att programmet finns i samma mapp som rotmappen i Q# projektet:qsharp.init(project_root = './Teleportation_project')
Om du bara Q# använder filer i VS Code Q# söker kompilatorn efter qsharp.json manifestfil, fastställer projektrotmappen och söker sedan igenom undermappen efter *.qs-filer.
Anteckning
Du kan också skapa manifestfilen och /src
mappen manuellt i steg 2.
Exempelprojekt
Det här kvantteleporteringsprogrammet är ett exempel på ett Q# projekt baserat på mappstrukturen som visades tidigare och körs på den lokala simulatorn i VS Code. Information om hur du kör programmet på Azure Quantum-maskinvara eller simulatorer från tredje part finns i Komma igång med Q# program och VSCode för steg för att kompilera ditt program och ansluta till din Azure-arbetsyta.
I exemplet används den här katalogstrukturen:
- Teleportation_project
- qsharp.json
- src
- RunTeleport.qs
- TeleportOperations
- Teleport.qs
- PrepareState
- PrepareState.qs
Qsharp.json-manifestfilen innehåller fälten författare och licens:
{
"author":"Microsoft",
"license":"MIT"
}
Q# källfiler
Med en mindre skillnad – instruktionen @EntryPoint()
– är källfilerna samma för ett Q# program, ett Python-program eller en Jupyter Notebook.
Huvudfilen RunTeleport.qs innehåller startpunkten och refererar till TeleportLib
namnområdet i Teleport.qs.
namespace RunTeleport {
open TeleportLib; // references the TeleportLib namespace in Teleport.qs
@EntryPoint() // @EntryPoint() not necessary for Python or Jupyter Notebook programs
operation RunTeleportationExample() : Unit {
use msg = Qubit();
use target = Qubit();
H(msg);
Teleport(msg, target); // calls the Teleport() operation from Teleport.qs
H(target);
if M(target) == Zero {
Message("Teleported successfully!");
Reset(msg);
Reset(target);
}
}
}
Teleport.qs definierar Teleport()
åtgärden och anropar åtgärden PrepareBellPair()
från PrepareState.qs.
namespace TeleportLib {
open PrepareBell; // references the PrepareBell namespace in PrepareState.qs
operation Teleport(msg : Qubit, target : Qubit) : Unit {
use here = Qubit();
PrepareBellPair(here, target); // calls the PrepareBellPair() operation from PrepareState.qs
Adjoint PrepareBellPair(msg, here);
if M(msg) == One { Z(target); }
if M(here) == One { X(target); }
Reset(here);
}
}
Filen PrepareState.qs innehåller en standardåtgärd som kan återanvändas för att skapa ett Bell-par.
namespace PrepareBell {
operation PrepareBellPair(left : Qubit, right : Qubit) : Unit is Adj + Ctl {
H(left);
CNOT(left, right);
}
}
Köra programmen
Välj fliken för den miljö där du kör programmet.
Om du vill köra det här programmet öppnar du filen RunTeleport.qs i VS Code och väljer Kör.
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för