QuantumACES.jl

QuantumACES.jl: design noise characterisation experiments for quantum computers - Published in JOSS (2025)

https://github.com/evanhockings/quantumaces.jl

Science Score: 98.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 4 DOI reference(s) in README and JOSS metadata
  • Academic publication links
    Links to: arxiv.org, joss.theoj.org
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
    Published in Journal of Open Source Software

Keywords

julia quantum quantum-computing quantum-error-correction

Keywords from Contributors

connectivity mesh

Scientific Fields

Engineering Computer Science - 32% confidence
Last synced: 6 months ago · JSON representation ·

Repository

Design scalable noise characterisation experiments for quantum computers

Basic Info
  • Host: GitHub
  • Owner: evanhockings
  • License: mit
  • Language: Julia
  • Default Branch: main
  • Homepage:
  • Size: 31.3 MB
Statistics
  • Stars: 27
  • Watchers: 1
  • Forks: 1
  • Open Issues: 0
  • Releases: 12
Topics
julia quantum quantum-computing quantum-error-correction
Created almost 2 years ago · Last pushed 6 months ago
Metadata Files
Readme Contributing License Citation

README.md

QuantumACES.jl

Stable Dev Build Status Coverage Aqua QA DOI Unitary Foundation

QuantumACES is a package for designing and simulating scalable and performant Pauli noise characterisation experiments for stabiliser circuits with averaged circuit eigenvalue sampling (ACES). It focuses on the context of quantum error correction and fault-tolerant circuits and, in particular, on the syndrome extraction circuits of topological quantum error correcting codes. It interfaces with Stim for stabiliser circuit simulation, PyMatching and BeliefMatching for decoding, and Qiskit for implementation on quantum devices.

Typical usage of QuantumACES involves first doing the following:

  • Construct the circuit and the noise model that you aim to characterise, either using existing functions or your own.
  • Optimise an ACES experimental design for noise characterisation of a small-scale instance of the circuit, typically according to a deterministic noise model, such as depolarising noise, with roughly the same average error rates as the noise you aim to characterise.

This subsequently enables:

  • Transferring the optimised experimental design to larger-scale instances of the circuit, including with different noise models.
  • Simulate noise characterisation experiments with ACES experimental designs, including at large scales, using Stim.
  • Calculating performance predictions for experimental designs at small scales and fitting the performance predictions, in particular for syndrome extraction circuits as a function of the distance of the underlying code, to predict performance at large scales.
  • Simulating memory experiments for syndrome extraction circuits using Stim, and then decoding with PyMatching or BeliefMatching with decoder priors informed by a range of noise models, including ACES noise estimates.
  • Creating Pauli frame randomised ACES experimental designs, exporting them to Qiskit circuits, and processing the results, enabling implementation on quantum devices.

Example usage

First parameterise a depolarising noise model with single-qubit gate infidelity r_1, two-qubit gate infidelity r_2, and measurement infidelity r_m, and a log-normal random Pauli noise model with the same gate infidelities and a standard deviation of the underlying normal distributions total_std_log, specifying the seed seed for reproducibility.

julia using QuantumACES r_1 = 0.05 / 100 r_2 = 0.4 / 100 r_m = 0.8 / 100 total_std_log = 0.5 seed = UInt(0) dep_param = get_dep_param(r_1, r_2, r_m) log_param = get_log_param(r_1, r_2, r_m, total_std_log; seed = seed)

Similarly, we create circuit parameters for the syndrome extraction circuit of a distance dist (rotated) surface code.

julia dist = 3 rotated_param = get_rotated_param(dist)

Next, we create versions of this circuit with both noise models. julia circuit_dep = get_circuit(rotated_param, dep_param) circuit_log = get_circuit(rotated_param, log_param)

Now we can generate an experimental design for this circuit.

julia d = generate_design(circuit_dep)

Alternatively, we can optimise an experimental design to improve its sample efficiency, configuring the optimisation with the parameters associated with OptimOptions.

julia d = optimise_design(circuit_dep; options = OptimOptions(; seed = seed))

There are a number of options that allow you to reduce the optimisation time. For example, we can disable cyclic coordinate descent optimisation of the circuit depth of repeated tuples in the design by setting max_cycles = 0. We can also allow the greedy search over ordinary tuples to terminate once they are left unchanged by single excursion in the search by setting excursions_unchanged = 1.

julia d = optimise_design( circuit_dep; options = OptimOptions(; max_cycles = 0, excursions_unchanged = 1, seed = seed), )

This experimental design can be transferred to the circuit with the log-normal Pauli noise model.

julia d_log = generate_design(circuit_log, d)

If we only wish to update the noise model, however, we can do this more efficiently.

julia d_log = update_noise(d, circuit_log)

Now we can simulate repetitions instances of ACES noise characterisation across a range of measurement budgets budget_set, which are measurement shots normalised by the time taken to perform the experiment.

julia budget_set = [10^6; 10^7; 10^8] repetitions = 20 aces_data = simulate_aces(d_log, budget_set; repetitions = repetitions, seed = seed)

We can compare the performance to predictions, although we note that the z-scores will not quite be normally distributed as the underlying distribution is not quite normal.

julia merit_log = calc_merit(d_log) pretty_print(aces_data, merit_log)

We can also simulate ACES noise characterisation at scale. First create a new design at a large code distance dist_big. Setting full_covariance to be false means only the diagonal circuit eigenvalue estimator covariance matrix is generated, which saves a substantial amount of time. It also prevents the design from attempting to perform generalised least squares (GLS) with the full covariance matrix, which can consume large amounts of memory at large scales, restricting the design to weighted least squares (WLS).

julia dist_big = 13 rotated_param_big = get_rotated_param(dist_big) circuit_big = get_circuit(rotated_param_big, dep_param) circuit_big_log = get_circuit(rotated_param_big, log_param) d_big = generate_design(circuit_big_log, d; full_covariance = false, diagnostics = true)

Now simulate this new design, setting split to be true to avoid memory issues by splitting projection of the gate error probabilities into the simplex across each of the gates, rather than doing all gates collectively.

julia aces_data_big = simulate_aces(d_big, budget_set; seed = seed, split = true)

Installation and setup

To install this package, run the following command in the Julia REPL.

] add QuantumACES

CAUTION: This package uses PythonCall to call a number of Python packages. If PythonCall and these packages are not configured correctly, associated functions will not work. The packages attempts to load the following Python packages:

  • Stim, installed with pip install stim.
  • PyMatching, installed with pip install pymatching.
  • BeliefMatching, installed with pip install beliefmatching.
  • Qiskit, installed with pip install qiskit.
  • Aer, installed with pip install qiskit-aer.

By default, PythonCall creates its own Python environment, but you may wish to configure it to use an existing Python installation.

One helpful method for managing Python versions is pyenv, or for Windows, pyenv-win; these are analogous to Juliaup for Julia. The following assumes you are using pyenv or pyenv-win.

On Windows, to instruct PythonCall to use the Python version set by pyenv, configure PythonCall's environment variables by adding the following to your ~/.julia/config/startup.jl file

julia ENV["JULIA_CONDAPKG_BACKEND"] = "Null" python_exe = readchomp(`cmd /C pyenv which python`) ENV["JULIA_PYTHONCALL_EXE"] = python_exe

On Unix systems, shell commands are parsed directly by Julia and appear to be unaware of your PATH variable, and I am not sure how to work around this. Therefore, you may need to manually supply python_exe for the Python version <version> as

julia python_exe = homedir() * "/.pyenv/versions/<version>/bin/python"

Attribution

The methods used in this package are based on arXiv:2404.06545 and arXiv:2502.21044, and they build on the original ACES protocol introduced in arXiv:2108.05803.

The code for arXiv:2404.06545 can be found in the scalable_aces folder on the scalable_aces branch.

The code for arXiv:2502.21044 can be found in the aces_decoding folder on the aces_decoding branch.

If you find this package helpful for your research, please cite it using the supplied CITATION.cff file, and consider citing the associated papers if appropriate. If you wish to contribute to this package, please refer to the CONTRIBUTING.md file.

Owner

  • Name: evanhockings
  • Login: EvanHockings
  • Kind: user

JOSS Publication

QuantumACES.jl: design noise characterisation experiments for quantum computers
Published
March 31, 2025
Volume 10, Issue 107, Page 7707
Authors
Evan T. Hockings ORCID
Australian Research Council (ARC) Centre of Excellence for Engineered Quantum Systems, School of Physics, The University of Sydney, Sydney, New South Wales 2006, Australia
Editor
Sophie Beck ORCID
Tags
Quantum computing Quantum error correction

Citation (CITATION.cff)

cff-version: "1.0"
authors:
- family-names: Hockings
  given-names: Evan T.
  orcid: "https://orcid.org/0000-0002-5890-5705"
doi: 10.5281/zenodo.15043208
message: If you use this software, please cite our article in the
  Journal of Open Source Software.
preferred-citation:
  authors:
  - family-names: Hockings
    given-names: Evan T.
    orcid: "https://orcid.org/0000-0002-5890-5705"
  date-published: 2025-03-31
  doi: 10.21105/joss.07707
  issn: 2475-9066
  issue: 107
  journal: Journal of Open Source Software
  publisher:
    name: Open Journals
  start: 7707
  title: "QuantumACES.jl: design noise characterisation experiments for
    quantum computers"
  type: article
  url: "https://joss.theoj.org/papers/10.21105/joss.07707"
  volume: 10
title: "QuantumACES.jl: design noise characterisation experiments for
  quantum computers"

GitHub Events

Total
  • Create event: 29
  • Commit comment event: 13
  • Release event: 8
  • Issues event: 2
  • Watch event: 13
  • Delete event: 18
  • Issue comment event: 18
  • Push event: 95
  • Pull request event: 35
Last Year
  • Create event: 29
  • Commit comment event: 13
  • Release event: 8
  • Issues event: 2
  • Watch event: 13
  • Delete event: 18
  • Issue comment event: 18
  • Push event: 95
  • Pull request event: 35

Committers

Last synced: 7 months ago

All Time
  • Total Commits: 106
  • Total Committers: 3
  • Avg Commits per committer: 35.333
  • Development Distribution Score (DDS): 0.038
Past Year
  • Commits: 69
  • Committers: 2
  • Avg Commits per committer: 34.5
  • Development Distribution Score (DDS): 0.029
Top Committers
Name Email Commits
evanhockings e****s@g****m 102
dependabot[bot] 4****] 3
Dilum Aluthge d****m@a****m 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 5
  • Total pull requests: 49
  • Average time to close issues: 2 months
  • Average time to close pull requests: 18 days
  • Total issue authors: 3
  • Total pull request authors: 5
  • Average comments per issue: 3.4
  • Average comments per pull request: 0.65
  • Merged pull requests: 40
  • Bot issues: 0
  • Bot pull requests: 10
Past Year
  • Issues: 2
  • Pull requests: 42
  • Average time to close issues: 4 minutes
  • Average time to close pull requests: 15 days
  • Issue authors: 1
  • Pull request authors: 3
  • Average comments per issue: 0.0
  • Average comments per pull request: 0.6
  • Merged pull requests: 35
  • Bot issues: 0
  • Bot pull requests: 9
Top Authors
Issue Authors
  • evanhockings (2)
  • Fe-r-oz (1)
  • JuliaTagBot (1)
Pull Request Authors
  • evanhockings (46)
  • dependabot[bot] (7)
  • github-actions[bot] (6)
  • DilumAluthge (2)
  • Fe-r-oz (2)
Top Labels
Issue Labels
Pull Request Labels
dependencies (7) github_actions (3)

Packages

  • Total packages: 1
  • Total downloads: unknown
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 7
juliahub.com: QuantumACES

Design scalable noise characterisation experiments for quantum computers

  • Versions: 7
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent repos count: 9.5%
Average: 24.0%
Dependent packages count: 38.5%
Last synced: 6 months ago

Dependencies

.github/workflows/CI.yml actions
  • actions/checkout v4 composite
  • codecov/codecov-action v4 composite
  • julia-actions/cache v1 composite
  • julia-actions/julia-buildpkg v1 composite
  • julia-actions/julia-docdeploy v1 composite
  • julia-actions/julia-processcoverage v1 composite
  • julia-actions/julia-runtest v1 composite
  • julia-actions/setup-julia v2 composite
.github/workflows/CompatHelper.yml actions
.github/workflows/TagBot.yml actions
  • JuliaRegistries/TagBot v1 composite