#[cfg(feature = "alloc")]
use alloc::boxed::Box;
use ndarray::{
ArrayBase, CowRepr, Dimension, Ix2, OwnedArcRepr, OwnedRepr, RawData, RawRef, RawViewRepr,
ViewRepr,
};
pub type Params<A = f32, D = Ix2> = ParamsBase<OwnedRepr<A>, D, A>;
pub type ArcParams<A = f32, D = Ix2> = ParamsBase<OwnedArcRepr<A>, D, A>;
pub type ParamsView<'a, A = f32, D = Ix2> = ParamsBase<ViewRepr<&'a A>, D, A>;
pub type ParamsViewMut<'a, A = f32, D = Ix2> = ParamsBase<ViewRepr<&'a mut A>, D, A>;
pub type CowParams<'a, A = f32, D = Ix2> = ParamsBase<CowRepr<'a, A>, D, A>;
pub type RawViewParams<A = f32, D = Ix2> = ParamsBase<RawViewRepr<*const A>, D, A>;
pub type RawMutParams<A = f32, D = Ix2> = ParamsBase<RawViewRepr<*mut A>, D, A>;
#[cfg(feature = "alloc")]
pub struct ParamsRef<A, D: Dimension> {
pub bias: Box<RawRef<A, D::Smaller>>,
pub weights: RawRef<A, D>,
}
pub struct ParamsBase<S, D = ndarray::Ix2, A = <S as RawData>::Elem>
where
D: Dimension,
S: RawData<Elem = A>,
{
pub bias: ArrayBase<S, D::Smaller, A>,
pub weights: ArrayBase<S, D, A>,
}