From de425490fcef729e0c6c54e29268c1dca1023d9a Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Sat, 24 Sep 2022 00:37:46 +0900 Subject: [PATCH] WIP: EigWorkImpl for c32 and f32 --- lax/src/eig.rs | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/lax/src/eig.rs b/lax/src/eig.rs index 30ff5885..55c19a5b 100644 --- a/lax/src/eig.rs +++ b/lax/src/eig.rs @@ -96,11 +96,11 @@ impl EigWorkImpl for EigWork { } else { (JobEv::None, JobEv::None) }; - let mut eigs: Vec> = vec_uninit(n as usize); - let mut rwork: Vec> = vec_uninit(2 * n as usize); + let mut eigs = vec_uninit(n as usize); + let mut rwork = vec_uninit(2 * n as usize); - let mut vc_l: Option>> = jobvl.then(|| vec_uninit((n * n) as usize)); - let mut vc_r: Option>> = jobvr.then(|| vec_uninit((n * n) as usize)); + let mut vc_l = jobvl.then(|| vec_uninit((n * n) as usize)); + let mut vc_r = jobvr.then(|| vec_uninit((n * n) as usize)); // calc work size let mut info = 0; @@ -165,9 +165,6 @@ impl EigWorkImpl for EigWork { ) }; info.as_lapack_result()?; - - let eigs = unsafe { self.eigs.slice_assume_init_ref() }; - // Hermite conjugate if let Some(vl) = self.vc_l.as_mut() { for value in vl { @@ -176,7 +173,7 @@ impl EigWorkImpl for EigWork { } } Ok(EigRef { - eigs, + eigs: unsafe { self.eigs.slice_assume_init_ref() }, vl: self .vc_l .as_ref() @@ -210,8 +207,6 @@ impl EigWorkImpl for EigWork { ) }; info.as_lapack_result()?; - let eigs = unsafe { self.eigs.assume_init() }; - // Hermite conjugate if let Some(vl) = self.vc_l.as_mut() { for value in vl { @@ -220,7 +215,7 @@ impl EigWorkImpl for EigWork { } } Ok(Eig { - eigs, + eigs: unsafe { self.eigs.assume_init() }, vl: self.vc_l.map(|v| unsafe { v.assume_init() }), vr: self.vc_r.map(|v| unsafe { v.assume_init() }), }) @@ -240,13 +235,12 @@ impl EigWorkImpl for EigWork { } else { (JobEv::None, JobEv::None) }; - let mut eigs_re: Vec> = vec_uninit(n as usize); - let mut eigs_im: Vec> = vec_uninit(n as usize); - - let mut vr_l: Option>> = jobvl.then(|| vec_uninit((n * n) as usize)); - let mut vr_r: Option>> = jobvr.then(|| vec_uninit((n * n) as usize)); - let vc_l: Option>> = jobvl.then(|| vec_uninit((n * n) as usize)); - let vc_r: Option>> = jobvr.then(|| vec_uninit((n * n) as usize)); + let mut eigs_re = vec_uninit(n as usize); + let mut eigs_im = vec_uninit(n as usize); + let mut vr_l = jobvl.then(|| vec_uninit((n * n) as usize)); + let mut vr_r = jobvr.then(|| vec_uninit((n * n) as usize)); + let vc_l = jobvl.then(|| vec_uninit((n * n) as usize)); + let vc_r = jobvr.then(|| vec_uninit((n * n) as usize)); // calc work size let mut info = 0;