Quantinuum's open source emulator for hybrid quantum computation
Project description
Selene
Selene is a quantum computer emulation platform written primarily in Rust with a python frontend.
Selene is built with flexibility in mind. This includes:
- A plugin system for the addition of additional components including simulators, error models, quantum runtimes to be provided within Selene or as third party plugins
- Support for custom input formats and device APIs through the selene-core build system.
What's included
Out of the box, Selene provides first-class support for the HUGR ecosystem, including execution of Guppy programs in an emulation environment, making use of our open-source compiler. You can find many examples of guppy usage in our unit tests.
Selene provides a range of simulators, including:
- Statevector simulation using QuEST and the quest-sys crate.
- Stabilizer simulation using Stim
- Coinflip simulation with customisable bias
- Classical Replay, for running pre-recorded measurements without direct simulation
- Quantum Replay, for running pre-recorded measurements with postselection-based simulation
Error models that are currently provided include:
- An 'ideal' error model which adds no noise to simulations
- A depolarizing error model which adds noise to qubit initialisation, measurement, and single- and two-qubit gates
And we offer two example quantum runtimes, including:
- Simple, which executes the program as-is, without any modifications
- SoftRZ, which elides Z rotations through RXY gates, providing the same observable behaviour with fewer quantum operations
Usage example
Although examples are provided in our tests folder, here is a quick walkthrough to get you started with Selene, HUGR and Guppy.
- First, we define the guppy program that we're interested in emulating:
from guppylang import guppy
from guppylang.std.quantum import *
from hugr.qsystem.result import QsysShot, QsysResult
@guppy
def main() -> None:
# allocate 10 qubits
qubits = array(qubit() for _ in range(10))
# prepare the 10-qubit GHZ state (|0000000000> + |1111111111>)/sqrt(2)
h(qubits[0])
for i in range(9):
cx(qubits[i], qubits[i+1])
# measure all qubits
ms = measure_array(qubits)
# report measurements to the results stream
result("measurements", ms)
compiled_hugr = main.compile()
- Then we compile the resulting HUGR Envelope to LLVM IR or bitcode using the HUGR-QIS compiler
from selene_sim import build
runner = build(compiled_hugr)
- Then we can utilise
runorrun_shotson the resulting selene instance, choosing a simulator (in this case Quest or Stim) and an error model (in this case DepolarizingErrorModel) to run the program.
from selene_sim import Quest, Stim
# run a single shot with Quest, the statevector simulator
shot = QsysShot(runner.run(simulator=Quest(), n_qubits=10))
print(shot)
# run a single shot with Stim, the stabilizer simulator
shot = QsysShot(runner.run(simulator=Stim(), n_qubits=10))
print(shot)
# run_shots runs efficient multi-shot simulations
# n_processes provides multi-processing across shots
# deterministic results can be achieved by providing a random seed
shots = QsysShot(runner.run(
simulator=Stim(random_seed=5),
n_qubits=10,
n_shots=100,
n_processes=8
))
print(shots)
- As well as simulators, we can customise the emulation by providing an error model, such as the depolarizing error model:
from selene_sim import DepolarizingErrorModel
error_model = DepolarizingErrorModel(
random_seed=12478918,
p_init=1e-3,
p_meas=1e-2,
p_1q=1e-5,
p_2q=1e-6,
)
shots = QsysResult(runner.run_shots(
simulator=Stim(
random_seed=10
),
error_model=error_model,
n_qubits=10,
n_shots=20,
n_processes=4,
))
print(shots)
- And/or a runtime, such as the SoftRZRuntime, which elides physical RZ gates through subsequent RXY gates:
from selene_sim import SoftRZRuntime
shots = QsysResult(runner.run_shots(
simulator=Stim(),
runtime=SoftRZRuntime(),
error_model=error_model,
n_qubits=10,
n_shots=20
))
print(shots)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file selene_sim-0.2.0-py3-none-win_amd64.whl.
File metadata
- Download URL: selene_sim-0.2.0-py3-none-win_amd64.whl
- Upload date:
- Size: 2.8 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
08fe83810cb5269fb4bb48c77b04b466e9db3cba7c2fd775c2218ce88664d1ff
|
|
| MD5 |
4dace668a8250f14451bcee168cfa53b
|
|
| BLAKE2b-256 |
7e4efc6de0406c6bec4bd85f454ddae8eb2edaa86e897a1482b698777549f817
|
File details
Details for the file selene_sim-0.2.0-py3-none-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: selene_sim-0.2.0-py3-none-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 4.4 MB
- Tags: Python 3, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dbd735e70ed19b1480bba12381dcaa92b65926537dd4092cb18067e8f1a5fde6
|
|
| MD5 |
5ed075c9f5dddf01c2af01ed4f90eff7
|
|
| BLAKE2b-256 |
497c76f3c3a6a69c3b3c612b00a29a828f9b8e407ea88b90c08bb24e2d018238
|
File details
Details for the file selene_sim-0.2.0-py3-none-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: selene_sim-0.2.0-py3-none-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 4.4 MB
- Tags: Python 3, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f37c9fe4d6fa39562340b26b3c30a952ee6ff3f275e7806fcdf17b19993fc93f
|
|
| MD5 |
bee672f008933aff6a35578bc6dce179
|
|
| BLAKE2b-256 |
09b8c6c469ec54c6165a50ae31bdc9460ea38b08eb34df117256bbed575ff461
|
File details
Details for the file selene_sim-0.2.0-py3-none-macosx_11_0_x86_64.whl.
File metadata
- Download URL: selene_sim-0.2.0-py3-none-macosx_11_0_x86_64.whl
- Upload date:
- Size: 4.0 MB
- Tags: Python 3, macOS 11.0+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aef5b964a7b982929916be89c20389120fd90f16cb7e9066e2a6ccc7ef3554c4
|
|
| MD5 |
46413e06f265984f244275f4d21e3c4e
|
|
| BLAKE2b-256 |
5ddba7face0ce9f3af6cf5709594e7146d6d05c2ca13576408ed17826e10d105
|
File details
Details for the file selene_sim-0.2.0-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: selene_sim-0.2.0-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 3.9 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
75d38ae3db242e6f8563b936c31cc4969bea53364f65510777c011a4ed5b7221
|
|
| MD5 |
4e094845ced662ac4a206ba89a20f3ac
|
|
| BLAKE2b-256 |
918211aee883ca841e4af99b2ecb8dfff329460df35f74ca7c64d2755b6ccddc
|