--- 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(), ε,