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.
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.
CodingTheory.X_check_degree_distribution — Method
X_check_degree_distribution(
S::AbstractSubsystemCode
) -> Vector{Int64}
Return the Pauli weight of each X-stabilizer generator of S.
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.
CodingTheory.X_column_row_bounds — Method
X_column_row_bounds(
S::AbstractSubsystemCode
) -> Tuple{Int64, Int64}
Return (column_bound, row_bound) for the X sector of S.
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.
CodingTheory.X_density — Method
X_density(S::AbstractSubsystemCode) -> Any
Return the fraction of entries in the X-stabilizer matrix of S that are nonzero.
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.
CodingTheory.X_limited — Method
X_limited(S::AbstractSubsystemCode) -> Int64
Return the larger of the column and row bounds for the X sector of S.
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.
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.
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.
CodingTheory.X_variable_degree_distribution — Method
X_variable_degree_distribution(
S::AbstractSubsystemCode
) -> Vector{Int64}
Return the X-stabilizer degree of each physical qubit of S.
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.
CodingTheory.Z_check_degree_distribution — Method
Z_check_degree_distribution(
S::AbstractSubsystemCode
) -> Vector{Int64}
Return the Pauli weight of each Z-stabilizer generator of S.
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.
CodingTheory.Z_column_row_bounds — Method
Z_column_row_bounds(
S::AbstractSubsystemCode
) -> Tuple{Int64, Int64}
Return (column_bound, row_bound) for the Z sector of S.
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.
CodingTheory.Z_density — Method
Z_density(S::AbstractSubsystemCode) -> Any
Return the fraction of entries in the Z-stabilizer matrix of S that are nonzero.
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.
CodingTheory.Z_limited — Method
Z_limited(S::AbstractSubsystemCode) -> Int64
Return the larger of the column and row bounds for the Z sector of S.
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.
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.
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.
CodingTheory.Z_variable_degree_distribution — Method
Z_variable_degree_distribution(
S::AbstractSubsystemCode
) -> Vector{Int64}
Return the Z-stabilizer degree of each physical qubit of S.
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.
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.
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.
CodingTheory.gauge_weights — Method
gauge_weights(S::AbstractSubsystemCode) -> Vector{Int64}
Return a vector containing the Pauli weight of each gauge generator of S.
CodingTheory.generator_weights — Method
generator_weights(
S::AbstractSubsystemCode;
generators
) -> Vector{Int64}
Return the Pauli weight of each supplied stabilizer, gauge, or gauge-group generator.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
CodingTheory.qubit_degree_distribution — Method
qubit_degree_distribution(
S::AbstractSubsystemCode
) -> Vector{Int64}
Return the stabilizer-generator degree of each physical qubit of S.
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.
CodingTheory.stabilizer_weight_distribution — Method
stabilizer_weight_distribution(
S::AbstractSubsystemCode
) -> Vector{Int64}
Return the Pauli weight of each stabilizer generator of S.
CodingTheory.stabilizer_weights — Method
stabilizer_weights(
S::AbstractSubsystemCode
) -> Vector{Int64}
Return a vector containing the Pauli weight of each stabilizer generator of S.