use super::simple::qr_faer;
use faer_traits::ComplexField;
use mdarray::{DSlice, DTensor, Layout, tensor};
use mdarray_linalg::identity;
use mdarray_linalg::qr::QR;
use num_complex::ComplexFloat;
use crate::Faer;
impl<T> QR<T> for Faer
where
T: ComplexFloat
+ ComplexField
+ Default
+ std::convert::From<<T as num_complex::ComplexFloat>::Real>
+ 'static,
{
fn qr<L: Layout>(&self, a: &mut DSlice<T, 2, L>) -> (DTensor<T, 2>, DTensor<T, 2>) {
let (m, n) = *a.shape();
let mut q_mda = identity(m);
let mut r_mda = tensor![[T::default(); n]; m];
qr_faer(a, Some(&mut q_mda), &mut r_mda);
(q_mda, r_mda)
}
fn qr_overwrite<L: Layout, Lq: Layout, Lr: Layout>(
&self,
a: &mut DSlice<T, 2, L>,
q: &mut DSlice<T, 2, Lq>,
r: &mut DSlice<T, 2, Lr>,
) {
qr_faer::<T, L, Lq, Lr>(a, Some(q), r)
}
}