6 use std::borrow::Cow; |
6 use std::borrow::Cow; |
7 use crate::types::{Num, Float, ClosedMul}; |
7 use crate::types::{Num, Float, ClosedMul}; |
8 use crate::loc::Loc; |
8 use crate::loc::Loc; |
9 pub use crate::instance::{Instance, Decomposition, BasicDecomposition, Space}; |
9 pub use crate::instance::{Instance, Decomposition, BasicDecomposition, Space}; |
10 use crate::norms::{Norm, NormExponent}; |
10 use crate::norms::{Norm, NormExponent}; |
11 |
11 use crate::operator_arithmetic::{Weighted, Constant}; |
12 /// A mapping from `Domain` to `Codomain`. |
12 |
13 /// |
13 /// A mapping from `Domain` to `Self::Codomain`. |
14 /// This is automatically implemented when the relevant [`Apply`] are implemented. |
|
15 pub trait Mapping<Domain : Space> { |
14 pub trait Mapping<Domain : Space> { |
16 type Codomain : Space; |
15 type Codomain : Space; |
17 |
16 |
18 /// Compute the value of `self` at `x`. |
17 /// Compute the value of `self` at `x`. |
19 fn apply<I : Instance<Domain>>(&self, x : I) -> Self::Codomain; |
18 fn apply<I : Instance<Domain>>(&self, x : I) -> Self::Codomain; |
126 Differential{ g : Cow::Borrowed(self), _space : PhantomData } |
125 Differential{ g : Cow::Borrowed(self), _space : PhantomData } |
127 } |
126 } |
128 } |
127 } |
129 |
128 |
130 |
129 |
131 /// Container for the differential [`Mapping`] of a [`Differentiable`] mapping. |
130 /// Container for the differential [`Mapping`] of a [`DifferentiableMapping`]. |
132 pub struct Differential<'a, X, G : Clone> { |
131 pub struct Differential<'a, X, G : Clone> { |
133 g : Cow<'a, G>, |
132 g : Cow<'a, G>, |
134 _space : PhantomData<X> |
133 _space : PhantomData<X> |
135 } |
134 } |
136 |
135 |