use crate::shape::Axis;
use crate::tensor::TensorBase;
use core::iter::{Product, Sum};
impl<T> TensorBase<T>
where
T: Copy,
{
pub fn product(&self) -> T
where
T: Product,
{
self.data().iter().copied().product()
}
#[doc(hidden)]
pub fn product_axis(&self, _axis: Axis) -> T {
unimplemented!("product_axis")
}
pub fn sum(&self) -> T
where
T: Sum,
{
self.data().iter().copied().sum()
}
#[doc(hidden)]
pub fn sum_axis(&self, _axis: Axis) -> T {
unimplemented!("sum_axis")
}
}
impl<T> IntoIterator for TensorBase<T> {
type Item = T;
type IntoIter = std::vec::IntoIter<T>;
fn into_iter(self) -> Self::IntoIter {
self.data.into_iter()
}
}
impl<T> FromIterator<T> for TensorBase<T> {
fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self {
Self::from_vec(Vec::from_iter(iter))
}
}