use crate::algebra::abstr::{AbsDiffEq, Field, Scalar};
use crate::algebra::linear::matrix::{Diagonal, EigenDec, EigenDecomposition, General};
use crate::elementary::Power;
impl<T> EigenDecomposition<T> for Diagonal<T>
where
T: Field + Scalar + Power + AbsDiffEq<Epsilon = T>,
{
fn dec_eigen(&self) -> Result<EigenDec<T>, String> {
let (m, _): (usize, usize) = self.dim();
let values: Diagonal<T> = self.clone();
let vectors: General<T> = Diagonal::new(&vec![T::one(); m]).into();
Ok(EigenDec::new(values, vectors))
}
}