1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use crate::{number::Number, Matrix};
use rayon::prelude::*;

impl<T> Matrix<T>
where
    T: Number,
{
    /// # Trace
    pub fn tr(&self) -> T {
        (0..self.rows).into_par_iter().map(|i| self[i][i]).sum()
    }
}

#[cfg(test)]
mod tests {
    use crate::*;
    #[test]
    fn it_works() {
        let a = mat![
            1.0, 3.0;
            2.0, 4.0
        ];
        let at = a.tr();

        assert_eq!(at, 5.0);
    }
}