Quantum LDPC Parameters

A quantum LDPC code is a stabilizer code whose check weights and qubit degrees stay bounded as the length grows. That is a property of a chosen set of generators rather than of the code itself, so these functions all describe a particular presentation: adding a redundant generator changes the degrees without changing the code.

The accessors come in $X$, $Z$, and combined flavors for CSS codes, mirroring the classical LDPC degree machinery: degree distributions and their polynomials, maximum and minimum degrees, density, and regularity tests. For subsystem codes the gauge generators have their own weight functions, since the gauge group is what is actually measured.

quantum_LDPC_parameters collects the headline numbers in one call, which is usually what you want when comparing families.

CodingTheory.LDPC_codesMethod
LDPC_codes(
    S::AbstractSubsystemCode
) -> Tuple{LDPCCode, LDPCCode}

Return (X_LDPC_code, Z_LDPC_code), the classical LDPC codes formed from the two stabilizer sectors of S.

source
CodingTheory.X_LDPC_codeMethod
X_LDPC_code(S::AbstractSubsystemCode) -> LDPCCode

Return the classical LDPCCode whose parity-check matrix is the X-stabilizer matrix of S.

source
CodingTheory.X_column_boundMethod
X_column_bound(S::AbstractSubsystemCode) -> Int64

Return the maximum number of X-stabilizer generators acting on a physical qubit of S, or zero when S has no physical qubits.

source
CodingTheory.X_degree_distributionsMethod
X_degree_distributions(
    S::AbstractSubsystemCode
) -> Tuple{Vector{Int64}, Vector{Int64}}

Return (qubit_degrees, stabilizer_weights) for the X sector of S.

source
CodingTheory.X_densityMethod
X_density(S::AbstractSubsystemCode) -> Any

Return the fraction of entries in the X-stabilizer matrix of S that are nonzero.

source
CodingTheory.X_is_regularMethod
X_is_regular(S::AbstractSubsystemCode) -> Any

Return whether all columns of the X-stabilizer matrix have one common degree and all rows have one common degree.

source
CodingTheory.X_limitedMethod
X_limited(S::AbstractSubsystemCode) -> Int64

Return the larger of the column and row bounds for the X sector of S.

source
CodingTheory.X_qubit_degreesMethod
X_qubit_degrees(S::AbstractSubsystemCode) -> Vector{Int64}

Return the number of X-stabilizer generators acting on each physical qubit of S.

source
CodingTheory.X_row_boundMethod
X_row_bound(S::AbstractSubsystemCode) -> Int64

Return the maximum Pauli weight of an X-stabilizer generator of S, or zero when the X sector has no generators.

source
CodingTheory.X_stabilizer_weightsMethod
X_stabilizer_weights(
    S::AbstractSubsystemCode
) -> Vector{Int64}

Return a vector containing the Pauli weight of each X-stabilizer generator of S.

source
CodingTheory.Z_LDPC_codeMethod
Z_LDPC_code(S::AbstractSubsystemCode) -> LDPCCode

Return the classical LDPCCode whose parity-check matrix is the Z-stabilizer matrix of S.

source
CodingTheory.Z_column_boundMethod
Z_column_bound(S::AbstractSubsystemCode) -> Int64

Return the maximum number of Z-stabilizer generators acting on a physical qubit of S, or zero when S has no physical qubits.

source
CodingTheory.Z_degree_distributionsMethod
Z_degree_distributions(
    S::AbstractSubsystemCode
) -> Tuple{Vector{Int64}, Vector{Int64}}

Return (qubit_degrees, stabilizer_weights) for the Z sector of S.

source
CodingTheory.Z_densityMethod
Z_density(S::AbstractSubsystemCode) -> Any

Return the fraction of entries in the Z-stabilizer matrix of S that are nonzero.

source
CodingTheory.Z_is_regularMethod
Z_is_regular(S::AbstractSubsystemCode) -> Any

Return whether all columns of the Z-stabilizer matrix have one common degree and all rows have one common degree.

source
CodingTheory.Z_limitedMethod
Z_limited(S::AbstractSubsystemCode) -> Int64

Return the larger of the column and row bounds for the Z sector of S.

source
CodingTheory.Z_qubit_degreesMethod
Z_qubit_degrees(S::AbstractSubsystemCode) -> Vector{Int64}

Return the number of Z-stabilizer generators acting on each physical qubit of S.

source
CodingTheory.Z_row_boundMethod
Z_row_bound(S::AbstractSubsystemCode) -> Int64

Return the maximum Pauli weight of a Z-stabilizer generator of S, or zero when the Z sector has no generators.

source
CodingTheory.Z_stabilizer_weightsMethod
Z_stabilizer_weights(
    S::AbstractSubsystemCode
) -> Vector{Int64}

Return a vector containing the Pauli weight of each Z-stabilizer generator of S.

source
CodingTheory.check_weightsMethod
check_weights(
    S::AbstractSubsystemCode
) -> Union{Tuple{Int64, Int64}, NTuple{4, Int64}}

Return (X_row_bound, X_column_bound, Z_row_bound, Z_column_bound) for a CSS code S, or (row_bound, column_bound) for a non-CSS code.

source
CodingTheory.check_weightsMethod
check_weights(
    M::Union{Nemo.FqMatrix, Nemo.fpMatrix, Hecke.SMat, SparseArrays.SparseMatrixCSC}
) -> Tuple{Int64, Int64}

Return (row_bound, column_bound) for the matrix M.

source
CodingTheory.gauge_group_weightsMethod
gauge_group_weights(
    S::AbstractSubsystemCode
) -> Vector{Int64}

Return a vector containing the Pauli weight of each generator of the gauge group of S.

source
CodingTheory.gauge_weightsMethod
gauge_weights(S::AbstractSubsystemCode) -> Vector{Int64}

Return a vector containing the Pauli weight of each gauge generator of S.

source
CodingTheory.generator_weightsMethod
generator_weights(
    S::AbstractSubsystemCode;
    generators
) -> Vector{Int64}

Return the Pauli weight of each supplied stabilizer, gauge, or gauge-group generator.

source
CodingTheory.is_LDPCMethod
is_LDPC(S::AbstractSubsystemCode; check_bound, column_bound)

Return whether the stabilizer presentation of S obeys the supplied check-weight and qubit-degree bounds. For a CSS code, both sectors must obey the bounds.

source
CodingTheory.is_LDPCMethod
is_LDPC(
    M::Union{Nemo.FqMatrix, Nemo.fpMatrix, Hecke.SMat, SparseArrays.SparseMatrixCSC};
    check_bound,
    column_bound
)

Return whether the rows and columns of M obey the supplied degree bounds.

source
CodingTheory.is_X_LDPCMethod
is_X_LDPC(
    S::AbstractSubsystemCode;
    check_bound,
    column_bound
)

Return whether the X sector of S obeys the supplied check-weight and qubit-degree bounds.

source
CodingTheory.is_Z_LDPCMethod
is_Z_LDPC(
    S::AbstractSubsystemCode;
    check_bound,
    column_bound
)

Return whether the Z sector of S obeys the supplied check-weight and qubit-degree bounds.

source
CodingTheory.is_quantum_LDPCMethod
is_quantum_LDPC(
    S::AbstractSubsystemCode;
    max_generator_weight,
    max_qubit_degree,
    generators
)
                generators=:stabilizers)

Return whether this presentation obeys the supplied LDPC degree bounds. LDPC is an asymptotic family property, so both finite-size thresholds are required rather than chosen by the library.

source
CodingTheory.maximum_qubit_degreeMethod
maximum_qubit_degree(S::AbstractSubsystemCode) -> Int64

Return the maximum stabilizer-generator degree among the physical qubits of S, or zero when S has no physical qubits.

source
CodingTheory.maximum_stabilizer_weightMethod
maximum_stabilizer_weight(S::AbstractSubsystemCode) -> Int64

Return the maximum Pauli weight among the stabilizer generators of S, or zero when the presentation has no stabilizer generators.

source
CodingTheory.minimum_qubit_degreeMethod
minimum_qubit_degree(S::AbstractSubsystemCode) -> Int64

Return the minimum stabilizer-generator degree among the physical qubits of S, or zero when S has no physical qubits.

source
CodingTheory.num_edgesMethod
num_edges(S::AbstractSubsystemCode) -> Int64

Return the number of edges in the stabilizer Tanner graph of S. A nontrivial Pauli action, including Y, contributes one edge.

source
CodingTheory.num_edgesMethod
num_edges(
    M::Union{Nemo.FqMatrix, Nemo.fpMatrix, Hecke.SMat, SparseArrays.SparseMatrixCSC}
) -> Int64

Return the number of nonzero entries in M, equivalently the number of edges in its Tanner graph.

source
CodingTheory.quantum_LDPC_parametersMethod
quantum_LDPC_parameters(
    S::AbstractSubsystemCode;
    generators
) -> @NamedTuple{max_generator_weight::Int64, max_qubit_degree::Int64}

Return the maximum generator weight and maximum qubit degree of the supplied presentation. These are presentation-dependent quantities; redundant generators are retained.

source
CodingTheory.qubit_degreesMethod
qubit_degrees(
    S::AbstractSubsystemCode;
    generators
) -> Vector{Int64}

Return the number of supplied generators acting nontrivially on each physical qubit. A Y-type action contributes one, not two.

source
CodingTheory.stabilizer_weightsMethod
stabilizer_weights(
    S::AbstractSubsystemCode
) -> Vector{Int64}

Return a vector containing the Pauli weight of each stabilizer generator of S.

source