diff -r 4f6ca107ccb1 -r 9327d544ca0b src/linops.rs --- a/src/linops.rs Sun Dec 22 15:30:34 2024 -0500 +++ b/src/linops.rs Sun Dec 22 17:24:33 2024 -0500 @@ -107,11 +107,13 @@ /// operator. The space `Ypre` is the predual of its codomain, and should be the /// domain of the adjointed operator. `Self::Preadjoint` should be /// [`Adjointable`]`<'a,Ypre,X>`. - +/// We do not make additional restrictions on `Self::Preadjoint` (in particular, it +/// does not have to be adjointable) to allow `X` to be a subspace yet the preadjoint +/// have the full space as the codomain, etc. pub trait Preadjointable : Linear { type PreadjointCodomain : Space; - type Preadjoint<'a> : Adjointable< - Ypre, X, AdjointCodomain=Self::Codomain, Codomain=Self::PreadjointCodomain + type Preadjoint<'a> : Linear< + Ypre, Codomain=Self::PreadjointCodomain > where Self : 'a; /// Form the adjoint operator of `self`. @@ -369,10 +371,8 @@ S : Preadjointable, T : Preadjointable, Self : Linear>, - for<'a> ColOp, T::Preadjoint<'a>> : Adjointable< - Yʹ, Pair, - Codomain=Pair, - AdjointCodomain = Self::Codomain, + for<'a> ColOp, T::Preadjoint<'a>> : Linear< + Yʹ, Codomain=Pair, >, { type PreadjointCodomain = Pair; @@ -415,10 +415,8 @@ S : Preadjointable, T : Preadjointable, Self : Linear, - for<'a> RowOp, T::Preadjoint<'a>> : Adjointable< - Pair, A, - Codomain = R, - AdjointCodomain = Self::Codomain, + for<'a> RowOp, T::Preadjoint<'a>> : Linear< + Pair, Codomain = R, >, { type PreadjointCodomain = R; @@ -518,10 +516,8 @@ S : Preadjointable, T : Preadjointable, Self : Linear>, - for<'a> DiagOp, T::Preadjoint<'a>> : Adjointable< - Pair, Pair, - Codomain=R, - AdjointCodomain = Self::Codomain, + for<'a> DiagOp, T::Preadjoint<'a>> : Linear< + Pair, Codomain=R, >, { type PreadjointCodomain = R;