如何使用 QDK 視覺化量子電路圖

量子電路圖是量子演算法的視覺化表示。 電路圖顯示量子位元在量子程式中的流動,包括程式對量子位元套用的閘門與測量值。

在本文中,你將學習如何使用 Microsoft Quantum Development Kit(QDK)和 Visual Studio Code(VS Code)以及 Jupyter Notebook 來製作 Q# 和 OpenQASM 程式的電路圖。

欲了解更多量子電路圖相關資訊,請參閱量子電路圖慣例。

必要條件

若要從 中的 VS CodeQ# 和 OpenQASM 檔案建立電路圖,請安裝以下程式:

要從 Python 程式 Jupyter Notebook建立電路圖,請安裝以下工具:

  • VS Code和Jupyter 擴充功能

  • 這是 Python 函式庫的最新版本 qdk ,附有額外內容 jupyter

    python -m pip install --upgrade "qdk[jupyter]"
    

可視化量子電路 VS Code

在VS Code中的QDK擴充套件,您可以為Q#(.qs)和OpenQASM(.qasm)檔案建立電路圖。

要在VS Code中查看電路圖,請遵循以下步驟:

  1. 在VS Code中開啟 Q# 或 OpenQASM 檔案,或從QDK中載入其中一個量子程式範例。
  2. 從程式前的程式碼鏡頭中選擇 Circuit 指令。

QDK電路視窗會打開並顯示你程式的電路圖。 例如,以下電路圖對應一個產生隨機位元的程式。 電路會將量子位元置於疊加態,然後測量量子位元。

這是顯示隨機位元程式電路圖的 QDK 電路視窗截圖。

小提示

在電路圖中選擇一個元件,以標示產生該元件的程式碼。

查看個別 Q# 操作的電路圖

要在 Q# 檔案中視覺化單一操作的量子電路,請從操作前的程式碼透鏡中選擇 Circuit 指令。

截圖 Visual Studio Code 展示了如何在 Q# 程式中視覺化單一 Q# 操作的電路。

偵錯時檢視電路圖

當你在 Q# 程式中使用 VS Code 除錯器時,你可以根據目前除錯器斷點的程式狀態來視覺化量子電路。

  1. 選擇位於進入點操作之前的程式碼鏡像中的除錯指令。
  2. 執行與除錯面板中,展開 VARIABLES 選單中的量子電路下拉選單。 QDK電路面板會打開,當你在程式中逐步操作時,會顯示電路。
  3. 設定中斷點並逐步執行程式碼,以查看程式執行時線路的更新方式。

可視化量子電路 Jupyter Notebook

在 Jupyter Notebook中,你可以用 和 qdk.qsharp Python 模組來視覺化 Q# 和 OpenQASM 程式qdk.widgets的量子電路。 該 widgets 模組提供一個小工具,能將量子電路圖渲染為 SVG 影像。

想了解更多電路圖產生Jupyter Notebook的範例,請參考 GitHub 倉庫中的 QDK。

查看 Q# 程式的電路圖

要在 中 Jupyter Notebook查看 Q# 程式的電路圖,請依照以下步驟操作:

  1. 在 VS Code中,開啟「檢視」功能表,然後選擇「命令選項板」。

  2. 這時, Create : New Jupyter Notebook登場。 一個空 Jupyter Notebook 檔案會在新分頁打開。

  3. 在筆記本的第一個儲存格中,執行以下程式碼匯入模組 qsharp

    from qdk import qsharp
    
  4. 建立新的儲存格,然後輸入您的 Q# 代碼。 例如,下列程式碼會準備 Bell State:

    %%qsharp
    
    // Prepare a Bell State.
    operation BellState() : Unit {
        use register = Qubit[2];
        H(register[0]);
        CNOT(register[0], register[1]);
    }
    
  5. 要顯示量子電路圖,將 Q# 操作傳遞給函數 qsharp.circuit。 在新儲存格中執行以下程式碼:

    qsharp.circuit("BellState()")
    

    輸出如下所示:

    q_0    ── H ──── ● ──
    q_1    ───────── X ──
    
  6. 要渲染量子電路的 SVG 影像,請使用模組 widgets 。 建立一個新儲存格,然後執行以下程式碼,視覺化你在前一個儲存格中建立的同一條電路。

    from qdk.widgets import Circuit
    
    Circuit(qsharp.circuit("BellState()"))
    

    電路圖如下:

    這是一張展示如何視覺化 Q# 程式電路的截圖 Jupyter Notebook 。

查看以量子位元為輸入的操作電路圖

在之前的貝爾狀態範例中,操作 BellState 不接收量子位元作為輸入。 如果操作輸入量子位元或量子位元陣列,則在繪製電路圖時省略括號。

例如,請依照以下步驟繪製一個使用量子位元運算的電路圖:

  1. 在新儲存格中執行以下 Q# 程式碼。 此程式代碼會準備 cat 狀態。

    %%qsharp
    
    operation PrepareCatState(register : Qubit[]) : Unit {
        H(register[0]);
        ApplyToEach(CNOT(register[0], _), register[1...]);
    }
    
  2. 若要繪製電路圖,請執行以下程式碼:

    Circuit(qsharp.circuit(operation="PrepareCatState"))
    
  3. 要將電路圖渲染成 SVG 影像,請執行以下程式碼:

    Circuit(qsharp.circuit(operation="PrepareCatState"))
    

當操作作用於一個量子位元陣列(Qubit[])時,電路會將該陣列顯示為一個含有兩個量子位元的暫存器。

查看 OpenQASM 程式的電路圖

要在 Jupyter Notebook 內查看 OpenQASM 程式的電路圖,請按照以下步驟進行操作:

  1. 在 VS Code中,開啟「檢視」功能表,然後選擇「命令選項板」。

  2. 這時, Create : New Jupyter Notebook登場。 一個空 Jupyter Notebook 檔案會在新分頁打開。

  3. 在筆記本的第一個儲存格中,使用 Python 程式庫執行以下程式碼,以匯入建立並呼叫 QDK OpenQASM 函式所需的物件:

    from qsharp.openqasm import import_openqasm, ProgramType
    
  4. 在一個新儲存格裡,用 Python 字串寫好你的 OpenQASM 程式,然後把字串傳給函 import_openqasm 式。 要在你的 Python 程式碼中呼叫程式,給函式一個名稱並設 program_typeProgramType.File

    source = """
        include "stdgates.inc";
        bit[2] c;
        qubit[2] q;
        h q[0];
        cx q[0], q[1];
        c = measure q;
    """
    
    import_openqasm(source, name="bell", program_type=ProgramType.File)
    
  5. 在新儲存格中,匯入 OpenQASM 程式作為 Python 函式,並呼叫該程式取得測量結果。

    from qsharp.code.qasm_import import bell
    
    bell()
    
  6. 若要繪製電路圖,請在新單元中執行以下程式碼:

    from qdk.qsharp import circuit
    
    circuit(bell)
    

    輸出如下所示:

    q_0    ── H ──── ● ──── M ──
                 │      ╘═══
    q_1    ───────── X ──── M ──
                        ╘═══
    
  7. 若要將電路圖渲染為 SVG 影像,請在新儲存格中執行以下程式碼:

    from qsharp_widgets import Circuit
    
    Circuit(qsharp.circuit(bell))
    

    電路圖如下:

    這是一張展示如何視覺化 OpenQASM 程式電路的截圖 Jupyter Notebook 。

備註

對於 OpenQASM 程式來說,你無法查看個別功能的電路圖。 你可以只查看整個程式的電路圖。