pub fn is_matrix_invertible<T, const M: usize, const N: usize>(
    matrix: &[[T; N]; M]
) -> bool
where T: Zero + Neg<Output = T> + One + Copy + AddAssign + PartialOrd + MulAssign + Sub<Output = T> + Div<Output = T>,