0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

え、Q#って量子回路出すようになったんですか?

Last updated at Posted at 2024-06-06

概要:

VScodeでQ#のプロジェクトをいじっている
operationの上に色々出てきたのでその結果をJupyterでも表示しておきたかったのでメモ書き

環境:

私の環境はWSL2環境下のDocker(Nvidia-docker)上でjupyter-labを立ち上げます。

FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
...requirements.inのインストール等は省略...

Python packages

qsharp                    1.5.0
qsharp-jupyterlab         1.5.0
qsharp-widgets            1.5.0

プロジェクト構築

ディレクトリ構成

sample-project/
┠ src/
┃   ┠ operations/
┃   ┃   ┗ RandomBit.qs
┃   ┗ Main.qs
┠ qsharp.json
┗ notebook.ipynb # 今回の主役のノート

qsharp.json:

qsharpプロジェクトのマニフェストファイル
特に記載する必要はないので以下の様にしています。

{}

詳細はこちら

RandomBit.qs:

こちらはQ#のサンプルのランダムビット操作を出しているだけです。

namespace Algorithm {

    open Microsoft.Quantum.Canon;
    open Microsoft.Quantum.Diagnostics as Diag;


    operation RandomBit() : Result {
        // Qubits are only accesible for the duration of the scope where they
        // are allocated and are automatically released at the end of the scope.
        use qubit = Qubit();

        // Set the qubit in superposition by applying a Hadamard transformation.
        H(qubit);

        Diag.DumpMachine();

        // Measure the qubit. There is a 50% probability of measuring either
        // `Zero` or `One`.
        let result = M(qubit);

        Message($"The result of the measurement is {result}.");

        // Reset the qubit so it can be safely released.
        Reset(qubit);
        return result;
    }
    ...
}

Main.qs:

こちらがエントリーポイントです。

namespace Sample {

    open Microsoft.Quantum.Canon;
    open Algorithm as Alg;

    @EntryPoint()
    operation Run() : Result {
        let results = Alg.RandomBit();
        return results;
    }
}

Jupyter上でQ#のプロジェクトPathを指定:

notebook.ipynb
import qsharp

qsharp.init(project_root = "/sample-project")

Q#の結果をPythonで取得

notebook.ipynb
# 単一の場合
qsharp.eval("Sample.Run()")
# >>> Zero

# 複数回取得する場合
qsharp.run("Sample.Run()", 10)
# >>> [One, Zero, Zero, One, Zero, Zero, One, One, One, Zero]

ヒストグラムを表示:

notebook.ipynb
import qsharp_widgets as qw

histogram = qw.Histogram()
display(histogram)
histogram.run("Sample.Run()", 10)

image.png

Jupyter上で量子回路を表示:

notebook.ipynb
qw.Circuit(qsharp.circuit("Sample.Run()"))

# EntryPointでなくても直接指定すれば良い
qw.Circuit(qsharp.circuit("Algorithm.RandomBit()"))

image.png

その他:

上記以外にqsharp_widgetsには、以下のクラスが存在しするので任意で試してみてね.

qsharp_widgetsのその他のクラス

  • SpaceChart
  • EstimateDetails
  • EstimatesOverview
  • EstimatesPanel

最小限のEstimateの例:

from qsharp.estimator  import EstimatorParams
params = EstimatorParams()
estimate = qsharp.estimate("Sample.Run()", params=params)
estimate

image.png

image.png

image.png

image.png

image.png

その他の例はこちら

おわりに

Q#のお仕事って日本で出ないかな~

参考:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?