haar_lib/algebra/
affine.rs

1//! 一次関数の合成
2use crate::algebra::semiring::Semiring;
3pub use crate::algebra::traits::*;
4use crate::{impl_algebra, math::linear::Linear};
5
6/// [`Linear`]の合成
7#[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);