量子回路図は、量子アルゴリズムを視覚的に表現したものです。 回路図は、量子プログラムを介した量子ビットの流れを示しています。これには、プログラムが量子ビットに適用するゲートと測定値が含まれます。
この記事では、Microsoft Quantum Development Kit (QDK) とVisual Studio Codeを使用して、VS Code (Jupyter Notebook) を使用して Q# および OpenQASM プログラムの回路図を作成する方法について説明します。
量子回路図の詳細については、「 量子回路図の規則」を参照してください。
前提条件
VS Codeで Q# ファイルと OpenQASM ファイルから回路図を作成するには、次をインストールします。
- 最新バージョンのVS Code、または Web 用のVS Codeを開きます。
- QDKの最新バージョン。
Jupyter Notebookで Python プログラムから回路図を作成するには、次をインストールします。
での Python 拡張機能 と 。拡張機能 qdkを含むjupyterPython ライブラリの最新バージョン。python -m pip install --upgrade "qdk[jupyter]"
で量子回路を視覚化する VS Code
QDKのVS Code拡張子を使用すると、Q# (.qs) ファイルと OpenQASM (.qasm) ファイルの回路図を作成できます。
VS Codeで回路図を表示するには、次の手順に従います。
- VS Codeで Q# または OpenQASM ファイルを開くか、QDKから量子サンプルの 1 つを読み込みます。
- プログラムの前にあるコード レンズから Circuit コマンドを選択します。
QDK回線ウィンドウが開き、プログラムの回路図が表示されます。 たとえば、次の回路図は、ランダム ビットを生成するプログラムに対応しています。 回路は量子ビットを重ね合わせ状態にしてから、量子ビットを測定します。
ヒント
回路要素を作成するコードを強調表示するには、回路図の要素を選択します。
個々の Q# 操作の回路図を表示する
Q# ファイル内の個々の操作の量子回路を視覚化するには、操作の前にあるコード レンズから Circuit コマンドを選択します。
デバッグ時に回路図を表示する
Q# プログラムで VS Code デバッガーを使用すると、現在のデバッガー ブレークポイントでのプログラムの状態に基づいて量子回路を視覚化できます。
- エントリ ポイント操作の前にあるコード レンズから Debug コマンドを選択します。
- [実行とデバッグ] ウィンドウで、[変数] メニューの [Quantum Circuit] ドロップダウンを展開します。 QDK回線パネルが開き、プログラムのステップ実行中に回線が表示されます。
- ブレークポイントを設定し、コードをステップ実行して、プログラムの実行時に回線がどのように更新されるかを確認します。
で量子回路を視覚化する Jupyter Notebook
Jupyter Notebookでは、qdk.qsharpおよびqdk.widgets Python モジュールを使用して、Q# および OpenQASM プログラムの量子回路を視覚化できます。
widgets モジュールは、SVG 画像として量子回路図をレンダリングするウィジェットを提供します。
Jupyter Notebookでの回路図生成のその他の例については、 GitHub リポジトリの QDKを参照してください。
Q# プログラムの回路図を表示する
Jupyter Notebookで Q# プログラムの回路図を表示するには、次の手順に従います。
VS Codeで、[表示] メニューを開き、[コマンド パレット] を選択します。
「新規作成」と入力します 。 空の Jupyter Notebook ファイルが新しいタブで開きます。ノートブックの最初のセルで、次のコードを実行して、
qsharpモジュールをインポートします。from qdk import qsharp新しいセルを作成し、Q# コードを入力します。 たとえば、次のコードはベル状態を準備します。
%%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()"))回路図は次のようになります。
量子ビットを入力として受け取る操作の回路図を表示する
前の Bell 状態の例では、操作 BellState は入力として量子ビットを受け取りません。 演算が量子ビットまたは量子ビット配列を入力として受け取る場合は、演算を渡して回路図を描画するときにかっこを省略します。
たとえば、量子ビットを受け取る演算の回路図を描画するには、次の手順に従います。
新しいセルで、次の Q# コードを実行します。 このコードは、猫の状態を準備します。
%%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[])量子ビットの配列を受け取ると、回路は配列を 2 つの量子ビットのレジスタとして示します。
OpenQASM プログラムの回路図を表示する
Jupyter Notebookで OpenQASM プログラムの回路図を表示するには、次の手順に従います。
VS Codeで、[表示] メニューを開き、[コマンド パレット] を選択します。
「新規作成」と入力します 。 空の Jupyter Notebook ファイルが新しいタブで開きます。ノートブックの最初のセルで、次のコードを実行して、 QDK Python ライブラリを使用して 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 プログラムの場合、個々の関数の回路図を表示することはできません。 プログラム全体の回路図のみを表示できます。