chela 0.0.2

High-performance Machine Learning, Auto-Differentiation and Tensor Algebra crate for Rust
Documentation
use crate::util::to_vec::ToVec;
use crate::{NdArray, RawDataType};

pub(crate) trait IntoNdArray<'a, T: RawDataType> {
    #[allow(clippy::wrong_self_convention)]
    fn as_ndarray(self) -> NdArray<'a, T>;
}

impl<'a, T: RawDataType> IntoNdArray<'a, T> for NdArray<'a, T> {
    fn as_ndarray(self) -> NdArray<'a, T> {
        self
    }
}

impl<'a, T: RawDataType> IntoNdArray<'a, T> for T {
    fn as_ndarray(self) -> NdArray<'a, T> {
        NdArray::scalar(self)
    }
}

impl<'a, T: RawDataType, const N: usize> IntoNdArray<'a, T> for [T; N] {
    fn as_ndarray(self) -> NdArray<'a, T> {
        unsafe { NdArray::from_contiguous_owned_buffer(vec![N], self.to_vec()) }
    }
}

impl<'a, T: RawDataType> IntoNdArray<'a, T> for Vec<T> {
    fn as_ndarray(self) -> NdArray<'a, T> {
        unsafe { NdArray::from_contiguous_owned_buffer(vec![self.len()], self) }
    }
}