--- a/src/convex.rs Wed Apr 30 00:48:56 2025 -0500 +++ b/src/convex.rs Wed Apr 30 01:06:25 2025 -0500 @@ -16,10 +16,8 @@ /// /// TODO: should constrain `Mapping::Codomain` to implement a partial order, /// but this makes everything complicated with little benefit. -pub trait ConvexMapping<Domain: Space, F: Num = f64>: Mapping<Domain, Codomain = F> { - /// Returns (a lower estimate of) the factor of strong convexity. - /// - /// TODO: should include a specification of the respective norm. +pub trait ConvexMapping<Domain: Normed<F>, F: Num = f64>: Mapping<Domain, Codomain = F> { + /// Returns (a lower estimate of) the factor of strong convexity in the norm of `Domain`. fn factor_of_strong_convexity(&self) -> F { F::ZERO } @@ -43,7 +41,7 @@ /// but a `Preconjugable` mapping has to be convex. pub trait Preconjugable<Domain, Predual, F: Num = f64>: ConvexMapping<Domain, F> where - Domain: Space, + Domain: Normed<F>, Predual: HasDual<F>, { type Preconjugate<'a>: Mapping<Predual, Codomain = F> @@ -90,7 +88,7 @@ impl<Domain, E, F> ConvexMapping<Domain, F> for NormMapping<F, E> where - Domain: Space, + Domain: Normed<F>, E: NormExponent, F: Float, Self: Mapping<Domain, Codomain = F>, @@ -116,7 +114,7 @@ impl<Domain, E, F> ConvexMapping<Domain, F> for NormConstraint<F, E> where - Domain: Space, + Domain: Normed<F>, E: NormExponent, F: Float, Self: Mapping<Domain, Codomain = F>, @@ -127,7 +125,7 @@ where E: HasDualExponent, F: Float, - Domain: HasDual<F> + Norm<F, E> + Space, + Domain: HasDual<F> + Norm<F, E> + Normed<F>, <Domain as HasDual<F>>::DualSpace: Norm<F, E::DualExp>, { type Conjugate<'a> @@ -209,7 +207,7 @@ impl<F, E, Domain> Mapping<Domain> for NormProjection<F, E> where - Domain: Space + Projection<F, E>, + Domain: Normed<F> + Projection<F, E>, F: Float, E: NormExponent, { @@ -239,7 +237,7 @@ } } -impl<Domain: Space, F: Num> ConvexMapping<Domain, F> for Zero<Domain, F> {} +impl<Domain: Normed<F>, F: Float> ConvexMapping<Domain, F> for Zero<Domain, F> {} impl<Domain: HasDual<F>, F: Float> Conjugable<Domain, F> for Zero<Domain, F> { type Conjugate<'a> @@ -255,7 +253,7 @@ impl<Domain, Predual, F: Float> Preconjugable<Domain, Predual, F> for Zero<Domain, F> where - Domain: Space, + Domain: Normed<F>, Predual: HasDual<F>, { type Preconjugate<'a>