diff --git a/src/impls/mod.rs b/src/impls/mod.rs index 7a97a974..7b7be4f2 100644 --- a/src/impls/mod.rs +++ b/src/impls/mod.rs @@ -1,7 +1,5 @@ //! Implement trait bindings of LAPACK pub mod outer; -pub mod qr; -pub mod svd; pub mod eigh; pub mod solve; pub mod cholesky; diff --git a/src/impls/qr.rs b/src/impls/qr.rs deleted file mode 100644 index 277d1685..00000000 --- a/src/impls/qr.rs +++ /dev/null @@ -1,41 +0,0 @@ -//! Implement QR decomposition - -use std::cmp::min; -use lapack::c::*; -use num_traits::Zero; - -use error::LapackError; - -pub trait ImplQR: Sized { - fn qr(layout: Layout, n: usize, m: usize, a: Vec) -> Result<(Vec, Vec), LapackError>; -} - -macro_rules! impl_qr { - ($scalar:ty, $geqrf:path, $orgqr:path) => { -impl ImplQR for $scalar { - fn qr(layout: Layout, n: usize, m: usize, mut a: Vec) -> Result<(Vec, Vec), LapackError> { - let n = n as i32; - let m = m as i32; - let k = min(m, n); - let lda = match layout { - Layout::ColumnMajor => m, - Layout::RowMajor => n, - }; - let mut tau = vec![Self::zero(); k as usize]; - let info = $geqrf(layout, m, n, &mut a, lda, &mut tau); - if info != 0 { - return Err(From::from(info)); - } - let r = a.clone(); - let info = $orgqr(layout, m, k, k, &mut a, lda, &mut tau); - if info == 0 { - Ok((a, r)) - } else { - Err(From::from(info)) - } - } -} -}} // endmacro - -impl_qr!(f64, dgeqrf, dorgqr); -impl_qr!(f32, sgeqrf, sorgqr); diff --git a/src/impls/svd.rs b/src/impls/svd.rs deleted file mode 100644 index 648901c8..00000000 --- a/src/impls/svd.rs +++ /dev/null @@ -1,41 +0,0 @@ -//! Implement SVD - -use std::cmp::min; -use lapack::c::*; -use num_traits::Zero; - -use error::LapackError; - -pub trait ImplSVD: Sized { - fn svd(layout: Layout, n: usize, m: usize, a: Vec) -> Result<(Vec, Vec, Vec), LapackError>; -} - -macro_rules! impl_svd { - ($scalar:ty, $gesvd:path) => { -impl ImplSVD for $scalar { - fn svd(layout: Layout, n: usize, m: usize, mut a: Vec) -> Result<(Vec, Vec, Vec), LapackError> { - let k = min(n, m); - let n = n as i32; - let m = m as i32; - let lda = match layout { - Layout::RowMajor => n, - Layout::ColumnMajor => m, - }; - let ldu = m; - let ldvt = n; - let mut u = vec![Self::zero(); (ldu * m) as usize]; - let mut vt = vec![Self::zero(); (ldvt * n) as usize]; - let mut s = vec![Self::zero(); n as usize]; - let mut superb = vec![Self::zero(); k-2]; - let info = $gesvd(layout, 'A' as u8, 'A' as u8, m, n, &mut a, lda, &mut s, &mut u, ldu, &mut vt, ldvt, &mut superb); - if info == 0 { - Ok((u, s, vt)) - } else { - Err(From::from(info)) - } - } -} -}} // end macro_rules - -impl_svd!(f64, dgesvd); -impl_svd!(f32, sgesvd); diff --git a/src/matrix.rs b/src/matrix.rs index b135b6f7..82a8c665 100644 --- a/src/matrix.rs +++ b/src/matrix.rs @@ -6,11 +6,10 @@ use ndarray::DataMut; use lapack::c::Layout; use super::error::{LinalgError, StrideError}; -use super::impls::svd::ImplSVD; use super::impls::solve::ImplSolve; -pub trait MFloat: ImplSVD + ImplSolve + NdFloat {} -impl MFloat for A {} +pub trait MFloat: ImplSolve + NdFloat {} +impl MFloat for A {} /// Methods for general matrices pub trait Matrix: Sized {