src/pdps.rs

changeset 98
b9818eb24b47
parent 93
8f1e57821d76
equal deleted inserted replaced
97:f91f382ba4ae 98:b9818eb24b47
51 use alg_tools::error::DynResult; 51 use alg_tools::error::DynResult;
52 use alg_tools::iterate::AlgIteratorFactory; 52 use alg_tools::iterate::AlgIteratorFactory;
53 use alg_tools::linops::{Mapping, Space, AXPY}; 53 use alg_tools::linops::{Mapping, Space, AXPY};
54 use alg_tools::mapping::{DataTerm, Instance}; 54 use alg_tools::mapping::{DataTerm, Instance};
55 use alg_tools::nalgebra_support::ToNalgebraRealField; 55 use alg_tools::nalgebra_support::ToNalgebraRealField;
56 use alg_tools::norms::Norm;
56 use anyhow::ensure; 57 use anyhow::ensure;
57 use clap::ValueEnum; 58 use clap::ValueEnum;
59 use measures::Radon;
58 use numeric_literals::replace_float_literals; 60 use numeric_literals::replace_float_literals;
59 use serde::{Deserialize, Serialize}; 61 use serde::{Deserialize, Serialize};
60 62
61 /// Acceleration 63 /// Acceleration
62 #[derive(Clone, Copy, Eq, PartialEq, Serialize, Deserialize, ValueEnum, Debug)] 64 #[derive(Clone, Copy, Eq, PartialEq, Serialize, Deserialize, ValueEnum, Debug)]
154 F: Float + ToNalgebraRealField, 156 F: Float + ToNalgebraRealField,
155 I: AlgIteratorFactory<IterInfo<F>>, 157 I: AlgIteratorFactory<IterInfo<F>>,
156 A: ForwardModel<DiscreteMeasure<U, F>, F>, 158 A: ForwardModel<DiscreteMeasure<U, F>, F>,
157 for<'b> &'b A::Observable: Instance<A::Observable>, 159 for<'b> &'b A::Observable: Instance<A::Observable>,
158 A::Observable: AXPY<Field = F>, 160 A::Observable: AXPY<Field = F>,
159 DiscreteMeasure<U, F>: SpikeMerging<F>, 161 DiscreteMeasure<U, F>: SpikeMerging<F> + Norm<Radon, F>,
160 Reg: RegTerm<U, F>, 162 Reg: RegTerm<U, F>,
161 Phi: Conjugable<A::Observable, F>, 163 Phi: Conjugable<A::Observable, F>,
162 for<'b> Phi::Conjugate<'b>: Prox<A::Observable>, 164 for<'b> Phi::Conjugate<'b>: Prox<A::Observable>,
163 P: ProxPenalty<U, A::PreadjointCodomain, Reg, F> 165 P: ProxPenalty<U, A::PreadjointCodomain, Reg, F>
164 + StepLengthBoundPD<F, A, DiscreteMeasure<U, F>>, 166 + StepLengthBoundPD<F, A, DiscreteMeasure<U, F>>,
190 let mut μ = μ0.unwrap_or_else(|| DiscreteMeasure::new()); 192 let mut μ = μ0.unwrap_or_else(|| DiscreteMeasure::new());
191 let mut y = f.residual(&μ); 193 let mut y = f.residual(&μ);
192 let full_stats = |μ: &DiscreteMeasure<U, F>, ε, stats| IterInfo { 194 let full_stats = |μ: &DiscreteMeasure<U, F>, ε, stats| IterInfo {
193 value: f.apply(μ) + reg.apply(μ), 195 value: f.apply(μ) + reg.apply(μ),
194 n_spikes: μ.len(), 196 n_spikes: μ.len(),
197 μ_norm: μ.norm(Radon),
195 ε, 198 ε,
196 // postprocessing: config.postprocessing.then(|| μ.clone()), 199 // postprocessing: config.postprocessing.then(|| μ.clone()),
197 ..stats 200 ..stats
198 }; 201 };
199 let mut stats = IterInfo::new(); 202 let mut stats = IterInfo::new();

mercurial