//! # Activation Layers
//!
//! Users who desire a selectable activation function should
//! consider [`Activation`], which provides an abstraction over:
//! * [`Relu`] - the default,
//! * ['PRelu']
//! * [`Gelu`]
//! * [`LeakyRelu`]
//! * [`SwiGlu`]
//! * [`Selu`]
//! * [`Sigmoid`]
//! * [`HardSigmoid`]
//! * [`HardSwish`]
//! * [`Softplus`]
//! * [`Softsign`]
//! * [`Tanh`]
//! * [`Elu`]
//! * [`Celu`]
//! * [`ThresholdedRelu`]
//!
//! The activation layer [`GLU`] has shape-changing behaviors
//! not compatible with the common API, and is not included
//! in the abstraction wrappers.

mod activation_wrapper;

// These are pub(crate) for dual-export in `nn` without re-exporting
// all of `nn.activation`, or manually listing each symbol.
pub(crate) mod celu;
pub(crate) mod elu;
pub(crate) mod gelu;
pub(crate) mod glu;
pub(crate) mod hard_shrink;
pub(crate) mod hard_sigmoid;
pub(crate) mod hard_swish;
pub(crate) mod leaky_relu;
pub(crate) mod prelu;
pub(crate) mod relu;
pub(crate) mod selu;
pub(crate) mod shrink;
pub(crate) mod sigmoid;
pub(crate) mod soft_shrink;
pub(crate) mod softplus;
pub(crate) mod softsign;
pub(crate) mod swiglu;
pub(crate) mod tanh;
pub(crate) mod thresholded_relu;

pub use activation_wrapper::*;
pub use celu::*;
pub use elu::*;
pub use gelu::*;
pub use glu::*;
pub use hard_shrink::*;
pub use hard_sigmoid::*;
pub use hard_swish::*;
pub use leaky_relu::*;
pub use prelu::*;
pub use relu::*;
pub use selu::*;
pub use shrink::*;
pub use sigmoid::*;
pub use soft_shrink::*;
pub use softplus::*;
pub use softsign::*;
pub use swiglu::*;
pub use tanh::*;
pub use thresholded_relu::*;
