src/fb.rs

changeset 78
2a122736e91c
parent 75
677a5fd1b014
--- 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,
-                &reg,
-                Some(|μ̃: &RNDM<N, F>| f.apply(μ̃)),
-            );
+            config.if_merge_now(&state, |ins| {
+                stats.merged += prox_penalty.merge_spikes(
+                    &mut μ,
+                    &mut τv,
+                    &μ_base,
+                    τ,
+                    ε,
+                    ins,
+                    &reg,
+                    Some(|μ̃: &RNDM<N, F>| 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

mercurial