Skip to main content

Quantinuum's open source emulator for quantum computation

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.3.0a1-py3-none-win_amd64.whl (10.6 MB view details)

Uploaded Python 3Windows x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ x86-64

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

Uploaded Python 3macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: selene_sim-0.3.0a1-py3-none-win_amd64.whl
  • Upload date:
  • Size: 10.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.3.0a1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 c02f78c948cf7d07a4e38ae15052a8360a3ecab906458da010a65b195a36e9fc
MD5 c9bb934fa476c84e11e8dd537cf73834
BLAKE2b-256 3cce0dfda225153a0e691f6002411bb1138312aeeb4105ac30ae5275a74d3adc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.3.0a1-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 29f1a258be41ac4cb0a239721766009ffc48f0c9fca5b4680ea1ae73d35a6774
MD5 4e06bc6a646fa0c0bcb82838e6421e59
BLAKE2b-256 6d867e3889995deac2102fcbdb7079421f5cbbdbf79ad9cba2915d7eaef1b0d7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.3.0a1-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 745cb0d775e3fdf1361d8a18074c79d7eb93c7647e5e5142b096aeb1f576f2f6
MD5 0392eb47d4d5b61d9dfbf4c6462e856a
BLAKE2b-256 eb948ed7a5becf2f34a6412524a73a3fd6c962994029ef282e3690f5314f7ce7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.3.0a1-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 340d5288d964089e37f8217680c9042565049a46cf2d4aa182a2f2be61c9c0ad
MD5 40ba216a523e83546a4a6366f26c5225
BLAKE2b-256 3817679b1c59276e2fd01e68e3f46104f1c0f7a9d3c67b21c96475f7db021746

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.3.0a1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4eacf8552dfd9d29acdd9ecdaadacd505fe58b8ee0aa1c9f31729205a6dde0cc
MD5 dee7377b88e097a2a814942c0b77c817
BLAKE2b-256 680f7fd1537cb8cdef177a753c788006ea4e0514890ccaa52569729d209516ba

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