--- a/src/dataterm.rs Thu Aug 29 00:00:00 2024 -0500 +++ b/src/dataterm.rs Tue Dec 31 09:25:45 2024 -0500 @@ -4,25 +4,26 @@ use numeric_literals::replace_float_literals; -use alg_tools::loc::Loc; use alg_tools::euclidean::Euclidean; use alg_tools::linops::GEMV; pub use alg_tools::norms::L1; use alg_tools::norms::Norm; +use alg_tools::instance::{Instance, Space}; use crate::types::*; pub use crate::types::L2Squared; -use crate::measures::DiscreteMeasure; +use crate::measures::RNDM; /// Calculates the residual $Aμ-b$. #[replace_float_literals(F::cast_from(literal))] pub(crate) fn calculate_residual< + X : Space, + I : Instance<X>, F : Float, V : Euclidean<F> + Clone, - A : GEMV<F, DiscreteMeasure<Loc<F, N>, F>, Codomain = V>, - const N : usize + A : GEMV<F, X, Codomain = V>, >( - μ : &DiscreteMeasure<Loc<F, N>, F>, + μ : I, opA : &A, b : &V ) -> V { @@ -35,12 +36,14 @@ #[replace_float_literals(F::cast_from(literal))] pub(crate) fn calculate_residual2< F : Float, + X : Space, + I : Instance<X>, + J : Instance<X>, V : Euclidean<F> + Clone, - A : GEMV<F, DiscreteMeasure<Loc<F, N>, F>, Codomain = V>, - const N : usize + A : GEMV<F, X, Codomain = V>, >( - μ : &DiscreteMeasure<Loc<F, N>, F>, - μ_delta : &DiscreteMeasure<Loc<F, N>, F>, + μ : I, + μ_delta : J, opA : &A, b : &V ) -> V { @@ -58,14 +61,17 @@ fn calculate_fit(&self, _residual : &V) -> F; /// Calculates $F(Aμ-b)$, where $F$ is the data fidelity. - fn calculate_fit_op<A : GEMV<F, DiscreteMeasure<Loc<F, N>, F>, Codomain = V>>( + fn calculate_fit_op<I, A : GEMV<F, RNDM<F, N>, Codomain = V>>( &self, - μ : &DiscreteMeasure<Loc<F, N>, F>, + μ : I, opA : &A, b : &V ) -> F - where V : Euclidean<F> + Clone { - let r = calculate_residual(&μ, opA, b); + where + V : Euclidean<F> + Clone, + I : Instance<RNDM<F, N>>, + { + let r = calculate_residual(μ, opA, b); self.calculate_fit(&r) } }