acme_tensor/impls/
num.rs

1/*
2    Appellation: num <mod>
3    Contrib: FL03 <jo3mccain@icloud.com>
4*/
5use crate::prelude::Scalar;
6use crate::tensor::TensorBase;
7use num::traits::{Num, One, Zero};
8
9impl<T> Num for TensorBase<T>
10where
11    T: Scalar + Num,
12{
13    type FromStrRadixErr = T::FromStrRadixErr;
14
15    fn from_str_radix(str: &str, radix: u32) -> Result<Self, Self::FromStrRadixErr> {
16        T::from_str_radix(str, radix).map(Self::from_scalar)
17    }
18}
19
20impl<T> One for TensorBase<T>
21where
22    T: Copy + One,
23{
24    fn one() -> Self {
25        Self::from_scalar(T::one())
26    }
27}
28
29impl<T> Zero for TensorBase<T>
30where
31    T: Copy + Zero,
32{
33    fn zero() -> Self {
34        Self::from_scalar(T::zero())
35    }
36
37    fn is_zero(&self) -> bool {
38        self.data().iter().all(|x| x.is_zero())
39    }
40}