use crate::{gradients::NoneTape, unique_id::UniqueId};
#[derive(Debug)]
pub struct Tensor0D<Tape = NoneTape> {
pub(crate) id: UniqueId,
pub(crate) data: std::rc::Rc<f32>,
pub(crate) tape: Tape,
}
#[derive(Debug)]
pub struct Tensor1D<const N: usize, Tape = NoneTape> {
pub(crate) id: UniqueId,
pub(crate) data: std::rc::Rc<[f32; N]>,
pub(crate) tape: Tape,
}
#[derive(Debug)]
pub struct Tensor2D<const M: usize, const N: usize, Tape = NoneTape> {
pub(crate) id: UniqueId,
pub(crate) data: std::rc::Rc<[[f32; N]; M]>,
pub(crate) tape: Tape,
}
#[derive(Debug)]
pub struct Tensor3D<const M: usize, const N: usize, const O: usize, Tape = NoneTape> {
pub(crate) id: UniqueId,
pub(crate) data: std::rc::Rc<[[[f32; O]; N]; M]>,
pub(crate) tape: Tape,
}
#[derive(Debug)]
pub struct Tensor4D<const M: usize, const N: usize, const O: usize, const P: usize, Tape = NoneTape>
{
pub(crate) id: UniqueId,
pub(crate) data: std::rc::Rc<[[[[f32; P]; O]; N]; M]>,
pub(crate) tape: Tape,
}