From 0ac6085f5d87c9cc19bc96c2790dcd78cfc7119f Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Mon, 29 Jun 2020 05:35:03 +0900 Subject: [PATCH 1/2] clippy on CI --- .github/workflows/rust.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 5deaac55..300e19fa 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -65,3 +65,11 @@ jobs: with: command: fmt args: -- --check + + clippy: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v1 + - uses: actions-rs/cargo@v1 + with: + command: clippy From 749ccb9a3b4978692b57084ca571b67ef5976b9c Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Mon, 29 Jun 2020 05:34:28 +0900 Subject: [PATCH 2/2] clippy fix --- src/cholesky.rs | 4 ++-- src/diagonal.rs | 2 +- src/krylov/householder.rs | 2 +- src/krylov/mgs.rs | 4 ++-- src/lapack/cholesky.rs | 2 -- src/lapack/eig.rs | 1 - src/lapack/eigh.rs | 1 - src/lapack/least_squares.rs | 1 - src/lapack/mod.rs | 2 ++ src/lapack/opnorm.rs | 1 - src/lapack/qr.rs | 1 - src/lapack/solve.rs | 1 - src/lapack/solveh.rs | 2 -- src/lapack/svd.rs | 3 +-- src/lapack/svddc.rs | 3 +-- src/lapack/triangular.rs | 2 -- src/lapack/tridiagonal.rs | 1 - src/layout.rs | 5 ++++- src/lib.rs | 7 +++++++ src/lobpcg/lobpcg.rs | 9 ++++----- src/lobpcg/svd.rs | 2 +- src/norm.rs | 2 +- src/solve.rs | 7 ++----- src/solveh.rs | 15 ++++++--------- src/tridiagonal.rs | 6 +++--- 25 files changed, 38 insertions(+), 48 deletions(-) diff --git a/src/cholesky.rs b/src/cholesky.rs index 7f38e86b..79e240ab 100644 --- a/src/cholesky.rs +++ b/src/cholesky.rs @@ -298,7 +298,7 @@ where fn factorizec_into(self, uplo: UPLO) -> Result> { Ok(CholeskyFactorized { factor: self.cholesky_into(uplo)?, - uplo: uplo, + uplo, }) } } @@ -311,7 +311,7 @@ where fn factorizec(&self, uplo: UPLO) -> Result>> { Ok(CholeskyFactorized { factor: self.cholesky(uplo)?, - uplo: uplo, + uplo, }) } } diff --git a/src/diagonal.rs b/src/diagonal.rs index 67ccc880..a7adad4a 100644 --- a/src/diagonal.rs +++ b/src/diagonal.rs @@ -42,7 +42,7 @@ where S: DataMut, { for (val, d) in a.iter_mut().zip(self.diag.iter()) { - *val = *val * *d; + *val *= *d; } } } diff --git a/src/krylov/householder.rs b/src/krylov/householder.rs index 951ecdb0..844d0e7e 100644 --- a/src/krylov/householder.rs +++ b/src/krylov/householder.rs @@ -13,7 +13,7 @@ where A: Scalar + Lapack, S: DataMut, { - assert!(x.len() > 0); + assert!(!x.is_empty()); let norm = x.norm_l2(); let alpha = -x[0].mul_real(norm / x[0].abs()); x[0] -= alpha; diff --git a/src/krylov/mgs.rs b/src/krylov/mgs.rs index 2e2e1fef..dc0dfba6 100644 --- a/src/krylov/mgs.rs +++ b/src/krylov/mgs.rs @@ -51,7 +51,7 @@ impl Orthogonalizer for MGS { for i in 0..self.len() { let q = &self.q[i]; let c = q.inner(&a); - azip!((a in &mut *a, &q in q) *a = *a - c * q); + azip!((a in &mut *a, &q in q) *a -= c * q); coef[i] = c; } let nrm = a.norm_l2(); @@ -88,7 +88,7 @@ impl Orthogonalizer for MGS { // Linearly dependent return AppendResult::Dependent(coef); } - azip!((a in &mut *a) *a = *a / A::from_real(nrm)); + azip!((a in &mut *a) *a /= A::from_real(nrm)); self.q.push(a.to_owned()); AppendResult::Added(coef) } diff --git a/src/lapack/cholesky.rs b/src/lapack/cholesky.rs index 494e004c..9d085044 100644 --- a/src/lapack/cholesky.rs +++ b/src/lapack/cholesky.rs @@ -1,7 +1,5 @@ //! Cholesky decomposition -use lapacke; - use crate::error::*; use crate::layout::MatrixLayout; use crate::types::*; diff --git a/src/lapack/eig.rs b/src/lapack/eig.rs index e2a50961..3fb20012 100644 --- a/src/lapack/eig.rs +++ b/src/lapack/eig.rs @@ -1,6 +1,5 @@ //! Eigenvalue decomposition for general matrices -use lapacke; use num_traits::Zero; use crate::error::*; diff --git a/src/lapack/eigh.rs b/src/lapack/eigh.rs index d77b3b2e..5c1b0824 100644 --- a/src/lapack/eigh.rs +++ b/src/lapack/eigh.rs @@ -1,6 +1,5 @@ //! Eigenvalue decomposition for Hermite matrices -use lapacke; use num_traits::Zero; use crate::error::*; diff --git a/src/lapack/least_squares.rs b/src/lapack/least_squares.rs index 99db42f2..83638f35 100644 --- a/src/lapack/least_squares.rs +++ b/src/lapack/least_squares.rs @@ -1,6 +1,5 @@ //! Least squares -use lapacke; use ndarray::{ErrorKind, ShapeError}; use num_traits::Zero; diff --git a/src/lapack/mod.rs b/src/lapack/mod.rs index 18fd9eda..a5fce2a8 100644 --- a/src/lapack/mod.rs +++ b/src/lapack/mod.rs @@ -1,5 +1,7 @@ //! Define traits wrapping LAPACK routines +#![allow(clippy::missing_safety_doc)] + pub mod cholesky; pub mod eig; pub mod eigh; diff --git a/src/lapack/opnorm.rs b/src/lapack/opnorm.rs index 8e3f9d8d..55b377d5 100644 --- a/src/lapack/opnorm.rs +++ b/src/lapack/opnorm.rs @@ -1,6 +1,5 @@ //! Operator norms of matrices -use lapacke; use lapacke::Layout::ColumnMajor as cm; use crate::layout::MatrixLayout; diff --git a/src/lapack/qr.rs b/src/lapack/qr.rs index 48c2b747..823e112e 100644 --- a/src/lapack/qr.rs +++ b/src/lapack/qr.rs @@ -1,6 +1,5 @@ //! QR decomposition -use lapacke; use num_traits::Zero; use std::cmp::min; diff --git a/src/lapack/solve.rs b/src/lapack/solve.rs index 58430995..581a2eb1 100644 --- a/src/lapack/solve.rs +++ b/src/lapack/solve.rs @@ -1,6 +1,5 @@ //! Solve linear problem using LU decomposition -use lapacke; use num_traits::Zero; use crate::error::*; diff --git a/src/lapack/solveh.rs b/src/lapack/solveh.rs index b17b68ac..9a5b3b6e 100644 --- a/src/lapack/solveh.rs +++ b/src/lapack/solveh.rs @@ -2,8 +2,6 @@ //! //! See also [the manual of dsytrf](http://www.netlib.org/lapack/lapack-3.1.1/html/dsytrf.f.html) -use lapacke; - use crate::error::*; use crate::layout::MatrixLayout; use crate::types::*; diff --git a/src/lapack/svd.rs b/src/lapack/svd.rs index adc50702..d62ed8cc 100644 --- a/src/lapack/svd.rs +++ b/src/lapack/svd.rs @@ -1,6 +1,5 @@ //! Singular-value decomposition -use lapacke; use num_traits::Zero; use crate::error::*; @@ -79,7 +78,7 @@ macro_rules! impl_svd { into_result( info, SVDOutput { - s: s, + s, u: if calc_u { Some(u) } else { None }, vt: if calc_vt { Some(vt) } else { None }, }, diff --git a/src/lapack/svddc.rs b/src/lapack/svddc.rs index 57b727d1..915ea4e4 100644 --- a/src/lapack/svddc.rs +++ b/src/lapack/svddc.rs @@ -1,4 +1,3 @@ -use lapacke; use num_traits::Zero; use crate::error::*; @@ -49,7 +48,7 @@ macro_rules! impl_svdd { into_result( info, SVDOutput { - s: s, + s, u: if jobz == UVTFlag::None { None } else { Some(u) }, vt: if jobz == UVTFlag::None { None diff --git a/src/lapack/triangular.rs b/src/lapack/triangular.rs index c3ee706d..a38ed405 100644 --- a/src/lapack/triangular.rs +++ b/src/lapack/triangular.rs @@ -1,7 +1,5 @@ //! Implement linear solver and inverse matrix -use lapacke; - use super::{into_result, Transpose, UPLO}; use crate::error::*; diff --git a/src/lapack/tridiagonal.rs b/src/lapack/tridiagonal.rs index 468cc8ea..1a42a9db 100644 --- a/src/lapack/tridiagonal.rs +++ b/src/lapack/tridiagonal.rs @@ -1,7 +1,6 @@ //! Implement linear solver using LU decomposition //! for tridiagonal matrix -use lapacke; use num_traits::Zero; use super::NormType; diff --git a/src/layout.rs b/src/layout.rs index d75eebc5..3710063b 100644 --- a/src/layout.rs +++ b/src/layout.rs @@ -1,6 +1,5 @@ //! Memory layout of matrices -use lapacke; use ndarray::*; use super::error::*; @@ -47,6 +46,10 @@ impl MatrixLayout { } } + pub fn is_empty(&self) -> bool { + self.len() == 0 + } + pub fn lapacke_layout(&self) -> lapacke::Layout { match *self { MatrixLayout::C(_) => lapacke::Layout::RowMajor, diff --git a/src/lib.rs b/src/lib.rs index 724921f8..b34e21df 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -38,6 +38,13 @@ //! - [Random matrix generators](generate/index.html) //! - [Scalar trait](types/trait.Scalar.html) +#![allow( + clippy::module_inception, + clippy::many_single_char_names, + clippy::type_complexity, + clippy::ptr_arg +)] + #[macro_use] extern crate ndarray; diff --git a/src/lobpcg/lobpcg.rs b/src/lobpcg/lobpcg.rs index cf59b8de..e11a24ab 100644 --- a/src/lobpcg/lobpcg.rs +++ b/src/lobpcg/lobpcg.rs @@ -46,12 +46,11 @@ fn sorted_eig, A: Scalar + Lapack>( Ok(match order { Order::Largest => ( - vals.slice_move(s![n-size..; -1]) - .mapv(|x| Scalar::from_real(x)), + vals.slice_move(s![n-size..; -1]).mapv(Scalar::from_real), vecs.slice_move(s![.., n-size..; -1]), ), Order::Smallest => ( - vals.slice_move(s![..size]).mapv(|x| Scalar::from_real(x)), + vals.slice_move(s![..size]).mapv(Scalar::from_real), vecs.slice_move(s![.., ..size]), ), }) @@ -62,7 +61,7 @@ fn ndarray_mask(matrix: ArrayView2, mask: &[bool]) -> Array2 { assert_eq!(mask.len(), matrix.ncols()); let indices = (0..mask.len()) - .zip(mask.into_iter()) + .zip(mask.iter()) .filter(|(_, b)| **b) .map(|(a, _)| a) .collect::>(); @@ -435,7 +434,7 @@ pub fn lobpcg< // retrieve best result and convert norm into `A` let (vals, vecs, rnorm) = best_result.unwrap(); - let rnorm = rnorm.into_iter().map(|x| Scalar::from_real(x)).collect(); + let rnorm = rnorm.into_iter().map(Scalar::from_real).collect(); match final_norm { Ok(_) => LobpcgResult::Ok(vals, vecs, rnorm), diff --git a/src/lobpcg/svd.rs b/src/lobpcg/svd.rs index 1324034b..d857386f 100644 --- a/src/lobpcg/svd.rs +++ b/src/lobpcg/svd.rs @@ -160,7 +160,7 @@ impl Truncate match res { LobpcgResult::Ok(vals, vecs, _) | LobpcgResult::Err(vals, vecs, _, _) => { Ok(TruncatedSvdResult { - problem: self.problem.clone(), + problem: self.problem, eigvals: vals, eigvecs: vecs, ngm: n > m, diff --git a/src/norm.rs b/src/norm.rs index 94e50382..e0dde1a4 100644 --- a/src/norm.rs +++ b/src/norm.rs @@ -65,7 +65,7 @@ where for mut v in m.axis_iter_mut(Axis(axis as usize)) { let n = v.norm(); ms.push(n); - v.map_inplace(|x| *x = *x / A::from_real(n)) + v.map_inplace(|x| *x /= A::from_real(n)) } (m, ms) } diff --git a/src/solve.rs b/src/solve.rs index e595fb6e..007500c4 100644 --- a/src/solve.rs +++ b/src/solve.rs @@ -274,10 +274,7 @@ where { fn factorize_into(mut self) -> Result> { let ipiv = unsafe { A::lu(self.layout()?, self.as_allocated_mut()?)? }; - Ok(LUFactorized { - a: self, - ipiv: ipiv, - }) + Ok(LUFactorized { a: self, ipiv }) } } @@ -289,7 +286,7 @@ where fn factorize(&self) -> Result>> { let mut a: Array2 = replicate(self); let ipiv = unsafe { A::lu(a.layout()?, a.as_allocated_mut()?)? }; - Ok(LUFactorized { a: a, ipiv: ipiv }) + Ok(LUFactorized { a, ipiv }) } } diff --git a/src/solveh.rs b/src/solveh.rs index 0e12720c..dc929d8c 100644 --- a/src/solveh.rs +++ b/src/solveh.rs @@ -166,10 +166,7 @@ where { fn factorizeh_into(mut self) -> Result> { let ipiv = unsafe { A::bk(self.square_layout()?, UPLO::Upper, self.as_allocated_mut()?)? }; - Ok(BKFactorized { - a: self, - ipiv: ipiv, - }) + Ok(BKFactorized { a: self, ipiv }) } } @@ -181,7 +178,7 @@ where fn factorizeh(&self) -> Result>> { let mut a: Array2 = replicate(self); let ipiv = unsafe { A::bk(a.square_layout()?, UPLO::Upper, a.as_allocated_mut()?)? }; - Ok(BKFactorized { a: a, ipiv: ipiv }) + Ok(BKFactorized { a, ipiv }) } } @@ -326,8 +323,8 @@ where // 1x1 block at k, must be real. let elem = unsafe { a.uget((k, k)) }.re(); debug_assert_eq!(elem.im(), Zero::zero()); - sign = sign * elem.signum(); - ln_det = ln_det + elem.abs().ln(); + sign *= elem.signum(); + ln_det += elem.abs().ln(); } else { // 2x2 block at k..k+2. @@ -347,8 +344,8 @@ where // Determinant of 2x2 block. let block_det = upper_diag * lower_diag - off_diag.square(); - sign = sign * block_det.signum(); - ln_det = ln_det + block_det.abs().ln(); + sign *= block_det.signum(); + ln_det += block_det.abs().ln(); // Skip the k+1 ipiv value. ipiv_enum.next(); diff --git a/src/tridiagonal.rs b/src/tridiagonal.rs index eb1a0aba..63dbf3d5 100644 --- a/src/tridiagonal.rs +++ b/src/tridiagonal.rs @@ -665,9 +665,9 @@ where let (du2, anom, ipiv) = unsafe { A::lu_tridiagonal(&mut self)? }; Ok(LUFactorizedTridiagonal { a: self, - du2: du2, - anom: anom, - ipiv: ipiv, + du2, + anom, + ipiv, }) } }