QuantumACES.jl

Public functions

QuantumACES.QuantumACESModule

QuantumACES.jl is a package for designing and simulating scalable and performant Pauli noise characterisation experiments for stabiliser circuits with averaged circuit eigenvalue sampling (ACES). It is particularly interested in characterising the noise associated with fault-tolerant gadgets in the context of topological quantum error correcting codes, such as surface code syndrome extraction circuits.

source
QuantumACES.AbstractCircuitType
AbstractCircuit

Circuits should be stored in a subtype T <: AbstractCircuit.

Circuits should be generated by a method of get_circuit, and prepare_circuit is a helpful function for writing such a method.

To specify the preparation of sign configurations for Pauli eigenstates, either provide the partition field or modify get_experiment_layers.

Necessary fields

  • circuit_param::AbstractCircuitParameters: Circuit parameters.
  • circuit::Vector{Layer}: Circuit arranged by the tuple.
  • 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 layer indices of the circuit, which become meaningless and are removed the circuit is arranged by the tuple.
  • 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}: Gates in the original circuit, which includes noisy preparations if add_prep and noisy measurements if add_meas.
  • gate_index::Dict{Gate, Int}: Index of the gate eigenvalues for each gates in the original circuit.
  • N::Int: Number of 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.
  • add_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 add_prep and add_meas are true.
  • add_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 add_prep and add_meas are true.

Optional fields

  • partition::Tuple{Vector{Int}, Vector{Int}}: A partition of the qubits into two sets such that two-qubit gates act only between the sets, which allows for easy preparation of sign configurations for Pauli eigenstates; for example, data and ancilla qubits for a syndrome extraction circuit.
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 type, or a subtype T <: AbstractCircuit.

Necessary fields

  • layer_time_dict::Dict{Symbol, Float64}: 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 get_gate_probabilities, which generates Pauli error probabilities for the supplied gates according to some supplied noise parameters.

Necessary fields

  • noise_name::String: Name of the noise model, which should implicitly describe parameter settings.
source
QuantumACES.AbstractScalingDataType
AbstractScalingData

Scaling data for the figure of merit should be stored in a subtype T <: AbstractScalingData.

Necessary fields

  • circuit_param::AbstractCircuitParameters: Circuit parameters.
  • noise_param::AbstractNoiseParameters: Noise parameters.
  • tuple_set::Vector{Vector{Int}}: Set of tuples which arrange the circuit layers.
  • tuple_set_data::TupleSetData: TupleSetData object that generates the tuple set.
  • shot_weights::Vector{Float64}: Shot weights for each tuple in the set, which add to 1.
  • ls_type::Symbol: Type of least squares estimator for which the scaling is calculated.
source

Private functions