haar_lib/algebra/
affine.rs1use crate::algebra::semiring::Semiring;
3pub use crate::algebra::traits::*;
4use crate::{impl_algebra, math::linear::Linear};
5
6#[derive(Clone, Copy, Default, Debug, PartialEq, Eq, Hash)]
8pub struct Composition<S: Semiring>(pub S);
9
10impl_algebra!(
11 {T: Copy, S: Semiring<Element = T>} Composition<S>;
12 set: Linear<T>;
13 op: |Self(ref s): &Self, f: Linear<T>, g: Linear<T>| Linear::new(s.mul(f.a, g.a), s.add(s.mul(f.a, g.b), f.b));
14 id: |Self(ref s): &Self| Linear::new(s.one(), s.zero());
15 assoc;
16);