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 der anderen zugreifen können. Projekte sind hilfreich für die Erstellung wiederverwendbarer Bibliotheken und das logische Organisieren des Quellcodes.
Ein Q# Projekt enthält eine Q# Manifestdatei mit dem Namen qsharp.json und eine oder mehrere *.qs-Dateien in einer angegebenen Ordnerstruktur. Wenn ein Benutzer eine *.qs-Datei in VS Code öffnet oder die project_root
Datei in einer Jupyter-Notizbuch- oder Python-Datei festlegt, durchsucht der Compiler die umgebende Ordnerhierarchie nach der Manifestdatei und bestimmt den Bereich des Projekts. Wenn keine Manifestdatei gefunden wird, wird der Compiler in einem einzigen Dateimodus ausgeführt. Ein Q# Projekt kann manuell oder direkt in VS Code erstellt werden.
Voraussetzungen
- Ein Azure Quantum-Arbeitsbereich in Ihrem Azure-Abonnement. Zur Erstellung eines Arbeitsbereichs, siehe bitte Erstellen eines Azure Quantum Arbeitsbereichs.
- Eine Python-Umgebung mit installiertem Python und Pip.
- Visual Studio Code mit der installierten AzureQuantum Development Kit- und Python-Erweiterung.
- 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-Notizbücher müssen Sie den Q# Projektordner mit einem qsharp.init
Aufruf angeben. Die Ordnerstruktur für ein Q# Projekt bleibt jedoch für alle Arten von Programmen 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 eine Manifestdatei gefunden wird, durchsucht der Compiler nach unten alle Unterordner des src-Verzeichnisses nach *.qs-Dateien und speichert alle Vorgänge oder Funktionen zwischen und stellt diese Vorgänge und Funktionen für alle *.qs-Dateien gemäß den Ausschlussregeln der Manifestdatei zur Verfügung.
Beispiel:
- Teleportation_project
- qsharp.json
- src
- RunTeleport.qs
- TeleportOperations
- Teleport.qs
- PrepareState
- PrepareState.qs
wenn Sie die Datei "/src/TeleportOperation/PrepareState/PrepareState.qs" öffnen, wird der Q# Compiler:
- Überprüft /src/TeleportOperation/PrepareState/ auf eine qsharp.json Datei.
- Überprüft /src/TeleportOperation auf qsharp.json.
- Überprüft /src auf qsharp.json.
- Sucht / nach qsharp.json.
- Richtet / als Stammverzeichnis des Projekts ein 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 mit dem Namen qsharp.json, die optional Autoren-, Lizenz- und INTS-Felder enthalten kann. Die mindestfähige Manifestdatei ist die Zeichenfolge {}
. Wenn Sie ein Q# Projekt in VS Code erstellen, wird eine minimale Manifestdatei für Sie erstellt.
{}
Manifestdateibeispiele
Im Folgenden finden Sie einige Beispiele dafür, wie Manifestdateien den Umfang Ihres Q# Projekts definieren können.
In diesem Beispiel ist Author das einzige angegebene Feld, und daher werden alle *.qs-Dateien in diesem Verzeichnis und alle unterverzeichnisse im Q# Projekt enthalten.
{
"author":"Microsoft"
}
{
"author":"Microsoft",
"license":"MIT"
}
In einem Q# Projekt 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
Mit der Manifestdatei können Sie jede Regel entweder allow
auf , , warn
oder error
, 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 mit dem Namen "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 auf derselben Ebene wie der src-Ordner sein. 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
- Es kann nur eine *.qs-Datei in einem Q# Projekt definiert sein
@EntryPoint()
. - Die Datei "*.qs" mit der
@EntryPoint()
Definition kann sich auf einer beliebigen Ebene unterhalb der Manifestdatei befinden. - Alle Vorgänge oder Funktionen, die von einer *.qs-Datei an einer beliebigen Stelle im Q# Projekt zwischengespeichert werden, werden im Vorhersagetext in VS Code 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 "Projekt erstellenQ#" aus, oder öffnen Sie den Ordner, und wählen Sie "Befehlspalette >Q#anzeigen>" aus: Projekt erstellenQ#....
VS Code erstellt eine minimale qsharp.json Manifestdatei im Ordner und fügt einen
/src
Ordner mit einerMain.qs
Vorlagendatei hinzu.Bearbeiten Sie die Manifestdatei nach Bedarf. Siehe Manifestdateibeispiele.
Fügen Sie Ihre Q# Quelldateien unter dem Ordner hinzu und organisieren Sie sie
/src
.Wenn Sie über ein Python-Programm oder Jupyter-Notizbuch auf das Q# Projekt zugreifen, legen Sie den Pfad des Stammordners mithilfe von
qsharp.init
. 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 nach *.qs-Dateien.
Hinweis
Sie können die Manifestdatei und den /src
Ordner auch manuell in Schritt 2 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 Q# Programmen und VSCode ", um Ihr Programm zu kompilieren und eine Verbindung mit Ihrem Azure-Arbeitsbereich herzustellen.
Im Beispiel wird diese Verzeichnisstruktur verwendet:
- Teleportation_project
- qsharp.json
- src
- RunTeleport.qs
- TeleportOperations
- Teleport.qs
- PrepareState
- PrepareState.qs
Die qsharp.json Manifestdatei enthält die Autoren - und Lizenzfelder :
{
"author":"Microsoft",
"license":"MIT"
}
Q# Quelldateien
Mit einem kleinen Unterschied - der Anweisung - sind die @EntryPoint()
Quelldateien für ein Programm, ein Q# Python-Programm oder ein Jupyter-Notizbuch identisch.
Die Hauptdatei 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 standardmäßigen wiederverwendbaren Vorgang 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