概要:
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)
Jupyter上で量子回路を表示:
notebook.ipynb
qw.Circuit(qsharp.circuit("Sample.Run()"))
# EntryPointでなくても直接指定すれば良い
qw.Circuit(qsharp.circuit("Algorithm.RandomBit()"))
その他:
上記以外にqsharp_widgets
には、以下のクラスが存在しするので任意で試してみてね.
qsharp_widgets
のその他のクラス
- SpaceChart
- EstimateDetails
- EstimatesOverview
- EstimatesPanel
最小限のEstimateの例:
from qsharp.estimator import EstimatorParams
params = EstimatorParams()
estimate = qsharp.estimate("Sample.Run()", params=params)
estimate
その他の例はこちら
おわりに
Q#のお仕事って日本で出ないかな~