量子電路圖是量子演算法的視覺化表示。 電路圖顯示量子位元在量子程式中的流動,包括程式對量子位元套用的閘門與測量值。
在本文中,你將學習如何使用 Microsoft Quantum Development Kit(QDK)和 Visual Studio Code(VS Code)以及 Jupyter Notebook 來製作 Q# 和 OpenQASM 程式的電路圖。
欲了解更多量子電路圖相關資訊,請參閱量子電路圖慣例。
必要條件
若要從 中的 VS CodeQ# 和 OpenQASM 檔案建立電路圖,請安裝以下程式:
- 最新版本的 VS Code,或開放 VS Code 於網路。
- 最新版本的QDK擴充功能於VS Code。
要從 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中查看電路圖,請遵循以下步驟:
- 在VS Code中開啟 Q# 或 OpenQASM 檔案,或從QDK中載入其中一個量子程式範例。
- 從程式前的程式碼鏡頭中選擇 Circuit 指令。
QDK電路視窗會打開並顯示你程式的電路圖。 例如,以下電路圖對應一個產生隨機位元的程式。 電路會將量子位元置於疊加態,然後測量量子位元。
小提示
在電路圖中選擇一個元件,以標示產生該元件的程式碼。
查看個別 Q# 操作的電路圖
要在 Q# 檔案中視覺化單一操作的量子電路,請從操作前的程式碼透鏡中選擇 Circuit 指令。
偵錯時檢視電路圖
當你在 Q# 程式中使用 VS Code 除錯器時,你可以根據目前除錯器斷點的程式狀態來視覺化量子電路。
- 選擇位於進入點操作之前的程式碼鏡像中的除錯指令。
- 在執行與除錯面板中,展開 VARIABLES 選單中的量子電路下拉選單。 QDK電路面板會打開,當你在程式中逐步操作時,會顯示電路。
- 設定中斷點並逐步執行程式碼,以查看程式執行時線路的更新方式。
可視化量子電路 Jupyter Notebook
在 Jupyter Notebook中,你可以用 和 qdk.qsharp Python 模組來視覺化 Q# 和 OpenQASM 程式qdk.widgets的量子電路。 該 widgets 模組提供一個小工具,能將量子電路圖渲染為 SVG 影像。
想了解更多電路圖產生Jupyter Notebook的範例,請參考 GitHub 倉庫中的 QDK。
查看 Q# 程式的電路圖
要在 中 Jupyter Notebook查看 Q# 程式的電路圖,請依照以下步驟操作:
在 VS Code中,開啟「檢視」功能表,然後選擇「命令選項板」。
這時, Create : New Jupyter Notebook登場。 一個空 Jupyter Notebook 檔案會在新分頁打開。
在筆記本的第一個儲存格中,執行以下程式碼匯入模組
qsharp。from qdk import qsharp建立新的儲存格,然後輸入您的 Q# 代碼。 例如,下列程式碼會準備 Bell State:
%%qsharp // Prepare a Bell State. operation BellState() : Unit { use register = Qubit[2]; H(register[0]); CNOT(register[0], register[1]); }要顯示量子電路圖,將 Q# 操作傳遞給函數
qsharp.circuit。 在新儲存格中執行以下程式碼:qsharp.circuit("BellState()")輸出如下所示:
q_0 ── H ──── ● ── q_1 ───────── X ──要渲染量子電路的 SVG 影像,請使用模組
widgets。 建立一個新儲存格,然後執行以下程式碼,視覺化你在前一個儲存格中建立的同一條電路。from qdk.widgets import Circuit Circuit(qsharp.circuit("BellState()"))電路圖如下:
查看以量子位元為輸入的操作電路圖
在之前的貝爾狀態範例中,操作 BellState 不接收量子位元作為輸入。 如果操作輸入量子位元或量子位元陣列,則在繪製電路圖時省略括號。
例如,請依照以下步驟繪製一個使用量子位元運算的電路圖:
在新儲存格中執行以下 Q# 程式碼。 此程式代碼會準備 cat 狀態。
%%qsharp operation PrepareCatState(register : Qubit[]) : Unit { H(register[0]); ApplyToEach(CNOT(register[0], _), register[1...]); }若要繪製電路圖,請執行以下程式碼:
Circuit(qsharp.circuit(operation="PrepareCatState"))要將電路圖渲染成 SVG 影像,請執行以下程式碼:
Circuit(qsharp.circuit(operation="PrepareCatState"))
當操作作用於一個量子位元陣列(Qubit[])時,電路會將該陣列顯示為一個含有兩個量子位元的暫存器。
查看 OpenQASM 程式的電路圖
要在 Jupyter Notebook 內查看 OpenQASM 程式的電路圖,請按照以下步驟進行操作:
在 VS Code中,開啟「檢視」功能表,然後選擇「命令選項板」。
這時, Create : New Jupyter Notebook登場。 一個空 Jupyter Notebook 檔案會在新分頁打開。
在筆記本的第一個儲存格中,使用 Python 程式庫執行以下程式碼,以匯入建立並呼叫 QDK OpenQASM 函式所需的物件:
from qsharp.openqasm import import_openqasm, ProgramType在一個新儲存格裡,用 Python 字串寫好你的 OpenQASM 程式,然後把字串傳給函
import_openqasm式。 要在你的 Python 程式碼中呼叫程式,給函式一個名稱並設program_type為ProgramType.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)在新儲存格中,匯入 OpenQASM 程式作為 Python 函式,並呼叫該程式取得測量結果。
from qsharp.code.qasm_import import bell bell()若要繪製電路圖,請在新單元中執行以下程式碼:
from qdk.qsharp import circuit circuit(bell)輸出如下所示:
q_0 ── H ──── ● ──── M ── │ ╘═══ q_1 ───────── X ──── M ── ╘═══若要將電路圖渲染為 SVG 影像,請在新儲存格中執行以下程式碼:
from qsharp_widgets import Circuit Circuit(qsharp.circuit(bell))電路圖如下:
備註
對於 OpenQASM 程式來說,你無法查看個別功能的電路圖。 你可以只查看整個程式的電路圖。