Skip to main content

Selene Logo

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 run or run_shots on 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)

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

selene_sim-0.3.0-py3-none-win_amd64.whl (11.3 MB view details)

Uploaded Python 3Windows x86-64

selene_sim-0.3.0-py3-none-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

selene_sim-0.3.0-py3-none-manylinux_2_28_aarch64.whl (5.2 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

selene_sim-0.3.0-py3-none-macosx_11_0_x86_64.whl (5.3 MB view details)

Uploaded Python 3macOS 11.0+ x86-64

selene_sim-0.3.0-py3-none-macosx_11_0_arm64.whl (5.1 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

Details for the file selene_sim-0.3.0-py3-none-win_amd64.whl.

File metadata

  • Download URL: selene_sim-0.3.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 11.3 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for selene_sim-0.3.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 7ebc929ba6e3560f78889981a6d9043df358875f94c66a3c28ea180ca5801489
MD5 5fdadf0c56dc9838b05aa38e2185e293
BLAKE2b-256 321bedd341e2a307a594c51bb4c072137c4b02bb00effe38dd28429fa48e82f4

See more details on using hashes here.

File details

Details for the file selene_sim-0.3.0-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for selene_sim-0.3.0-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3534150c0a511bcaf3735b0bd285c11891f074f7d4d5e0a684ad45f166a3449e
MD5 174817a39db013fad7aae779b69a4811
BLAKE2b-256 13c8f828875de20b60c9b24846f7ec3e076ee9a75ec4fe8aa1bdfd81d336d8b8

See more details on using hashes here.

File details

Details for the file selene_sim-0.3.0-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for selene_sim-0.3.0-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0f5de0d98fe28fcf7f036fb86b57054b1c18026a7db79f37496d2d2299fa759c
MD5 67bbcdc7fd61c8368ba7b7663f1c29d9
BLAKE2b-256 c4b7862cbf7166c78a4c94586eb44ef49e4f068b38a6a3354d54e8dbef5f8b54

See more details on using hashes here.

File details

Details for the file selene_sim-0.3.0-py3-none-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for selene_sim-0.3.0-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 94ad3a9a3c44869ed0cce40af975339dadeffb1bf451b4f2fd523a4509430f91
MD5 d5745635377ad66dd3c8ead65399b712
BLAKE2b-256 9128dbbb558e5940a7ddb7089b2784c3b41f9ec1aed71ac3bdc02c29748e9063

See more details on using hashes here.

File details

Details for the file selene_sim-0.3.0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for selene_sim-0.3.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 20b2627120947b2696b290afcf3a6bc3475c80cc473c4894d14b06850462827e
MD5 9f02e7d3312815b0a03741ef80f47ddf
BLAKE2b-256 72db85948e48627510b22c8097690595a0a446c219fdc930c9fd19fb173b3dce

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page