QuantumACES.jl
Public functions
QuantumACES.QuantumACES
— ModuleQuantumACES
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.
QuantumACES.AbstractCircuit
— TypeAbstractCircuit
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 ifnoisy_prep
and measurements ifnoisy_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 inget_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 bygate_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 bymarginal_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 bymarginal_gate_index
.noisy_prep::Bool
: Whether to treat preparations as noisy and characterise the associated noise, which should default tofalse
; a full-rank design cannot be produced if bothnoisy_prep
andnoisy_meas
aretrue
.noisy_meas::Bool
: Whether to treat measurements as noisy and characterise the associated noise, which should default totrue
; a full-rank design cannot be produced if bothnoisy_prep
andnoisy_meas
aretrue
.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 aCodeParameters
object.
QuantumACES.AbstractCircuitParameters
— TypeAbstractCircuitParameters
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 alayer_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.
QuantumACES.AbstractCodeParameters
— TypeAbstractCodeParameters
Code parameters for syndrome extraction circuits should be stored in subtypes T <: AbstractCodeParameters
, usually a CodeParameters
object.
QuantumACES.AbstractNoiseParameters
— TypeAbstractNoiseParameters
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.
QuantumACES.AbstractScalingData
— TypeAbstractScalingData
Scaling data for the figure of merit should be stored in a subtype T <: AbstractScalingData
.