Skip to main content

Quantinuum's open source emulator for hybrid 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.2.3-py3-none-win_amd64.whl (2.8 MB view details)

Uploaded Python 3Windows x86-64

selene_sim-0.2.3-py3-none-manylinux_2_28_x86_64.whl (4.4 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

selene_sim-0.2.3-py3-none-manylinux_2_28_aarch64.whl (4.4 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

selene_sim-0.2.3-py3-none-macosx_11_0_x86_64.whl (4.0 MB view details)

Uploaded Python 3macOS 11.0+ x86-64

selene_sim-0.2.3-py3-none-macosx_11_0_arm64.whl (3.9 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for selene_sim-0.2.3-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 9036ecbbb31bb886fb8742fd1efe9a770e8fae361168a7e2f496b19529068f03
MD5 61d86fe0e9a606502ca0dda009b64951
BLAKE2b-256 7eafc3bf6c25664b4c0bf0ce44ca88a96456dda4bc05598c9e165ac0a92cf57b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.3-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e40c4389d9f71abcf6ea83c0ac06621a126a003a9dce41ab35a0ba9e8a0eb088
MD5 0b21c2dec32f6e16257e87233b283171
BLAKE2b-256 cacc7ff5fbc4944b035d36faba1c9ddbe7232d57c5aa9b80f1e7bf833a943c57

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.3-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e4678d483cf2987a6015a1f1181b89dcd003abecc15a42e05d2e8271efbbe07d
MD5 a2443b54b2e77e5d3d616686b20a4370
BLAKE2b-256 da83d98486a91b85159e95affb7554b09a929c4276473aa14a0c94886c6fa64b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.3-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 ff1966cf5419a794c3674028525a263ebab60b93fe7bf07b045772381ddd09e4
MD5 dc43461c45181b9dd2f14528e2146cc7
BLAKE2b-256 893b588773ee2ea5306c982555e85e6602c55f98b1c4005a222027380bad56dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.3-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b5d76bfd0e2a95ffb79bde7dcb3cb189378ff4a110e949d58d2ebbc20673388a
MD5 2102cd88f4270e6c2890682bb5f37f82
BLAKE2b-256 2c8ecefad415691f8283777530af19ac7b417d588dcf92bd9a6d559f052f4692

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