This package is a quantum circuit simulator written in the Julia programming language, meant to be compatible with the Amazon Braket SDK. It can simulate gate-based quantum circuits using both statevectors and density matrices (when noise is present).
You do not need a Python installation or the Python Amazon Braket SDK installed to use this package.
Supported operating systems and architectures:
CPU arch \ OS | Linux | macOS | Windows |
---|---|---|---|
x86_64 | ✅ | ✅ | ✅ |
aarch64 (ARM) | ✅ | ✅ |
All necessary Julia packages will be installed for you when you run Pkg.add("BraketSimulator")
or ] instantiate
(if you're doing a dev
install). The minimum supported Julia version is 1.9.
In order to generate a new set of precompilation instructions, you'll need to comment out the include("precompile.jl")
lines in src/BraketSimulator.jl
and ext/BraketSimulatorPythonExt/BraketSimulatorPythonExt.jl
. Then, cd
to precompile
and run:
julia --project=../test snoop_compilation.jl
This will run the test suite using SnoopCompile.jl
to generate precompilation instructions. Once this is completed, you can uncomment include("precompile.jl")
lines in src/BraketSimulator.jl
and ext/BraketSimulatorPythonExt/BraketSimulatorPythonExt.jl
.
BraketSimulator.jl
has an optional extension to support integration with Python (BraketSimulatorPythonExt
).
To use BraketSimulatorPythonExt
, you will need to install PythonCall.jl
, and then load it before BraketSimulator.jl
like so:
using PythonCall, BraketSimulator
PythonCall.jl
will try to install the necessary Python dependencies using the CondaPkg.toml
present in top-level package folder. If you already have all the necessary Python dependencies installed, you can set the environment variable JULIA_CONDAPKG_BACKEND="Null"
to have CondaPkg.jl
use your system Python and its installed packages.
If you want to use this package from Python, see the Python wrapper package amazon-braket-simulator-v2-python
, which provides a Python interaction layer and will install Julia, this package and other Julia dependencies in a sandboxed virtual environment for you.
Launch Julia with the command line option -t auto
to have Julia launch and manage threads to parallelize the simulation(s). BraketSimulator.jl
will parallelize both across tasks within a batch and inside a single task's evolution.
Keep in mind that the first qubit has index 0
, not index 1
.
In this example, we create a Greenberger-Horne-Zeilinger (GHZ) state and simulate it:
using Braket, BraketSimulator
function ghz_circuit(qubit_count::Int)
ghz_circ = Circuit()
H(ghz_circ, 0)
for target_qubit = 1:qubit_count-1
CNot(ghz_circ, 0, target_qubit)
end
return ghz_circ
end
device = LocalSimulator("braket_sv_v2")
n_qubits = 10
task_result = simulate(device, ghz_circuit(n_qubits), shots=10)
See CONTRIBUTING for more information.
This project is licensed under the Apache-2.0 License.