diff -r 53136eba9abf -r 6b0db7251ebe src/forward_model/bias.rs --- 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 ForwardModel, F, PairNorm> -for RowOp> + for RowOp> where - E : NormExponent, - Domain : Space + Norm, - F : Float, - A::Observable : ClosedAdd + Norm + 'static, - A : ForwardModel + 'static + E: NormExponent, + Domain: Space + Norm, + F: Float, + A::Observable: ClosedAdd + Norm + 'static, + A: ForwardModel + '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 AdjointProductPairBoundedBy, D, IdOp> -for RowOp> + for RowOp> where - Domain : Space, - F : Float, - Z : Clone + Space + ClosedAdd, - A : AdjointProductBoundedBy, - A::Codomain : ClosedAdd, + Domain: Space, + F: Float, + Z: Clone + Space + ClosedAdd, + A: AdjointProductBoundedBy, + A::Codomain: ClosedAdd, { type FloatType = F; - fn adjoint_product_pair_bound(&self, d : &D, _ : &IdOp) -> Option<(F, F)> { + fn adjoint_product_pair_bound(&self, d: &D, _: &IdOp) -> 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 BoundedCurvature -for RowOp> +impl BoundedCurvature for RowOp> where - F : Float, - Z : Clone + Space + ClosedAdd, - A : BoundedCurvature, + F: Float, + Z: Clone + Space + ClosedAdd, + A: BoundedCurvature, { type FloatType = F; @@ -94,17 +93,16 @@ } #[replace_float_literals(F::cast_from(literal))] -impl<'a, F, D, XD, Y, const N : usize> AdjointProductBoundedBy, D> -for ZeroOp<'a, RNDM, XD, Y, F> +impl<'a, F, D, XD, Y, const N: usize> AdjointProductBoundedBy, D> + for ZeroOp<'a, RNDM, XD, Y, F> where - F : Float, - Y : AXPY + Clone, - D : Linear>, + F: Float, + Y: AXPY + Clone, + D: Linear>, { type FloatType = F; /// Return $L$ such that $A_*A ≤ L𝒟$ is bounded by some `other` operator $𝒟$. - fn adjoint_product_bound(&self, _ : &D) -> Option { + fn adjoint_product_bound(&self, _: &D) -> Option { Some(0.0) } } -