diff -r be105c046777 -r 2a122736e91c src/fb.rs --- a/src/fb.rs Wed Jul 22 16:48:22 2026 -0500 +++ b/src/fb.rs Sun Jul 26 17:30:51 2026 -0500 @@ -188,7 +188,7 @@ // Run the algorithm for state in iterator.iter_init(|| full_stats(&μ, ε, stats.clone())) { - let maybe_μ_base = config.merge_now(&state).then(|| μ.clone()); + let maybe_μ_base = config.if_merge_now(&state, |_| μ.clone()); let μ_base_len = μ.len(); // Calculate smooth part of surrogate model. @@ -201,16 +201,18 @@ // Prune and possibly merge spikes if let Some(μ_base) = maybe_μ_base { - stats.merged += prox_penalty.merge_spikes( - &mut μ, - &mut τv, - &μ_base, - τ, - ε, - config, - ®, - Some(|μ̃: &RNDM| f.apply(μ̃)), - ); + config.if_merge_now(&state, |ins| { + stats.merged += prox_penalty.merge_spikes( + &mut μ, + &mut τv, + &μ_base, + τ, + ε, + ins, + ®, + Some(|μ̃: &RNDM| f.apply(μ̃)), + ) + }); } stats.pruned += prune_with_stats(&mut μ); @@ -309,10 +311,12 @@ stats.inserted += μ.len() - μ_base_len; // (Do not) merge spikes. - if config.merge_now(&state) && !warned_merging { - let err = format!("Merging not supported for μFISTA"); - println!("{}", err.red()); - warned_merging = true; + if !warned_merging { + config.if_merge_now(&state, |_| { + let err = format!("Merging not supported for μFISTA"); + println!("{}", err.red()); + warned_merging = true; + }); } // Do extra weight optimisation step heuristic