diff -r 39c5e6c7759d -r 0693cc9ba9f0 src/fb.rs
--- a/src/fb.rs Mon Feb 17 13:45:11 2025 -0500
+++ b/src/fb.rs Mon Feb 17 13:51:50 2025 -0500
@@ -74,69 +74,50 @@
We solve this with either SSN or FB as determined by
-[`InnerSettings`] in [`FBGenericConfig::inner`].
+[`crate::subproblem::InnerSettings`] in [`FBGenericConfig::inner`].
*/
+use colored::Colorize;
use numeric_literals::replace_float_literals;
-use serde::{Serialize, Deserialize};
-use colored::Colorize;
+use serde::{Deserialize, Serialize};
+use alg_tools::euclidean::Euclidean;
+use alg_tools::instance::Instance;
use alg_tools::iterate::AlgIteratorFactory;
-use alg_tools::euclidean::Euclidean;
use alg_tools::linops::{Mapping, GEMV};
use alg_tools::mapping::RealMapping;
use alg_tools::nalgebra_support::ToNalgebraRealField;
-use alg_tools::instance::Instance;
-use crate::types::*;
-use crate::measures::{
- DiscreteMeasure,
- RNDM,
-};
+use crate::dataterm::{calculate_residual, DataTerm, L2Squared};
+use crate::forward_model::{AdjointProductBoundedBy, ForwardModel};
use crate::measures::merging::SpikeMerging;
-use crate::forward_model::{
- ForwardModel,
- AdjointProductBoundedBy,
-};
-use crate::plot::{
- SeqPlotter,
- Plotting,
- PlotLookup
-};
+use crate::measures::{DiscreteMeasure, RNDM};
+use crate::plot::{PlotLookup, Plotting, SeqPlotter};
+pub use crate::prox_penalty::{FBGenericConfig, ProxPenalty};
use crate::regularisation::RegTerm;
-use crate::dataterm::{
- calculate_residual,
- L2Squared,
- DataTerm,
-};
-pub use crate::prox_penalty::{
- FBGenericConfig,
- ProxPenalty
-};
+use crate::types::*;
/// Settings for [`pointsource_fb_reg`].
#[derive(Clone, Copy, Eq, PartialEq, Serialize, Deserialize, Debug)]
#[serde(default)]
-pub struct FBConfig {
+pub struct FBConfig {
/// Step length scaling
- pub τ0 : F,
+ pub τ0: F,
/// Generic parameters
- pub generic : FBGenericConfig,
+ pub generic: FBGenericConfig,
}
#[replace_float_literals(F::cast_from(literal))]
-impl Default for FBConfig {
+impl Default for FBConfig {
fn default() -> Self {
FBConfig {
- τ0 : 0.99,
- generic : Default::default(),
+ τ0: 0.99,
+ generic: Default::default(),
}
}
}
-pub(crate) fn prune_with_stats(
- μ : &mut RNDM,
-) -> usize {
+pub(crate) fn prune_with_stats(μ: &mut RNDM) -> usize {
let n_before_prune = μ.len();
μ.prune();
debug_assert!(μ.len() <= n_before_prune);
@@ -145,25 +126,27 @@
#[replace_float_literals(F::cast_from(literal))]
pub(crate) fn postprocess<
- F : Float,
- V : Euclidean + Clone,
- A : GEMV, Codomain = V>,
- D : DataTerm,
- const N : usize
-> (
- mut μ : RNDM,
- config : &FBGenericConfig,
- dataterm : D,
- opA : &A,
- b : &V,
+ F: Float,
+ V: Euclidean + Clone,
+ A: GEMV, Codomain = V>,
+ D: DataTerm,
+ const N: usize,
+>(
+ mut μ: RNDM,
+ config: &FBGenericConfig,
+ dataterm: D,
+ opA: &A,
+ b: &V,
) -> RNDM
where
- RNDM : SpikeMerging,
- for<'a> &'a RNDM : Instance>,
+ RNDM: SpikeMerging,
+ for<'a> &'a RNDM: Instance>,
{
- μ.merge_spikes_fitness(config.final_merging_method(),
- |μ̃| dataterm.calculate_fit_op(μ̃, opA, b),
- |&v| v);
+ μ.merge_spikes_fitness(
+ config.final_merging_method(),
+ |μ̃| dataterm.calculate_fit_op(μ̃, opA, b),
+ |&v| v,
+ );
μ.prune();
μ
}
@@ -187,33 +170,29 @@
///
/// Returns the final iterate.
#[replace_float_literals(F::cast_from(literal))]
-pub fn pointsource_fb_reg<
- F, I, A, Reg, P, const N : usize
->(
- opA : &A,
- b : &A::Observable,
- reg : Reg,
- prox_penalty : &P,
- fbconfig : &FBConfig,
- iterator : I,
- mut plotter : SeqPlotter,
+pub fn pointsource_fb_reg(
+ opA: &A,
+ b: &A::Observable,
+ reg: Reg,
+ prox_penalty: &P,
+ fbconfig: &FBConfig,
+ iterator: I,
+ mut plotter: SeqPlotter,
) -> RNDM
where
- F : Float + ToNalgebraRealField,
- I : AlgIteratorFactory>,
- for<'b> &'b A::Observable : std::ops::Neg