共用方式為


使用 Q# 專案

透過 Azure Quantum Development Kit的發行,您可以定義 Q# 專案,這些專案是具有多個 Q# 檔案的資料夾結構,可存取彼此的資源。 項目有助於建立可重複使用的連結庫,並以邏輯方式組織原始程式碼。

Q#專案包含Q#名為 qsharp.json 的指令清單檔,以及指定資料夾結構中的一或多個 *.qs 檔案。 當使用者在 VS Code 中開啟 *.qs 檔案,或在 Jupyter Notebook 或 Python 檔案中設定 project_root 時,編譯程式會搜尋周圍資料夾階層中的指令清單檔,並判斷專案的範圍。 如果找不到指令清單檔,編譯程式會以單一檔案模式運作。 Q#您可以手動或在 VS Code 中直接建立專案。

必要條件

  • Azure 訂用帳戶中的 Azure Quantum 工作區。 若要建立工作區,請參閱 建立 Azure Quantum 工作區
  • 已安裝 Python 和 Pip 的 Python 環境。
  • 已安裝 Azure Quantum Development KitPython 延伸模組的 Visual Studio Code。
  • Azure Quantum qsharpazure-quantum 套件。

Q#定義專案

Q#專案是由qsharp.json指令清單檔和 src 資料夾(其中包含Q#原始程式檔)的存在所定義,這兩者都必須位於專案的根資料夾中。 針對 Q# 程式,編譯程式 Q# 會自動偵測項目資料夾。 針對 Python 程式和 Jupyter Notebook,您必須使用qsharp.init呼叫來指定Q#項目資料夾。 不過,對於所有類型的程式而言,專案的資料夾結構 Q# 會維持不變。

顯示專案資料夾階層的 Q# 圖片。

定義項目資料夾 (Q# 程式)

當 VS Code 中開啟 *.qs 檔案時,編譯 Q# 程式會在資料夾結構 中向上搜尋qsharp.json 指令清單檔。 如果找到指令清單檔,編譯程式接著會向下搜尋 *.qs 檔案的 src 目錄的所有子資料夾,並快取任何作業或函式,並讓這些作業和函式可供所有 *.qs 檔案使用,並依照指令清單檔的排除規則。

例如,假設這個資料夾結構:

  • Teleportation_project
    • qsharp.json
    • src
      • RunTeleport.qs
      • TeleportOperations
        • Teleport.qs
        • PrepareState
          • PrepareState.qs

當您開啟 /src/TeleportOperation/PrepareState/PrepareState.qs 檔案時,編譯程式Q#:

  1. 檢查 /src/TeleportOperation/PrepareState/ 是否有 qsharp.json 檔案。
  2. 檢查 /src/TeleportOperation 是否有 qsharp.json
  3. 檢查 /src 是否有 qsharp.json
  4. 檢查/qsharp.json
  5. /根據指令清單檔的設定,建立為專案的根目錄,並包含專案根目錄下的所有 *.qs 檔案。

建立資訊清單檔

指令清單檔案是名為 qsharp.json 的簡單.json檔案,可選擇性地包含 作者授權.ints 字段。 最小可行的指令清單檔是字串 {}。 當您在 VS Code 中建立 Q# 專案時,會為您建立最小的指令清單檔。

{}

指令清單檔案範例

以下是指令清單檔如何定義專案範圍的 Q# 一些範例。

在此範例中, author 是唯一指定的欄位,因此此目錄中的所有 *.qs 檔案及其所有子目錄都會包含在 Q# 專案中。

{
    "author":"Microsoft"
}
{
    "author":"Microsoft",
    "license":"MIT"
}

在 Q# 專案中,您也可以使用指令清單檔來微調 VS Code Q# Linter 設定。 根據預設,三個 Linter 規則為:

  • needlessParens:default = allow
  • divisionByZero:default = warn
  • redundantSemicolons:default = warn

使用指令清單檔,您可以將每個規則設定為 allowwarnerror,例如

{
    "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# 程式

  • 專案中只有一個 Q# *.qs 檔案可以 @EntryPoint() 定義。
  • 具有 @EntryPoint() 定義的 *.qs 檔案可以位於指令清單檔案下方的任何層級。
  • 從 *.qs 檔案快取的任何作業或函式,專案中的任何 Q# 位置會顯示在 VS Code 中的預測文字中。
  • 如果尚未新增所選作業或函式的命名空間,VS Code 會自動新增必要的 open 語句。

建立 Q# 專案的步驟

  1. 在 VS Code 檔案總管中,以滑鼠右鍵按下您要用於Q#專案根資料夾的資料夾,然後選取 [建立Q#專案],或開啟資料夾,然後選取 [檢視>命令選擇區>Q#:建立Q#專案...]。

  2. VS Code 會在資料夾中建立最小 qsharp.json 指令清單檔案,並使用範本檔案新增 /src 資料夾 Main.qs

  3. 視需要編輯指令清單檔案。 請參閱 指令清單檔案範例

  4. 在資料夾下/src新增並組織您的Q#原始程序檔。

  5. 如果您要從 Python 程式或 Jupyter Notebook 存取Q#專案,請使用 qsharp.init設定根資料夾路徑。 這個範例假設您的程式位於與專案根資料夾相同的資料夾中 Q# :

    qsharp.init(project_root = './Teleportation_project')
    
  6. 如果您只 Q# 使用 VS Code 中的檔案,當您開啟 Q# 檔案時,編譯程式會搜尋 qsharp.json 指令清單檔、判斷專案根資料夾,然後掃描子資料夾是否有 *.qs 檔案。

注意

您也可以在步驟 2 中手動建立指令清單檔案和 /src 資料夾。

範例專案

此量子遠端傳送程式是以稍早所示的資料夾結構為基礎的專案範例 Q# ,並在 VS Code 中的本機模擬器上執行。 若要在 Azure Quantum 硬體或第三方模擬器上執行程式,請參閱 開始使用 Q# 程式和 VSCode 以取得編譯程式並連線到 Azure 工作區的步驟。

這個範例會使用此目錄結構:

  • Teleportation_project
    • qsharp.json
    • src
      • RunTeleport.qs
      • TeleportOperations
        • Teleport.qs
        • PrepareState
          • PrepareState.qs

qsharp.json指令清單檔案包含作者授權欄位:

{
    "author":"Microsoft",
    "license":"MIT"
}

Q# 來源檔案

有一個小差異 - @EntryPoint() 語句 - 原始程序檔與 Q# 程式、Python 程式或 Jupyter Notebook 相同。

主要檔案 RunTeleport.qs 包含進入點,並參考 TeleportLib 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 會定義作業,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 檔案包含標準可重複使用的作業,以建立 Bell 配對。

namespace PrepareBell {    
    
    operation PrepareBellPair(left : Qubit, right : Qubit) : Unit is Adj + Ctl {
        H(left);
        CNOT(left, right);
    }
}

執行程式

選取您執行程式之環境的索引標籤。

若要執行此程式,請在 VS Code 中開啟 RunTeleport.qs 檔案,然後選取 [ 執行]。