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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ x86-64

selene_sim-0.2.4-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.4-py3-none-win_amd64.whl.

File metadata

  • Download URL: selene_sim-0.2.4-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.4-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 9befefd7a741b93d88c898da8572d72a966f8463b2aa694afb7462e0502770ab
MD5 32544a8744c895f2863654a092e4edb8
BLAKE2b-256 ce1e1b44105b5640efe99d39721e2b52e90b1c4bb3e9bc879cb119b22fed407e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.4-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f11980acf1118d231732476c493896b9f50d05bb67486a6c9a1744132852b4c7
MD5 4b0bb266360bf355ede46022da7e4479
BLAKE2b-256 e2de4620d58b7199fd9fae24edacff8ca52c85f5d57a7485a3686625a5a3ce49

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.4-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1034c96daa00c124e6ebd39cb653c37f75db91f1346b7b23f9add200e193d5a7
MD5 e87e432b4f90f0123962dac32e812f45
BLAKE2b-256 f8ba8453294026e4001197db81287f7e0efff251adaf34e98adc1d5852d4ece0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.4-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 bac4007af858b186cb407acedd8e1fe1e1627eb9a5e6a711dd471a238becc686
MD5 586050a2aa97e150e4d717cbff002c50
BLAKE2b-256 9e4fe913f4fe044871d8c2375140902a89e2e264b728c67357f2f5c8a68b56dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.4-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f3796a72c55806bc1e8162f577d29da6804bec21b0fd9e70ae320a5d087395c3
MD5 e76776773b367057adab5c601836a8cf
BLAKE2b-256 bdf00e658a219f8886b1b5d36b1152405699c4fb6e764fd34f1932a373ccd785

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