Arbeiten mit Q# Projekten
Mit der Veröffentlichung von Azure Quantum Development Kitkönnen Sie Projekte definierenQ#, bei denen es sich um Ordnerstrukturen mit mehreren Q# Dateien handelt, die auf die Ressourcen des anderen zugreifen können. Projekte sind hilfreich, um wiederverwendbare Bibliotheken zu erstellen und Ihren Quellcode logisch zu organisieren.
Ein Q# Projekt enthält eine Q# Manifestdatei mit dem Namen qsharp.json und mindestens eine *.qs-Datei in einer angegebenen Ordnerstruktur. Wenn ein Benutzer eine *.qs-Datei in VS Code öffnet oder in project_root
einer Jupyter Notebook- oder Python-Datei festlegt, durchsucht der Compiler die umgebende Ordnerhierarchie nach der Manifestdatei und bestimmt den Bereich des Projekts. Wenn keine Manifestdatei gefunden wird, arbeitet der Compiler in einem einzelnen Dateimodus. Ein Q# Projekt kann manuell oder direkt in VS Code erstellt werden.
Voraussetzungen
- Ein Azure Quantum-Arbeitsbereich in Ihrem Azure-Abonnement. Informationen zum Erstellen eines Arbeitsbereichs finden Sie unter Erstellen von Azure Quantum-Arbeitsbereichen mit dem Azure-Portal.
- Eine Python-Umgebung, in der Python und Pip installiert sind.
- Visual Studio Code mit installierter Azure Quantum Development Kit - und Python-Erweiterung .
- Die Azure Quantum
qsharp
- undazure-quantum
-Pakete.
Definieren eines Q# Projekts
Ein Q# Projekt wird durch das Vorhandensein einer qsharp.json Manifestdatei und eines src-Ordners (der die Q# Quelldateien enthält) definiert, die sich beide im Stammordner des Projekts befinden müssen. Bei Q# Programmen erkennt der Q# Compiler den Projektordner automatisch. Für Python-Programme und Jupyter Notebooks müssen Sie den Q# Projektordner mit einem qsharp.init
Aufruf angeben. Die Ordnerstruktur für ein Q# Projekt bleibt jedoch für alle Programmtypen gleich.
Definieren des Projektordners (Q# Programme)
Wenn eine *.qs-Datei in VS Code geöffnet wird, sucht der Q# Compiler in der Ordnerstruktur nach oben nach einer qsharp.json Manifestdatei. Wenn er eine Manifestdatei findet, durchsucht der Compiler dann alle Unterordner des src-Verzeichnisses nach *.qs-Dateien, speichert alle Vorgänge oder Funktionen zwischen und macht diese Vorgänge und Funktionen gemäß den Ausschlussregeln der Manifestdatei für alle *.qs-Dateien verfügbar.
Beispiel:
- Teleportation_project
- qsharp.json
- src
- RunTeleport.qs
- TeleportOperationen
- Teleport.qs
- PrepareState
- PrepareState.qs
wenn Sie die Datei /src/TeleportOperation/PrepareState/PrepareState.qs öffnen, wird der Compiler wiederhergestellt Q# :
- Überprüft /src/TeleportOperation/PrepareState/ auf eine qsharp.json Datei.
- Überprüft /src/TeleportOperation auf qsharp.json.
- Überprüft /src auf qsharp.json.
- Überprüft /, ob qsharp.json.
- Wird / als Stammverzeichnis des Projekts eingerichtet und enthält alle *.qs-Dateien unter dem Stamm im Projekt gemäß den Einstellungen der Manifestdatei.
So erstellen Sie eine Manifestdatei
Eine Manifestdatei ist eine einfache .json-Datei namens qsharp.json , die optional Autoren-, Lizenz- und INTS-Felder enthalten kann. Die minimale praktikable Manifestdatei ist die Zeichenfolge {}
. Wenn Sie ein Q# Projekt in VS Code erstellen, wird eine minimale Manifestdatei für Sie erstellt.
{}
Beispiele für Manifestdateien
Im Folgenden finden Sie einige Beispiele, wie Manifestdateien den Bereich Ihres Q# Projekts definieren können.
In diesem Beispiel ist author das einzige angegebene Feld, und daher sind alle *.qs-Dateien in diesem Verzeichnis und alle zugehörigen Unterverzeichnisse im Q# Projekt enthalten.
{
"author":"Microsoft"
}
{
"author":"Microsoft",
"license":"MIT"
}
Innerhalb eines Q# Projekts können Sie auch die Manifestdatei verwenden, um die VS Code Q# Linter-Einstellungen zu optimieren. Standardmäßig sind die drei Linter-Regeln:
needlessParens
: default =allow
divisionByZero
: default =warn
redundantSemicolons
: default =warn
Mithilfe der Manifestdatei können Sie jede Regel entweder allow
auf , warn
oder error
festlegen, z. B.
{
"author":"Microsoft",
"lints": [
{
"lint": "needlessParens",
"level": "allow"
},
{
"lint": "redundantSemicolons",
"level": "warn"
},
{
"lint": "divisionByZero",
"level": "error"
}
]
}
Q# Projektanforderungen und -eigenschaften
Die folgenden Anforderungen und Konfigurationen gelten für alle Q# Projekte.
- Alle *.qs-Dateien, die sie in das Projekt einbeziehen möchten, müssen sich unter einem Ordner namens src befinden, der sich unter dem Q# Projektstammordner befinden muss. Wenn Sie ein Q# Projekt in VS Code erstellen, wird der
/src
Ordner automatisch erstellt. - Die qsharp.json Manifestdatei sollte sich auf der gleichen Ebene wie der Ordner src befinden. Wenn Sie ein Q# Projekt in VS Code erstellen, wird die qsharp.json-Datei automatisch erstellt.
- Auf Vorgänge und Funktionen in verfügbaren Quelldateien kann mithilfe von
open
Anweisungen zugegriffen werden:
open MyMathLib;
...
Multiply(x,y);
oder verweisen sie mit dem Namespace auf sie:
MyMathLib.Multiply(x,y);
Nur für Q# Programme
- Nur eine *.qs-Datei in einem Q# Projekt kann definiert
@EntryPoint()
sein. - Die *.qs-Datei mit der
@EntryPoint()
Definition kann sich auf einer beliebigen Ebene unterhalb der Manifestdatei befinden. - Alle Vorgänge oder Funktionen, die aus einer *.qs-Datei irgendwo im Q# Projekt zwischengespeichert werden, werden in VS Code als Vorhersagetext angezeigt.
- Wenn der Namespace für einen ausgewählten Vorgang oder eine ausgewählte Funktion noch nicht hinzugefügt wurde, fügt VS Code automatisch die erforderliche
open
Anweisung hinzu.
Schritte zum Erstellen eines Q# Projekts
Klicken Sie im VS Code-Datei-Explorer mit der rechten Maustaste auf den Ordner, den Sie für den Q# Projektstammordner verwenden möchten, und wählen Sie Create Q# Projekt aus, oder öffnen Sie den Ordner, und wählen Sie Befehlspalette >Q#anzeigen>: Create projektQ#... aus.
VS Code erstellt eine minimale qsharp.json Manifestdatei im Ordner und fügt einen
/src
Ordner mit einer Vorlagendatei hinzuMain.qs
.Bearbeiten Sie die Manifestdatei nach Bedarf. Weitere Informationen finden Sie unter Beispiele für Manifestdateien.
Fügen Sie Ihre Q# Quelldateien unter dem Ordner hinzu, und organisieren Sie sie
/src
.Wenn Sie über ein Python-Programm oder Jupyter Notebook auf das Q# Projekt zugreifen, legen Sie den Stammordnerpfad mithilfe von
qsharp.init
fest. In diesem Beispiel wird davon ausgegangen, dass sich Ihr Programm im selben Ordner wie der Stammordner des Q# Projekts befindet:qsharp.init(project_root = './Teleportation_project')
Wenn Sie nur Q# Dateien in VS Code verwenden, sucht der Compiler beim Öffnen einer Q# Datei nach der qsharp.json Manifestdatei, bestimmt den Projektstammordner und durchsucht dann den Unterordner auf *.qs-Dateien.
Hinweis
Sie können die Manifestdatei und den /src
Ordner in Schritt 2 auch manuell erstellen.
Beispielprojekt
Dieses Quantenteleportationsprogramm ist ein Beispiel für ein Q# Projekt, das auf der zuvor gezeigten Ordnerstruktur basiert und auf dem lokalen Simulator in VS Code ausgeführt wird. Informationen zum Ausführen des Programms auf Azure Quantum-Hardware oder Simulatoren von Drittanbietern finden Sie unter Erste Schritte mit Programmen und VSCode, wie Sie Ihr Programm kompilieren und eine Verbindung mit Q# Ihrem Azure-Arbeitsbereich herstellen können.
Im Beispiel wird die folgende Verzeichnisstruktur verwendet:
- Teleportation_project
- qsharp.json
- src
- RunTeleport.qs
- TeleportOperationen
- Teleport.qs
- PrepareState
- PrepareState.qs
Die qsharp.json Manifestdatei enthält die Felder Autor und Lizenz :
{
"author":"Microsoft",
"license":"MIT"
}
Q# Quelldateien
Mit einem geringfügigen Unterschied - der @EntryPoint()
-Anweisung - sind die Quelldateien für ein Q# Programm, ein Python-Programm oder eine Jupyter Notebook identisch.
Die Standard-Datei RunTeleport.qs enthält den Einstiegspunkt und verweist auf den TeleportLib
Namespace in 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 definiert den Teleport()
Vorgang und ruft den PrepareBellPair()
Vorgang von PrepareState.qs auf.
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);
}
}
Die Datei PrepareState.qs enthält einen wiederverwendbaren Standardvorgang zum Erstellen eines Bell-Paares.
namespace PrepareBell {
operation PrepareBellPair(left : Qubit, right : Qubit) : Unit is Adj + Ctl {
H(left);
CNOT(left, right);
}
}
Ausführen der Programme
Wählen Sie die Registerkarte für die Umgebung aus, in der Sie ihr Programm ausführen.
Öffnen Sie zum Ausführen dieses Programms die Datei RunTeleport.qs in VS Code, und wählen Sie Ausführen aus.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für