PicoQuant is a quantum circuit simulation framework being developed as part of the QuantEx project. This is a PRACE funded project to develop quantum circuit simulation tools capable of running on the classical exa-scale compute clusters expected to be deployed in the coming years. This package is a prototype to test out ideas and approaches that we hope to improve on in subsequent iterations.
The best way to get started is to:
- Install the prototype locally by following the instructions below
- Follow the series of tutorial notebooks in the notebooks folder
- For more details on function interfaces read the online docs
- Get involved by posting an issue or submitting a pull request
PicoQuant can be installed from the Julia REPL with the following commands
import Pkg
Pkg.add("PicoQuant)
Tests can be run with
import Pkg
Pkg.test()
A simple script to use PicoQuant to simulate a 3 qubit GHZ circuit consists of the following
using PicoQuant
tn = TensorNetworkCircuit(3)
add_gate!(tn, gate_tensor(:H), [1])
add_gate!(tn, gate_tensor(:CX), [1, 2])
add_gate!(tn, gate_tensor(:CX), [2, 3])
add_input!(tn, "000")
full_wavefunction_contraction!(tn, "vector")
output = load_tensor_data(tn, :result)
The version of PicoQuant that the above methods installs is the version that is registered with the Julia repository. These instructions show how to clone from the repository and install this version.
- If Julia is not already installed, download and install Julia from the Julialang website
- Clone this repository using
git clone https://github.com/ICHEC/PicoQuant.jl.git
- Start the Julia REPL and navigate to the PicoQuant folder, activate and instantiate the environment and then build PicoQuant.
import Pkg
Pkg.activate(".")
Pkg.instantiate()
Pkg.build("PicoQuant")
This should install dependencies specified in the Project.toml
file
and carry out any package specific build tasks (detailed in deps/build.jl
file).
Currently PicoQuant uses some functionality from qiskit. This is
installed in the python environment used by PyCall
during the build. See below for details about using different python environments.
Unittests can be run from the PicoQuant root folder with
julia --project=. test/runtests.jl
This will run all the unittests. It's possible to run a subset of the unittests
by passing the name of the testset. For example to run the layer3 tests contained
in the test/layer3_tests.jl
script one would run
julia --project=. test/runtests.jl layer3_tests
Standalone executable scripts are located in the bin/
folder. As an example
we show how to run the qasm2tng.jl
script to convert the qft_3.qasm
file
to json format.
julia --project=. bin/qasm2tng.jl --qasm qft_3.qasm --output qft_3.json
Much of the prototyping and development is done in jupyter notebooks which provides instant feedback and speeds development. To start a jupyer notebook from the Julia REPL, enter
using IJulia
notebook()
This should open a browser window showing the home folder.
Note that PicoQuant makes use of python libraries via the PyCall.jl package.
On Linux systems this will use the python3 binary in the path (or python if there
is no python3 binary found). On windows and macOS systems it will create a
dedicated conda environment which will reside at ${HOME}/.julia/conda/3
.
The required python packages are installed as part of the build of PicoQuant.
To use a different python environment, the PYTHON
environment variable must
be set to point to the python binary and PyCall needs to be (re)built. For example
to create a new conda environment at ~/.julia/conda/picoquant_env
, one would
follow the steps
Use conda to create the environment from the command line
conda -p ~/.julia/conda/picoquant_env python=3.7
Then from the Julia REPL
ENV["PYTHON"] = "~/.julia/conda/picoquant_env"
]build PyCall
The package uses Documenter.jl to generate html documentation from the sources. To build the documentation, run the make.jl script from the docs folder.
julia --project=docs docs/make.jl
The documentation will be placed in the build folder and can be hosted locally by starting a local http server with
cd docs/build && python3 -m http.server
As part of the CI this documentation is automatically built and hosted via github pages at https://ICHEC.github.io/PicoQuant.jl/dev