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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ x86-64

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

File metadata

File hashes

Hashes for selene_sim-0.2.0rc4-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 918bcda82e8a01060f0ced4bc084426dbdfb10e9e3d125009a7c77380832444b
MD5 bf6b4e7577667811af5db860eb296d45
BLAKE2b-256 5e5eceb92ac9087cb166ed93c179ed7eb2b95921c62a56c62d2854643edf1047

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.0rc4-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5bd872765057909f1936f3e28c20f3c5e7e8e4cc9d8da4ba34d8ef594d1ff206
MD5 f67608d7ff18f686fc59367f8b4f3690
BLAKE2b-256 32fc55e96336c93fdb7a79063e9ee5d6ada116870750ae6c2663e8f583a55c57

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.0rc4-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a22d4e65f1ced40a02771781fde09f0d3d99e21c262b32b51e4e38f678163201
MD5 473f79ebb16ac120f013c0f42975932e
BLAKE2b-256 912eaaba6a46ce7dbb99bb6b85561d3d769342f147d0ccc53cd7b3b798677e75

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.0rc4-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 0e7c3e244b5a7dc2cd0c3d7e5eeff5266703b1829f0b1951dec468fd7a9e7231
MD5 c4669bde7a88f97a4c9ea835fd44d0f1
BLAKE2b-256 f1c3bcdc26028186b483d9fcef2cbfb2cf6befc9bc6a90c4e4f20edec5aefd62

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.0rc4-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0f1a529d10beca93ead24d4b4eccd3e4018cb360fb19a787800db6208762b737
MD5 57c5c9e7f226b6e3eec670f38596f7a3
BLAKE2b-256 8ed1f7bfdfab3cfe295858dea423cd418d4fe68341c639d77eea2951fcedf93c

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