Skip to content

Commit

Permalink
WIP: EigWorkImpl for c32 and f32
Browse files Browse the repository at this point in the history
  • Loading branch information
termoshtt committed Sep 23, 2022
1 parent 60946d1 commit de42549
Showing 1 changed file with 12 additions and 18 deletions.
30 changes: 12 additions & 18 deletions lax/src/eig.rs
Expand Up @@ -96,11 +96,11 @@ impl EigWorkImpl for EigWork<c64> {
} else {
(JobEv::None, JobEv::None)
};
let mut eigs: Vec<MaybeUninit<c64>> = vec_uninit(n as usize);
let mut rwork: Vec<MaybeUninit<f64>> = 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<Vec<MaybeUninit<c64>>> = jobvl.then(|| vec_uninit((n * n) as usize));
let mut vc_r: Option<Vec<MaybeUninit<c64>>> = 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;
Expand Down Expand Up @@ -165,9 +165,6 @@ impl EigWorkImpl for EigWork<c64> {
)
};
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 {
Expand All @@ -176,7 +173,7 @@ impl EigWorkImpl for EigWork<c64> {
}
}
Ok(EigRef {
eigs,
eigs: unsafe { self.eigs.slice_assume_init_ref() },
vl: self
.vc_l
.as_ref()
Expand Down Expand Up @@ -210,8 +207,6 @@ impl EigWorkImpl for EigWork<c64> {
)
};
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 {
Expand All @@ -220,7 +215,7 @@ impl EigWorkImpl for EigWork<c64> {
}
}
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() }),
})
Expand All @@ -240,13 +235,12 @@ impl EigWorkImpl for EigWork<f64> {
} else {
(JobEv::None, JobEv::None)
};
let mut eigs_re: Vec<MaybeUninit<f64>> = vec_uninit(n as usize);
let mut eigs_im: Vec<MaybeUninit<f64>> = vec_uninit(n as usize);

let mut vr_l: Option<Vec<MaybeUninit<f64>>> = jobvl.then(|| vec_uninit((n * n) as usize));
let mut vr_r: Option<Vec<MaybeUninit<f64>>> = jobvr.then(|| vec_uninit((n * n) as usize));
let vc_l: Option<Vec<MaybeUninit<c64>>> = jobvl.then(|| vec_uninit((n * n) as usize));
let vc_r: Option<Vec<MaybeUninit<c64>>> = 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;
Expand Down

0 comments on commit de42549

Please sign in to comment.