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_codes — Method
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_code — Method
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_bound — Method
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_distributions — Method
X_degree_distributions(
    S::AbstractSubsystemCode
) -> Tuple{Vector{Int64}, Vector{Int64}}

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

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

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

source
CodingTheory.X_is_regular — Method
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_limited — Method
X_limited(S::AbstractSubsystemCode) -> Int64

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

source
CodingTheory.X_qubit_degrees — Method
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_bound — Method
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_weights — Method
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_code — Method
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_bound — Method
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_distributions — Method
Z_degree_distributions(
    S::AbstractSubsystemCode
) -> Tuple{Vector{Int64}, Vector{Int64}}

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

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

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

source
CodingTheory.Z_is_regular — Method
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_limited — Method
Z_limited(S::AbstractSubsystemCode) -> Int64

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

source
CodingTheory.Z_qubit_degrees — Method
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_bound — Method
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_weights — Method
Z_stabilizer_weights(
    S::AbstractSubsystemCode
) -> Vector{Int64}

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

source
CodingTheory.check_weights — Method
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_weights — Method
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_weights — Method
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_weights — Method
gauge_weights(S::AbstractSubsystemCode) -> Vector{Int64}

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

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

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

source
CodingTheory.is_LDPC — Method
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_LDPC — Method
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_LDPC — Method
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_LDPC — Method
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_LDPC — Method
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_degree — Method
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_weight — Method
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_degree — Method
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_edges — Method
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_edges — Method
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_parameters — Method
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_degrees — Method
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_weights — Method
stabilizer_weights(
    S::AbstractSubsystemCode
) -> Vector{Int64}

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

source