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

Uploaded Python 3Windows x86-64

selene_sim-0.2.2-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.2-py3-none-manylinux_2_28_aarch64.whl (4.4 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ x86-64

selene_sim-0.2.2-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.2-py3-none-win_amd64.whl.

File metadata

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

File hashes

Hashes for selene_sim-0.2.2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 f8f80368d9620d13dae58bd585e77b997e3b606cd53d2c2d61e904cf0f79f381
MD5 3a6263e21b3942d25f07a5b7bd0368ae
BLAKE2b-256 6444f825071816de360bc676f79211d798c956f034e5bb76eac283604a6b73ad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.2-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f582382c4a5217731e720823529c2476cd4c0cbdd4801bf1d9deea3d071486e3
MD5 4c14fc5cfdc991e20ede3a9e8828f27d
BLAKE2b-256 8939d879a5dd807f40e57296c068e579ca3c6e65b0abc97b233e6950687c787a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.2-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5e31f1ba36b3a09572a6903c240731224cf97c2a4c37cf63d98b182760960643
MD5 2e5c470a23c43b98541cdbfef209c624
BLAKE2b-256 b6d128926bd6661d7855352ff19734c62003253bc9758614ffcf79f342051a32

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.2-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 87a473aeb685977716216be06da7bd588b00b89eb57ce4b566d8430bc55f9cb4
MD5 5664d2bef45e7c6c21ef8b75c0546c53
BLAKE2b-256 08fdca36a059b8cca5082a7ebd7fe876b1bb0aef255e67ec2eeea284a684b8bd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.2-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 db64c06e5643adf9f476056d1eea0d01e7f455c4a0b290364e0c75852542d6b6
MD5 09ff29e508cdbfbb08aea33617302dc9
BLAKE2b-256 b6414130c913086d607ec4b2cd735efc9685ceea4f3b5bd811de7dbcafbbfab4

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