diff -r 1c74bb0439a8 -r 7b5404283df0 src/prox_penalty/radon_squared.rs --- a/src/prox_penalty/radon_squared.rs Mon Aug 03 19:28:07 2026 -0500 +++ b/src/prox_penalty/radon_squared.rs Tue Aug 04 09:15:00 2026 -0500 @@ -100,18 +100,23 @@ return μ.merge_spikes_fitness(config.merging, f, |&v| v).1; } } - μ.merge_spikes(config.merging, |μ_candidate| { - // Important: μ_candidate's new points are afterwards, - // and do not conflict with μ_base. - // TODO: could simplify to requiring μ_base instead of μ_radon. - // but may complicate with sliding base's exgtra points that need to be - // after μ_candidate's extra points. - // TODO: doesn't seem to work, maybe need to merge μ_base as well? - // Although that doesn't seem to make sense. - let μ_radon = μ_candidate.sub_matching(μ_base); - reg.verify_merge_candidate_radonsq(τv, μ_candidate, τ, ε, &config, &μ_radon) - //let n = μ_candidate.dist_matching(μ_base); - //reg.find_tolerance_violation_slack(τv, τ, ε, false, config, n).is_none() + μ.merge_spikes(config.merging, |μ_candidate, is_scaling| { + if is_scaling { + // Scaling heuristic is pointless without fitness-based merging + false + } else { + // Important: μ_candidate's new points are afterwards, + // and do not conflict with μ_base. + // TODO: could simplify to requiring μ_base instead of μ_radon. + // but may complicate with sliding base's exgtra points that need to be + // after μ_candidate's extra points. + // TODO: doesn't seem to work, maybe need to merge μ_base as well? + // Although that doesn't seem to make sense. + let μ_radon = μ_candidate.sub_matching(μ_base); + reg.verify_merge_candidate_radonsq(τv, μ_candidate, τ, ε, &config, &μ_radon) + //let n = μ_candidate.dist_matching(μ_base); + //reg.find_tolerance_violation_slack(τv, τ, ε, false, config, n).is_none() + } }) } }