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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ x86-64

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

File metadata

File hashes

Hashes for selene_sim-0.2.0rc1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 537f49ca4fa25d53a3c49c58d7894879f4040ad18f0252e010c3733b71926abd
MD5 c9d3d9a76da5ead447eed24803ab7f72
BLAKE2b-256 fe94d23c470245d5af10ad11aa9d142ad92bd4e27550a0d9eb9ba3ec73c82a4c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.0rc1-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5f318ec65400fcabf71ea32224417865edb4cba90771da147193fea95f677a89
MD5 52993d3b1459b0829674d624247aec95
BLAKE2b-256 2f3a7a8b2a6a8ac9933479dc0a14bffb8ecffb07f11994992bc6a9655edbf35f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.0rc1-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 65b40a2481c048b1c78c7004eb1067ba3536a506dbfc24af067182e51ea63fa5
MD5 cfc2f1bac89710093a85397b0aeda105
BLAKE2b-256 802b0d320d6c63b97d5e230b99df47acf711cdee69108faab6d2e876ccf55ff4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.0rc1-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 e008edfdb846c39ad3836a3241cb46d1822f165dc17eea402c654106bb9b2aff
MD5 bad4307e27ebf44968e82859ccea6d4e
BLAKE2b-256 5e7157aa66969c18da9948906819c49d324b49ed8f69b241f43fb787cd182aea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for selene_sim-0.2.0rc1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 86a727410f3164cd5ef6dd87d4da295e9c4171b10675c002cda20d2b4edc4ef6
MD5 a478985f1afeb5716f90b2d196a86774
BLAKE2b-256 81823f012ea7c1eeb38b264245e2f284f060a36aea5accbf50da9d61071d8c39

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