| 7 use super::{InsertionConfig, ProxPenalty, ProxTerm, StepLengthBound, StepLengthBoundPD}; |
7 use super::{InsertionConfig, ProxPenalty, ProxTerm, StepLengthBound, StepLengthBoundPD}; |
| 8 use crate::dataterm::QuadraticDataTerm; |
8 use crate::dataterm::QuadraticDataTerm; |
| 9 use crate::forward_model::ForwardModel; |
9 use crate::forward_model::ForwardModel; |
| 10 use crate::measures::merging::SpikeMerging; |
10 use crate::measures::merging::SpikeMerging; |
| 11 use crate::measures::{DeltaMeasure, DiscreteMeasure, Radon}; |
11 use crate::measures::{DeltaMeasure, DiscreteMeasure, Radon}; |
| |
12 use crate::prox_penalty::StepLengthBoundValue; |
| 12 use crate::regularisation::RegTerm; |
13 use crate::regularisation::RegTerm; |
| 13 use crate::types::*; |
14 use crate::types::*; |
| 14 use alg_tools::bounds::MinMaxMapping; |
15 use alg_tools::bounds::MinMaxMapping; |
| 15 use alg_tools::error::DynResult; |
16 use alg_tools::error::DynResult; |
| 16 use alg_tools::instance::{Instance, Space}; |
17 use alg_tools::instance::{Instance, Space}; |
| 157 where |
158 where |
| 158 F: Float + ToNalgebraRealField, |
159 F: Float + ToNalgebraRealField, |
| 159 Domain: Space + Norm<Radon, F>, |
160 Domain: Space + Norm<Radon, F>, |
| 160 A: ForwardModel<Domain, F> + BoundedLinear<Domain, Radon, L2, F>, |
161 A: ForwardModel<Domain, F> + BoundedLinear<Domain, Radon, L2, F>, |
| 161 { |
162 { |
| 162 fn step_length_bound(&self, f: &QuadraticDataTerm<F, Domain, A>) -> DynResult<F> { |
163 fn step_length_bound(&self, f: &QuadraticDataTerm<F, Domain, A>) -> StepLengthBoundValue<F> { |
| 163 // TODO: direct squared calculation |
164 // TODO: direct squared calculation |
| 164 Ok(f.operator().opnorm_bound(Radon, L2)?.powi(2)) |
165 match f.operator().opnorm_bound(Radon, L2) { |
| |
166 Err(_) => StepLengthBoundValue::Failure, |
| |
167 Ok(l) => StepLengthBoundValue::LipschitzFactor(l.powi(2)), |
| |
168 } |
| 165 } |
169 } |
| 166 } |
170 } |
| 167 |
171 |
| 168 #[replace_float_literals(F::cast_from(literal))] |
172 #[replace_float_literals(F::cast_from(literal))] |
| 169 impl<'a, F, A, Domain> StepLengthBoundPD<F, A, DiscreteMeasure<Domain, F>> for RadonSquared |
173 impl<'a, F, A, Domain> StepLengthBoundPD<F, A, DiscreteMeasure<Domain, F>> for RadonSquared |