Skip to content

Degeneracy-aware decoders #506

@Krastanov

Description

@Krastanov

From Henry Makhanov, with comments by me inline as quote blocks:

Count Degenerate Logical Operators Per Syndrome Pair (Implement count_logical_paths)

For a given syndrome pair (two defects), count the number of equivalent paths (logical or stabilizer-equivalent) between them.

function count_logical_paths(code::AbstractECC, defect_i::Int, defect_j::Int)
    # Enumerate all minimum-weight error chains between i and j,
    # count how many are logically equivalent (modulo stabilizers)
    return Int
end

Modify MWPM Edge Weights Using Degeneracy Heuristics (Implement degeneracy_weighted_graph)

Adjust decoder edge weights using:

Standard: wᵢⱼ = -log(pᵢⱼ)

Degeneracy-aware: wᵢⱼ = -log(pᵢⱼ * Dᵢⱼ)
where Dᵢⱼ is the degeneracy factor (e.g., number of equivalent minimal chains between i and j)

function degeneracy_weighted_graph(code::AbstractECC, noise::Dict, degeneracy_map::Dict)
    # Build weighted graph with weights adjusted using degeneracy
    return WeightedGraph
end

Modular Compatibility with Existing Decoders and with Weight adjustments (Implement total_matching_weights)

Make sure that these features work with all existing decoders defined in ecc/codes.

I think crucial for my vision is to make points 4 and 5 so that the weights would be defined for decoders like MWPM as:
w_ij total=−log(p_ij⋅D_ij)=−log(p_ij)−log(D_ij)

function total_matching_weights(
    noise_map::Dict{Int, PauliNoise},
    code::AbstractECC,
    degeneracy_map::Dict{Tuple{Int,Int}, Int}
)
    # p_{ij} from noise_map (from point 3)
    # D_{ij} from degeneracy_map (from point 4)
    # Return edge list for PyMatching
end

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions