Praca z projektami Q#
Wraz z wydaniem platformy Azure Quantum Development Kitmożna zdefiniować Q# projekty, które są strukturami folderów z wieloma Q# plikami, które mogą uzyskiwać dostęp do zasobów nawzajem. Projekty są przydatne do tworzenia bibliotek wielokrotnego użytku i logicznego organizowania kodu źródłowego.
Q# Projekt zawiera plik manifestu Q# o nazwie qsharp.json i co najmniej jeden plik *.qs w określonej strukturze folderów. Gdy użytkownik otworzy plik *.qs w programie VS Code lub ustawi project_root
element w pliku Jupyter Notebook lub Python, kompilator przeszukuje otaczającą hierarchię folderów dla pliku manifestu i określa zakres projektu. Jeśli plik manifestu nie zostanie znaleziony, kompilator działa w trybie pojedynczego pliku. Projekt Q# można utworzyć ręcznie lub bezpośrednio w programie VS Code.
Wymagania wstępne
- Obszar roboczy usługi Azure Quantum w ramach subskrypcji platformy Azure. Aby utworzyć obszar roboczy, zobacz Tworzenie obszaru roboczego usługi Azure Quantum.
- Środowisko języka Python z zainstalowanym językiem Python i programem Pip .
- Program Visual Studio Code z zainstalowanym rozszerzeniem Platformy Azure Quantum Development Kit i języka Python .
- Usługa Azure Quantum
qsharp
iazure-quantum
pakiety.
Definiowanie Q# projektu
Projekt Q# jest definiowany przez obecność pliku manifestu qsharp.json i folderu src (zawierającego Q# pliki źródłowe), który musi znajdować się w folderze głównym projektu. W przypadku Q# programów Q# kompilator automatycznie wykrywa folder projektu. W przypadku programów języka Python i notesów Jupyter Notebook należy określić Q# folder projektu z wywołaniem qsharp.init
. Jednak struktura folderów dla Q# projektu pozostaje taka sama dla wszystkich typów programów.
Definiowanie folderu projektu (Q# programy)
Po otwarciu pliku *.qs w programie VS Code Q# kompilator wyszukuje w górę strukturę folderów dla pliku manifestu qsharp.json . Jeśli znajdzie plik manifestu, kompilator przeszukuje w dół wszystkie podfoldery katalogu src dla plików *.qs i buforuje wszystkie operacje lub funkcje oraz udostępnia te operacje i funkcje wszystkim plikom *.qs zgodnie z regułami wykluczania pliku manifestu.
Na przykład biorąc pod uwagę tę strukturę folderów:
- Teleportation_project
- qsharp.json
- Src
- RunTeleport.qs
- TeleportOperations
- Teleport.qs
- PrepareState
- PrepareState.qs
podczas otwierania pliku /src/TeleportOperation/PrepareState/PrepareState.qsQ# kompilator:
- Sprawdza /src/TeleportOperation/PrepareState/ dla pliku qsharp.json .
- Sprawdza /src/TeleportOperation dla qsharp.json.
- Sprawdza /src pod kątem qsharp.json.
- Sprawdza / qsharp.json.
- / Ustanawia jako katalog główny projektu i zawiera wszystkie pliki *.qs w katalogu głównym w projekcie zgodnie z ustawieniami pliku manifestu.
Tworzenie pliku manifestu
Plik manifestu to prosty plik .json o nazwie qsharp.json , który opcjonalnie może zawierać pola author, license i .ints . Minimalny realny plik manifestu to ciąg {}
. Podczas tworzenia Q# projektu w programie VS Code zostanie utworzony minimalny plik manifestu.
{}
Przykłady plików manifestu
Poniżej przedstawiono kilka przykładów sposobu, w jaki pliki manifestu mogą definiować zakres Q# projektu.
W tym przykładzie autor jest jedynym określonym polem i dlatego wszystkie pliki *.qs w tym katalogu i wszystkie jego podkatalogi są uwzględnione w projekcie Q# .
{
"author":"Microsoft"
}
{
"author":"Microsoft",
"license":"MIT"
}
W projekcie Q# można również użyć pliku manifestu, aby dostosować ustawienia linter programu VS Code Q# . Domyślnie trzy reguły lintera to:
needlessParens
: default =allow
divisionByZero
: default =warn
redundantSemicolons
: default =warn
Za pomocą pliku manifestu można ustawić każdą regułę na allow
, warn
lub error
, na przykład
{
"author":"Microsoft",
"lints": [
{
"lint": "needlessParens",
"level": "allow"
},
{
"lint": "redundantSemicolons",
"level": "warn"
},
{
"lint": "divisionByZero",
"level": "error"
}
]
}
Q# wymagania i właściwości projektu
Następujące wymagania i konfiguracje mają zastosowanie do wszystkich Q# projektów.
- Wszystkie pliki *.qs, które mają być zawarte w projekcie, muszą znajdować się w folderze o nazwie src, który musi znajdować się w Q# folderze głównym projektu. Podczas tworzenia Q# projektu w programie VS Code
/src
folder jest tworzony automatycznie. - Plik manifestu qsharp.json powinien być na tym samym poziomie co folder src . Podczas tworzenia Q# projektu w programie VS Code plik qsharp.json jest tworzony automatycznie.
- Dostęp do operacji i funkcji dostępnych plików źródłowych można uzyskać za pomocą
open
instrukcji:
open MyMathLib;
...
Multiply(x,y);
lub odwoływanie się do nich za pomocą przestrzeni nazw:
MyMathLib.Multiply(x,y);
Tylko w przypadku Q# programów
- Zdefiniowany może być
@EntryPoint()
tylko jeden plik *.qs w projekcieQ#. - Plik *.qs z definicją
@EntryPoint()
można znaleźć na dowolnym poziomie poniżej pliku manifestu. - Każda operacja lub funkcja buforowana z pliku *.qs w dowolnym miejscu projektu Q# jest wyświetlana w tekście predykcyjnym w programie VS Code.
- Jeśli przestrzeń nazw dla wybranej operacji lub funkcji nie została jeszcze dodana, program VS Code automatycznie dodaje niezbędną
open
instrukcję.
Kroki tworzenia Q# projektu
W Eksploratorze plików programu VS Code kliknij prawym przyciskiem myszy folder, którego chcesz użyć dla Q# folderu głównego projektu, a następnie wybierz polecenie Utwórz Q# projekt lub otwórz folder i wybierz polecenie Wyświetl > paletę Q#>Q#poleceń: Utwórz projekt....
Program VS Code tworzy minimalny plik manifestu qsharp.json w folderze i dodaje
/src
folder z plikiem szablonuMain.qs
.Edytuj plik manifestu zgodnie z potrzebami. Zobacz Przykłady plików manifestu.
Dodaj i organizuj Q# pliki źródłowe w folderze
/src
.Jeśli uzyskujesz dostęp do Q# projektu z poziomu programu w języku Python lub notesu Jupyter Notebook, ustaw ścieżkę folderu głównego przy użyciu polecenia
qsharp.init
. W tym przykładzie przyjęto założenie, że program znajduje się w tym samym folderze co folder Q# główny projektu:qsharp.init(project_root = './Teleportation_project')
Jeśli używasz tylko Q# plików w programie VS Code, podczas otwierania Q# pliku kompilator wyszukuje plik manifestu qsharp.json , określa folder główny projektu, a następnie skanuje podfolder plików *.qs.
Uwaga
Możesz również ręcznie utworzyć plik manifestu /src
i folder w kroku 2.
Przykładowy projekt
Ten program teleportacji kwantowej jest przykładem Q# projektu opartego na strukturze folderów pokazanej wcześniej i działa na lokalnym symulatorze w programie VS Code. Aby uruchomić program na sprzęcie Azure Quantum lub symulatorach innych firm, zobacz Wprowadzenie do Q# programów i programu VSCode , aby uzyskać instrukcje kompilowania programu i nawiązywania połączenia z obszarem roboczym platformy Azure.
W przykładzie użyto tej struktury katalogów:
- Teleportation_project
- qsharp.json
- Src
- RunTeleport.qs
- TeleportOperations
- Teleport.qs
- PrepareState
- PrepareState.qs
Plik manifestu qsharp.json zawiera pola autorów i licencji:
{
"author":"Microsoft",
"license":"MIT"
}
Q# pliki źródłowe
Z jedną drobną różnicą — @EntryPoint()
instrukcja — pliki źródłowe są takie same w Q# przypadku programu, programu w języku Python lub notesu Jupyter Notebook.
Główny plik RunTeleport.qs zawiera punkt wejścia i odwołuje się do TeleportLib
przestrzeni nazw w pliku 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 definiuje operację Teleport()
i wywołuje operację PrepareBellPair()
z pliku 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);
}
}
Plik PrepareState.qs zawiera standardową operację wielokrotnego użytku w celu utworzenia pary bell.
namespace PrepareBell {
operation PrepareBellPair(left : Qubit, right : Qubit) : Unit is Adj + Ctl {
H(left);
CNOT(left, right);
}
}
Uruchamianie programów
Wybierz kartę środowiska, w którym jest uruchomiony program.
Aby uruchomić ten program, otwórz plik RunTeleport.qs w programie VS Code i wybierz pozycję Uruchom.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla