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 = guppy.compile(main)
  • 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.0rc3-py3-none-win_amd64.whl (2.8 MB view details)

Uploaded Python 3Windows x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ x86-64

selene_sim-0.2.0rc3-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.0rc3-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for selene_sim-0.2.0rc3-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 1a151064d5f0d33e148089c9b72595ff8e07d6632f98b5264afa5c6724ead37d
MD5 0fa716e667c217a2bd3513cf053d15c6
BLAKE2b-256 00173bb1383ccb84a13c2eca2f55bf6d19bd54a55a7f14dd48fc1775f6e00c65

See more details on using hashes here.

File details

Details for the file selene_sim-0.2.0rc3-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for selene_sim-0.2.0rc3-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5bc5e62de5dc1d7ee27b3789bd4df8455d1ed1d349232d977730c06af93728c7
MD5 d6e8373378cb6ae1cb389d67e4c39516
BLAKE2b-256 35674b1ddcf25001f7c6ad0dafa4369038ad6dee2156911171e7cfba02050da5

See more details on using hashes here.

File details

Details for the file selene_sim-0.2.0rc3-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for selene_sim-0.2.0rc3-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f10d679b5994686e4c60637cdcd80f720273592c3001350c3a0227cbae22dea0
MD5 308c7d8235895783716b65dd164dc2ae
BLAKE2b-256 c6ffe2ffec49fb8bc129ea19162f52ddb0c05cec00c95bcb17335150337fda2f

See more details on using hashes here.

File details

Details for the file selene_sim-0.2.0rc3-py3-none-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for selene_sim-0.2.0rc3-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 bf4d580e3b0f687b2ea8a4e87a79018238dab30d1d8b70cfe4efa2212ece1db7
MD5 6d5466dbeeb3a02b8942adbdbad073be
BLAKE2b-256 dc298d18b1234e35d90a15754afc51b03437368e81e8cd65eec956eb059d1341

See more details on using hashes here.

File details

Details for the file selene_sim-0.2.0rc3-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for selene_sim-0.2.0rc3-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8dcebf6dbdcedbf00ccde8a44b343077a26fdb71d12c20806358bae4fae6f15b
MD5 d72e3ea3147b1ceb08bcb3927112f988
BLAKE2b-256 603571a9062f740f7c7b124abb234e76467749fcd6e2acbdaffa0264d8c10692

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