use super::{Float, Matrix}; use core::ops; impl ops::Add<&Matrix> for Matrix { type Output = Option>; fn add(self, other: &Matrix) -> Self::Output { self.add_to(other) } } impl ops::Sub<&Matrix> for Matrix { type Output = Option>; fn sub(self, other: &Matrix) -> Self::Output { self.subtract(other) } } impl ops::Mul for Matrix { type Output = Matrix; fn mul(self, scalar: T) -> Self::Output { self.scale(scalar) } } impl ops::Div for Matrix { type Output = Matrix; fn div(self, scalar: T) -> Self::Output { self.scale(T::one() / scalar) } } impl ops::AddAssign<&Matrix> for Matrix { fn add_assign(&mut self, other: &Matrix) { if let Some(result) = self.add_to(other) { *self = result; } } } impl ops::SubAssign<&Matrix> for Matrix { fn sub_assign(&mut self, other: &Matrix) { if let Some(result) = self.subtract(other) { *self = result; } } } impl ops::MulAssign for Matrix { fn mul_assign(&mut self, scalar: T) { *self = self.scale(scalar); } } impl ops::DivAssign for Matrix { fn div_assign(&mut self, scalar: T) { *self = self.scale(T::one() / scalar); } }