52 /// Return $(L, L_z)$ such that $A_*A ≤ (L_1 D_1, L_2 D_2)$. |
52 /// Return $(L, L_z)$ such that $A_*A ≤ (L_1 D_1, L_2 D_2)$. |
53 fn adjoint_product_pair_bound(&self, other1 : &D1, other_2 : &D2) |
53 fn adjoint_product_pair_bound(&self, other1 : &D1, other_2 : &D2) |
54 -> Option<(Self::FloatType, Self::FloatType)>; |
54 -> Option<(Self::FloatType, Self::FloatType)>; |
55 } |
55 } |
56 |
56 |
|
57 /* |
57 /// Trait for [`ForwardModel`]s whose preadjoint has Lipschitz values. |
58 /// Trait for [`ForwardModel`]s whose preadjoint has Lipschitz values. |
58 pub trait LipschitzValues { |
59 pub trait LipschitzValues { |
59 type FloatType : Float; |
60 type FloatType : Float; |
60 /// Return (if one exists) a factor $L$ such that $A_*z$ is $L$-Lipschitz for all |
61 /// Return (if one exists) a factor $L$ such that $A_*z$ is $L$-Lipschitz for all |
61 /// $z$ in the unit ball. |
62 /// $z$ in the unit ball. |
67 /// $z$ in the unit ball. |
68 /// $z$ in the unit ball. |
68 fn value_diff_unit_lipschitz_factor(&self) -> Option<Self::FloatType> { |
69 fn value_diff_unit_lipschitz_factor(&self) -> Option<Self::FloatType> { |
69 None |
70 None |
70 } |
71 } |
71 } |
72 } |
|
73 */ |
72 |
74 |
|
75 /// Trait for [`ForwardModel`]s that satisfy bounds on the curvature $𝒦_F$. |
|
76 pub trait BoundedCurvature { |
|
77 type FloatType : Float; |
|
78 |
|
79 /// Returns components for a bound $ℓ_F$ on the curvature |
|
80 /// $$ |
|
81 /// 𝒦_F(μ, γ) = ∫ B_{F'(μ)} dγ + B_F(μ, μ+Δ). |
|
82 /// $$ |
|
83 /// such that $𝒦_F(μ, γ) ≤ ℓ_F ∫ c_2 d|γ|$. |
|
84 fn curvature_bound_components(&self) -> (Option<Self::FloatType>, Option<Self::FloatType>); |
|
85 } |