--- a/src/dataterm.rs Sun Apr 27 15:03:51 2025 -0500 +++ b/src/dataterm.rs Thu Feb 26 11:38:43 2026 -0500 @@ -2,30 +2,30 @@ Basid definitions for data terms */ -use numeric_literals::replace_float_literals; +//use numeric_literals::replace_float_literals; -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 alg_tools::convex::Norm222; +//use alg_tools::euclidean::Euclidean; +//use alg_tools::instance::{Instance, Space}; +//use alg_tools::linops::GEMV; +use alg_tools::mapping::DataTerm; +use alg_tools::norms::{NormMapping, L1}; -use crate::types::*; -pub use crate::types::L2Squared; -use crate::measures::RNDM; +//use crate::types::*; +/* /// 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, X, Codomain = V>, + X: Space, + I: Instance<X>, + F: Float, + V: Euclidean<F> + Clone, + A: GEMV<F, X, Codomain = V>, >( - μ : I, - opA : &A, - b : &V + μ: I, + opA: &A, + b: &V, ) -> V { let mut r = b.clone(); opA.gemv(&mut r, 1.0, μ, -1.0); @@ -35,60 +35,24 @@ /// Calculates the residual $A(μ+μ_delta)-b$. #[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, X, Codomain = V>, + F: Float, + X: Space, + I: Instance<X>, + J: Instance<X>, + V: Euclidean<F> + Clone, + A: GEMV<F, X, Codomain = V>, >( - μ : I, - μ_delta : J, - opA : &A, - b : &V + μ: I, + μ_delta: J, + opA: &A, + b: &V, ) -> V { let mut r = b.clone(); opA.gemv(&mut r, 1.0, μ, -1.0); opA.gemv(&mut r, 1.0, μ_delta, 1.0); r } - - -/// Trait for data terms -#[replace_float_literals(F::cast_from(literal))] -pub trait DataTerm<F : Float, V, const N : usize> { - /// Calculates $F(y)$, where $F$ is the data fidelity. - fn calculate_fit(&self, _residual : &V) -> F; +*/ - /// Calculates $F(Aμ-b)$, where $F$ is the data fidelity. - fn calculate_fit_op<I, A : GEMV<F, RNDM<F, N>, Codomain = V>>( - &self, - μ : I, - opA : &A, - b : &V - ) -> F - where - V : Euclidean<F> + Clone, - I : Instance<RNDM<F, N>>, - { - let r = calculate_residual(μ, opA, b); - self.calculate_fit(&r) - } -} - -impl<F : Float, V : Euclidean<F>, const N : usize> -DataTerm<F, V, N> -for L2Squared { - fn calculate_fit(&self, residual : &V) -> F { - residual.norm2_squared_div2() - } -} - - -impl<F : Float, V : Euclidean<F> + Norm<F, L1>, const N : usize> -DataTerm<F, V, N> -for L1 { - fn calculate_fit(&self, residual : &V) -> F { - residual.norm(L1) - } -} +pub type L1DataTerm<F, Domain, A> = DataTerm<F, Domain, A, NormMapping<F, L1>>; +pub type QuadraticDataTerm<F, Domain, A> = DataTerm<F, Domain, A, Norm222<F>>;