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

Uploaded Python 3Windows x86-64

selene_sim-0.2.11-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.11-py3-none-manylinux_2_28_aarch64.whl (4.3 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ x86-64

selene_sim-0.2.11-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.11-py3-none-win_amd64.whl.

File metadata

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

File hashes

Hashes for selene_sim-0.2.11-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 53525f3e69c6e58407cec7be402b4816378f56d5ed056eb1f7beb702a8690c40
MD5 ab14eb1709aa480e053ae903309fec83
BLAKE2b-256 ed13e6e0b62f5b87c2f499efe156e897259257e299490d1b691671086ec38884

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.11-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 74c35f81f6ac94c23da43ba99bf74631e1ee60bf15d5ffaeb3dd85567548fd39
MD5 fb3c8792cf8a79fc80c7696be2cfcbfc
BLAKE2b-256 258b341d89d9617d06897816a815a761dc3061f2920541debe08391ee5e64ac7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.11-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7d9054414032ddc5f02440f7d8e4b5ecf06b4f7f5cc261702e6880bd01af6509
MD5 98bce6a37d4e5080023cab0e82a1c346
BLAKE2b-256 7a6617a979c51aa687385635456144ffa9121ba49dfa7312480c78c3efd09cdf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.11-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 6a27d132cb74b86bf204982ef8b35b8a6d9b977c9f9c26dfa9559f8d5e3cd8d1
MD5 f95b978a99518bddcedc65158bc8c5b1
BLAKE2b-256 7b3271ae75fcb7bdded52c887594d03a5ee86c57d10721ea19f004120ca19844

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.11-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d45ee0cda11082c9e765bb7b6251c8dad509865ab924866e851fc76def890747
MD5 1a46d6ea0234c6782ef1ae2798796572
BLAKE2b-256 d45ec8741fa33dc598ba8aca163b375161a9d38127b798b097dab6bb03d192b2

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