| 2 Traits for mathematical functions. |
2 Traits for mathematical functions. |
| 3 */ |
3 */ |
| 4 |
4 |
| 5 use std::marker::PhantomData; |
5 use std::marker::PhantomData; |
| 6 use std::borrow::Cow; |
6 use std::borrow::Cow; |
| 7 use crate::types::{Num, Float}; |
7 use crate::types::{Num, Float, ClosedMul}; |
| 8 use serde::Serialize; |
|
| 9 use crate::loc::Loc; |
8 use crate::loc::Loc; |
| 10 pub use crate::instance::{Instance, Decomposition, BasicDecomposition, Space}; |
9 pub use crate::instance::{Instance, Decomposition, BasicDecomposition, Space}; |
| 11 use crate::norms::{Norm, NormExponent}; |
10 use crate::norms::{Norm, NormExponent}; |
| 12 |
11 |
| 13 /// A mapping from `Domain` to `Codomain`. |
12 /// A mapping from `Domain` to `Codomain`. |
| 43 Domain : Norm<F, E>, |
42 Domain : Norm<F, E>, |
| 44 F : Num |
43 F : Num |
| 45 { |
44 { |
| 46 Composition{ outer : self, inner : other, intermediate_norm_exponent : norm } |
45 Composition{ outer : self, inner : other, intermediate_norm_exponent : norm } |
| 47 } |
46 } |
| |
47 |
| |
48 /// Multiply `self` by the scalar `a`. |
| |
49 #[inline] |
| |
50 fn weigh<C>(self, a : C) -> Weighted<Self, C> |
| |
51 where |
| |
52 Self : Sized, |
| |
53 C : Constant, |
| |
54 Self::Codomain : ClosedMul<C::Type>, |
| |
55 { |
| |
56 Weighted { weight : a, base_fn : self } |
| |
57 } |
| 48 } |
58 } |
| 49 |
59 |
| 50 /// Automatically implemented shorthand for referring to [`Mapping`]s from [`Loc<F, N>`] to `F`. |
60 /// Automatically implemented shorthand for referring to [`Mapping`]s from [`Loc<F, N>`] to `F`. |
| 51 pub trait RealMapping<F : Float, const N : usize> |
61 pub trait RealMapping<F : Float, const N : usize> |
| 52 : Mapping<Loc<F, N>, Codomain = F> {} |
62 : Mapping<Loc<F, N>, Codomain = F> {} |