src/zero.rs

changeset 6
df9628092285
child 13
f67949050a32
equal deleted inserted replaced
5:f248e1434c3b 6:df9628092285
1
2 use alg_tools::mapping::Apply;
3 use crate::manifold::ManifoldPoint;
4 use crate::fb::{Grad, Desc, Prox};
5 use std::marker::PhantomData;
6
7 /// Zero function on manifolds.
8 pub struct ZeroFn<M : ManifoldPoint> {
9 _phantoms : PhantomData<M>
10 }
11
12 impl<M: ManifoldPoint> ZeroFn<M> {
13 pub fn new() -> Self {
14 ZeroFn{_phantoms : PhantomData }
15 }
16 }
17
18 impl<M : ManifoldPoint> Apply<M> for ZeroFn<M> {
19 type Output = f64;
20
21 fn apply(&self, _x : M) -> Self::Output {
22 0.0
23 }
24 }
25
26 impl<'a, M : ManifoldPoint> Apply<&'a M> for ZeroFn<M> {
27 type Output = f64;
28
29 fn apply(&self, _x : &'a M) -> Self::Output {
30 0.0
31 }
32 }
33
34 impl<M : ManifoldPoint> Desc<M> for ZeroFn<M> {
35 fn desc(&self, _τ : f64, x : M) -> M {
36 x
37 }
38 }
39
40 impl<M : ManifoldPoint> Grad<M> for ZeroFn<M> {
41 fn grad(&self, x : &M) -> M::Tangent {
42 x.tangent_origin()
43 }
44 }
45
46 impl<M : ManifoldPoint> Prox<M> for ZeroFn<M> {
47 fn prox(&self, _τ : f64, x : M) -> M {
48 x
49 }
50 }

mercurial