Macで確認しましたが、WindowsでもLinuxでもDockerが使える環境なら使えると思います。
PythonのQiskitをJuliaから呼んでるだけなので、特にJuliaにこだわりの無い方は普通にこっち↓でやった方が良いでしょう。juliaでやると結構ハマり点が多くて苦労します。
適当なディレクトリを作って、
mkdir qiskit_julia && cd qiskit_julia
適当なテキストエディタでDockerfileとdocker-compose.ymlを作る。
FROM jupyter/datascience-notebook
USER ${NB_UID}
# Add Julia packages.
RUN julia -e 'import Pkg; Pkg.update()' && \
julia -e 'import Pkg; Pkg.add("PyCall"); Pkg.add("PyPlot"); Pkg.add("Distributions"); Pkg.add("ForwardDiff")' && \
python -m pip install --upgrade pip && \
python -m pip install qiskit qiskit-terra[visualization] \
git+https://github.com/qiskit-community/qiskit-textbook.git#subdirectory=qiskit-textbook-src
version: "3.8"
services:
julia-qiskit-notebook:
build: .
image: julia-qiskit-notebook
volumes:
- ${PWD}/:/home/jovyan/work
ports:
- 8888:8888
container_name: julia-qiskit-notebook
environment:
- JUPYTER_ENABLE_LAB=yes
下の様にコンテナを立ち上げると、
docker-compose up
こんなのが出てくるので、
julia-qiskit-notebook | [C 2022-04-14 06:03:19.548 ServerApp]
julia-qiskit-notebook |
julia-qiskit-notebook | To access the server, open this file in a browser:
julia-qiskit-notebook | file:///home/jovyan/.local/share/jupyter/runtime/jpserver-9-open.html
julia-qiskit-notebook | Or copy and paste one of these URLs:
julia-qiskit-notebook | http://[何か英数字列]:8888/lab?token=[何か英数字列]
julia-qiskit-notebook | or http://127.0.0.1:8888/lab?token=[何か英数字列]
http://127.0.0.1:8888/?token=[何か英数字列]
の箇所を選択し、URLとしてブラウザで開きます。
Jupyter Notebookが立ち上がるので、後はこのサイトを見て学習すれば良いが、
pythonとjuliaの違いで、ソースを少し書き換える必要がある。例えば、pythonのコード
# Click 'try', then 'run' to see the output,
# you can change the code and run it again.
print("This code works!")
from qiskit import QuantumCircuit
qc = QuantumCircuit(2) # Create circuit with 2 qubits
qc.h(0) # Do H-gate on q0
qc.cx(0,1) # Do CNOT on q1 controlled by q0
qc.measure_all()
qc.draw('mpl')
は、juliaでは
using PyCall
using PyPlot
qk = pyimport("qiskit")
# Click 'try', then 'run' to see the output,
# you can change the code and run it again.
print("This code works!")
# from qiskit import QuantumCircuit
qc = qk.QuantumCircuit(2) # Create circuit with 2 qubits
qc.h(0) # Do H-gate on q0
qc.cx(0,1) # Do CNOT on q1 controlled by q0
qc.measure_all()
print(qc.draw("mpl"))
qc.draw("mpl")
の文字列引数はpythonではシングルクォートだが、juliaではダブルクォートになる。
最終行のprint(qc.draw("mpl"))
だが、qc.draw("mpl")
と書いてもエラーにはならないが、同じ図が2つも表示されてしまう。
表示形式がmplでなくても良い場合はqc.draw()
と書きprint
は要らない。逆にprint(qc.draw())
と書くと図が汚く表示されてしまう。
他にも、pythonで、
from math import sqrt
qc = QuantumCircuit(1) # qcを再定義します。
initial_state = [0+1.j/sqrt(2), 1/sqrt(2)+0.j]
qc.initialize(initial_state, 0)
qc.draw("mpl")
が、juliaで、
qc = qk.QuantumCircuit(1) # qcを再定義します。
initial_state = [0+1im/sqrt(2), 1/sqrt(2)+0im]
qc.initialize(initial_state, 0)
print(qc.draw("mpl"))
とか… まあpythonとjuliaの違いを理解していれば良いだけかも知れません。
ブロッホ球とかも出せます。
python
from math import pi
from qiskit_textbook.widgets import plot_bloch_vector_spherical
coords = [pi/2,0,1] # [Theta, Phi, Radius]
plot_bloch_vector_spherical(coords) # 球面座標を持つブロッホベクトル
julia
widgets = pyimport("qiskit_textbook.widgets")
coords = [pi/2,0,1] # [Theta, Phi, Radius]
print(widgets.plot_bloch_vector_spherical(coords)) # 球面座標を持つブロッホベクトル