src/pdps.rs

changeset 93
8f1e57821d76
parent 91
47d495348e38
child 98
b9818eb24b47
--- a/src/pdps.rs	Tue Aug 04 20:11:10 2026 -0500
+++ b/src/pdps.rs	Thu Aug 06 11:14:15 2026 -0500
@@ -42,7 +42,7 @@
 use crate::forward_model::ForwardModel;
 use crate::measures::merging::SpikeMerging;
 use crate::measures::merging::SpikeMergingMethod;
-use crate::measures::{DiscreteMeasure, RNDM};
+use crate::measures::DiscreteMeasure;
 use crate::plot::Plotter;
 pub use crate::prox_penalty::{InsertionConfig, ProxPenalty, StepLengthBoundPD};
 use crate::regularisation::RegTerm;
@@ -50,7 +50,7 @@
 use alg_tools::convex::{Conjugable, ConvexMapping, Prox};
 use alg_tools::error::DynResult;
 use alg_tools::iterate::AlgIteratorFactory;
-use alg_tools::linops::{Mapping, AXPY};
+use alg_tools::linops::{Mapping, Space, AXPY};
 use alg_tools::mapping::{DataTerm, Instance};
 use alg_tools::nalgebra_support::ToNalgebraRealField;
 use anyhow::ensure;
@@ -140,27 +140,29 @@
 ///
 /// Returns the final iterate.
 #[replace_float_literals(F::cast_from(literal))]
-pub fn pointsource_pdps_reg<'a, F, I, A, Phi, Reg, Plot, P, const N: usize>(
-    f: &'a DataTerm<F, RNDM<N, F>, A, Phi>,
+pub fn pointsource_pdps_reg<'a, F, U, I, A, Phi, Reg, Plot, P>(
+    f: &'a DataTerm<F, DiscreteMeasure<U, F>, A, Phi>,
     reg: &Reg,
     prox_penalty: &P,
     pdpsconfig: &PDPSConfig<F>,
     iterator: I,
     mut plotter: Plot,
-    μ0: Option<RNDM<N, F>>,
-) -> DynResult<RNDM<N, F>>
+    μ0: Option<DiscreteMeasure<U, F>>,
+) -> DynResult<DiscreteMeasure<U, F>>
 where
+    U: Space + Clone + PartialEq,
     F: Float + ToNalgebraRealField,
     I: AlgIteratorFactory<IterInfo<F>>,
-    A: ForwardModel<RNDM<N, F>, F>,
+    A: ForwardModel<DiscreteMeasure<U, F>, F>,
     for<'b> &'b A::Observable: Instance<A::Observable>,
     A::Observable: AXPY<Field = F>,
-    RNDM<N, F>: SpikeMerging<F>,
-    Reg: RegTerm<Loc<N, F>, F>,
+    DiscreteMeasure<U, F>: SpikeMerging<F>,
+    Reg: RegTerm<U, F>,
     Phi: Conjugable<A::Observable, F>,
     for<'b> Phi::Conjugate<'b>: Prox<A::Observable>,
-    P: ProxPenalty<Loc<N, F>, A::PreadjointCodomain, Reg, F> + StepLengthBoundPD<F, A, RNDM<N, F>>,
-    Plot: Plotter<P::ReturnMapping, A::PreadjointCodomain, RNDM<N, F>>,
+    P: ProxPenalty<U, A::PreadjointCodomain, Reg, F>
+        + StepLengthBoundPD<F, A, DiscreteMeasure<U, F>>,
+    Plot: Plotter<P::ReturnMapping, A::PreadjointCodomain, DiscreteMeasure<U, F>>,
 {
     // Check parameters
     ensure!(
@@ -187,7 +189,7 @@
     // Initialise iterates
     let mut μ = μ0.unwrap_or_else(|| DiscreteMeasure::new());
     let mut y = f.residual(&μ);
-    let full_stats = |μ: &RNDM<N, F>, ε, stats| IterInfo {
+    let full_stats = |μ: &DiscreteMeasure<U, F>, ε, stats| IterInfo {
         value: f.apply(μ) + reg.apply(μ),
         n_spikes: μ.len(),
         ε,

mercurial