use crate::tensor::*;
impl<T> Tensor<T>
where
T: Default + std::ops::Add<Output = T> + Copy,
{
pub fn tens_add(&self, tens2: &Tensor<T>) -> Option<Tensor<T>>{
if self.get_shape() != tens2.get_shape(){
return None;
}
let mut return_data = Vec::with_capacity(self.get_data().len());
for i in 0..self.get_data().len(){
return_data.push(self.get_data()[i] + tens2.get_data()[i]);
}
Tensor::from_data(&return_data, self.get_shape())
}
pub fn tens_add_mut(&mut self, tens2: &Tensor<T>){
if self.get_shape() != tens2.get_shape(){
return;
}
let mut return_data = Vec::with_capacity(self.get_data().len());
for i in 0..self.get_data().len(){
return_data.push(self.get_data()[i] + tens2.get_data()[i]);
}
self.set_data(&return_data);
}
pub fn add(&self, val: T) -> Tensor<T>{
let mut return_data = Vec::with_capacity(self.get_data().len());
for i in 0..self.get_data().len(){
return_data.push(self.get_data()[i] + val);
}
Tensor::from_data(&return_data, self.get_shape()).unwrap()
}
pub fn add_mut(&mut self, val: T){
let mut return_data = Vec::with_capacity(self.get_data().len());
for i in 0..self.get_data().len(){
return_data.push(self.get_data()[i] + val);
}
self.set_data(&return_data);
}
pub fn sum(&self) -> T{
let mut return_data = self.get_data()[0];
for i in 1..self.get_data().len(){
return_data = return_data + self.get_data()[i];
}
return_data
}
}