プロジェクトを操作するQ#
Azure Quantum Development Kitのリリースでは、プロジェクトを定義Q#できます。プロジェクトは、互いのリソースにアクセスできる複数Q#のファイルを含むフォルダー構造です。 プロジェクトは、再利用可能なライブラリを作成し、ソース コードを論理的に整理するのに役立ちます。
Q#プロジェクトには、qsharp.jsonという名前のマニフェスト ファイルと、指定したフォルダー構造内の 1 つ以上の *.qs ファイルが含まれていますQ#。 ユーザーが VS Code で *.qs ファイルを開くか、Jupyter Notebookまたは Python ファイルで をproject_root
設定すると、コンパイラはマニフェスト ファイルの周囲のフォルダー階層を検索し、プロジェクトのスコープを決定します。 マニフェスト ファイルが見つからない場合、コンパイラは 1 つのファイル モードで動作します。 プロジェクトは Q# 手動で作成することも、VS Code で直接作成することもできます。
前提条件
- Azure サブスクリプションの Azure Quantum ワークスペース。 ワークスペースを作成するには、Azure Quantum ワークスペースの作成に関する記事を参照してください。
- Python と Pip がインストールされている Python 環境。
- Azure Quantum Development Kit および Python 拡張機能がインストールされている Visual Studio Code。
- Azure Quantum
qsharp
とazure-quantum
パッケージ。
プロジェクトを定義するQ#
Q#プロジェクトは、qsharp.jsonマニフェスト ファイルと src フォルダー (ソース ファイルを含むQ#) の存在によって定義されます。どちらもプロジェクトのルート フォルダーに存在する必要があります。 プログラムの場合 Q# 、コンパイラは Q# プロジェクト フォルダーを自動的に検出します。 Python プログラムと Jupyter Notebook の場合は、呼び出しでプロジェクト フォルダーを Q# 指定する qsharp.init
必要があります。 ただし、プロジェクトの Q# フォルダー構造は、すべての種類のプログラムで同じままです。
プロジェクト フォルダーの定義 (Q# プログラム)
VS Code で *.qs ファイルを開くと、 Q# コンパイラはフォルダー構造内で qsharp.jsonマニフェスト ファイル を上方向に検索します。 マニフェスト ファイルが見つかると、コンパイラは src ディレクトリのすべてのサブフォルダーを検索して *.qs ファイルを検索し、すべての操作または関数をキャッシュし、マニフェスト ファイルの除外規則に従って、すべての *.qs ファイルでそれらの操作と関数を使用できるようにします。
たとえば、次のフォルダー構造を指定します。
- Teleportation_project
- qsharp.json
- src
- RunTeleport.qs
- TeleportOperations
- Teleport.qs
- PrepareState
- PrepareState.qs
ファイル /src/TeleportOperation/PrepareState/PrepareState.qs を開くと、コンパイラは次のようになりますQ#。
- /src/TeleportOperation/PrepareState/ でqsharp.json ファイルを確認します。
- /src/TeleportOperation でqsharp.jsonを確認します。
- /src でqsharp.jsonを確認します。
- qsharp.jsonを確認/します。
- /プロジェクトのルート ディレクトリとしてを確立し、マニフェスト ファイルの設定に従って、プロジェクトのルートの下にあるすべての *.qs ファイルを含めます。
マニフェスト ファイルの作成
マニフェスト ファイルは、必要に応じて author、license、.ints フィールドを含めることができる、qsharp.jsonという名前の単純な.json ファイルです。 実行可能な最小マニフェスト ファイルは、文字列 {}
です。 VS Code でプロジェクトを Q# 作成すると、最小限のマニフェスト ファイルが自動的に作成されます。
{}
マニフェスト ファイルの例
マニフェスト ファイルでプロジェクトのスコープを定義する方法の例を Q# 次に示します。
この例では、 author が指定された唯一のフィールドであるため、このディレクトリ内のすべての *.qs ファイルとそのすべてのサブディレクトリがプロジェクトに Q# 含まれます。
{
"author":"Microsoft"
}
{
"author":"Microsoft",
"license":"MIT"
}
プロジェクト内では Q# 、マニフェスト ファイルを使用して VS Code Q# リンター設定を微調整することもできます。 既定では、3 つのリンター ルールは次のとおりです。
needlessParens
: default =allow
divisionByZero
: default =warn
redundantSemicolons
: default =warn
マニフェスト ファイルを使用して、各ルールを 、warn
、または error
のいずれかにallow
設定できます(例:
{
"author":"Microsoft",
"lints": [
{
"lint": "needlessParens",
"level": "allow"
},
{
"lint": "redundantSemicolons",
"level": "warn"
},
{
"lint": "divisionByZero",
"level": "error"
}
]
}
Q# プロジェクトの要件とプロパティ
次の要件と構成は、すべての Q# プロジェクトに適用されます。
- プロジェクトに含める *.qs ファイルはすべて src という名前のフォルダーの下に存在する必要があります。このフォルダーは、プロジェクト のルート フォルダーの Q# 下にある必要があります。 VS Code でプロジェクトを Q# 作成すると、
/src
フォルダーが自動的に作成されます。 - qsharp.json マニフェスト ファイルは、src フォルダーと同じレベルにする必要があります。 VS Code でプロジェクトを Q# 作成すると、 qsharp.json ファイルが自動的に作成されます。
- 使用可能なソース ファイル内の操作と関数には、ステートメントを使用して
open
アクセスできます。
open MyMathLib;
...
Multiply(x,y);
または名前空間を使用して参照します。
MyMathLib.Multiply(x,y);
プログラムの場合 Q# のみ
- 定義できる *.qs ファイルは、 Q# プロジェクト内に
@EntryPoint()
1 つだけです。 - 定義を含む
@EntryPoint()
*.qs ファイルは、マニフェスト ファイルの下の任意のレベルに配置できます。 - プロジェクト内の任意の場所 Q# にある *.qs ファイルからキャッシュされた操作または関数は、VS Code の予測テキストに表示されます。
- 選択した操作または関数の名前空間がまだ追加されていない場合、VS Code は必要な
open
ステートメントを自動的に追加します。
プロジェクトを作成する Q# 手順
VS Code ファイル エクスプローラーで、プロジェクト のルート フォルダーに使用Q#するフォルダーを右クリックし、プロジェクトCreateQ#選択するか、フォルダーを開いて [コマンド パレット>Q#の表示] を選択します。>プロジェクトCreateQ#します。
VS Code は、 フォルダー内に最小限のqsharp.json マニフェスト ファイルを作成し、テンプレート ファイルを
/src
含むフォルダーをMain.qs
追加します。必要に応じてマニフェスト ファイルを編集します。 「マニフェスト ファイルの例」を参照してください。
フォルダーの下にソース ファイルを Q# 追加して
/src
整理します。Python プログラムまたはJupyter NotebookからプロジェクトにQ#アクセスする場合は、 を使用してルート フォルダーパスを
qsharp.init
設定します。 この例では、プログラムがプロジェクトのルート フォルダーと同じフォルダー内にあると仮定します Q# 。qsharp.init(project_root = './Teleportation_project')
VS Code でファイルのみを Q# 使用している場合、ファイルを Q# 開くと、コンパイラは qsharp.json マニフェスト ファイルを検索し、プロジェクト ルート フォルダーを決定し、サブフォルダーで *.qs ファイルをスキャンします。
注意
手順 2 でマニフェスト ファイルとフォルダーを /src
手動で作成することもできます。
プロジェクトの例
この量子テレポート プログラムは、先ほど示したフォルダー構造に基づくプロジェクトの Q# 例であり、VS Code のローカル シミュレーターで実行されます。 Azure Quantum ハードウェアまたはサードパーティのシミュレーターでプログラムを実行するには、プログラムをコンパイルして Azure ワークスペースに接続する手順については、「 プログラムの概要 Q# 」と「VSCode 」を参照してください。
この例では、次のディレクトリ構造を使用します。
- Teleportation_project
- qsharp.json
- src
- RunTeleport.qs
- TeleportOperations
- Teleport.qs
- PrepareState
- PrepareState.qs
qsharp.json マニフェスト ファイルには、作成者フィールドとライセンス フィールドが含まれています。
{
"author":"Microsoft",
"license":"MIT"
}
Q# ソース ファイル
1 つの小さな違いがある場合、 @EntryPoint()
ステートメント - ソース ファイルは、プログラム、Python プログラム、またはJupyter Notebookで同じですQ#。
メイン ファイル RunTeleport.qs にはエントリ ポイントが含まれており、Teleport.qs の名前空間をTeleportLib
参照します。
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 は、操作をTeleport()
定義し、PrepareState.qs から操作をPrepareBellPair()
呼び出します。
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);
}
}
PrepareState.qs ファイルには、ベル ペアを作成するための標準の再利用可能な操作が含まれています。
namespace PrepareBell {
operation PrepareBellPair(left : Qubit, right : Qubit) : Unit is Adj + Ctl {
H(left);
CNOT(left, right);
}
}
プログラムの実行
プログラムを実行している環境のタブを選択します。
このプログラムを実行するには、VS Code で RunTeleport.qs ファイルを 開き、[実行] を選択 します。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示