concision_core/nn/layer/
impl_layer_ext.rs

1/*
2    Appellation: impl_layer_ext <module>
3    Created At: 2026.01.12:09:33:36
4    Contrib: @FL03
5*/
6use crate::activate::Activator;
7use crate::nn::layer::LayerBase;
8use crate::nn::{RawLayer, RawLayerMut};
9use concision_params::RawParams;
10use concision_traits::Forward;
11
12impl<F, P, A, X, Y> Activator<X> for LayerBase<F, P>
13where
14    F: Activator<X, Output = Y>,
15    P: RawParams<Elem = A>,
16{
17    type Output = F::Output;
18
19    fn activate(&self, input: X) -> Self::Output {
20        self.rho().activate(input)
21    }
22}
23
24impl<F, P, A, X, Y, Z> Forward<X> for LayerBase<F, P>
25where
26    F: Activator<Y, Output = Z>,
27    P: RawParams<Elem = A> + Forward<X, Output = Y>,
28{
29    type Output = F::Output;
30
31    fn forward(&self, input: &X) -> Self::Output {
32        self.rho().activate(self.params().forward(input))
33    }
34}
35
36impl<F, P, A> RawLayer<F, A> for LayerBase<F, P>
37where
38    F: Activator<A>,
39    P: RawParams<Elem = A>,
40{
41    type Params<_T> = P;
42
43    fn rho(&self) -> &F {
44        &self.rho
45    }
46
47    fn params(&self) -> &P {
48        &self.params
49    }
50}
51impl<F, P, A> RawLayerMut<F, A> for LayerBase<F, P>
52where
53    F: Activator<A>,
54    P: RawParams<Elem = A>,
55{
56    fn params_mut(&mut self) -> &mut P {
57        &mut self.params
58    }
59}