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

Uploaded Python 3Windows x86-64

selene_sim-0.2.13-py3-none-manylinux_2_28_x86_64.whl (4.2 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

selene_sim-0.2.13-py3-none-manylinux_2_28_aarch64.whl (4.1 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

selene_sim-0.2.13-py3-none-macosx_11_0_x86_64.whl (3.8 MB view details)

Uploaded Python 3macOS 11.0+ x86-64

selene_sim-0.2.13-py3-none-macosx_11_0_arm64.whl (3.7 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: selene_sim-0.2.13-py3-none-win_amd64.whl
  • Upload date:
  • Size: 8.9 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.13-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 cad7fa64a91d2b0a2b90ee87ee4ee5b016cad3a9720755b6386f8ccb91fe954d
MD5 681a00fdbfec0819902e55058cf468e1
BLAKE2b-256 35c55d326369f9695952f94dbf215f16b0e0164151e3b33062b64c952c0e896a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.13-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 462aab4384e1a9c39b6e6b350c581bc97159cabb42b4107efb3083e2d5ad3b96
MD5 01c5105b81f6b59f2d2b56991f2d6b5e
BLAKE2b-256 1dfe60c61a9116f6aa37766518f881c18afb630a61369326c88bf620c193810f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.13-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d8b9fe4e9480e48f549b5fdb11521946df28117578d57f404618108352eba6ff
MD5 ffaab22bd279979280830b0c431022f9
BLAKE2b-256 aec00d7fd02e43721185439dc5900885ad82be2e1e9e2b7a3ead0df62856b710

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.13-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 677c634b157d374d188600b221c4ddf20a4a61861ec05c8c31feb06ccc59bf0b
MD5 0e729b22315529fc0e971874c4856cba
BLAKE2b-256 6fe8d19055240dac113e02abcd947f3215df5b989f75f75ad66ee722824b6cc8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.13-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 731947866ba0578782b4ef8511dc05b5226215d7f36e48699ab1a7ca01317fb4
MD5 c6f517c5142c1cb6715120219ee6e829
BLAKE2b-256 df157f58330010c407dd5ebc57cbe5a2e72e14bbac380a6f68a78303bd3fe039

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