Skip to content

Commit 96a83e6

Browse files
committed
Use calc from eval
1 parent 2bae625 commit 96a83e6

File tree

1 file changed

+2
-71
lines changed

1 file changed

+2
-71
lines changed

lax/src/eig.rs

Lines changed: 2 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -268,34 +268,7 @@ macro_rules! impl_eig_work_c {
268268
}
269269

270270
fn eval(mut self, a: &mut [Self::Elem]) -> Result<EigOwned<Self::Elem>> {
271-
let lwork = self.work.len().to_i32().unwrap();
272-
let mut info = 0;
273-
unsafe {
274-
$ev(
275-
self.jobvl.as_ptr(),
276-
self.jobvr.as_ptr(),
277-
&self.n,
278-
AsPtr::as_mut_ptr(a),
279-
&self.n,
280-
AsPtr::as_mut_ptr(&mut self.eigs),
281-
AsPtr::as_mut_ptr(self.vc_l.as_deref_mut().unwrap_or(&mut [])),
282-
&self.n,
283-
AsPtr::as_mut_ptr(self.vc_r.as_deref_mut().unwrap_or(&mut [])),
284-
&self.n,
285-
AsPtr::as_mut_ptr(&mut self.work),
286-
&lwork,
287-
AsPtr::as_mut_ptr(self.rwork.as_mut().unwrap()),
288-
&mut info,
289-
)
290-
};
291-
info.as_lapack_result()?;
292-
// Hermite conjugate
293-
if let Some(vl) = self.vc_l.as_mut() {
294-
for value in vl {
295-
let value = unsafe { value.assume_init_mut() };
296-
value.im = -value.im;
297-
}
298-
}
271+
let _eig_ref = self.calc(a)?;
299272
Ok(EigOwned {
300273
eigs: unsafe { self.eigs.assume_init() },
301274
vl: self.vc_l.map(|v| unsafe { v.assume_init() }),
@@ -435,49 +408,7 @@ macro_rules! impl_eig_work_r {
435408
}
436409

437410
fn eval(mut self, a: &mut [Self::Elem]) -> Result<EigOwned<Self::Elem>> {
438-
let lwork = self.work.len().to_i32().unwrap();
439-
let mut info = 0;
440-
unsafe {
441-
$ev(
442-
self.jobvl.as_ptr(),
443-
self.jobvr.as_ptr(),
444-
&self.n,
445-
AsPtr::as_mut_ptr(a),
446-
&self.n,
447-
AsPtr::as_mut_ptr(self.eigs_re.as_mut().unwrap()),
448-
AsPtr::as_mut_ptr(self.eigs_im.as_mut().unwrap()),
449-
AsPtr::as_mut_ptr(self.vr_l.as_deref_mut().unwrap_or(&mut [])),
450-
&self.n,
451-
AsPtr::as_mut_ptr(self.vr_r.as_deref_mut().unwrap_or(&mut [])),
452-
&self.n,
453-
AsPtr::as_mut_ptr(&mut self.work),
454-
&lwork,
455-
&mut info,
456-
)
457-
};
458-
info.as_lapack_result()?;
459-
460-
let eigs_re = self
461-
.eigs_re
462-
.as_ref()
463-
.map(|e| unsafe { e.slice_assume_init_ref() })
464-
.unwrap();
465-
let eigs_im = self
466-
.eigs_im
467-
.as_ref()
468-
.map(|e| unsafe { e.slice_assume_init_ref() })
469-
.unwrap();
470-
reconstruct_eigs(eigs_re, eigs_im, &mut self.eigs);
471-
472-
if let Some(v) = self.vr_l.as_ref() {
473-
let v = unsafe { v.slice_assume_init_ref() };
474-
reconstruct_eigenvectors(true, eigs_im, v, self.vc_l.as_mut().unwrap());
475-
}
476-
if let Some(v) = self.vr_r.as_ref() {
477-
let v = unsafe { v.slice_assume_init_ref() };
478-
reconstruct_eigenvectors(false, eigs_im, v, self.vc_r.as_mut().unwrap());
479-
}
480-
411+
let _eig_ref = self.calc(a)?;
481412
Ok(EigOwned {
482413
eigs: unsafe { self.eigs.assume_init() },
483414
vl: self.vc_l.map(|v| unsafe { v.assume_init() }),

0 commit comments

Comments
 (0)