Skip to main content

Quantinuum's open source emulator for quantum computation

Reason this release was yanked:

The selene-core dependency is too loosely constrained, leading to errors when selene-sim tries to import selene-core.trace

Project description

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)

Project details


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

Uploaded Python 3Windows x86-64

selene_sim-0.2.14-py3-none-manylinux_2_28_x86_64.whl (4.7 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

selene_sim-0.2.14-py3-none-manylinux_2_28_aarch64.whl (4.5 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

selene_sim-0.2.14-py3-none-macosx_11_0_x86_64.whl (4.2 MB view details)

Uploaded Python 3macOS 11.0+ x86-64

selene_sim-0.2.14-py3-none-macosx_11_0_arm64.whl (4.1 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: selene_sim-0.2.14-py3-none-win_amd64.whl
  • Upload date:
  • Size: 9.6 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.14-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 4757accd938b7ed413635d5337337314c9bab390d3a4da05538a666fbbce50a2
MD5 2550dc16df4175d8163b5c8fa292bace
BLAKE2b-256 c580e2763921b650208ef1cb86e265a66f59073775d27f4926f040aa82642fae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.14-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 624aae5a101d2f638642d977fb4956bdf7e1d0cdcb5cffb918cda5de583cfb63
MD5 e26ff78884c895907704184b62fa35fc
BLAKE2b-256 b2e8dfe81a0860905880336e9b64dfc4f11b400cf3ce0a61f27b8a91d6c75d65

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.14-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1e6c0924841e543c6bdd78e29cab88275e69b3b2b9077224e306bfd3dc3bf2f7
MD5 6ddf529748427d128b4cf82a2fae7551
BLAKE2b-256 3448045b45d4041d88c27185bf0ccc7fb322fe0dd7e0d8ece287c35ccd17b50e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.14-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 8d85f7f7b635bdeb390385a96352969e42be6b1a60753ec3f2d9472e4359555e
MD5 9b0819894a24c33752a3383479d80080
BLAKE2b-256 7ffe5b26a1caad7514d3f36b4df42511869fc995348ddfe9fd851662b513d6ee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.14-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e6e9ace6b2b2fa18922220e532b1462862eeee36a7cd436dd97b0e65b773ecc8
MD5 75ae362d209d170d6164cef6b93991c6
BLAKE2b-256 892d5ba388d08e8b28bbda5b01a393800398db936232df9c81011ee7250864bd

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 Pingdom Monitoring Sentry Error logging StatusPage Status page