[INFO] crate tract-tensorflow 0.1.1 is already in cache [INFO] extracting crate tract-tensorflow 0.1.1 into work/ex/clippy-test-run/sources/stable/reg/tract-tensorflow/0.1.1 [INFO] extracting crate tract-tensorflow 0.1.1 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/tract-tensorflow/0.1.1 [INFO] validating manifest of tract-tensorflow-0.1.1 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of tract-tensorflow-0.1.1 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing tract-tensorflow-0.1.1 [INFO] finished frobbing tract-tensorflow-0.1.1 [INFO] frobbed toml for tract-tensorflow-0.1.1 written to work/ex/clippy-test-run/sources/stable/reg/tract-tensorflow/0.1.1/Cargo.toml [INFO] started frobbing tract-tensorflow-0.1.1 [INFO] finished frobbing tract-tensorflow-0.1.1 [INFO] frobbed toml for tract-tensorflow-0.1.1 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/tract-tensorflow/0.1.1/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting tract-tensorflow-0.1.1 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-2/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/tract-tensorflow/0.1.1:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 5c52231e593f51b8adc5c0b8b8f6782c320d0ee496855109db2a277b63f6e46a [INFO] running `"docker" "start" "-a" "5c52231e593f51b8adc5c0b8b8f6782c320d0ee496855109db2a277b63f6e46a"` [INFO] [stderr] Compiling ndarray v0.12.1 [INFO] [stderr] Compiling protobuf v2.2.5 [INFO] [stderr] Checking objekt v0.1.2 [INFO] [stderr] Checking insideout v0.1.0 [INFO] [stderr] Checking error-chain v0.12.0 [INFO] [stderr] Checking wait-timeout v0.1.5 [INFO] [stderr] Checking rand v0.5.6 [INFO] [stderr] Checking rand_xoshiro v0.1.0 [INFO] [stderr] Checking criterion-plot v0.3.0 [INFO] [stderr] Checking num-bigint v0.2.2 [INFO] [stderr] Checking chrono v0.4.6 [INFO] [stderr] Checking tinytemplate v1.0.1 [INFO] [stderr] Compiling derive-new v0.5.6 [INFO] [stderr] Checking csv v1.0.5 [INFO] [stderr] Checking rusty-fork v0.2.1 [INFO] [stderr] Checking criterion v0.2.9 [INFO] [stderr] Checking pretty_env_logger v0.2.5 [INFO] [stderr] Checking proptest v0.8.7 [INFO] [stderr] Checking num-rational v0.2.1 [INFO] [stderr] Checking num v0.2.0 [INFO] [stderr] Checking tract-core v0.1.1 [INFO] [stderr] Checking tract-tensorflow v0.1.1 (/opt/crater/workdir) [INFO] [stderr] warning: lint name `clippy` is deprecated and may not have an effect in the future. Also `cfg_attr(cargo-clippy)` won't be necessary anymore [INFO] [stderr] --> src/tfpb/mod.rs:5:10 [INFO] [stderr] | [INFO] [stderr] 5 | #![allow(clippy)] [INFO] [stderr] | ^^^^^^ help: change it to: `clippy::all` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(renamed_and_removed_lints)] on by default [INFO] [stderr] [INFO] [stderr] warning: lint name `clippy` is deprecated and may not have an effect in the future. Also `cfg_attr(cargo-clippy)` won't be necessary anymore [INFO] [stderr] --> src/tfpb/mod.rs:5:10 [INFO] [stderr] | [INFO] [stderr] 5 | #![allow(clippy)] [INFO] [stderr] | ^^^^^^ help: change it to: `clippy::all` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(renamed_and_removed_lints)] on by default [INFO] [stderr] [INFO] [stderr] warning: unary minus has lower precedence than method call [INFO] [stderr] --> src/ops/array/strided_slice.rs:123:17 [INFO] [stderr] | [INFO] [stderr] 123 | -1.to_dim() [INFO] [stderr] | ^^^^^^^^^^^ help: consider adding parentheses to clarify your intent: `-(1.to_dim())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::precedence)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: lint name `clippy` is deprecated and may not have an effect in the future. Also `cfg_attr(cargo-clippy)` won't be necessary anymore [INFO] [stderr] --> src/tfpb/mod.rs:5:10 [INFO] [stderr] | [INFO] [stderr] 5 | #![allow(clippy)] [INFO] [stderr] | ^^^^^^ help: change it to: `clippy::all` [INFO] [stderr] [INFO] [stderr] warning: unary minus has lower precedence than method call [INFO] [stderr] --> src/ops/array/strided_slice.rs:123:17 [INFO] [stderr] | [INFO] [stderr] 123 | -1.to_dim() [INFO] [stderr] | ^^^^^^^^^^^ help: consider adding parentheses to clarify your intent: `-(1.to_dim())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::precedence)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/ops/nn/conv2d.rs:332:53 [INFO] [stderr] | [INFO] [stderr] 332 | Tensor::f32s(&[1, 2, 2, 1], &[142.3088, 48.891083, 208.3187, -11.274994]).unwrap(); [INFO] [stderr] | ^^^^^^^^^ help: consider: `48.891_083` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/ops/nn/conv2d.rs:332:75 [INFO] [stderr] | [INFO] [stderr] 332 | Tensor::f32s(&[1, 2, 2, 1], &[142.3088, 48.891083, 208.3187, -11.274994]).unwrap(); [INFO] [stderr] | ^^^^^^^^^ help: consider: `11.274_994` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/ops/nn/conv2d.rs:335:49 [INFO] [stderr] | [INFO] [stderr] 335 | &[160.72833, 107.84076, 247.50552, -38.738464], [INFO] [stderr] | ^^^^^^^^^ help: consider: `38.738_464` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: lint name `clippy` is deprecated and may not have an effect in the future. Also `cfg_attr(cargo-clippy)` won't be necessary anymore [INFO] [stderr] --> src/tfpb/mod.rs:5:10 [INFO] [stderr] | [INFO] [stderr] 5 | #![allow(clippy)] [INFO] [stderr] | ^^^^^^ help: change it to: `clippy::all` [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/model.rs:52:61 [INFO] [stderr] | [INFO] [stderr] 52 | let input: (&str, usize) = if i.starts_with("^") { [INFO] [stderr] | ^^^ help: try using a char instead: `'^'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `inputs`. [INFO] [stderr] --> src/ops/array/concatv2.rs:74:22 [INFO] [stderr] | [INFO] [stderr] 74 | for i in 0..n { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 74 | for in inputs.iter().take(n) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/ops/array/expand_dims.rs:48:21 [INFO] [stderr] | [INFO] [stderr] 48 | Err(format!("unimplemented ExpandDims with negative parameter"))? [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"unimplemented ExpandDims with negative parameter".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ops/array/squeeze.rs:7:12 [INFO] [stderr] | [INFO] [stderr] 7 | if squeeze_dims.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!squeeze_dims.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: the loop variable `ix` is used to index `input_shape` [INFO] [stderr] --> src/ops/array/strided_slice.rs:290:23 [INFO] [stderr] | [INFO] [stderr] 290 | for ix in 0..input_shape.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 290 | for (ix, ) in input_shape.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/ops/nn/local_patch.rs:269:54 [INFO] [stderr] | [INFO] [stderr] 269 | let data = padded.as_ref().map(|a| a.view()).unwrap_or(data.view()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| data.view())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/ops/nn/pools.rs:52:54 [INFO] [stderr] | [INFO] [stderr] 52 | let data = padded.as_ref().map(|a| a.view()).unwrap_or(data.view()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| data.view())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: casting i32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/ops/nn/s2b/raw.rs:223:21 [INFO] [stderr] | [INFO] [stderr] 223 | (block_shape[d] as i64) * batch.shape[1 + d].bex(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(block_shape[d])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/ops/nn/s2b/mod.rs:62:24 [INFO] [stderr] | [INFO] [stderr] 62 | let data: Vec = data.into_iter().map(|x| *x).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `data.into_iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/ops/nn/s2b/mod.rs:96:24 [INFO] [stderr] | [INFO] [stderr] 96 | let data: Vec = data.into_iter().map(|x| *x).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `data.into_iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/ops/nn/mod.rs:47:31 [INFO] [stderr] | [INFO] [stderr] 47 | input.map_inplace(|a| *a = *a / norm); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `*a /= norm` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `ops::OpBuilder` [INFO] [stderr] --> src/ops/mod.rs:20:5 [INFO] [stderr] | [INFO] [stderr] 20 | / pub fn new() -> OpBuilder { [INFO] [stderr] 21 | | let mut reg = OpRegister::new(); [INFO] [stderr] 22 | | array::register_all_ops(&mut reg); [INFO] [stderr] 23 | | math::register_all_ops(&mut reg); [INFO] [stderr] ... | [INFO] [stderr] 27 | | OpBuilder(reg) [INFO] [stderr] 28 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 17 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/ops/mod.rs:59:55 [INFO] [stderr] | [INFO] [stderr] 59 | ::tract_core::analyser::types::TensorFact::dt(dt.into()), [INFO] [stderr] | ^^^^^^^^^ help: consider removing `.into()`: `dt` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:9:9 [INFO] [stderr] | [INFO] [stderr] 9 | / match t { [INFO] [stderr] 10 | | &DataType::DT_BOOL => Ok(DatumType::Bool), [INFO] [stderr] 11 | | &DataType::DT_UINT8 => Ok(DatumType::U8), [INFO] [stderr] 12 | | &DataType::DT_UINT16 => Ok(DatumType::U16), [INFO] [stderr] ... | [INFO] [stderr] 21 | | _ => Err(format!("Unknown DatumType {:?}", t))?, [INFO] [stderr] 22 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 9 | match *t { [INFO] [stderr] 10 | DataType::DT_BOOL => Ok(DatumType::Bool), [INFO] [stderr] 11 | DataType::DT_UINT8 => Ok(DatumType::U8), [INFO] [stderr] 12 | DataType::DT_UINT16 => Ok(DatumType::U16), [INFO] [stderr] 13 | DataType::DT_INT8 => Ok(DatumType::I8), [INFO] [stderr] 14 | DataType::DT_INT16 => Ok(DatumType::I16), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/tensor.rs:56:30 [INFO] [stderr] | [INFO] [stderr] 56 | let mat: Tensor = if content.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!content.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/tensor.rs:66:39 [INFO] [stderr] | [INFO] [stderr] 66 | DataType::DT_INT32 => Tensor::i32s(&dims, t.get_int_val())?.into(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `Tensor::i32s(&dims, t.get_int_val())?` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/tensor.rs:67:39 [INFO] [stderr] | [INFO] [stderr] 67 | DataType::DT_FLOAT => Tensor::f32s(&dims, t.get_float_val())?.into(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `Tensor::f32s(&dims, t.get_float_val())?` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:90:9 [INFO] [stderr] | [INFO] [stderr] 90 | / match self { [INFO] [stderr] 91 | | &Tensor::F32(ref it) => { [INFO] [stderr] 92 | | tensor.set_dtype(DatumType::F32.to_tf()?); [INFO] [stderr] 93 | | tensor.set_float_val(it.iter().cloned().collect()); [INFO] [stderr] ... | [INFO] [stderr] 103 | | _ => unimplemented!("missing type"), [INFO] [stderr] 104 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 90 | match *self { [INFO] [stderr] 91 | Tensor::F32(ref it) => { [INFO] [stderr] 92 | tensor.set_dtype(DatumType::F32.to_tf()?); [INFO] [stderr] 93 | tensor.set_float_val(it.iter().cloned().collect()); [INFO] [stderr] 94 | } [INFO] [stderr] 95 | Tensor::F64(ref it) => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/model.rs:52:61 [INFO] [stderr] | [INFO] [stderr] 52 | let input: (&str, usize) = if i.starts_with("^") { [INFO] [stderr] | ^^^ help: try using a char instead: `'^'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `inputs`. [INFO] [stderr] --> src/ops/array/concatv2.rs:74:22 [INFO] [stderr] | [INFO] [stderr] 74 | for i in 0..n { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 74 | for in inputs.iter().take(n) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/ops/array/expand_dims.rs:48:21 [INFO] [stderr] | [INFO] [stderr] 48 | Err(format!("unimplemented ExpandDims with negative parameter"))? [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"unimplemented ExpandDims with negative parameter".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ops/array/squeeze.rs:7:12 [INFO] [stderr] | [INFO] [stderr] 7 | if squeeze_dims.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!squeeze_dims.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: the loop variable `ix` is used to index `input_shape` [INFO] [stderr] --> src/ops/array/strided_slice.rs:290:23 [INFO] [stderr] | [INFO] [stderr] 290 | for ix in 0..input_shape.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 290 | for (ix, ) in input_shape.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/ops/nn/local_patch.rs:269:54 [INFO] [stderr] | [INFO] [stderr] 269 | let data = padded.as_ref().map(|a| a.view()).unwrap_or(data.view()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| data.view())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/ops/nn/pools.rs:52:54 [INFO] [stderr] | [INFO] [stderr] 52 | let data = padded.as_ref().map(|a| a.view()).unwrap_or(data.view()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| data.view())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: casting i32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/ops/nn/s2b/raw.rs:223:21 [INFO] [stderr] | [INFO] [stderr] 223 | (block_shape[d] as i64) * batch.shape[1 + d].bex(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(block_shape[d])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/ops/nn/s2b/mod.rs:62:24 [INFO] [stderr] | [INFO] [stderr] 62 | let data: Vec = data.into_iter().map(|x| *x).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `data.into_iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/ops/nn/s2b/mod.rs:96:24 [INFO] [stderr] | [INFO] [stderr] 96 | let data: Vec = data.into_iter().map(|x| *x).collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `data.into_iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/ops/nn/mod.rs:47:31 [INFO] [stderr] | [INFO] [stderr] 47 | input.map_inplace(|a| *a = *a / norm); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `*a /= norm` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `ops::OpBuilder` [INFO] [stderr] --> src/ops/mod.rs:20:5 [INFO] [stderr] | [INFO] [stderr] 20 | / pub fn new() -> OpBuilder { [INFO] [stderr] 21 | | let mut reg = OpRegister::new(); [INFO] [stderr] 22 | | array::register_all_ops(&mut reg); [INFO] [stderr] 23 | | math::register_all_ops(&mut reg); [INFO] [stderr] ... | [INFO] [stderr] 27 | | OpBuilder(reg) [INFO] [stderr] 28 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 17 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/ops/mod.rs:59:55 [INFO] [stderr] | [INFO] [stderr] 59 | ::tract_core::analyser::types::TensorFact::dt(dt.into()), [INFO] [stderr] | ^^^^^^^^^ help: consider removing `.into()`: `dt` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:9:9 [INFO] [stderr] | [INFO] [stderr] 9 | / match t { [INFO] [stderr] 10 | | &DataType::DT_BOOL => Ok(DatumType::Bool), [INFO] [stderr] 11 | | &DataType::DT_UINT8 => Ok(DatumType::U8), [INFO] [stderr] 12 | | &DataType::DT_UINT16 => Ok(DatumType::U16), [INFO] [stderr] ... | [INFO] [stderr] 21 | | _ => Err(format!("Unknown DatumType {:?}", t))?, [INFO] [stderr] 22 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 9 | match *t { [INFO] [stderr] 10 | DataType::DT_BOOL => Ok(DatumType::Bool), [INFO] [stderr] 11 | DataType::DT_UINT8 => Ok(DatumType::U8), [INFO] [stderr] 12 | DataType::DT_UINT16 => Ok(DatumType::U16), [INFO] [stderr] 13 | DataType::DT_INT8 => Ok(DatumType::I8), [INFO] [stderr] 14 | DataType::DT_INT16 => Ok(DatumType::I16), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/tensor.rs:56:30 [INFO] [stderr] | [INFO] [stderr] 56 | let mat: Tensor = if content.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!content.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/tensor.rs:66:39 [INFO] [stderr] | [INFO] [stderr] 66 | DataType::DT_INT32 => Tensor::i32s(&dims, t.get_int_val())?.into(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `Tensor::i32s(&dims, t.get_int_val())?` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/tensor.rs:67:39 [INFO] [stderr] | [INFO] [stderr] 67 | DataType::DT_FLOAT => Tensor::f32s(&dims, t.get_float_val())?.into(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `Tensor::f32s(&dims, t.get_float_val())?` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:90:9 [INFO] [stderr] | [INFO] [stderr] 90 | / match self { [INFO] [stderr] 91 | | &Tensor::F32(ref it) => { [INFO] [stderr] 92 | | tensor.set_dtype(DatumType::F32.to_tf()?); [INFO] [stderr] 93 | | tensor.set_float_val(it.iter().cloned().collect()); [INFO] [stderr] ... | [INFO] [stderr] 103 | | _ => unimplemented!("missing type"), [INFO] [stderr] 104 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 90 | match *self { [INFO] [stderr] 91 | Tensor::F32(ref it) => { [INFO] [stderr] 92 | tensor.set_dtype(DatumType::F32.to_tf()?); [INFO] [stderr] 93 | tensor.set_float_val(it.iter().cloned().collect()); [INFO] [stderr] 94 | } [INFO] [stderr] 95 | Tensor::F64(ref it) => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> benches/conv.rs:38:14 [INFO] [stderr] | [INFO] [stderr] 38 | fn build(&self, padding: Padding) -> Box { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> benches/conv.rs:39:9 [INFO] [stderr] | [INFO] [stderr] 39 | / match self { [INFO] [stderr] 40 | | &Algo::Conv2d => Box::new(Conv2D::::new(if padding == Padding::Valid { [INFO] [stderr] 41 | | LocalPatch::valid(1, 1) [INFO] [stderr] 42 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 78 | | } [INFO] [stderr] 79 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 39 | match *self { [INFO] [stderr] 40 | Algo::Conv2d => Box::new(Conv2D::::new(if padding == Padding::Valid { [INFO] [stderr] 41 | LocalPatch::valid(1, 1) [INFO] [stderr] 42 | } else { [INFO] [stderr] 43 | LocalPatch::same(1, 1) [INFO] [stderr] 44 | })), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> benches/conv.rs:59:48 [INFO] [stderr] | [INFO] [stderr] 59 | let input: TVec = tvec![mk(&[1, 82, 1, 40]).into()]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `mk(&[1, 82, 1, 40])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> benches/conv.rs:59:48 [INFO] [stderr] | [INFO] [stderr] 59 | let input: TVec = tvec![mk(&[1, 82, 1, 40]).into()]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `mk(&[1, 82, 1, 40])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> benches/conv.rs:84:24 [INFO] [stderr] | [INFO] [stderr] 84 | let inputs = tvec![mk(&[1, 82, 1, 40]).into(), mk(&[41, 1, 40, 128]).into()]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `mk(&[1, 82, 1, 40])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> benches/conv.rs:84:52 [INFO] [stderr] | [INFO] [stderr] 84 | let inputs = tvec![mk(&[1, 82, 1, 40]).into(), mk(&[41, 1, 40, 128]).into()]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `mk(&[41, 1, 40, 128])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 1m 00s [INFO] running `"docker" "inspect" "5c52231e593f51b8adc5c0b8b8f6782c320d0ee496855109db2a277b63f6e46a"` [INFO] running `"docker" "rm" "-f" "5c52231e593f51b8adc5c0b8b8f6782c320d0ee496855109db2a277b63f6e46a"` [INFO] [stdout] 5c52231e593f51b8adc5c0b8b8f6782c320d0ee496855109db2a277b63f6e46a