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.0rc2-py3-none-win_amd64.whl (2.4 MB view details)

Uploaded Python 3Windows x86-64

selene_sim-0.2.0rc2-py3-none-manylinux_2_28_x86_64.whl (3.9 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

selene_sim-0.2.0rc2-py3-none-manylinux_2_28_aarch64.whl (3.9 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

selene_sim-0.2.0rc2-py3-none-macosx_11_0_x86_64.whl (3.5 MB view details)

Uploaded Python 3macOS 11.0+ x86-64

selene_sim-0.2.0rc2-py3-none-macosx_11_0_arm64.whl (3.4 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

Details for the file selene_sim-0.2.0rc2-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for selene_sim-0.2.0rc2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 9edbc5ee67154591a47f3640aaab61be46e75ec1e96852b1629eccad1d8872ef
MD5 6d778ef846b5018720dca6374952dd90
BLAKE2b-256 8a4987aa4985da3e7dbbbb0dda7ead522a79c44b1f46687bba2ec1abad76786a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.0rc2-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 850429c234b8ded5061f39876f41939559179223114c602587faef58c74129ac
MD5 975166a6b087c6500abe45e4816a6d29
BLAKE2b-256 81eebaef45596b9449ecde82f1454aad1618a3ee2398d9f4a8deb8b77bd2e4ae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.0rc2-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 70f7ef0103e2869ef7d15e94c219a40678feb2fc2542d100fae6603a41829550
MD5 50e4b1bbf1227fb0d52432c85b501a55
BLAKE2b-256 29c0464122c909998f6ac76c30e3567bc48fea5813dd9b8d0c9a702ab7228ab4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.0rc2-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 9f32aa692a6fa3a8a26743761490cb389571aa869414101c441d1c6fdb1fcc5e
MD5 72db3e21fd70add81176fee19e140193
BLAKE2b-256 546b8633c81dae1639c92dbf33d957db7961443adbe0d2b1171785020cbf2816

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.0rc2-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2c5a7ed34b59c547bc93053c8be22d19f16cca388ff1ca239ed050f2040a3e04
MD5 47e4b6d303191bc7f9c415b4f28955c7
BLAKE2b-256 2fb8f940f54cbf47e7d4564833a086cc508d616de0f38c796f2ebe4450c3f9c7

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