concision_core/activate/
mod.rs1#[doc(inline)]
17pub use self::prelude::*;
18
19pub(crate) mod traits;
20
21mod impls {
22 mod impl_binary;
23 mod impl_linear;
24 mod impl_nonlinear;
25}
26
27pub(crate) mod prelude {
28 pub use super::traits::*;
29 pub use super::{Activate, ActivateGradient};
30}
31
32pub trait Activate<Rhs = Self> {
35 type Output;
36
37 fn activate(&self, rhs: Rhs) -> Self::Output;
38}
39
40pub trait ActivateGradient<Rhs = Self>: Activate<Self::Input> {
41 type Input;
42 type Delta;
43
44 fn activate_gradient(&self, rhs: Rhs) -> Self::Delta;
45}
46
47impl<X, Y> Activate<X> for Box<dyn Activate<X, Output = Y>> {
52 type Output = Y;
53
54 fn activate(&self, rhs: X) -> Self::Output {
55 self.as_ref().activate(rhs)
56 }
57}
58
59impl<X, Y, F> Activate<X> for F
60where
61 F: Fn(X) -> Y,
62{
63 type Output = Y;
64
65 fn activate(&self, rhs: X) -> Self::Output {
66 self(rhs)
67 }
68}