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.2.18-py3-none-win_amd64.whl (11.1 MB view details)

Uploaded Python 3Windows x86-64

selene_sim-0.2.18-py3-none-manylinux_2_28_x86_64.whl (5.3 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

selene_sim-0.2.18-py3-none-manylinux_2_28_aarch64.whl (5.1 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ x86-64

selene_sim-0.2.18-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.2.18-py3-none-win_amd64.whl.

File metadata

  • Download URL: selene_sim-0.2.18-py3-none-win_amd64.whl
  • Upload date:
  • Size: 11.1 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.2.18-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 85b2c3a7c66c53f49e86acbce11d748ac1cb319798115d1db38cebf9195bc361
MD5 44b3ce8b7304f9417f96cb04c4bc1d74
BLAKE2b-256 c935da9fe912d28a237d46694cc579e2b8a2f91c5daf1c0495a4cb9a2220eb11

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.18-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 927b40f652b98d8bdd33929e23d09efbff2f34604703443757a214469cbbd9ce
MD5 31a3922459a111347ffaeac1f046cc8e
BLAKE2b-256 02cc10ad1b37a5110a6398716d3add43f0446de90d482510c435aabc2d1146ea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.18-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0182693e7ec37efd3d9c33abaad43a79ff0fe5a4f069eb0dd46bd0a1ede73543
MD5 6ddd3f33994edcf68346c6091967eb96
BLAKE2b-256 4d3f51b82e5aaf62bbce7aabaf888291f0b15046059608db6a9a5a0410056e0d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.18-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 34dd5117bb0c8216e8a73c17c1b19dc29188e9ce6b8e732a67d5b6dc57ebef44
MD5 136d09f7975782071d1c13ca772ba1c8
BLAKE2b-256 62165ca2f74ad891b5498b50e64cb0d8626f0505dd293c0166bba775cec3078e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.18-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 87efc24e06943fd4aace2f0121f3ce2cb8260b2d2ede8b3a5568bd3130f060cf
MD5 dc2c9c99ae0e3d04ae3ac80fe57b2fa6
BLAKE2b-256 c31fdafef91e217d02805ee5086831d978dd34beabb66734d102e9222dd3b68c

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