--- a/src/forward_model/bias.rs Thu Jan 23 23:39:40 2025 +0100 +++ b/src/forward_model/bias.rs Fri Jan 31 18:00:17 2025 -0500 @@ -6,13 +6,11 @@ use alg_tools::types::{Float, ClosedAdd}; use alg_tools::mapping::Space; use alg_tools::direct_product::Pair; -use alg_tools::linops::{Linear, RowOp, ColOp, IdOp, ZeroOp, AXPY}; +use alg_tools::linops::{Linear, RowOp, IdOp, ZeroOp, AXPY}; use alg_tools::error::DynError; use alg_tools::norms::{L2, Norm, PairNorm, NormExponent}; -use crate::types::L2Squared; use crate::measures::RNDM; -use super::{ForwardModel, AdjointProductBoundedBy, AdjointProductPairBoundedBy, LipschitzValues}; -use crate::transport::TransportLipschitz; +use super::{ForwardModel, AdjointProductBoundedBy, AdjointProductPairBoundedBy, BoundedCurvature}; impl<Domain, F, A, E> ForwardModel<Pair<Domain, A::Observable>, F, PairNorm<E, L2, L2>> for RowOp<A, IdOp<A::Observable>> @@ -56,6 +54,7 @@ } } +/* /// This `impl` is bit of an abuse as the codomain of `Apre` is a [`Pair`] of a measure predual, /// to which this `impl` applies, and another space. impl<F, Apre, Z> LipschitzValues @@ -78,19 +77,22 @@ self.0.value_diff_unit_lipschitz_factor() } } - - +*/ -impl<'a, F : Float, Y : Space, XD, const N : usize> TransportLipschitz<L2Squared> for -ZeroOp<'a, RNDM<F, N>, XD, Y, F> { +impl<F, A, Z> BoundedCurvature +for RowOp<A, IdOp<Z>> +where + F : Float, + Z : Clone + Space + ClosedAdd, + A : BoundedCurvature<FloatType = F>, +{ type FloatType = F; - fn transport_lipschitz_factor(&self, _ : L2Squared) -> Self::FloatType { - F::ZERO + fn curvature_bound_components(&self) -> (Option<Self::FloatType>, Option<Self::FloatType>) { + self.0.curvature_bound_components() } } - #[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>