Skip to content

Commit 53351b2

Browse files
authored
fix needless-range and clippy::ptr_arg warnings. (#36)
* Fix needless for loop range * Do not ignore clippy::ptr_arg
1 parent 2650416 commit 53351b2

27 files changed

+208
-219
lines changed

src/algorithm/neighbour/bbd_tree.rs

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,7 @@ impl<T: RealNumber> BBDTree<T> {
4444

4545
let (n, _) = data.shape();
4646

47-
let mut index = vec![0; n];
48-
for i in 0..n {
49-
index[i] = i;
50-
}
47+
let index = (0..n).collect::<Vec<_>>();
5148

5249
let mut tree = BBDTree {
5350
nodes,
@@ -64,7 +61,7 @@ impl<T: RealNumber> BBDTree<T> {
6461

6562
pub(in crate) fn clustering(
6663
&self,
67-
centroids: &Vec<Vec<T>>,
64+
centroids: &[Vec<T>],
6865
sums: &mut Vec<Vec<T>>,
6966
counts: &mut Vec<usize>,
7067
membership: &mut Vec<usize>,
@@ -92,8 +89,8 @@ impl<T: RealNumber> BBDTree<T> {
9289
fn filter(
9390
&self,
9491
node: usize,
95-
centroids: &Vec<Vec<T>>,
96-
candidates: &Vec<usize>,
92+
centroids: &[Vec<T>],
93+
candidates: &[usize],
9794
k: usize,
9895
sums: &mut Vec<Vec<T>>,
9996
counts: &mut Vec<usize>,
@@ -117,15 +114,15 @@ impl<T: RealNumber> BBDTree<T> {
117114
let mut new_candidates = vec![0; k];
118115
let mut newk = 0;
119116

120-
for i in 0..k {
117+
for candidate in candidates.iter().take(k) {
121118
if !BBDTree::prune(
122119
&self.nodes[node].center,
123120
&self.nodes[node].radius,
124121
centroids,
125122
closest,
126-
candidates[i],
123+
*candidate,
127124
) {
128-
new_candidates[newk] = candidates[i];
125+
new_candidates[newk] = *candidate;
129126
newk += 1;
130127
}
131128
}
@@ -166,9 +163,9 @@ impl<T: RealNumber> BBDTree<T> {
166163
}
167164

168165
fn prune(
169-
center: &Vec<T>,
170-
radius: &Vec<T>,
171-
centroids: &Vec<Vec<T>>,
166+
center: &[T],
167+
radius: &[T],
168+
centroids: &[Vec<T>],
172169
best_index: usize,
173170
test_index: usize,
174171
) -> bool {
@@ -285,8 +282,8 @@ impl<T: RealNumber> BBDTree<T> {
285282
}
286283

287284
let mut mean = vec![T::zero(); d];
288-
for i in 0..d {
289-
mean[i] = node.sum[i] / T::from(node.count).unwrap();
285+
for (i, mean_i) in mean.iter_mut().enumerate().take(d) {
286+
*mean_i = node.sum[i] / T::from(node.count).unwrap();
290287
}
291288

292289
node.cost = BBDTree::node_cost(&self.nodes[node.lower.unwrap()], &mean)
@@ -295,11 +292,11 @@ impl<T: RealNumber> BBDTree<T> {
295292
self.add_node(node)
296293
}
297294

298-
fn node_cost(node: &BBDTreeNode<T>, center: &Vec<T>) -> T {
295+
fn node_cost(node: &BBDTreeNode<T>, center: &[T]) -> T {
299296
let d = center.len();
300297
let mut scatter = T::zero();
301-
for i in 0..d {
302-
let x = (node.sum[i] / T::from(node.count).unwrap()) - center[i];
298+
for (i, center_i) in center.iter().enumerate().take(d) {
299+
let x = (node.sum[i] / T::from(node.count).unwrap()) - *center_i;
303300
scatter += x * x;
304301
}
305302
node.cost + T::from(node.count).unwrap() * scatter

src/algorithm/neighbour/cover_tree.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ impl<T: Debug + PartialEq, F: RealNumber, D: Distance<T, F>> CoverTree<T, F, D>
436436
}
437437
}
438438

439-
fn max(&self, distance_set: &Vec<DistanceSet<F>>) -> F {
439+
fn max(&self, distance_set: &[DistanceSet<F>]) -> F {
440440
let mut max = F::zero();
441441
for n in distance_set {
442442
if max < n.dist[n.dist.len() - 1] {

src/algorithm/neighbour/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#![allow(clippy::ptr_arg)]
12
//! # Nearest Neighbors Search Algorithms and Data Structures
23
//!
34
//! Nearest neighbor search is a basic computational tool that is particularly relevant to machine learning,

src/decomposition/pca.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,9 @@ impl<T: RealNumber, M: Matrix<T>> PCA<T, M> {
112112

113113
let mut x = data.clone();
114114

115-
for c in 0..n {
115+
for (c, mu_c) in mu.iter().enumerate().take(n) {
116116
for r in 0..m {
117-
x.sub_element_mut(r, c, mu[c]);
117+
x.sub_element_mut(r, c, *mu_c);
118118
}
119119
}
120120

@@ -124,8 +124,8 @@ impl<T: RealNumber, M: Matrix<T>> PCA<T, M> {
124124
if m > n && !parameters.use_correlation_matrix {
125125
let svd = x.svd()?;
126126
eigenvalues = svd.s;
127-
for i in 0..eigenvalues.len() {
128-
eigenvalues[i] = eigenvalues[i] * eigenvalues[i];
127+
for eigenvalue in &mut eigenvalues {
128+
*eigenvalue = *eigenvalue * (*eigenvalue);
129129
}
130130

131131
eigenvectors = svd.V;
@@ -149,8 +149,8 @@ impl<T: RealNumber, M: Matrix<T>> PCA<T, M> {
149149

150150
if parameters.use_correlation_matrix {
151151
let mut sd = vec![T::zero(); n];
152-
for i in 0..n {
153-
sd[i] = cov.get(i, i).sqrt();
152+
for (i, sd_i) in sd.iter_mut().enumerate().take(n) {
153+
*sd_i = cov.get(i, i).sqrt();
154154
}
155155

156156
for i in 0..n {
@@ -166,9 +166,9 @@ impl<T: RealNumber, M: Matrix<T>> PCA<T, M> {
166166

167167
eigenvectors = evd.V;
168168

169-
for i in 0..n {
169+
for (i, sd_i) in sd.iter().enumerate().take(n) {
170170
for j in 0..n {
171-
eigenvectors.div_element_mut(i, j, sd[i]);
171+
eigenvectors.div_element_mut(i, j, *sd_i);
172172
}
173173
}
174174
} else {
@@ -188,9 +188,9 @@ impl<T: RealNumber, M: Matrix<T>> PCA<T, M> {
188188
}
189189

190190
let mut pmu = vec![T::zero(); n_components];
191-
for k in 0..n {
192-
for i in 0..n_components {
193-
pmu[i] += projection.get(i, k) * mu[k];
191+
for (k, mu_k) in mu.iter().enumerate().take(n) {
192+
for (i, pmu_i) in pmu.iter_mut().enumerate().take(n_components) {
193+
*pmu_i += projection.get(i, k) * (*mu_k);
194194
}
195195
}
196196

src/ensemble/random_forest_classifier.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -132,9 +132,9 @@ impl<T: RealNumber> RandomForestClassifier<T> {
132132
let mut yi: Vec<usize> = vec![0; y_ncols];
133133
let classes = y_m.unique();
134134

135-
for i in 0..y_ncols {
135+
for (i, yi_i) in yi.iter_mut().enumerate().take(y_ncols) {
136136
let yc = y_m.get(0, i);
137-
yi[i] = classes.iter().position(|c| yc == *c).unwrap();
137+
*yi_i = classes.iter().position(|c| yc == *c).unwrap();
138138
}
139139

140140
let mtry = parameters.m.unwrap_or_else(|| {
@@ -192,22 +192,22 @@ impl<T: RealNumber> RandomForestClassifier<T> {
192192
which_max(&result)
193193
}
194194

195-
fn sample_with_replacement(y: &Vec<usize>, num_classes: usize) -> Vec<usize> {
195+
fn sample_with_replacement(y: &[usize], num_classes: usize) -> Vec<usize> {
196196
let mut rng = rand::thread_rng();
197197
let class_weight = vec![1.; num_classes];
198198
let nrows = y.len();
199199
let mut samples = vec![0; nrows];
200-
for l in 0..num_classes {
200+
for (l, class_weight_l) in class_weight.iter().enumerate().take(num_classes) {
201201
let mut n_samples = 0;
202202
let mut index: Vec<usize> = Vec::new();
203-
for i in 0..nrows {
204-
if y[i] == l {
203+
for (i, y_i) in y.iter().enumerate().take(nrows) {
204+
if *y_i == l {
205205
index.push(i);
206206
n_samples += 1;
207207
}
208208
}
209209

210-
let size = ((n_samples as f64) / class_weight[l]) as usize;
210+
let size = ((n_samples as f64) / *class_weight_l) as usize;
211211
for _ in 0..size {
212212
let xi: usize = rng.gen_range(0, n_samples);
213213
samples[index[xi]] += 1;

src/lib.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
#![allow(
2-
clippy::needless_range_loop,
3-
clippy::ptr_arg,
42
clippy::type_complexity,
53
clippy::too_many_arguments,
64
clippy::many_single_char_names

src/linalg/evd.rs

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -99,27 +99,27 @@ pub trait EVDDecomposableMatrix<T: RealNumber>: BaseMatrix<T> {
9999

100100
fn tred2<T: RealNumber, M: BaseMatrix<T>>(V: &mut M, d: &mut Vec<T>, e: &mut Vec<T>) {
101101
let (n, _) = V.shape();
102-
for i in 0..n {
103-
d[i] = V.get(n - 1, i);
102+
for (i, d_i) in d.iter_mut().enumerate().take(n) {
103+
*d_i = V.get(n - 1, i);
104104
}
105105

106106
for i in (1..n).rev() {
107107
let mut scale = T::zero();
108108
let mut h = T::zero();
109-
for k in 0..i {
110-
scale += d[k].abs();
109+
for d_k in d.iter().take(i) {
110+
scale += d_k.abs();
111111
}
112112
if scale == T::zero() {
113113
e[i] = d[i - 1];
114-
for j in 0..i {
115-
d[j] = V.get(i - 1, j);
114+
for (j, d_j) in d.iter_mut().enumerate().take(i) {
115+
*d_j = V.get(i - 1, j);
116116
V.set(i, j, T::zero());
117117
V.set(j, i, T::zero());
118118
}
119119
} else {
120-
for k in 0..i {
121-
d[k] /= scale;
122-
h += d[k] * d[k];
120+
for d_k in d.iter_mut().take(i) {
121+
*d_k /= scale;
122+
h += (*d_k) * (*d_k);
123123
}
124124
let mut f = d[i - 1];
125125
let mut g = h.sqrt();
@@ -129,8 +129,8 @@ fn tred2<T: RealNumber, M: BaseMatrix<T>>(V: &mut M, d: &mut Vec<T>, e: &mut Vec
129129
e[i] = scale * g;
130130
h -= f * g;
131131
d[i - 1] = f - g;
132-
for j in 0..i {
133-
e[j] = T::zero();
132+
for e_j in e.iter_mut().take(i) {
133+
*e_j = T::zero();
134134
}
135135

136136
for j in 0..i {
@@ -170,25 +170,25 @@ fn tred2<T: RealNumber, M: BaseMatrix<T>>(V: &mut M, d: &mut Vec<T>, e: &mut Vec
170170
V.set(i, i, T::one());
171171
let h = d[i + 1];
172172
if h != T::zero() {
173-
for k in 0..=i {
174-
d[k] = V.get(k, i + 1) / h;
173+
for (k, d_k) in d.iter_mut().enumerate().take(i + 1) {
174+
*d_k = V.get(k, i + 1) / h;
175175
}
176176
for j in 0..=i {
177177
let mut g = T::zero();
178178
for k in 0..=i {
179179
g += V.get(k, i + 1) * V.get(k, j);
180180
}
181-
for k in 0..=i {
182-
V.sub_element_mut(k, j, g * d[k]);
181+
for (k, d_k) in d.iter().enumerate().take(i + 1) {
182+
V.sub_element_mut(k, j, g * (*d_k));
183183
}
184184
}
185185
}
186186
for k in 0..=i {
187187
V.set(k, i + 1, T::zero());
188188
}
189189
}
190-
for j in 0..n {
191-
d[j] = V.get(n - 1, j);
190+
for (j, d_j) in d.iter_mut().enumerate().take(n) {
191+
*d_j = V.get(n - 1, j);
192192
V.set(n - 1, j, T::zero());
193193
}
194194
V.set(n - 1, n - 1, T::one());
@@ -238,8 +238,8 @@ fn tql2<T: RealNumber, M: BaseMatrix<T>>(V: &mut M, d: &mut Vec<T>, e: &mut Vec<
238238
d[l + 1] = e[l] * (p + r);
239239
let dl1 = d[l + 1];
240240
let mut h = g - d[l];
241-
for i in l + 2..n {
242-
d[i] -= h;
241+
for d_i in d.iter_mut().take(n).skip(l + 2) {
242+
*d_i -= h;
243243
}
244244
f += h;
245245

@@ -285,10 +285,10 @@ fn tql2<T: RealNumber, M: BaseMatrix<T>>(V: &mut M, d: &mut Vec<T>, e: &mut Vec<
285285
for i in 0..n - 1 {
286286
let mut k = i;
287287
let mut p = d[i];
288-
for j in i + 1..n {
289-
if d[j] > p {
288+
for (j, d_j) in d.iter().enumerate().take(n).skip(i + 1) {
289+
if *d_j > p {
290290
k = j;
291-
p = d[j];
291+
p = *d_j;
292292
}
293293
}
294294
if k != i {
@@ -316,7 +316,7 @@ fn balance<T: RealNumber, M: BaseMatrix<T>>(A: &mut M) -> Vec<T> {
316316
let mut done = false;
317317
while !done {
318318
done = true;
319-
for i in 0..n {
319+
for (i, scale_i) in scale.iter_mut().enumerate().take(n) {
320320
let mut r = T::zero();
321321
let mut c = T::zero();
322322
for j in 0..n {
@@ -341,7 +341,7 @@ fn balance<T: RealNumber, M: BaseMatrix<T>>(A: &mut M) -> Vec<T> {
341341
if (c + r) / f < t * s {
342342
done = false;
343343
g = T::one() / f;
344-
scale[i] *= f;
344+
*scale_i *= f;
345345
for j in 0..n {
346346
A.mul_element_mut(i, j, g);
347347
}
@@ -360,7 +360,7 @@ fn elmhes<T: RealNumber, M: BaseMatrix<T>>(A: &mut M) -> Vec<usize> {
360360
let (n, _) = A.shape();
361361
let mut perm = vec![0; n];
362362

363-
for m in 1..n - 1 {
363+
for (m, perm_m) in perm.iter_mut().enumerate().take(n - 1).skip(1) {
364364
let mut x = T::zero();
365365
let mut i = m;
366366
for j in m..n {
@@ -369,7 +369,7 @@ fn elmhes<T: RealNumber, M: BaseMatrix<T>>(A: &mut M) -> Vec<usize> {
369369
i = j;
370370
}
371371
}
372-
perm[m] = i;
372+
*perm_m = i;
373373
if i != m {
374374
for j in (m - 1)..n {
375375
let swap = A.get(i, j);
@@ -402,7 +402,7 @@ fn elmhes<T: RealNumber, M: BaseMatrix<T>>(A: &mut M) -> Vec<usize> {
402402
perm
403403
}
404404

405-
fn eltran<T: RealNumber, M: BaseMatrix<T>>(A: &M, V: &mut M, perm: &Vec<usize>) {
405+
fn eltran<T: RealNumber, M: BaseMatrix<T>>(A: &M, V: &mut M, perm: &[usize]) {
406406
let (n, _) = A.shape();
407407
for mp in (1..n - 1).rev() {
408408
for k in mp + 1..n {
@@ -774,11 +774,11 @@ fn hqr2<T: RealNumber, M: BaseMatrix<T>>(A: &mut M, V: &mut M, d: &mut Vec<T>, e
774774
}
775775
}
776776

777-
fn balbak<T: RealNumber, M: BaseMatrix<T>>(V: &mut M, scale: &Vec<T>) {
777+
fn balbak<T: RealNumber, M: BaseMatrix<T>>(V: &mut M, scale: &[T]) {
778778
let (n, _) = V.shape();
779-
for i in 0..n {
779+
for (i, scale_i) in scale.iter().enumerate().take(n) {
780780
for j in 0..n {
781-
V.mul_element_mut(i, j, scale[i]);
781+
V.mul_element_mut(i, j, *scale_i);
782782
}
783783
}
784784
}
@@ -789,8 +789,8 @@ fn sort<T: RealNumber, M: BaseMatrix<T>>(d: &mut Vec<T>, e: &mut Vec<T>, V: &mut
789789
for j in 1..n {
790790
let real = d[j];
791791
let img = e[j];
792-
for k in 0..n {
793-
temp[k] = V.get(k, j);
792+
for (k, temp_k) in temp.iter_mut().enumerate().take(n) {
793+
*temp_k = V.get(k, j);
794794
}
795795
let mut i = j as i32 - 1;
796796
while i >= 0 {
@@ -806,8 +806,8 @@ fn sort<T: RealNumber, M: BaseMatrix<T>>(d: &mut Vec<T>, e: &mut Vec<T>, V: &mut
806806
}
807807
d[i as usize + 1] = real;
808808
e[i as usize + 1] = img;
809-
for k in 0..n {
810-
V.set(k, i as usize + 1, temp[k]);
809+
for (k, temp_k) in temp.iter().enumerate().take(n) {
810+
V.set(k, i as usize + 1, *temp_k);
811811
}
812812
}
813813
}

0 commit comments

Comments
 (0)