QuantumACES.jl

Public functions

QuantumACES.QuantumACESModule

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.

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.

source
QuantumACES.AbstractCircuitType
AbstractCircuit

Circuits should be stored in a subtype T <: AbstractCircuit, and generated by a method of get_circuit.

Necessary fields

  • circuit_param::AbstractCircuitParameters: Circuit parameters.
  • circuit::Vector{Layer}: Circuit.
  • circuit_tuple::Vector{Int}: Tuple which arranges the order of the circuit layers; this is initialised as trivial.
  • qubit_num::Int: Number of qubits in the circuit.
  • unique_layer_indices::Vector{Int}: Unique non-measurement gate layer indices of the circuit.
  • layer_types::Vector{Symbol}: Types of the layers in the circuit, used for layer times and dynamical decoupling.
  • layer_times::Vector{Float64}: Times taken to implement each layer in the circuit, as well as measurement and reset.
  • gates::Vector{Gate}: Gates in the circuit arranged by the tuple.
  • total_gates::Vector{Gate}: Total gates in the circuit, including preparations if noisy_prep and measurements if noisy_meas.
  • gate_index::Dict{Gate, Int}: Index of the gate eigenvalues for each gate in the original circuit.
  • N::Int: Number of gate eigenvalues.
  • marginal_gate_index::Dict{Gate, Int}: Index of the marginal gate eigenvalues for each gate in the original circuit, where the marginals are determined by the Pauli orbits specified in get_orbit_indices_dict.
  • N_marginal::Int: Number of marginal gate eigenvalues.
  • N_relative::Int: Number of relative gate eigenvalues.
  • noise_param::AbstractNoiseParameters: Noise parameters.
  • gate_probabilities::Dict{Gate, Vector{Float64}}: Pauli error probabilities for each gate, stored as a dictionary.
  • gate_eigenvalues::Vector{Float64}: Eigenvalues for each gate, stored as a vector whose order is determined by gate_index.
  • marginal_gate_probabilities::Dict{Gate, Vector{Float64}}: Marginal Pauli error probabilities for each gate, stored as a dictionary.
  • marginal_gate_eigenvalues::Vector{Float64}: Marginal eigenvalues for each gate, stored as a vector whose order is determined by marginal_gate_index.
  • relative_gate_eigenvalues::Vector{Float64}: Marginal eigenvalues for each gate whose marginal eigenvalues can be estimated to relative precision, namely those which are not preparation or measurement, stored as a vector whose order is determined by marginal_gate_index.
  • noisy_prep::Bool: Whether to treat preparations as noisy and characterise the associated noise, which should default to false; a full-rank design cannot be produced if both noisy_prep and noisy_meas are true.
  • noisy_meas::Bool: Whether to treat measurements as noisy and characterise the associated noise, which should default to true; a full-rank design cannot be produced if both noisy_prep and noisy_meas are true.
  • extra_fields::Dict{Symbol, Any}: Extra data for the circuit, including code parameters for syndrome extraction circuits stored as a :code_param field which is a CodeParameters object.
source
QuantumACES.AbstractCircuitParametersType
AbstractCircuitParameters

Circuit parameters should be stored in a subtype T <: AbstractCircuitParameters.

Then add a method to get_circuit that generates a circuit according to these parameters. Such a circuit should either be a Circuit object, or a subtype T <: AbstractCircuit.

Necessary fields

  • params::Dict{Symbol, Any}: Dictionary of the circuit parameters, which should in particular include a layer_time_dict field, which is a dictionary of the times taken to implement the different types of layers in the circuit, including the time for measurement and reset.
  • circuit_name::String: Name of the circuit, which should implicitly describe parameter settings.
source
QuantumACES.AbstractNoiseParametersType
AbstractNoiseParameters

Noise parameters should be stored in a subtype T <: AbstractNoiseParameters.

Noise models should be generated by a method of init_gate_probabilities, which generates Pauli error probabilities for the supplied gates according to some supplied noise parameters.

Necessary fields

  • params::Dict{Symbol, Any}: Dictionary of the noise parameters.
  • noise_name::String: Name of the noise model, which should implicitly describe parameter settings.
source

Private functions