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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

selene_sim-0.2.17-py3-none-macosx_11_0_x86_64.whl (5.0 MB view details)

Uploaded Python 3macOS 11.0+ x86-64

selene_sim-0.2.17-py3-none-macosx_11_0_arm64.whl (4.8 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: selene_sim-0.2.17-py3-none-win_amd64.whl
  • Upload date:
  • Size: 10.4 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.17-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 c04ffaf2b0c7a0027f04d9a482f30d93115d4bdb717067b767034599cefba6ba
MD5 953b14902e8307804e2625fe360bc7a7
BLAKE2b-256 643e76a082d913893ed0ec8e9de77440a8614a00e2d8a90eab9b9802aa04ad39

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.17-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f756cc4e8cf44f294bdbbec4043bd0e30b581a0bfad7245993dec2b1471ef073
MD5 d23a41e163e84cd0cc2378d2e1c38590
BLAKE2b-256 dfa62c3ee16edcbb9911812208076b5db425a77cc79c889b8ba1a5a7dda9b326

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.17-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 51156ce42355cde4b87744f394790742ddeb9bf5636ecb2e4f39ec4f6c71a961
MD5 334914aedad5cc951fbc9765725bdcd9
BLAKE2b-256 e80fb9e80d361e17429aa34bb8b7158012a12310f35058096e149583aa364549

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.17-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 d32506e622ee5e3cbeed7fa52a026c2c822a083d4375fd15630e0d1c87847c4e
MD5 8dd0c3f0ffcd78323f4ad0ab2ec452c1
BLAKE2b-256 0180e052f39a33393e48f11f09acc74136e1c2514552c00628b1d0fb36a901b6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.17-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 08ff9b115bd9209ac4c8c01e6feae494aba0ab0b90d144e2f1e0285572121427
MD5 b80a723b7da762932400b52fa332101f
BLAKE2b-256 6a709107bf3a7234d3e7358c05b374333c4ec6a9ac795eed941131b2a67756e6

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