Projektek használata Q#
Az Azure Quantum Development Kitkiadásával olyan projekteket határozhat megQ#, amelyek több Q# fájllal rendelkező mappastruktúrák, amelyek hozzáférhetnek egymás erőforrásaihoz. A projektek hasznosak az újrafelhasználható kódtárak létrehozásához és a forráskód logikai rendszerezéséhez.
A Q# projektek egy qsharp.json nevű jegyzékfájlt Q# és egy vagy több *.qs fájlt tartalmaznak egy adott mappastruktúrában. Amikor egy felhasználó megnyit egy *.qs-fájlt a VS Code-ban, vagy beállít project_root
egy Jupyter Notebook- vagy Python-fájlt, a fordító megkeresi a jegyzékfájlt a környező mappahierarchiában, és meghatározza a projekt hatókörét. Ha nem található jegyzékfájl, a fordító egyetlen fájl módban működik. A Q# projekt manuálisan vagy közvetlenül a VS Code-ban hozható létre.
Előfeltételek
- Azure Quantum-munkaterület az Azure-előfizetésben. Munkaterület létrehozásához lásd : Azure Quantum-munkaterület létrehozása.
- Python-környezet, amelyen telepítve van a Python és a Pip .
- A Visual Studio Code telepítve van az AzureQuantum Development Kit- és Python-bővítménysel.
- Az Azure Quantum
qsharp
és aazure-quantum
csomagok.
Projekt definiálása Q#
A Q# projekteket egy qsharp.json jegyzékfájl és egy src mappa (amely tartalmazza a Q# forrásfájlokat) jelenléte határozza meg, és mindkettőnek a projekt gyökérmappájában kell lennie. Programok esetén Q# a Q# fordító automatikusan észleli a projektmappát. Python-programok és Jupyter-jegyzetfüzetek esetén meg kell adnia a Q# projektmappát egy qsharp.init
hívással. A projekt mappastruktúrája Q# azonban minden programtípus esetében ugyanaz marad.
A projektmappa (Q# programok) meghatározása
Ha a VS Code-ban *.qs-fájlt nyit meg, a Q# fordító felfelé keres egy qsharp.json jegyzékfájl mappastruktúrájában. Ha jegyzékfájlt talál, a fordító ezután lefelé keres az src könyvtár összes almappáján a *.qs fájlokhoz, és gyorsítótárazza az összes műveletet vagy függvényt, és a jegyzékfájl kizárási szabályai szerint elérhetővé teszi ezeket a műveleteket és függvényeket az összes *.qs-fájl számára.
Például a mappastruktúra alapján:
- Teleportation_project
- qsharp.json
- Src
- RunTeleport.qs
- TeleportOperations
- Teleport.qs
- PrepareState
- PrepareState.qs
a /src/TeleportOperation/PrepareState/PrepareState.qs fájl megnyitásakor a Q# fordító:
- Ellenőrzi a /src/TeleportOperation/PrepareState/ fájlt egy qsharp.json fájlhoz.
- Ellenőrzi a /src/TeleportOperation qsharp.json.
- Ellenőrzi a qsharp.json.
- Ellenőrzi / a qsharp.json.
- / A projekt gyökérkönyvtáraként jön létre, és a jegyzékfájl beállításainak megfelelően tartalmazza a projekt gyökérkönyvtárában lévő összes *.qs-fájlt.
Jegyzékfájl létrehozása
A jegyzékfájl egy qsharp.json nevű egyszerű .json fájl, amely opcionálisan tartalmazhat szerző, licenc és .ints mezőket. A minimális működőképes jegyzékfájl a sztring {}
. Amikor projektet hoz létre Q# a VS Code-ban, a rendszer létrehoz egy minimális jegyzékfájlt.
{}
Példa jegyzékfájlra
Az alábbiakban néhány példát mutatunk be arra, hogyan határozhatják meg a jegyzékfájlok a projekt hatókörét Q# .
Ebben a példában a szerző az egyetlen megadott mező, ezért ebben a könyvtárban és annak összes alkönyvtárában található összes *.qs-fájl szerepel a Q# projektben.
{
"author":"Microsoft"
}
{
"author":"Microsoft",
"license":"MIT"
}
A projekten Q# belül a jegyzékfájl használatával is finomhangolhatja a VS Code Q# Linter beállításait. Alapértelmezés szerint a három Linter-szabály a következő:
needlessParens
: alapértelmezett =allow
divisionByZero
: alapértelmezett =warn
redundantSemicolons
: alapértelmezett =warn
A jegyzékfájl használatával az egyes szabályokat allow
beállíthatja például a következőrewarn
error
:
{
"author":"Microsoft",
"lints": [
{
"lint": "needlessParens",
"level": "allow"
},
{
"lint": "redundantSemicolons",
"level": "warn"
},
{
"lint": "divisionByZero",
"level": "error"
}
]
}
Q# projektkövetelmények és tulajdonságok
Az alábbi követelmények és konfigurációk minden Q# projektre vonatkoznak.
- A projektbe felvenni kívánt összes *.qs-fájlnak egy src nevű mappában kell lennie, amelynek a Q# projekt gyökérmappájában kell lennie. Amikor projektet hoz létre Q# a VS Code-ban, a
/src
mappa automatikusan létrejön. - A qsharp.json jegyzékfájlnak az src mappával azonos szinten kell lennie. Amikor projektet hoz létre Q# a VS Code-ban, a qsharp.json fájl automatikusan létrejön.
- Az elérhető forrásfájlokban lévő műveletek és függvények a következő utasítások használatával
open
érhetők el:
open MyMathLib;
...
Multiply(x,y);
vagy hivatkozik rájuk a névtérrel:
MyMathLib.Multiply(x,y);
Csak programok esetén Q#
- Egy projektben Q# csak egy *.qs-fájl rendelkezhet definiált fájllal
@EntryPoint()
. - A definícióval rendelkező *.qs fájl a
@EntryPoint()
jegyzékfájl alatt bármely szinten elhelyezhető. - Bármely művelet vagy függvény, amely a projekt bármely pontján *.qs-fájlból gyorsítótárazott, prediktív szövegként jelenik meg a Q# VS Code-ban.
- Ha egy kijelölt művelet vagy függvény névterét még nem adták hozzá, a VS Code automatikusan hozzáadja a szükséges
open
utasítást.
Projekt létrehozásának Q# lépései
A VS Code fájlkezelőben kattintson a jobb gombbal arra a mappára, amelyet a projekt gyökérmappájának használni szeretne, és válassza a Projekt létrehozása lehetőséget, vagy nyissa meg a mappát, és válassza a Parancskatalógus >Q#megtekintése>: Projekt létrehozásaQ#... parancsot.Q#Q#
A VS Code létrehoz egy minimális qsharp.json jegyzékfájlt a mappában, és hozzáad egy
/src
sablonfájllalMain.qs
rendelkező mappát.Szükség szerint szerkessze a jegyzékfájlt. Lásd a jegyzékfájlra vonatkozó példákat.
Adja hozzá és rendszerezze a Q# forrásfájlokat a
/src
mappában.Ha Python-programból vagy Jupyter Notebookból éri el a Q# projektet, állítsa be a gyökérmappa elérési útját.
qsharp.init
Ez a példa feltételezi, hogy a program ugyanabban a mappában van, mint a Q# projekt gyökérmappája:qsharp.init(project_root = './Teleportation_project')
Ha csak Q# fájlokat használ a VS Code-ban, egy fájl megnyitásakor Q# a fordító megkeresi a qsharp.json jegyzékfájlt, meghatározza a projekt gyökérmappáját, majd *.qs-fájlokat keres az almappában.
Feljegyzés
Manuálisan is létrehozhatja a jegyzékfájlt és a mappát a /src
2. lépésben.
Példaprojekt
Ez a kvantum teleportálási program egy példa a Q# korábban bemutatott mappastruktúrán alapuló projektre, és a VS Code helyi szimulátorán fut. A program Azure Quantum-hardveren vagy külső szimulátorokon való futtatásához tekintse meg a programok és a VSCode használatának első Q# lépéseit a program fordításához és az Azure-munkaterülethez való csatlakozáshoz.
A példa ezt a könyvtárstruktúrát használja:
- Teleportation_project
- qsharp.json
- Src
- RunTeleport.qs
- TeleportOperations
- Teleport.qs
- PrepareState
- PrepareState.qs
A qsharp.json jegyzékfájl a szerzői és licencmezőket tartalmazza:
{
"author":"Microsoft",
"license":"MIT"
}
Q# forrásfájlok
Egyetlen kisebb különbséggel – az @EntryPoint()
utasítással – a forrásfájlok megegyeznek egy Q# program, egy Python-program vagy egy Jupyter Notebook esetében.
A RunTeleport.qs fő fájlja tartalmazza a belépési pontot, és a TeleportLib
Teleport.qs névterére hivatkozik.
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);
}
}
}
A Teleport.qs határozza meg a Teleport()
műveletet, és meghívja a műveletet a PrepareBellPair()
PrepareState.qs-ből.
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);
}
}
A PrepareState.qs fájl egy szabványos újrafelhasználható műveletet tartalmaz a Bell-pár létrehozásához.
namespace PrepareBell {
operation PrepareBellPair(left : Qubit, right : Qubit) : Unit is Adj + Ctl {
H(left);
CNOT(left, right);
}
}
A programok futtatása
Válassza ki annak a környezetnek a lapját, amelyben a programot futtatja.
A program futtatásához nyissa meg a RunTeleport.qs fájlt a VS Code-ban, és válassza a Futtatás lehetőséget.
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: