次の方法で共有


を使用して量子回路図を視覚化する方法 QDK

量子回路図は、量子アルゴリズムを視覚的に表現したものです。 回路図は、量子プログラムを介した量子ビットの流れを示しています。これには、プログラムが量子ビットに適用するゲートと測定値が含まれます。

この記事では、Microsoft Quantum Development Kit (QDK) とVisual Studio Codeを使用して、VS Code (Jupyter Notebook) を使用して Q# および OpenQASM プログラムの回路図を作成する方法について説明します。

量子回路図の詳細については、「 量子回路図の規則」を参照してください。

前提条件

VS Codeで Q# ファイルと OpenQASM ファイルから回路図を作成するには、次をインストールします。

Jupyter Notebookで Python プログラムから回路図を作成するには、次をインストールします。

  • でのPython 拡張機能拡張機能

  • qdk を含む jupyter Python ライブラリの最新バージョン。

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

で量子回路を視覚化する VS Code

QDKのVS Code拡張子を使用すると、Q# (.qs) ファイルと OpenQASM (.qasm) ファイルの回路図を作成できます。

VS Codeで回路図を表示するには、次の手順に従います。

  1. VS Codeで Q# または OpenQASM ファイルを開くか、QDKから量子サンプルの 1 つを読み込みます
  2. プログラムの前にあるコード レンズから Circuit コマンドを選択します。

QDK回線ウィンドウが開き、プログラムの回路図が表示されます。 たとえば、次の回路図は、ランダム ビットを生成するプログラムに対応しています。 回路は量子ビットを重ね合わせ状態にしてから、量子ビットを測定します。

ランダムビットプログラムの回路図を表示する「QDK 回路」ウィンドウの画面キャプチャ。

ヒント

回路要素を作成するコードを強調表示するには、回路図の要素を選択します。

個々の Q# 操作の回路図を表示する

Q# ファイル内の個々の操作の量子回路を視覚化するには、操作の前にあるコード レンズから Circuit コマンドを選択します。

Q# プログラムで 1 つの Q# 操作の回線を視覚化する方法を示す Visual Studio Code のスクリーンショット。

デバッグ時に回路図を表示する

Q# プログラムで VS Code デバッガーを使用すると、現在のデバッガー ブレークポイントでのプログラムの状態に基づいて量子回路を視覚化できます。

  1. エントリ ポイント操作の前にあるコード レンズから Debug コマンドを選択します。
  2. [実行とデバッグ] ウィンドウで、[変数] メニューの [Quantum Circuit] ドロップダウンを展開します。 QDK回線パネルが開き、プログラムのステップ実行中に回線が表示されます。
  3. ブレークポイントを設定し、コードをステップ実行して、プログラムの実行時に回線がどのように更新されるかを確認します。

で量子回路を視覚化する Jupyter Notebook

Jupyter Notebookでは、qdk.qsharpおよびqdk.widgets Python モジュールを使用して、Q# および OpenQASM プログラムの量子回路を視覚化できます。 widgets モジュールは、SVG 画像として量子回路図をレンダリングするウィジェットを提供します。

Jupyter Notebookでの回路図生成のその他の例については、 GitHub リポジトリの QDKを参照してください。

Q# プログラムの回路図を表示する

Jupyter Notebookで Q# プログラムの回路図を表示するには、次の手順に従います。

  1. VS Codeで、[表示] メニューを開き、[コマンド パレット] を選択します。

  2. 「新規作成」と入力します。 空の Jupyter Notebook ファイルが新しいタブで開きます。

  3. ノートブックの最初のセルで、次のコードを実行して、 qsharp モジュールをインポートします。

    from qdk import qsharp
    
  4. 新しいセルを作成し、Q# コードを入力します。 たとえば、次のコードはベル状態を準備します。

    %%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 のスクリーンショット。

量子ビットを入力として受け取る操作の回路図を表示する

前の Bell 状態の例では、操作 BellState は入力として量子ビットを受け取りません。 演算が量子ビットまたは量子ビット配列を入力として受け取る場合は、演算を渡して回路図を描画するときにかっこを省略します。

たとえば、量子ビットを受け取る演算の回路図を描画するには、次の手順に従います。

  1. 新しいセルで、次の Q# コードを実行します。 このコードは、猫の状態を準備します。

    %%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[])量子ビットの配列を受け取ると、回路は配列を 2 つの量子ビットのレジスタとして示します。

OpenQASM プログラムの回路図を表示する

Jupyter Notebookで OpenQASM プログラムの回路図を表示するには、次の手順に従います。

  1. VS Codeで、[表示] メニューを開き、[コマンド パレット] を選択します。

  2. 「新規作成」と入力します。 空の Jupyter Notebook ファイルが新しいタブで開きます。

  3. ノートブックの最初のセルで、次のコードを実行して、 QDK Python ライブラリを使用して 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 プログラムの場合、個々の関数の回路図を表示することはできません。 プログラム全体の回路図のみを表示できます。