Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

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.0a2-py3-none-win_amd64.whl (11.3 MB view details)

Uploaded Python 3Windows x86-64

selene_sim-0.3.0a2-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.0a2-py3-none-manylinux_2_28_aarch64.whl (5.2 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ x86-64

selene_sim-0.3.0a2-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.0a2-py3-none-win_amd64.whl.

File metadata

  • Download URL: selene_sim-0.3.0a2-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.0a2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 a051e2f6445a581812aff70ee3aad06eca4994f2aca5dd7b56d38adca6677276
MD5 9762a8e45462dab77d818407685a9e9d
BLAKE2b-256 f0a549e8bfcab422c51589818c3d39b2964e17f63f4670b1cc2b88d98aa3aac3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.3.0a2-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cd69a1046918a1b953fa56f00088f9cbb6bb163ebd101ea14d9e60ab638ad189
MD5 1841b9015ab6f07571d0ef14f77cf5af
BLAKE2b-256 22b63e0ea2ccb2c636a62634bc66781ca1cf7de2a5eaeced246cfccc60f5bcdc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.3.0a2-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 07a4014cfd3c4928cfdae72b0961daf36ed8409ad4b45445c54b0fea655ef98d
MD5 7155aa5886ef84fbde0f5ed000f7d189
BLAKE2b-256 64da64fce3d14d278d8cc8929a67f6caa5dbc06e34020273432df4c1c2e576d3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.3.0a2-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 6b092404dd751b3583d575c04c593d44e6df2231f336588b0902ccbef47ef4a6
MD5 27f1c423f73e78d43ac59b9fabf0d4e2
BLAKE2b-256 45a09b68aa051942e1c0bd47c66c82daaf9b5fc1297bcfa4be55f11ca3b49d39

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.3.0a2-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 208864a46b190d89032153cf1653b42178bf7f3e3e9e59551f082dcadf0c940e
MD5 876caf4c285a3dbff112283c93b3f5ce
BLAKE2b-256 542c98835dc3c61e00a208e06297701cd60e78183e3d36216d98660750ac109a

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