--- a/src/forward_model/bias.rs Fri Feb 14 23:16:14 2025 -0500 +++ b/src/forward_model/bias.rs Fri Feb 14 23:46:43 2025 -0500 @@ -2,28 +2,28 @@ Simple parametric forward model. */ -use numeric_literals::replace_float_literals; -use alg_tools::types::{Float, ClosedAdd}; -use alg_tools::mapping::Space; +use super::{AdjointProductBoundedBy, AdjointProductPairBoundedBy, BoundedCurvature, ForwardModel}; +use crate::measures::RNDM; use alg_tools::direct_product::Pair; -use alg_tools::linops::{Linear, RowOp, IdOp, ZeroOp, AXPY}; use alg_tools::error::DynError; -use alg_tools::norms::{L2, Norm, PairNorm, NormExponent}; -use crate::measures::RNDM; -use super::{ForwardModel, AdjointProductBoundedBy, AdjointProductPairBoundedBy, BoundedCurvature}; +use alg_tools::linops::{IdOp, Linear, RowOp, ZeroOp, AXPY}; +use alg_tools::mapping::Space; +use alg_tools::norms::{Norm, NormExponent, PairNorm, L2}; +use alg_tools::types::{ClosedAdd, Float}; +use numeric_literals::replace_float_literals; impl<Domain, F, A, E> ForwardModel<Pair<Domain, A::Observable>, F, PairNorm<E, L2, L2>> -for RowOp<A, IdOp<A::Observable>> + for RowOp<A, IdOp<A::Observable>> where - E : NormExponent, - Domain : Space + Norm<F, E>, - F : Float, - A::Observable : ClosedAdd + Norm<F, L2> + 'static, - A : ForwardModel<Domain, F, E> + 'static + E: NormExponent, + Domain: Space + Norm<F, E>, + F: Float, + A::Observable: ClosedAdd + Norm<F, L2> + 'static, + A: ForwardModel<Domain, F, E> + 'static, { type Observable = A::Observable; - fn write_observable(&self, b : &Self::Observable, prefix : String) -> DynError { + fn write_observable(&self, b: &Self::Observable, prefix: String) -> DynError { self.0.write_observable(b, prefix) } @@ -35,17 +35,17 @@ #[replace_float_literals(F::cast_from(literal))] impl<Domain, F, A, D, Z> AdjointProductPairBoundedBy<Pair<Domain, Z>, D, IdOp<Z>> -for RowOp<A, IdOp<Z>> + for RowOp<A, IdOp<Z>> where - Domain : Space, - F : Float, - Z : Clone + Space + ClosedAdd, - A : AdjointProductBoundedBy<Domain, D, FloatType=F, Codomain = Z>, - A::Codomain : ClosedAdd, + Domain: Space, + F: Float, + Z: Clone + Space + ClosedAdd, + A: AdjointProductBoundedBy<Domain, D, FloatType = F, Codomain = Z>, + A::Codomain: ClosedAdd, { type FloatType = F; - fn adjoint_product_pair_bound(&self, d : &D, _ : &IdOp<Z>) -> Option<(F, F)> { + fn adjoint_product_pair_bound(&self, d: &D, _: &IdOp<Z>) -> Option<(F, F)> { self.0.adjoint_product_bound(d).map(|l_0| { // [A_*; B_*][A, B] = [A_*A, A_* B; B_* A, B_* B] ≤ diag(2A_*A, 2B_*B) // ≤ diag(2l_A𝒟_A, 2l_B𝒟_B), where now 𝒟_B=Id and l_B=1. @@ -79,12 +79,11 @@ } */ -impl<F, A, Z> BoundedCurvature -for RowOp<A, IdOp<Z>> +impl<F, A, Z> BoundedCurvature for RowOp<A, IdOp<Z>> where - F : Float, - Z : Clone + Space + ClosedAdd, - A : BoundedCurvature<FloatType = F>, + F: Float, + Z: Clone + Space + ClosedAdd, + A: BoundedCurvature<FloatType = F>, { type FloatType = F; @@ -94,17 +93,16 @@ } #[replace_float_literals(F::cast_from(literal))] -impl<'a, F, D, XD, Y, const N : usize> AdjointProductBoundedBy<RNDM<F, N>, D> -for ZeroOp<'a, RNDM<F, N>, XD, Y, F> +impl<'a, F, D, XD, Y, const N: usize> AdjointProductBoundedBy<RNDM<F, N>, D> + for ZeroOp<'a, RNDM<F, N>, XD, Y, F> where - F : Float, - Y : AXPY<F> + Clone, - D : Linear<RNDM<F, N>>, + F: Float, + Y: AXPY<F> + Clone, + D: Linear<RNDM<F, N>>, { type FloatType = F; /// Return $L$ such that $A_*A ≤ L𝒟$ is bounded by some `other` operator $𝒟$. - fn adjoint_product_bound(&self, _ : &D) -> Option<F> { + fn adjoint_product_bound(&self, _: &D) -> Option<F> { Some(0.0) } } -