From 838bd9a81ce9fcc443f4026e4f63eafc2add01d9 Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Sat, 30 Jan 2021 16:34:24 +0900 Subject: [PATCH 1/3] cauchy 0.3.0, num-complex 0.3.1, rand 0.7.3 --- lax/Cargo.toml | 2 +- ndarray-linalg/Cargo.toml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lax/Cargo.toml b/lax/Cargo.toml index 8e3d3181..ced2042d 100644 --- a/lax/Cargo.toml +++ b/lax/Cargo.toml @@ -22,7 +22,7 @@ intel-mkl-system = ["intel-mkl-src/mkl-dynamic-lp64-seq"] [dependencies] thiserror = "1.0" -cauchy = "0.2.0" +cauchy = "0.3.0" num-traits = "0.2" lapack = "0.16.0" diff --git a/ndarray-linalg/Cargo.toml b/ndarray-linalg/Cargo.toml index 9405473c..f4b8e4d1 100644 --- a/ndarray-linalg/Cargo.toml +++ b/ndarray-linalg/Cargo.toml @@ -29,10 +29,10 @@ intel-mkl-static = ["lax/intel-mkl-static"] intel-mkl-system = ["lax/intel-mkl-system"] [dependencies] -cauchy = "0.2.2" -num-complex = "0.2.4" +cauchy = "0.3.0" +num-complex = "0.3.1" num-traits = "0.2.11" -rand = "0.5" +rand = "0.7.3" thiserror = "1.0.20" [dependencies.ndarray] From 356e2ab1009f988b22bb92e0ef6d1f8fd790225d Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Sat, 6 Feb 2021 15:28:21 +0900 Subject: [PATCH 2/3] lapack 0.17 (with git option until released) --- lax/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lax/Cargo.toml b/lax/Cargo.toml index ced2042d..c222d66f 100644 --- a/lax/Cargo.toml +++ b/lax/Cargo.toml @@ -24,7 +24,7 @@ intel-mkl-system = ["intel-mkl-src/mkl-dynamic-lp64-seq"] thiserror = "1.0" cauchy = "0.3.0" num-traits = "0.2" -lapack = "0.16.0" +lapack = { version = "0.17.0", git = "http://github.com/blas-lapack-rs/lapack" } [dependencies.intel-mkl-src] version = "0.6.0" From 4fa1b2b1813749db71554a40dfe1eb1ba74fce6d Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Sat, 6 Feb 2021 17:11:14 +0900 Subject: [PATCH 3/3] Explicit declaration of Float::exp and Float::abs --- ndarray-linalg/src/cholesky.rs | 8 ++++---- ndarray-linalg/src/solve.rs | 6 +++--- ndarray-linalg/src/solveh.rs | 12 ++++++------ ndarray-linalg/tests/det.rs | 2 +- ndarray-linalg/tests/opnorm.rs | 1 - ndarray-linalg/tests/vector.rs | 1 - 6 files changed, 14 insertions(+), 16 deletions(-) diff --git a/ndarray-linalg/src/cholesky.rs b/ndarray-linalg/src/cholesky.rs index 5dd40cae..8ce0da84 100644 --- a/ndarray-linalg/src/cholesky.rs +++ b/ndarray-linalg/src/cholesky.rs @@ -102,14 +102,14 @@ where type Output = ::Real; fn detc(&self) -> Self::Output { - self.ln_detc().exp() + Float::exp(self.ln_detc()) } fn ln_detc(&self) -> Self::Output { self.factor .diag() .iter() - .map(|elem| elem.square().ln()) + .map(|elem| Float::ln(elem.square())) .sum::() } } @@ -443,7 +443,7 @@ where type Output = Result<::Real>; fn detc(&self) -> Self::Output { - Ok(self.ln_detc()?.exp()) + Ok(Float::exp(self.ln_detc()?)) } fn ln_detc(&self) -> Self::Output { @@ -459,7 +459,7 @@ where type Output = Result<::Real>; fn detc_into(self) -> Self::Output { - Ok(self.ln_detc_into()?.exp()) + Ok(Float::exp(self.ln_detc_into()?)) } fn ln_detc_into(self) -> Self::Output { diff --git a/ndarray-linalg/src/solve.rs b/ndarray-linalg/src/solve.rs index e58b27a0..2277d227 100644 --- a/ndarray-linalg/src/solve.rs +++ b/ndarray-linalg/src/solve.rs @@ -362,7 +362,7 @@ pub trait Determinant { /// Computes the determinant of the matrix. fn det(&self) -> Result { let (sign, ln_det) = self.sln_det()?; - Ok(sign * A::from_real(ln_det.exp())) + Ok(sign * A::from_real(Float::exp(ln_det))) } /// Computes the `(sign, natural_log)` of the determinant of the matrix. @@ -387,7 +387,7 @@ pub trait DeterminantInto: Sized { /// Computes the determinant of the matrix. fn det_into(self) -> Result { let (sign, ln_det) = self.sln_det_into()?; - Ok(sign * A::from_real(ln_det.exp())) + Ok(sign * A::from_real(Float::exp(ln_det))) } /// Computes the `(sign, natural_log)` of the determinant of the matrix. @@ -430,7 +430,7 @@ where let abs_elem: A::Real = elem.abs(); ( upper_sign * elem / A::from_real(abs_elem), - ln_det + abs_elem.ln(), + ln_det + Float::ln(abs_elem), ) }, ); diff --git a/ndarray-linalg/src/solveh.rs b/ndarray-linalg/src/solveh.rs index 04c16fec..c70138d4 100644 --- a/ndarray-linalg/src/solveh.rs +++ b/ndarray-linalg/src/solveh.rs @@ -321,7 +321,7 @@ where let elem = unsafe { a.uget((k, k)) }.re(); debug_assert_eq!(elem.im(), Zero::zero()); sign *= elem.signum(); - ln_det += elem.abs().ln(); + ln_det += Float::ln(Float::abs(elem)); } else { // 2x2 block at k..k+2. @@ -348,7 +348,7 @@ where // Determinant of 2x2 block. let block_det = upper_diag * lower_diag - off_diag.square(); sign *= block_det.signum(); - ln_det += block_det.abs().ln(); + ln_det += Float::ln(Float::abs(block_det)); // Skip the k+1 ipiv value. ipiv_enum.next(); @@ -366,7 +366,7 @@ where /// symmetric) matrix. pub fn deth(&self) -> A::Real { let (sign, ln_det) = self.sln_deth(); - sign * ln_det.exp() + sign * Float::exp(ln_det) } /// Computes the `(sign, natural_log)` of the determinant of the factorized @@ -390,7 +390,7 @@ where /// symmetric) matrix. pub fn deth_into(self) -> A::Real { let (sign, ln_det) = self.sln_deth_into(); - sign * ln_det.exp() + sign * Float::exp(ln_det) } /// Computes the `(sign, natural_log)` of the determinant of the factorized @@ -420,7 +420,7 @@ where fn deth(&self) -> Result { let (sign, ln_det) = self.sln_deth()?; - Ok(sign * ln_det.exp()) + Ok(sign * Float::exp(ln_det)) } fn sln_deth(&self) -> Result<(A::Real, A::Real)> { @@ -445,7 +445,7 @@ where fn deth_into(self) -> Result { let (sign, ln_det) = self.sln_deth_into()?; - Ok(sign * ln_det.exp()) + Ok(sign * Float::exp(ln_det)) } fn sln_deth_into(self) -> Result<(A::Real, A::Real)> { diff --git a/ndarray-linalg/tests/det.rs b/ndarray-linalg/tests/det.rs index ec9c0d4a..c3986528 100644 --- a/ndarray-linalg/tests/det.rs +++ b/ndarray-linalg/tests/det.rs @@ -110,7 +110,7 @@ fn det() { { let det = det_naive(&a); let sign = det.div_real(det.abs()); - let ln_det = det.abs().ln(); + let ln_det = Float::ln(det.abs()); assert_rclose!(a.factorize().unwrap().det().unwrap(), det, rtol); { let result = a.factorize().unwrap().sln_det().unwrap(); diff --git a/ndarray-linalg/tests/opnorm.rs b/ndarray-linalg/tests/opnorm.rs index fbda597f..abd41748 100644 --- a/ndarray-linalg/tests/opnorm.rs +++ b/ndarray-linalg/tests/opnorm.rs @@ -1,6 +1,5 @@ use ndarray::*; use ndarray_linalg::*; -use num_traits::Float; fn test(a: Array2, one: f64, inf: f64, fro: f64) { println!("ONE = {:?}", a.opnorm_one()); diff --git a/ndarray-linalg/tests/vector.rs b/ndarray-linalg/tests/vector.rs index 777417ea..a61bedd6 100644 --- a/ndarray-linalg/tests/vector.rs +++ b/ndarray-linalg/tests/vector.rs @@ -1,6 +1,5 @@ use ndarray::*; use ndarray_linalg::*; -use num_traits::Float; #[test] fn vector_norm() {