| 2 Some convex analysis basics |
2 Some convex analysis basics |
| 3 */ |
3 */ |
| 4 |
4 |
| 5 use crate::error::DynResult; |
5 use crate::error::DynResult; |
| 6 use crate::euclidean::Euclidean; |
6 use crate::euclidean::Euclidean; |
| 7 use crate::instance::{ClosedSpace, DecompositionMut, Instance}; |
7 use crate::instance::{DecompositionMut, Instance}; |
| 8 use crate::linops::{IdOp, Scaled, SimpleZeroOp, AXPY}; |
8 use crate::linops::{IdOp, Scaled, SimpleZeroOp, AXPY}; |
| 9 use crate::mapping::{DifferentiableImpl, LipschitzDifferentiableImpl, Mapping, Space}; |
9 use crate::mapping::{DifferentiableImpl, LipschitzDifferentiableImpl, Mapping, Space}; |
| 10 use crate::norms::*; |
10 use crate::norms::*; |
| 11 use crate::operator_arithmetic::{Constant, Weighted}; |
11 use crate::operator_arithmetic::{Constant, Weighted}; |
| 12 use crate::types::*; |
12 use crate::types::*; |
| 200 */ |
200 */ |
| 201 |
201 |
| 202 impl<F, E, Domain> Mapping<Domain> for NormProjection<F, E> |
202 impl<F, E, Domain> Mapping<Domain> for NormProjection<F, E> |
| 203 where |
203 where |
| 204 Domain: Normed<F> + Projection<F, E>, |
204 Domain: Normed<F> + Projection<F, E>, |
| 205 Domain::OwnedSpace: ClosedSpace, |
|
| 206 F: Float, |
205 F: Float, |
| 207 E: NormExponent, |
206 E: NormExponent, |
| 208 { |
207 { |
| 209 type Codomain = Domain::OwnedSpace; |
208 type Codomain = Domain::OwnedSpace; |
| 210 |
209 |
| 410 impl<X, F> DifferentiableImpl<X> for Norm222<F> |
409 impl<X, F> DifferentiableImpl<X> for Norm222<F> |
| 411 where |
410 where |
| 412 F: Float, |
411 F: Float, |
| 413 X: Euclidean<F>, |
412 X: Euclidean<F>, |
| 414 { |
413 { |
| 415 type Derivative = X::Owned; |
414 type Derivative = X::OwnedEuclidean; |
| 416 |
415 |
| 417 fn differential_impl<I: Instance<X>>(&self, x: I) -> Self::Derivative { |
416 fn differential_impl<I: Instance<X>>(&self, x: I) -> Self::Derivative { |
| 418 x.own().into_owned() |
417 x.into_owned() |
| 419 } |
418 } |
| 420 } |
419 } |
| 421 |
420 |
| 422 impl<X, F> LipschitzDifferentiableImpl<X, L2> for Norm222<F> |
421 impl<X, F> LipschitzDifferentiableImpl<X, L2> for Norm222<F> |
| 423 where |
422 where |