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