diff -r 9738b51d90d7 -r 4f468d35fa29 src/preadjoint_helper.rs --- a/src/preadjoint_helper.rs Sun Apr 27 15:03:51 2025 -0500 +++ b/src/preadjoint_helper.rs Thu Feb 26 11:38:43 2026 -0500 @@ -2,36 +2,42 @@ Preadjoint construction helper */ -use std::marker::PhantomData; +use alg_tools::error::DynResult; +pub use alg_tools::linops::*; +use alg_tools::norms::{HasDualExponent, Norm}; use alg_tools::types::*; -pub use alg_tools::linops::*; -use alg_tools::norms::{Norm, HasDualExponent}; +use std::marker::PhantomData; /// Helper structure for constructing preadjoints of `S` where `S : Linear`. /// [`Linear`] needs to be implemented for each instance, but [`Adjointable`] /// and [`BoundedLinear`] have blanket implementations. -#[derive(Clone,Debug)] -pub struct PreadjointHelper<'a, S : 'a, X> { - pub forward_op : &'a S, - _domain : PhantomData +#[derive(Clone, Debug)] +pub struct PreadjointHelper<'a, S: 'a, X> { + pub forward_op: &'a S, + _domain: PhantomData, } -impl<'a, S : 'a, X> PreadjointHelper<'a, S, X> { - pub fn new(forward_op : &'a S) -> Self { - PreadjointHelper { forward_op, _domain: PhantomData } +impl<'a, S: 'a, X> PreadjointHelper<'a, S, X> { + pub fn new(forward_op: &'a S) -> Self { + PreadjointHelper { + forward_op, + _domain: PhantomData, + } } } -impl<'a, X, Ypre, S> Adjointable -for PreadjointHelper<'a, S, X> +impl<'a, X, Ypre, S> Adjointable for PreadjointHelper<'a, S, X> where - X : Space, - Ypre : Space, - Self : Linear, - S : Clone + Linear + X: Space, + Ypre: Space, + Self: Linear, + S: Clone + Linear, { type AdjointCodomain = S::Codomain; - type Adjoint<'b> = S where Self : 'b; + type Adjoint<'b> + = S + where + Self: 'b; fn adjoint(&self) -> Self::Adjoint<'_> { self.forward_op.clone() @@ -39,17 +45,18 @@ } impl<'a, F, X, Ypre, ExpXpre, ExpYpre, S> BoundedLinear -for PreadjointHelper<'a, S, X> + for PreadjointHelper<'a, S, X> where - ExpXpre : HasDualExponent, - ExpYpre : HasDualExponent, - F : Float, - X : Space + Norm, - Ypre : Space + Norm, - Self : Linear, - S : 'a + Clone + BoundedLinear + ExpXpre: HasDualExponent, + ExpYpre: HasDualExponent, + F: Float, + X: Space + Norm, + Ypre: Space + Norm, + Self: Linear, + S: 'a + Clone + BoundedLinear, { - fn opnorm_bound(&self, expy : ExpYpre, expx : ExpXpre) -> F { - self.forward_op.opnorm_bound(expx.dual_exponent(), expy.dual_exponent()) + fn opnorm_bound(&self, expy: ExpYpre, expx: ExpXpre) -> DynResult { + self.forward_op + .opnorm_bound(expx.dual_exponent(), expy.dual_exponent()) } }