1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
use crate::{matrix::Matrix, number::Number, types::*}; fn trace<T, U>(slf: &Matrix<T, U>) -> U where T: Type, U: Number, { (0..slf.rows).into_iter().map(|i| slf[i][i]).sum() } macro_rules! implement { ( $($t: ty),+ ) => { $( impl<U: Number> Matrix<$t, U> { /// # Trace pub fn trace(&self) -> U { trace(self) } } )+ }; } implement! {Square, UpperTriangle, LowerTriangle, Diagonal, PositiveDefinite, PositiveSemiDefinite}