[INFO] crate tfdeploy 0.0.10 is already in cache [INFO] extracting crate tfdeploy 0.0.10 into work/ex/clippy-test-run/sources/stable/reg/tfdeploy/0.0.10 [INFO] extracting crate tfdeploy 0.0.10 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/tfdeploy/0.0.10 [INFO] validating manifest of tfdeploy-0.0.10 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 tfdeploy-0.0.10 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 tfdeploy-0.0.10 [INFO] finished frobbing tfdeploy-0.0.10 [INFO] frobbed toml for tfdeploy-0.0.10 written to work/ex/clippy-test-run/sources/stable/reg/tfdeploy/0.0.10/Cargo.toml [INFO] started frobbing tfdeploy-0.0.10 [INFO] finished frobbing tfdeploy-0.0.10 [INFO] frobbed toml for tfdeploy-0.0.10 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/tfdeploy/0.0.10/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 tfdeploy-0.0.10 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-7/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/tfdeploy/0.0.10:/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] d0cf340c47e9d9a6955e0650c5e5a7f55958e31c6d0229df08d650e5d5150f71 [INFO] running `"docker" "start" "-a" "d0cf340c47e9d9a6955e0650c5e5a7f55958e31c6d0229df08d650e5d5150f71"` [INFO] [stderr] Compiling protobuf v2.2.5 [INFO] [stderr] Checking objekt v0.1.2 [INFO] [stderr] Checking num-bigint v0.2.2 [INFO] [stderr] Checking csv-core v0.1.5 [INFO] [stderr] Checking chrono v0.4.6 [INFO] [stderr] Compiling derive-new v0.5.6 [INFO] [stderr] Checking csv v1.0.5 [INFO] [stderr] Checking simplelog v0.5.3 [INFO] [stderr] Checking num-rational v0.2.1 [INFO] [stderr] Checking criterion v0.2.9 [INFO] [stderr] Checking num v0.2.0 [INFO] [stderr] Checking tfdeploy v0.0.10 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/model/tf.rs:79:13 [INFO] [stderr] | [INFO] [stderr] 79 | inputs: inputs, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `inputs` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/ops/nn/conv2d.rs:266:13 [INFO] [stderr] | [INFO] [stderr] 266 | padding: padding, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `padding` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/ops/nn/conv2d.rs:284:5 [INFO] [stderr] | [INFO] [stderr] 284 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::deprecated_cfg_attr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/ops/nn/conv2d.rs:292:5 [INFO] [stderr] | [INFO] [stderr] 292 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/ops/nn/conv2d.rs:300:5 [INFO] [stderr] | [INFO] [stderr] 300 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/ops/nn/conv2d.rs:307:5 [INFO] [stderr] | [INFO] [stderr] 307 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/ops/nn/conv2d.rs:314:5 [INFO] [stderr] | [INFO] [stderr] 314 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/ops/nn/conv2d.rs:321:5 [INFO] [stderr] | [INFO] [stderr] 321 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [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: redundant field names in struct initialization [INFO] [stderr] --> src/model/tf.rs:79:13 [INFO] [stderr] | [INFO] [stderr] 79 | inputs: inputs, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `inputs` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/ops/nn/conv2d.rs:266:13 [INFO] [stderr] | [INFO] [stderr] 266 | padding: padding, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `padding` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/ops/nn/conv2d.rs:284:5 [INFO] [stderr] | [INFO] [stderr] 284 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::deprecated_cfg_attr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/ops/nn/conv2d.rs:292:5 [INFO] [stderr] | [INFO] [stderr] 292 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/ops/nn/conv2d.rs:300:5 [INFO] [stderr] | [INFO] [stderr] 300 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/ops/nn/conv2d.rs:307:5 [INFO] [stderr] | [INFO] [stderr] 307 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/ops/nn/conv2d.rs:314:5 [INFO] [stderr] | [INFO] [stderr] 314 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/ops/nn/conv2d.rs:321:5 [INFO] [stderr] | [INFO] [stderr] 321 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [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: unneeded return statement [INFO] [stderr] --> src/dim/stack.rs:151:9 [INFO] [stderr] | [INFO] [stderr] 151 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/dim/stack.rs:160:9 [INFO] [stderr] | [INFO] [stderr] 160 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/dim/tree.rs:325:28 [INFO] [stderr] | [INFO] [stderr] 325 | } else { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 326 | | if value == 1 { [INFO] [stderr] 327 | | item [INFO] [stderr] 328 | | } else { [INFO] [stderr] 329 | | Mul(value, vec![item]) [INFO] [stderr] 330 | | } [INFO] [stderr] 331 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 325 | } else if value == 1 { [INFO] [stderr] 326 | item [INFO] [stderr] 327 | } else { [INFO] [stderr] 328 | Mul(value, vec![item]) [INFO] [stderr] 329 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unary minus has lower precedence than method call [INFO] [stderr] --> src/ops/array/strided_slice.rs:134:17 [INFO] [stderr] | [INFO] [stderr] 134 | -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: unneeded return statement [INFO] [stderr] --> src/tensor.rs:83:9 [INFO] [stderr] | [INFO] [stderr] 83 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [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: unneeded return statement [INFO] [stderr] --> src/dim/stack.rs:151:9 [INFO] [stderr] | [INFO] [stderr] 151 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/dim/stack.rs:160:9 [INFO] [stderr] | [INFO] [stderr] 160 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/dim/tree.rs:325:28 [INFO] [stderr] | [INFO] [stderr] 325 | } else { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 326 | | if value == 1 { [INFO] [stderr] 327 | | item [INFO] [stderr] 328 | | } else { [INFO] [stderr] 329 | | Mul(value, vec![item]) [INFO] [stderr] 330 | | } [INFO] [stderr] 331 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 325 | } else if value == 1 { [INFO] [stderr] 326 | item [INFO] [stderr] 327 | } else { [INFO] [stderr] 328 | Mul(value, vec![item]) [INFO] [stderr] 329 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unary minus has lower precedence than method call [INFO] [stderr] --> src/ops/array/strided_slice.rs:134:17 [INFO] [stderr] | [INFO] [stderr] 134 | -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:357:53 [INFO] [stderr] | [INFO] [stderr] 357 | 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:357:75 [INFO] [stderr] | [INFO] [stderr] 357 | 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:360:49 [INFO] [stderr] | [INFO] [stderr] 360 | &[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: unneeded return statement [INFO] [stderr] --> src/tensor.rs:83:9 [INFO] [stderr] | [INFO] [stderr] 83 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [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: length comparison to zero [INFO] [stderr] --> src/analyser/constants.rs:39:21 [INFO] [stderr] | [INFO] [stderr] 39 | .map(|next| next.len() > 0 && next.iter().all(|i| is_edge_const[*i])) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!next.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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/analyser/types.rs:93:55 [INFO] [stderr] | [INFO] [stderr] 93 | .map(|d| d.map(|d| (d as isize).to_dim()).unwrap_or(TDim::s())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(TDim::s)` [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/analyser/types.rs:260:13 [INFO] [stderr] | [INFO] [stderr] 260 | / match dim { [INFO] [stderr] 261 | | GenericFact::Only(ref mut it) => it.reduce(), [INFO] [stderr] 262 | | _ => (), [INFO] [stderr] 263 | | } [INFO] [stderr] | |_____________^ help: try this: `if let GenericFact::Only(ref mut it) = dim { it.reduce() }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/analyser/types.rs:331:48 [INFO] [stderr] | [INFO] [stderr] 331 | ShapeFact::closed(iter.into_iter().map(|d| GenericFact::Only(d)).collect()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `GenericFact::Only` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/analyser/types.rs:338:15 [INFO] [stderr] | [INFO] [stderr] 338 | slice.into_iter().map(|i| TDim::from(*i)).collect() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/analyser/types.rs:345:31 [INFO] [stderr] | [INFO] [stderr] 345 | shape.into_iter().map(|i| TDim::from(i)).collect() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: remove closure as shown: `TDim::from` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/analyser/helpers.rs:17:13 [INFO] [stderr] | [INFO] [stderr] 17 | inputs: &Vec<&TensorFact>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: change this to: `&[&TensorFact]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/analyser/helpers.rs:49:14 [INFO] [stderr] | [INFO] [stderr] 49 | for i in 1..(bound + 1) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: use: `1..=bound` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a call to `default` [INFO] [stderr] --> src/analyser/helpers.rs:104:22 [INFO] [stderr] | [INFO] [stderr] 104 | let datum_type = inputs [INFO] [stderr] | ______________________^ [INFO] [stderr] 105 | | .iter() [INFO] [stderr] 106 | | .filter_map(|i| i.datum_type.concretize()) [INFO] [stderr] 107 | | .next() [INFO] [stderr] 108 | | .map(|t| typefact!(t)) [INFO] [stderr] 109 | | .unwrap_or(typefact!(_)); [INFO] [stderr] | |________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 104 | let datum_type = inputs [INFO] [stderr] 105 | .iter() [INFO] [stderr] 106 | .filter_map(|i| i.datum_type.concretize()) [INFO] [stderr] 107 | .next() [INFO] [stderr] 108 | .map(|t| typefact!(t)).unwrap_or_default(); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/analyser/helpers.rs:113:57 [INFO] [stderr] | [INFO] [stderr] 113 | shape: infer_shape_broadcasting(&input_shapes)?.unwrap_or(shapefact![..]), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| shapefact![..])` [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: you should consider deriving a `Default` implementation for `analyser::rules::cache::Cache` [INFO] [stderr] --> src/analyser/rules/cache.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | / pub fn new() -> Cache { [INFO] [stderr] 16 | | Cache(RefCell::new(HashMap::new())) [INFO] [stderr] 17 | | } [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] 6 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/analyser/rules/expressions.rs:64:14 [INFO] [stderr] | [INFO] [stderr] 64 | .ok_or(message.into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| message.into())` [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/analyser/rules/expressions.rs:79:14 [INFO] [stderr] | [INFO] [stderr] 79 | .ok_or(message.into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| message.into())` [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/analyser/rules/expressions.rs:94:14 [INFO] [stderr] | [INFO] [stderr] 94 | .ok_or(message.into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| message.into())` [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/analyser/rules/expressions.rs:109:14 [INFO] [stderr] | [INFO] [stderr] 109 | .ok_or(message.into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| message.into())` [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: large size difference between variants [INFO] [stderr] --> src/analyser/rules/expressions.rs:120:5 [INFO] [stderr] | [INFO] [stderr] 120 | Dim(DimFact), [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 120 | Dim(Box), [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/analyser/rules/expressions.rs:339:28 [INFO] [stderr] | [INFO] [stderr] 339 | VariableExpression(self.get_path().clone().into(), PhantomData) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `self.get_path().clone()` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/analyser/rules/path.rs:174:19 [INFO] [stderr] | [INFO] [stderr] 174 | [0] => Ok(fact.datum_type.clone().wrap()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `fact.datum_type` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/analyser/rules/path.rs:310:8 [INFO] [stderr] | [INFO] [stderr] 310 | if path == &[-1] || path == &[] { [INFO] [stderr] | ^^^^^^^^----- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `[-1]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/analyser/rules/path.rs:310:25 [INFO] [stderr] | [INFO] [stderr] 310 | if path == &[-1] || path == &[] { [INFO] [stderr] | ^^^^^^^^--- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `[]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/analyser/rules/solver.rs:365:28 [INFO] [stderr] | [INFO] [stderr] 365 | changed |= step_added.len() > 0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!step_added.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: length comparison to zero [INFO] [stderr] --> src/analyser/mod.rs:53:12 [INFO] [stderr] | [INFO] [stderr] 53 | if s.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `s.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: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/analyser/mod.rs:101:32 [INFO] [stderr] | [INFO] [stderr] 101 | let nodes: Vec = model.nodes().iter().cloned().collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_cloned_collect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/analyser/mod.rs:228:31 [INFO] [stderr] | [INFO] [stderr] 228 | pub fn to_optimized_model(&mut self) -> Result { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/dim/stack.rs:77:53 [INFO] [stderr] | [INFO] [stderr] 77 | Sym(v) => stack.push(*values.get(v).ok_or(format!("Unresolved value {:?}", v))?), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| format!("Unresolved value {:?}", v))` [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: length comparison to one [INFO] [stderr] --> src/dim/stack.rs:114:12 [INFO] [stderr] | [INFO] [stderr] 114 | if stack.len() < 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `stack.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: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/dim/stack.rs:189:16 [INFO] [stderr] | [INFO] [stderr] 189 | if let Some(_) = self.val() { [INFO] [stderr] | _________- ^^^^^^^ [INFO] [stderr] 190 | | return Ok(self); [INFO] [stderr] 191 | | } [INFO] [stderr] | |_________- help: try this: `if self.val().is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/dim/tree.rs:96:12 [INFO] [stderr] | [INFO] [stderr] 96 | if stack.len() < 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `stack.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: length comparison to zero [INFO] [stderr] --> src/dim/tree.rs:289:20 [INFO] [stderr] | [INFO] [stderr] 289 | if members.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `members.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: length comparison to zero [INFO] [stderr] --> src/dim/tree.rs:314:27 [INFO] [stderr] | [INFO] [stderr] 314 | } else if reduced.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `reduced.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: single-character string constant used as pattern [INFO] [stderr] --> src/model/tf.rs:49:62 [INFO] [stderr] | [INFO] [stderr] 49 | let input: (usize, 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: using `clone` on a `Copy` type [INFO] [stderr] --> src/model/tf.rs:51:25 [INFO] [stderr] | [INFO] [stderr] 51 | / nodes_by_name [INFO] [stderr] 52 | | .get(&*i.replace("^", "")) [INFO] [stderr] 53 | | .ok_or(format!("No node {} found", i))? [INFO] [stderr] 54 | | .clone(), [INFO] [stderr] | |____________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 51 | *(nodes_by_name [INFO] [stderr] 52 | .get(&*i.replace("^", "")) [INFO] [stderr] 53 | .ok_or(format!("No node {} found", i))?), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/model/tf.rs:53:30 [INFO] [stderr] | [INFO] [stderr] 53 | .ok_or(format!("No node {} found", i))? [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| format!("No node {} found", i))` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/model/tf.rs:60:25 [INFO] [stderr] | [INFO] [stderr] 60 | / nodes_by_name [INFO] [stderr] 61 | | .get(splits[0]) [INFO] [stderr] 62 | | .ok_or(format!("No node {} found", i))? [INFO] [stderr] 63 | | .clone(), [INFO] [stderr] | |____________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 60 | *(nodes_by_name [INFO] [stderr] 61 | .get(splits[0]) [INFO] [stderr] 62 | .ok_or(format!("No node {} found", i))?), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/model/tf.rs:62:30 [INFO] [stderr] | [INFO] [stderr] 62 | .ok_or(format!("No node {} found", i))? [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| format!("No node {} found", i))` [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/ops/array/concatv2.rs:76:43 [INFO] [stderr] | [INFO] [stderr] 76 | .map(|sv| sv.into_value().ok_or("Expected a value".into())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Expected a value".into())` [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: the loop variable `i` is only used to index `inputs`. [INFO] [stderr] --> src/ops/array/concatv2.rs:141:26 [INFO] [stderr] | [INFO] [stderr] 141 | 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] 141 | for in inputs.iter().take(n) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ops/array/squeeze.rs:26:29 [INFO] [stderr] | [INFO] [stderr] 26 | .filter(|v| v.len() > 0) [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!v.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: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/ops/array/strided_slice.rs:221:18 [INFO] [stderr] | [INFO] [stderr] 221 | _buffer: &mut Box, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `&mut OpBuffer` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::borrowed_box)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: in an 'if' condition, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a 'let' [INFO] [stderr] --> src/ops/array/strided_slice.rs:354:61 [INFO] [stderr] | [INFO] [stderr] 354 | if shape.iter().zip(bounds.iter()).all(|(s, b)| { [INFO] [stderr] | _____________________________________________________________^ [INFO] [stderr] 355 | | s.is_stream() [INFO] [stderr] 356 | | || (!b.shrink [INFO] [stderr] 357 | | && b.begin.to_integer().unwrap() == 0 [INFO] [stderr] 358 | | && (b.end.to_integer().unwrap() == 0 || b.end == *s) [INFO] [stderr] 359 | | && b.stride == 1) [INFO] [stderr] 360 | | }) { [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::block_in_if_condition_stmt)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#block_in_if_condition_stmt [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/ops/array/mod.rs:55:21 [INFO] [stderr] | [INFO] [stderr] 55 | 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: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/ops/array/mod.rs:238:44 [INFO] [stderr] | [INFO] [stderr] 238 | let shape: Vec = data.shape().into_iter().map(|s| *s as i32).collect(); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/ops/nn/local_patch.rs:282:54 [INFO] [stderr] | [INFO] [stderr] 282 | 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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/ops/nn/pools.rs:50:54 [INFO] [stderr] | [INFO] [stderr] 50 | 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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/ops/nn/space_to_batch.rs:69:28 [INFO] [stderr] | [INFO] [stderr] 69 | 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/space_to_batch.rs:244:28 [INFO] [stderr] | [INFO] [stderr] 244 | 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: identical conversion [INFO] [stderr] --> src/ops/nn/space_to_batch.rs:309:13 [INFO] [stderr] | [INFO] [stderr] 309 | data.into(), [INFO] [stderr] | ^^^^^^^^^^^ help: consider removing `.into()`: `data` [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: manual implementation of an assign operation [INFO] [stderr] --> src/ops/nn/mod.rs:42:31 [INFO] [stderr] | [INFO] [stderr] 42 | 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 don't need to add `&` to all patterns [INFO] [stderr] --> src/ops/mod.rs:70:9 [INFO] [stderr] | [INFO] [stderr] 70 | / match self { [INFO] [stderr] 71 | | &Value::Owned(ref m) => &m, [INFO] [stderr] 72 | | &Value::Shared(ref m) => m.as_ref(), [INFO] [stderr] 73 | | } [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] 70 | match *self { [INFO] [stderr] 71 | Value::Owned(ref m) => &m, [INFO] [stderr] 72 | Value::Shared(ref m) => m.as_ref(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/ops/mod.rs:101:23 [INFO] [stderr] | [INFO] [stderr] 101 | pub fn into_array<'a, D: ::tensor::Datum>(self) -> ::Result<::ndarray::ArrayD> { [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::extra_unused_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ops/mod.rs:130:9 [INFO] [stderr] | [INFO] [stderr] 130 | / match self { [INFO] [stderr] 131 | | &Value::Owned(ref m) => &m, [INFO] [stderr] 132 | | &Value::Shared(ref m) => m.as_ref(), [INFO] [stderr] 133 | | } [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] 130 | match *self { [INFO] [stderr] 131 | Value::Owned(ref m) => &m, [INFO] [stderr] 132 | Value::Shared(ref m) => m.as_ref(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/ops/mod.rs:146:5 [INFO] [stderr] | [INFO] [stderr] 146 | Stream(Stream), [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 146 | Stream(Box), [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/ops/mod.rs:272:18 [INFO] [stderr] | [INFO] [stderr] 272 | _buffer: &mut Box, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `&mut OpBuffer` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `ops::OpBuilder` [INFO] [stderr] --> src/ops/mod.rs:350:5 [INFO] [stderr] | [INFO] [stderr] 350 | / pub fn new() -> OpBuilder { [INFO] [stderr] 351 | | let mut reg = OpRegister::new(); [INFO] [stderr] 352 | | array::register_all_ops(&mut reg); [INFO] [stderr] 353 | | cast::register_all_ops(&mut reg); [INFO] [stderr] ... | [INFO] [stderr] 357 | | OpBuilder(reg) [INFO] [stderr] 358 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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] 347 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/ops/mod.rs:417:5 [INFO] [stderr] | [INFO] [stderr] 417 | / pub fn iter<'a>(&'a mut self) -> impl Iterator> { [INFO] [stderr] 418 | | self.0.iter() [INFO] [stderr] 419 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/ops/mod.rs:422:5 [INFO] [stderr] | [INFO] [stderr] 422 | / pub fn iter_mut<'a>(&'a mut self) -> impl Iterator> { [INFO] [stderr] 423 | | self.0.iter_mut() [INFO] [stderr] 424 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/plan.rs:145:53 [INFO] [stderr] | [INFO] [stderr] 145 | let prec = self.values[i.node].as_ref().ok_or(format!( [INFO] [stderr] | _____________________________________________________^ [INFO] [stderr] 146 | | "Computing {}, precursor {} not done:", [INFO] [stderr] 147 | | node.name, prec_node.name [INFO] [stderr] 148 | | ))?; [INFO] [stderr] | |______________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 145 | let prec = self.values[i.node].as_ref().ok_or_else(|| format!( [INFO] [stderr] 146 | "Computing {}, precursor {} not done:", [INFO] [stderr] 147 | node.name, prec_node.name [INFO] [stderr] 148 | ))?; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/plan.rs:149:25 [INFO] [stderr] | [INFO] [stderr] 149 | inputs.push(prec[i.slot].clone().into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `prec[i.slot].clone()` [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/plan.rs:170:25 [INFO] [stderr] | [INFO] [stderr] 170 | inputs.push(self.values[i.node].as_ref().unwrap()[i.slot].clone().into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `self.values[i.node].as_ref().unwrap()[i.slot].clone()` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/tensor.rs:22:23 [INFO] [stderr] | [INFO] [stderr] 22 | pub fn from_pb(t: &::tfpb::types::DataType) -> ::Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider passing by value instead: `::tfpb::types::DataType` [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] --> src/tensor.rs:24:9 [INFO] [stderr] | [INFO] [stderr] 24 | / match t { [INFO] [stderr] 25 | | &Tfpb::DT_UINT8 => Ok(DatumType::U8), [INFO] [stderr] 26 | | &Tfpb::DT_INT8 => Ok(DatumType::I8), [INFO] [stderr] 27 | | &Tfpb::DT_INT32 => Ok(DatumType::I32), [INFO] [stderr] ... | [INFO] [stderr] 31 | | _ => Err(format!("Unknown DatumType {:?}", t))?, [INFO] [stderr] 32 | | } [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] 24 | match *t { [INFO] [stderr] 25 | Tfpb::DT_UINT8 => Ok(DatumType::U8), [INFO] [stderr] 26 | Tfpb::DT_INT8 => Ok(DatumType::I8), [INFO] [stderr] 27 | Tfpb::DT_INT32 => Ok(DatumType::I32), [INFO] [stderr] 28 | Tfpb::DT_FLOAT => Ok(DatumType::F32), [INFO] [stderr] 29 | Tfpb::DT_DOUBLE => Ok(DatumType::F64), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/tensor.rs:35:18 [INFO] [stderr] | [INFO] [stderr] 35 | pub fn to_pb(&self) -> ::Result<::tfpb::types::DataType> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/tensor.rs:48:24 [INFO] [stderr] | [INFO] [stderr] 48 | pub fn super_types(&self) -> &'static [DatumType] { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: this loop could be written as a `for` loop [INFO] [stderr] --> src/tensor.rs:66:29 [INFO] [stderr] | [INFO] [stderr] 66 | while let Some(n) = iter.next() { [INFO] [stderr] | ^^^^^^^^^^^ help: try: `for n in iter { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_on_iterator)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_on_iterator [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/tensor.rs:75:30 [INFO] [stderr] | [INFO] [stderr] 75 | pub fn common_super_type(&self, rhs: DatumType) -> Option { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: length comparison to zero [INFO] [stderr] --> src/tensor.rs:159:30 [INFO] [stderr] | [INFO] [stderr] 159 | 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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:202:9 [INFO] [stderr] | [INFO] [stderr] 202 | / match self { [INFO] [stderr] 203 | | &Tensor::F32(ref it) => { [INFO] [stderr] 204 | | tensor.set_dtype(DatumType::F32.to_pb()?); [INFO] [stderr] 205 | | tensor.set_float_val(it.iter().cloned().collect()); [INFO] [stderr] ... | [INFO] [stderr] 215 | | _ => unimplemented!("missing type"), [INFO] [stderr] 216 | | } [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] 202 | match *self { [INFO] [stderr] 203 | Tensor::F32(ref it) => { [INFO] [stderr] 204 | tensor.set_dtype(DatumType::F32.to_pb()?); [INFO] [stderr] 205 | tensor.set_float_val(it.iter().cloned().collect()); [INFO] [stderr] 206 | } [INFO] [stderr] 207 | Tensor::F64(ref it) => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:221:9 [INFO] [stderr] | [INFO] [stderr] 221 | / match self { [INFO] [stderr] 222 | | &Tensor::F64(ref it) => it.shape(), [INFO] [stderr] 223 | | &Tensor::F32(ref it) => it.shape(), [INFO] [stderr] 224 | | &Tensor::I32(ref it) => it.shape(), [INFO] [stderr] ... | [INFO] [stderr] 228 | | _ => unimplemented!("missing type"), [INFO] [stderr] 229 | | } [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] 221 | match *self { [INFO] [stderr] 222 | Tensor::F64(ref it) => it.shape(), [INFO] [stderr] 223 | Tensor::F32(ref it) => it.shape(), [INFO] [stderr] 224 | Tensor::I32(ref it) => it.shape(), [INFO] [stderr] 225 | Tensor::I8(ref it) => it.shape(), [INFO] [stderr] 226 | Tensor::U8(ref it) => it.shape(), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/tensor.rs:233:9 [INFO] [stderr] | [INFO] [stderr] 233 | / match self { [INFO] [stderr] 234 | | Tensor::TDim(ref mut it) => { [INFO] [stderr] 235 | | it.mapv_inplace(|mut e| { [INFO] [stderr] 236 | | e.reduce(); [INFO] [stderr] ... | [INFO] [stderr] 240 | | _ => (), [INFO] [stderr] 241 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 233 | if let Tensor::TDim(ref mut it) = self { [INFO] [stderr] 234 | it.mapv_inplace(|mut e| { [INFO] [stderr] 235 | e.reduce(); [INFO] [stderr] 236 | e [INFO] [stderr] 237 | }); [INFO] [stderr] 238 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:245:9 [INFO] [stderr] | [INFO] [stderr] 245 | / match self { [INFO] [stderr] 246 | | &Tensor::F64(_) => DatumType::F64, [INFO] [stderr] 247 | | &Tensor::F32(_) => DatumType::F32, [INFO] [stderr] 248 | | &Tensor::I32(_) => DatumType::I32, [INFO] [stderr] ... | [INFO] [stderr] 252 | | _ => unimplemented!("missing type"), [INFO] [stderr] 253 | | } [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] 245 | match *self { [INFO] [stderr] 246 | Tensor::F64(_) => DatumType::F64, [INFO] [stderr] 247 | Tensor::F32(_) => DatumType::F32, [INFO] [stderr] 248 | Tensor::I32(_) => DatumType::I32, [INFO] [stderr] 249 | Tensor::I8(_) => DatumType::I8, [INFO] [stderr] 250 | Tensor::U8(_) => DatumType::U8, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:257:9 [INFO] [stderr] | [INFO] [stderr] 257 | / match self { [INFO] [stderr] 258 | | &Tensor::F64(_) => self.axis_chunks_t::(axis, size), [INFO] [stderr] 259 | | &Tensor::F32(_) => self.axis_chunks_t::(axis, size), [INFO] [stderr] 260 | | &Tensor::I8(_) => self.axis_chunks_t::(axis, size), [INFO] [stderr] ... | [INFO] [stderr] 264 | | _ => unimplemented!("missing type"), [INFO] [stderr] 265 | | } [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] 257 | match *self { [INFO] [stderr] 258 | Tensor::F64(_) => self.axis_chunks_t::(axis, size), [INFO] [stderr] 259 | Tensor::F32(_) => self.axis_chunks_t::(axis, size), [INFO] [stderr] 260 | Tensor::I8(_) => self.axis_chunks_t::(axis, size), [INFO] [stderr] 261 | Tensor::U8(_) => self.axis_chunks_t::(axis, size), [INFO] [stderr] 262 | Tensor::I32(_) => self.axis_chunks_t::(axis, size), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/tensor.rs:277:12 [INFO] [stderr] | [INFO] [stderr] 277 | if self.shape().len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.shape().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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:278:16 [INFO] [stderr] | [INFO] [stderr] 278 | Ok(match self { [INFO] [stderr] | ________________^ [INFO] [stderr] 279 | | &Tensor::I32(ref a) => format!( [INFO] [stderr] 280 | | "Scalar {:?} {:?}", [INFO] [stderr] 281 | | self.datum_type(), [INFO] [stderr] ... | [INFO] [stderr] 299 | | _ => unimplemented!("missing type"), [INFO] [stderr] 300 | | }) [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] 278 | Ok(match *self { [INFO] [stderr] 279 | Tensor::I32(ref a) => format!( [INFO] [stderr] 280 | "Scalar {:?} {:?}", [INFO] [stderr] 281 | self.datum_type(), [INFO] [stderr] 282 | a.as_slice().unwrap()[0] [INFO] [stderr] 283 | ), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:303:16 [INFO] [stderr] | [INFO] [stderr] 303 | Ok(match self { [INFO] [stderr] | ________________^ [INFO] [stderr] 304 | | &Tensor::I32(ref a) => format!( [INFO] [stderr] 305 | | "shape:{:?} {:?} {}...", [INFO] [stderr] 306 | | self.shape(), [INFO] [stderr] ... | [INFO] [stderr] 328 | | _ => unimplemented!("missing type"), [INFO] [stderr] 329 | | }) [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] 303 | Ok(match *self { [INFO] [stderr] 304 | Tensor::I32(ref a) => format!( [INFO] [stderr] 305 | "shape:{:?} {:?} {}...", [INFO] [stderr] 306 | self.shape(), [INFO] [stderr] 307 | self.datum_type(), [INFO] [stderr] 308 | a.iter().take(4).join(", ") [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:331:16 [INFO] [stderr] | [INFO] [stderr] 331 | Ok(match self { [INFO] [stderr] | ________________^ [INFO] [stderr] 332 | | &Tensor::I32(ref a) => { [INFO] [stderr] 333 | | format!("{:?} {:?}", self.datum_type(), a).replace("\n", " ") [INFO] [stderr] 334 | | } [INFO] [stderr] ... | [INFO] [stderr] 342 | | _ => unimplemented!("missing type"), [INFO] [stderr] 343 | | }) [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] 331 | Ok(match *self { [INFO] [stderr] 332 | Tensor::I32(ref a) => { [INFO] [stderr] 333 | format!("{:?} {:?}", self.datum_type(), a).replace("\n", " ") [INFO] [stderr] 334 | } [INFO] [stderr] 335 | Tensor::F32(ref a) => { [INFO] [stderr] 336 | format!("{:?} {:?}", self.datum_type(), a).replace("\n", " ") [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:348:9 [INFO] [stderr] | [INFO] [stderr] 348 | / match self { [INFO] [stderr] 349 | | &Tensor::I32(ref data) => Tensor::F32(data.map(|&a| a as f32)), [INFO] [stderr] 350 | | &Tensor::F32(_) => self.clone(), [INFO] [stderr] 351 | | _ => unimplemented!("missing type"), [INFO] [stderr] 352 | | } [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] 348 | match *self { [INFO] [stderr] 349 | Tensor::I32(ref data) => Tensor::F32(data.map(|&a| a as f32)), [INFO] [stderr] 350 | Tensor::F32(_) => self.clone(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/tensor.rs:387:47 [INFO] [stderr] | [INFO] [stderr] 387 | let content = self.partial_dump(true).unwrap_or("Error".to_string()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| "Error".to_string())` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:438:17 [INFO] [stderr] | [INFO] [stderr] 438 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 439 | | if it.shape().len() == 0 { [INFO] [stderr] 440 | | Some(*it.iter().next().unwrap()) [INFO] [stderr] 441 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 445 | | None [INFO] [stderr] 446 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 528 | tensor!(f64, F64, as_f64, as_f64s, take_f64s, f64s, []); [INFO] [stderr] | -------------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:450:17 [INFO] [stderr] | [INFO] [stderr] 450 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 451 | | Some(it) [INFO] [stderr] 452 | | } else { [INFO] [stderr] 453 | | None [INFO] [stderr] 454 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 528 | tensor!(f64, F64, as_f64, as_f64s, take_f64s, f64s, []); [INFO] [stderr] | -------------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:438:17 [INFO] [stderr] | [INFO] [stderr] 438 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 439 | | if it.shape().len() == 0 { [INFO] [stderr] 440 | | Some(*it.iter().next().unwrap()) [INFO] [stderr] 441 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 445 | | None [INFO] [stderr] 446 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 529 | tensor!(f32, F32, as_f32, as_f32s, take_f32s, f32s, []); [INFO] [stderr] | -------------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:450:17 [INFO] [stderr] | [INFO] [stderr] 450 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 451 | | Some(it) [INFO] [stderr] 452 | | } else { [INFO] [stderr] 453 | | None [INFO] [stderr] 454 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 529 | tensor!(f32, F32, as_f32, as_f32s, take_f32s, f32s, []); [INFO] [stderr] | -------------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:438:17 [INFO] [stderr] | [INFO] [stderr] 438 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 439 | | if it.shape().len() == 0 { [INFO] [stderr] 440 | | Some(*it.iter().next().unwrap()) [INFO] [stderr] 441 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 445 | | None [INFO] [stderr] 446 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 530 | / tensor!( [INFO] [stderr] 531 | | i32, [INFO] [stderr] 532 | | I32, [INFO] [stderr] 533 | | as_i32, [INFO] [stderr] ... | [INFO] [stderr] 537 | | [(TDim, as_dims)] [INFO] [stderr] 538 | | ); [INFO] [stderr] | |__- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:450:17 [INFO] [stderr] | [INFO] [stderr] 450 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 451 | | Some(it) [INFO] [stderr] 452 | | } else { [INFO] [stderr] 453 | | None [INFO] [stderr] 454 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 530 | / tensor!( [INFO] [stderr] 531 | | i32, [INFO] [stderr] 532 | | I32, [INFO] [stderr] 533 | | as_i32, [INFO] [stderr] ... | [INFO] [stderr] 537 | | [(TDim, as_dims)] [INFO] [stderr] 538 | | ); [INFO] [stderr] | |__- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:438:17 [INFO] [stderr] | [INFO] [stderr] 438 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 439 | | if it.shape().len() == 0 { [INFO] [stderr] 440 | | Some(*it.iter().next().unwrap()) [INFO] [stderr] 441 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 445 | | None [INFO] [stderr] 446 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 539 | tensor!(u8, U8, as_u8, as_u8s, take_u8s, u8s, []); [INFO] [stderr] | -------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:450:17 [INFO] [stderr] | [INFO] [stderr] 450 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 451 | | Some(it) [INFO] [stderr] 452 | | } else { [INFO] [stderr] 453 | | None [INFO] [stderr] 454 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 539 | tensor!(u8, U8, as_u8, as_u8s, take_u8s, u8s, []); [INFO] [stderr] | -------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:438:17 [INFO] [stderr] | [INFO] [stderr] 438 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 439 | | if it.shape().len() == 0 { [INFO] [stderr] 440 | | Some(*it.iter().next().unwrap()) [INFO] [stderr] 441 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 445 | | None [INFO] [stderr] 446 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 540 | tensor!(i8, I8, as_i8, as_i8s, take_i8s, i8s, []); [INFO] [stderr] | -------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:450:17 [INFO] [stderr] | [INFO] [stderr] 450 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 451 | | Some(it) [INFO] [stderr] 452 | | } else { [INFO] [stderr] 453 | | None [INFO] [stderr] 454 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 540 | tensor!(i8, I8, as_i8, as_i8s, take_i8s, i8s, []); [INFO] [stderr] | -------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:438:17 [INFO] [stderr] | [INFO] [stderr] 438 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 439 | | if it.shape().len() == 0 { [INFO] [stderr] 440 | | Some(*it.iter().next().unwrap()) [INFO] [stderr] 441 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 445 | | None [INFO] [stderr] 446 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 541 | / tensor!( [INFO] [stderr] 542 | | TDim, [INFO] [stderr] 543 | | TDim, [INFO] [stderr] 544 | | as_dim, [INFO] [stderr] ... | [INFO] [stderr] 548 | | [(I32, as_i32s)] [INFO] [stderr] 549 | | ); [INFO] [stderr] | |__- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:450:17 [INFO] [stderr] | [INFO] [stderr] 450 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 451 | | Some(it) [INFO] [stderr] 452 | | } else { [INFO] [stderr] 453 | | None [INFO] [stderr] 454 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 541 | / tensor!( [INFO] [stderr] 542 | | TDim, [INFO] [stderr] 543 | | TDim, [INFO] [stderr] 544 | | as_dim, [INFO] [stderr] ... | [INFO] [stderr] 548 | | [(I32, as_i32s)] [INFO] [stderr] 549 | | ); [INFO] [stderr] | |__- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/analyser/constants.rs:39:21 [INFO] [stderr] | [INFO] [stderr] 39 | .map(|next| next.len() > 0 && next.iter().all(|i| is_edge_const[*i])) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!next.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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/analyser/types.rs:93:55 [INFO] [stderr] | [INFO] [stderr] 93 | .map(|d| d.map(|d| (d as isize).to_dim()).unwrap_or(TDim::s())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(TDim::s)` [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/analyser/types.rs:260:13 [INFO] [stderr] | [INFO] [stderr] 260 | / match dim { [INFO] [stderr] 261 | | GenericFact::Only(ref mut it) => it.reduce(), [INFO] [stderr] 262 | | _ => (), [INFO] [stderr] 263 | | } [INFO] [stderr] | |_____________^ help: try this: `if let GenericFact::Only(ref mut it) = dim { it.reduce() }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/analyser/types.rs:331:48 [INFO] [stderr] | [INFO] [stderr] 331 | ShapeFact::closed(iter.into_iter().map(|d| GenericFact::Only(d)).collect()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `GenericFact::Only` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/analyser/types.rs:338:15 [INFO] [stderr] | [INFO] [stderr] 338 | slice.into_iter().map(|i| TDim::from(*i)).collect() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/analyser/types.rs:345:31 [INFO] [stderr] | [INFO] [stderr] 345 | shape.into_iter().map(|i| TDim::from(i)).collect() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: remove closure as shown: `TDim::from` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/analyser/helpers.rs:17:13 [INFO] [stderr] | [INFO] [stderr] 17 | inputs: &Vec<&TensorFact>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: change this to: `&[&TensorFact]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/analyser/helpers.rs:49:14 [INFO] [stderr] | [INFO] [stderr] 49 | for i in 1..(bound + 1) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: use: `1..=bound` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a call to `default` [INFO] [stderr] --> src/analyser/helpers.rs:104:22 [INFO] [stderr] | [INFO] [stderr] 104 | let datum_type = inputs [INFO] [stderr] | ______________________^ [INFO] [stderr] 105 | | .iter() [INFO] [stderr] 106 | | .filter_map(|i| i.datum_type.concretize()) [INFO] [stderr] 107 | | .next() [INFO] [stderr] 108 | | .map(|t| typefact!(t)) [INFO] [stderr] 109 | | .unwrap_or(typefact!(_)); [INFO] [stderr] | |________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 104 | let datum_type = inputs [INFO] [stderr] 105 | .iter() [INFO] [stderr] 106 | .filter_map(|i| i.datum_type.concretize()) [INFO] [stderr] 107 | .next() [INFO] [stderr] 108 | .map(|t| typefact!(t)).unwrap_or_default(); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/analyser/helpers.rs:113:57 [INFO] [stderr] | [INFO] [stderr] 113 | shape: infer_shape_broadcasting(&input_shapes)?.unwrap_or(shapefact![..]), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| shapefact![..])` [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: you should consider deriving a `Default` implementation for `analyser::rules::cache::Cache` [INFO] [stderr] --> src/analyser/rules/cache.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | / pub fn new() -> Cache { [INFO] [stderr] 16 | | Cache(RefCell::new(HashMap::new())) [INFO] [stderr] 17 | | } [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] 6 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/analyser/rules/expressions.rs:64:14 [INFO] [stderr] | [INFO] [stderr] 64 | .ok_or(message.into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| message.into())` [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/analyser/rules/expressions.rs:79:14 [INFO] [stderr] | [INFO] [stderr] 79 | .ok_or(message.into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| message.into())` [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/analyser/rules/expressions.rs:94:14 [INFO] [stderr] | [INFO] [stderr] 94 | .ok_or(message.into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| message.into())` [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/analyser/rules/expressions.rs:109:14 [INFO] [stderr] | [INFO] [stderr] 109 | .ok_or(message.into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| message.into())` [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: large size difference between variants [INFO] [stderr] --> src/analyser/rules/expressions.rs:120:5 [INFO] [stderr] | [INFO] [stderr] 120 | Dim(DimFact), [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 120 | Dim(Box), [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/analyser/rules/expressions.rs:339:28 [INFO] [stderr] | [INFO] [stderr] 339 | VariableExpression(self.get_path().clone().into(), PhantomData) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `self.get_path().clone()` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/analyser/rules/path.rs:174:19 [INFO] [stderr] | [INFO] [stderr] 174 | [0] => Ok(fact.datum_type.clone().wrap()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `fact.datum_type` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/analyser/rules/path.rs:310:8 [INFO] [stderr] | [INFO] [stderr] 310 | if path == &[-1] || path == &[] { [INFO] [stderr] | ^^^^^^^^----- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `[-1]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/analyser/rules/path.rs:310:25 [INFO] [stderr] | [INFO] [stderr] 310 | if path == &[-1] || path == &[] { [INFO] [stderr] | ^^^^^^^^--- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `[]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/analyser/rules/solver.rs:365:28 [INFO] [stderr] | [INFO] [stderr] 365 | changed |= step_added.len() > 0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!step_added.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/analyser/rules/solver.rs:526:23 [INFO] [stderr] | [INFO] [stderr] 526 | solver.infer((tvec![].into(), tvec![].into())).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider removing `.into()`: `tvec![]` [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/analyser/rules/solver.rs:526:39 [INFO] [stderr] | [INFO] [stderr] 526 | solver.infer((tvec![].into(), tvec![].into())).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider removing `.into()`: `tvec![]` [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/analyser/rules/solver.rs:534:23 [INFO] [stderr] | [INFO] [stderr] 534 | solver.infer((tvec![].into(), tvec![].into())).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider removing `.into()`: `tvec![]` [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/analyser/rules/solver.rs:534:39 [INFO] [stderr] | [INFO] [stderr] 534 | solver.infer((tvec![].into(), tvec![].into())).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider removing `.into()`: `tvec![]` [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/analyser/rules/solver.rs:543:21 [INFO] [stderr] | [INFO] [stderr] 543 | .infer((tvec![TensorFact::new()].into(), tvec![].into())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `tvec![TensorFact::new()]` [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/analyser/rules/solver.rs:543:54 [INFO] [stderr] | [INFO] [stderr] 543 | .infer((tvec![TensorFact::new()].into(), tvec![].into())) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider removing `.into()`: `tvec![]` [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/analyser/rules/solver.rs:545:28 [INFO] [stderr] | [INFO] [stderr] 545 | assert_eq!(facts, (tvec![TensorFact::new()].into(), tvec![].into())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `tvec![TensorFact::new()]` [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/analyser/rules/solver.rs:545:61 [INFO] [stderr] | [INFO] [stderr] 545 | assert_eq!(facts, (tvec![TensorFact::new()].into(), tvec![].into())); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider removing `.into()`: `tvec![]` [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: length comparison to zero [INFO] [stderr] --> src/analyser/mod.rs:53:12 [INFO] [stderr] | [INFO] [stderr] 53 | if s.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `s.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: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/analyser/mod.rs:101:32 [INFO] [stderr] | [INFO] [stderr] 101 | let nodes: Vec = model.nodes().iter().cloned().collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_cloned_collect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/analyser/mod.rs:228:31 [INFO] [stderr] | [INFO] [stderr] 228 | pub fn to_optimized_model(&mut self) -> Result { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/dim/stack.rs:77:53 [INFO] [stderr] | [INFO] [stderr] 77 | Sym(v) => stack.push(*values.get(v).ok_or(format!("Unresolved value {:?}", v))?), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| format!("Unresolved value {:?}", v))` [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: length comparison to one [INFO] [stderr] --> src/dim/stack.rs:114:12 [INFO] [stderr] | [INFO] [stderr] 114 | if stack.len() < 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `stack.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: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/dim/stack.rs:189:16 [INFO] [stderr] | [INFO] [stderr] 189 | if let Some(_) = self.val() { [INFO] [stderr] | _________- ^^^^^^^ [INFO] [stderr] 190 | | return Ok(self); [INFO] [stderr] 191 | | } [INFO] [stderr] | |_________- help: try this: `if self.val().is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `Stack::from(3)` [INFO] [stderr] --> src/dim/stack.rs:416:24 [INFO] [stderr] | [INFO] [stderr] 416 | let e: Stack = Stack::from(3) + 0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `Stack::from(2)` [INFO] [stderr] --> src/dim/stack.rs:424:24 [INFO] [stderr] | [INFO] [stderr] 424 | let e: Stack = Stack::from(2) / 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/dim/tree.rs:96:12 [INFO] [stderr] | [INFO] [stderr] 96 | if stack.len() < 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `stack.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: length comparison to zero [INFO] [stderr] --> src/dim/tree.rs:289:20 [INFO] [stderr] | [INFO] [stderr] 289 | if members.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `members.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: length comparison to zero [INFO] [stderr] --> src/dim/tree.rs:314:27 [INFO] [stderr] | [INFO] [stderr] 314 | } else if reduced.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `reduced.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: single-character string constant used as pattern [INFO] [stderr] --> src/model/tf.rs:49:62 [INFO] [stderr] | [INFO] [stderr] 49 | let input: (usize, 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: using `clone` on a `Copy` type [INFO] [stderr] --> src/model/tf.rs:51:25 [INFO] [stderr] | [INFO] [stderr] 51 | / nodes_by_name [INFO] [stderr] 52 | | .get(&*i.replace("^", "")) [INFO] [stderr] 53 | | .ok_or(format!("No node {} found", i))? [INFO] [stderr] 54 | | .clone(), [INFO] [stderr] | |____________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 51 | *(nodes_by_name [INFO] [stderr] 52 | .get(&*i.replace("^", "")) [INFO] [stderr] 53 | .ok_or(format!("No node {} found", i))?), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/model/tf.rs:53:30 [INFO] [stderr] | [INFO] [stderr] 53 | .ok_or(format!("No node {} found", i))? [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| format!("No node {} found", i))` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/model/tf.rs:60:25 [INFO] [stderr] | [INFO] [stderr] 60 | / nodes_by_name [INFO] [stderr] 61 | | .get(splits[0]) [INFO] [stderr] 62 | | .ok_or(format!("No node {} found", i))? [INFO] [stderr] 63 | | .clone(), [INFO] [stderr] | |____________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 60 | *(nodes_by_name [INFO] [stderr] 61 | .get(splits[0]) [INFO] [stderr] 62 | .ok_or(format!("No node {} found", i))?), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/model/tf.rs:62:30 [INFO] [stderr] | [INFO] [stderr] 62 | .ok_or(format!("No node {} found", i))? [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| format!("No node {} found", i))` [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/ops/array/concatv2.rs:76:43 [INFO] [stderr] | [INFO] [stderr] 76 | .map(|sv| sv.into_value().ok_or("Expected a value".into())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Expected a value".into())` [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: the loop variable `i` is only used to index `inputs`. [INFO] [stderr] --> src/ops/array/concatv2.rs:141:26 [INFO] [stderr] | [INFO] [stderr] 141 | 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] 141 | for in inputs.iter().take(n) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ops/array/squeeze.rs:26:29 [INFO] [stderr] | [INFO] [stderr] 26 | .filter(|v| v.len() > 0) [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!v.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: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/ops/array/strided_slice.rs:221:18 [INFO] [stderr] | [INFO] [stderr] 221 | _buffer: &mut Box, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `&mut OpBuffer` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::borrowed_box)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: in an 'if' condition, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a 'let' [INFO] [stderr] --> src/ops/array/strided_slice.rs:354:61 [INFO] [stderr] | [INFO] [stderr] 354 | if shape.iter().zip(bounds.iter()).all(|(s, b)| { [INFO] [stderr] | _____________________________________________________________^ [INFO] [stderr] 355 | | s.is_stream() [INFO] [stderr] 356 | | || (!b.shrink [INFO] [stderr] 357 | | && b.begin.to_integer().unwrap() == 0 [INFO] [stderr] 358 | | && (b.end.to_integer().unwrap() == 0 || b.end == *s) [INFO] [stderr] 359 | | && b.stride == 1) [INFO] [stderr] 360 | | }) { [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::block_in_if_condition_stmt)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#block_in_if_condition_stmt [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/ops/array/mod.rs:55:21 [INFO] [stderr] | [INFO] [stderr] 55 | 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: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/ops/array/mod.rs:238:44 [INFO] [stderr] | [INFO] [stderr] 238 | let shape: Vec = data.shape().into_iter().map(|s| *s as i32).collect(); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/ops/nn/local_patch.rs:282:54 [INFO] [stderr] | [INFO] [stderr] 282 | 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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/ops/nn/pools.rs:50:54 [INFO] [stderr] | [INFO] [stderr] 50 | 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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/ops/nn/space_to_batch.rs:69:28 [INFO] [stderr] | [INFO] [stderr] 69 | 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/space_to_batch.rs:244:28 [INFO] [stderr] | [INFO] [stderr] 244 | 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: identical conversion [INFO] [stderr] --> src/ops/nn/space_to_batch.rs:309:13 [INFO] [stderr] | [INFO] [stderr] 309 | data.into(), [INFO] [stderr] | ^^^^^^^^^^^ help: consider removing `.into()`: `data` [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: manual implementation of an assign operation [INFO] [stderr] --> src/ops/nn/mod.rs:42:31 [INFO] [stderr] | [INFO] [stderr] 42 | 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 don't need to add `&` to all patterns [INFO] [stderr] --> src/ops/mod.rs:70:9 [INFO] [stderr] | [INFO] [stderr] 70 | / match self { [INFO] [stderr] 71 | | &Value::Owned(ref m) => &m, [INFO] [stderr] 72 | | &Value::Shared(ref m) => m.as_ref(), [INFO] [stderr] 73 | | } [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] 70 | match *self { [INFO] [stderr] 71 | Value::Owned(ref m) => &m, [INFO] [stderr] 72 | Value::Shared(ref m) => m.as_ref(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/ops/mod.rs:101:23 [INFO] [stderr] | [INFO] [stderr] 101 | pub fn into_array<'a, D: ::tensor::Datum>(self) -> ::Result<::ndarray::ArrayD> { [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::extra_unused_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ops/mod.rs:130:9 [INFO] [stderr] | [INFO] [stderr] 130 | / match self { [INFO] [stderr] 131 | | &Value::Owned(ref m) => &m, [INFO] [stderr] 132 | | &Value::Shared(ref m) => m.as_ref(), [INFO] [stderr] 133 | | } [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] 130 | match *self { [INFO] [stderr] 131 | Value::Owned(ref m) => &m, [INFO] [stderr] 132 | Value::Shared(ref m) => m.as_ref(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/ops/mod.rs:146:5 [INFO] [stderr] | [INFO] [stderr] 146 | Stream(Stream), [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 146 | Stream(Box), [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/ops/mod.rs:272:18 [INFO] [stderr] | [INFO] [stderr] 272 | _buffer: &mut Box, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `&mut OpBuffer` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `ops::OpBuilder` [INFO] [stderr] --> src/ops/mod.rs:350:5 [INFO] [stderr] | [INFO] [stderr] 350 | / pub fn new() -> OpBuilder { [INFO] [stderr] 351 | | let mut reg = OpRegister::new(); [INFO] [stderr] 352 | | array::register_all_ops(&mut reg); [INFO] [stderr] 353 | | cast::register_all_ops(&mut reg); [INFO] [stderr] ... | [INFO] [stderr] 357 | | OpBuilder(reg) [INFO] [stderr] 358 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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] 347 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/ops/mod.rs:417:5 [INFO] [stderr] | [INFO] [stderr] 417 | / pub fn iter<'a>(&'a mut self) -> impl Iterator> { [INFO] [stderr] 418 | | self.0.iter() [INFO] [stderr] 419 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/ops/mod.rs:422:5 [INFO] [stderr] | [INFO] [stderr] 422 | / pub fn iter_mut<'a>(&'a mut self) -> impl Iterator> { [INFO] [stderr] 423 | | self.0.iter_mut() [INFO] [stderr] 424 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/plan.rs:145:53 [INFO] [stderr] | [INFO] [stderr] 145 | let prec = self.values[i.node].as_ref().ok_or(format!( [INFO] [stderr] | _____________________________________________________^ [INFO] [stderr] 146 | | "Computing {}, precursor {} not done:", [INFO] [stderr] 147 | | node.name, prec_node.name [INFO] [stderr] 148 | | ))?; [INFO] [stderr] | |______________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 145 | let prec = self.values[i.node].as_ref().ok_or_else(|| format!( [INFO] [stderr] 146 | "Computing {}, precursor {} not done:", [INFO] [stderr] 147 | node.name, prec_node.name [INFO] [stderr] 148 | ))?; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/plan.rs:149:25 [INFO] [stderr] | [INFO] [stderr] 149 | inputs.push(prec[i.slot].clone().into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `prec[i.slot].clone()` [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/plan.rs:170:25 [INFO] [stderr] | [INFO] [stderr] 170 | inputs.push(self.values[i.node].as_ref().unwrap()[i.slot].clone().into()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `self.values[i.node].as_ref().unwrap()[i.slot].clone()` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/tensor.rs:22:23 [INFO] [stderr] | [INFO] [stderr] 22 | pub fn from_pb(t: &::tfpb::types::DataType) -> ::Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider passing by value instead: `::tfpb::types::DataType` [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] --> src/tensor.rs:24:9 [INFO] [stderr] | [INFO] [stderr] 24 | / match t { [INFO] [stderr] 25 | | &Tfpb::DT_UINT8 => Ok(DatumType::U8), [INFO] [stderr] 26 | | &Tfpb::DT_INT8 => Ok(DatumType::I8), [INFO] [stderr] 27 | | &Tfpb::DT_INT32 => Ok(DatumType::I32), [INFO] [stderr] ... | [INFO] [stderr] 31 | | _ => Err(format!("Unknown DatumType {:?}", t))?, [INFO] [stderr] 32 | | } [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] 24 | match *t { [INFO] [stderr] 25 | Tfpb::DT_UINT8 => Ok(DatumType::U8), [INFO] [stderr] 26 | Tfpb::DT_INT8 => Ok(DatumType::I8), [INFO] [stderr] 27 | Tfpb::DT_INT32 => Ok(DatumType::I32), [INFO] [stderr] 28 | Tfpb::DT_FLOAT => Ok(DatumType::F32), [INFO] [stderr] 29 | Tfpb::DT_DOUBLE => Ok(DatumType::F64), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/tensor.rs:35:18 [INFO] [stderr] | [INFO] [stderr] 35 | pub fn to_pb(&self) -> ::Result<::tfpb::types::DataType> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/tensor.rs:48:24 [INFO] [stderr] | [INFO] [stderr] 48 | pub fn super_types(&self) -> &'static [DatumType] { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: this loop could be written as a `for` loop [INFO] [stderr] --> src/tensor.rs:66:29 [INFO] [stderr] | [INFO] [stderr] 66 | while let Some(n) = iter.next() { [INFO] [stderr] | ^^^^^^^^^^^ help: try: `for n in iter { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_on_iterator)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_on_iterator [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/tensor.rs:75:30 [INFO] [stderr] | [INFO] [stderr] 75 | pub fn common_super_type(&self, rhs: DatumType) -> Option { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: length comparison to zero [INFO] [stderr] --> src/tensor.rs:159:30 [INFO] [stderr] | [INFO] [stderr] 159 | 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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:202:9 [INFO] [stderr] | [INFO] [stderr] 202 | / match self { [INFO] [stderr] 203 | | &Tensor::F32(ref it) => { [INFO] [stderr] 204 | | tensor.set_dtype(DatumType::F32.to_pb()?); [INFO] [stderr] 205 | | tensor.set_float_val(it.iter().cloned().collect()); [INFO] [stderr] ... | [INFO] [stderr] 215 | | _ => unimplemented!("missing type"), [INFO] [stderr] 216 | | } [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] 202 | match *self { [INFO] [stderr] 203 | Tensor::F32(ref it) => { [INFO] [stderr] 204 | tensor.set_dtype(DatumType::F32.to_pb()?); [INFO] [stderr] 205 | tensor.set_float_val(it.iter().cloned().collect()); [INFO] [stderr] 206 | } [INFO] [stderr] 207 | Tensor::F64(ref it) => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:221:9 [INFO] [stderr] | [INFO] [stderr] 221 | / match self { [INFO] [stderr] 222 | | &Tensor::F64(ref it) => it.shape(), [INFO] [stderr] 223 | | &Tensor::F32(ref it) => it.shape(), [INFO] [stderr] 224 | | &Tensor::I32(ref it) => it.shape(), [INFO] [stderr] ... | [INFO] [stderr] 228 | | _ => unimplemented!("missing type"), [INFO] [stderr] 229 | | } [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] 221 | match *self { [INFO] [stderr] 222 | Tensor::F64(ref it) => it.shape(), [INFO] [stderr] 223 | Tensor::F32(ref it) => it.shape(), [INFO] [stderr] 224 | Tensor::I32(ref it) => it.shape(), [INFO] [stderr] 225 | Tensor::I8(ref it) => it.shape(), [INFO] [stderr] 226 | Tensor::U8(ref it) => it.shape(), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/tensor.rs:233:9 [INFO] [stderr] | [INFO] [stderr] 233 | / match self { [INFO] [stderr] 234 | | Tensor::TDim(ref mut it) => { [INFO] [stderr] 235 | | it.mapv_inplace(|mut e| { [INFO] [stderr] 236 | | e.reduce(); [INFO] [stderr] ... | [INFO] [stderr] 240 | | _ => (), [INFO] [stderr] 241 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 233 | if let Tensor::TDim(ref mut it) = self { [INFO] [stderr] 234 | it.mapv_inplace(|mut e| { [INFO] [stderr] 235 | e.reduce(); [INFO] [stderr] 236 | e [INFO] [stderr] 237 | }); [INFO] [stderr] 238 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:245:9 [INFO] [stderr] | [INFO] [stderr] 245 | / match self { [INFO] [stderr] 246 | | &Tensor::F64(_) => DatumType::F64, [INFO] [stderr] 247 | | &Tensor::F32(_) => DatumType::F32, [INFO] [stderr] 248 | | &Tensor::I32(_) => DatumType::I32, [INFO] [stderr] ... | [INFO] [stderr] 252 | | _ => unimplemented!("missing type"), [INFO] [stderr] 253 | | } [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] 245 | match *self { [INFO] [stderr] 246 | Tensor::F64(_) => DatumType::F64, [INFO] [stderr] 247 | Tensor::F32(_) => DatumType::F32, [INFO] [stderr] 248 | Tensor::I32(_) => DatumType::I32, [INFO] [stderr] 249 | Tensor::I8(_) => DatumType::I8, [INFO] [stderr] 250 | Tensor::U8(_) => DatumType::U8, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:257:9 [INFO] [stderr] | [INFO] [stderr] 257 | / match self { [INFO] [stderr] 258 | | &Tensor::F64(_) => self.axis_chunks_t::(axis, size), [INFO] [stderr] 259 | | &Tensor::F32(_) => self.axis_chunks_t::(axis, size), [INFO] [stderr] 260 | | &Tensor::I8(_) => self.axis_chunks_t::(axis, size), [INFO] [stderr] ... | [INFO] [stderr] 264 | | _ => unimplemented!("missing type"), [INFO] [stderr] 265 | | } [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] 257 | match *self { [INFO] [stderr] 258 | Tensor::F64(_) => self.axis_chunks_t::(axis, size), [INFO] [stderr] 259 | Tensor::F32(_) => self.axis_chunks_t::(axis, size), [INFO] [stderr] 260 | Tensor::I8(_) => self.axis_chunks_t::(axis, size), [INFO] [stderr] 261 | Tensor::U8(_) => self.axis_chunks_t::(axis, size), [INFO] [stderr] 262 | Tensor::I32(_) => self.axis_chunks_t::(axis, size), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/tensor.rs:277:12 [INFO] [stderr] | [INFO] [stderr] 277 | if self.shape().len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.shape().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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:278:16 [INFO] [stderr] | [INFO] [stderr] 278 | Ok(match self { [INFO] [stderr] | ________________^ [INFO] [stderr] 279 | | &Tensor::I32(ref a) => format!( [INFO] [stderr] 280 | | "Scalar {:?} {:?}", [INFO] [stderr] 281 | | self.datum_type(), [INFO] [stderr] ... | [INFO] [stderr] 299 | | _ => unimplemented!("missing type"), [INFO] [stderr] 300 | | }) [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] 278 | Ok(match *self { [INFO] [stderr] 279 | Tensor::I32(ref a) => format!( [INFO] [stderr] 280 | "Scalar {:?} {:?}", [INFO] [stderr] 281 | self.datum_type(), [INFO] [stderr] 282 | a.as_slice().unwrap()[0] [INFO] [stderr] 283 | ), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:303:16 [INFO] [stderr] | [INFO] [stderr] 303 | Ok(match self { [INFO] [stderr] | ________________^ [INFO] [stderr] 304 | | &Tensor::I32(ref a) => format!( [INFO] [stderr] 305 | | "shape:{:?} {:?} {}...", [INFO] [stderr] 306 | | self.shape(), [INFO] [stderr] ... | [INFO] [stderr] 328 | | _ => unimplemented!("missing type"), [INFO] [stderr] 329 | | }) [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] 303 | Ok(match *self { [INFO] [stderr] 304 | Tensor::I32(ref a) => format!( [INFO] [stderr] 305 | "shape:{:?} {:?} {}...", [INFO] [stderr] 306 | self.shape(), [INFO] [stderr] 307 | self.datum_type(), [INFO] [stderr] 308 | a.iter().take(4).join(", ") [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:331:16 [INFO] [stderr] | [INFO] [stderr] 331 | Ok(match self { [INFO] [stderr] | ________________^ [INFO] [stderr] 332 | | &Tensor::I32(ref a) => { [INFO] [stderr] 333 | | format!("{:?} {:?}", self.datum_type(), a).replace("\n", " ") [INFO] [stderr] 334 | | } [INFO] [stderr] ... | [INFO] [stderr] 342 | | _ => unimplemented!("missing type"), [INFO] [stderr] 343 | | }) [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] 331 | Ok(match *self { [INFO] [stderr] 332 | Tensor::I32(ref a) => { [INFO] [stderr] 333 | format!("{:?} {:?}", self.datum_type(), a).replace("\n", " ") [INFO] [stderr] 334 | } [INFO] [stderr] 335 | Tensor::F32(ref a) => { [INFO] [stderr] 336 | format!("{:?} {:?}", self.datum_type(), a).replace("\n", " ") [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:348:9 [INFO] [stderr] | [INFO] [stderr] 348 | / match self { [INFO] [stderr] 349 | | &Tensor::I32(ref data) => Tensor::F32(data.map(|&a| a as f32)), [INFO] [stderr] 350 | | &Tensor::F32(_) => self.clone(), [INFO] [stderr] 351 | | _ => unimplemented!("missing type"), [INFO] [stderr] 352 | | } [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] 348 | match *self { [INFO] [stderr] 349 | Tensor::I32(ref data) => Tensor::F32(data.map(|&a| a as f32)), [INFO] [stderr] 350 | Tensor::F32(_) => self.clone(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/tensor.rs:387:47 [INFO] [stderr] | [INFO] [stderr] 387 | let content = self.partial_dump(true).unwrap_or("Error".to_string()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| "Error".to_string())` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:438:17 [INFO] [stderr] | [INFO] [stderr] 438 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 439 | | if it.shape().len() == 0 { [INFO] [stderr] 440 | | Some(*it.iter().next().unwrap()) [INFO] [stderr] 441 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 445 | | None [INFO] [stderr] 446 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 528 | tensor!(f64, F64, as_f64, as_f64s, take_f64s, f64s, []); [INFO] [stderr] | -------------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:450:17 [INFO] [stderr] | [INFO] [stderr] 450 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 451 | | Some(it) [INFO] [stderr] 452 | | } else { [INFO] [stderr] 453 | | None [INFO] [stderr] 454 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 528 | tensor!(f64, F64, as_f64, as_f64s, take_f64s, f64s, []); [INFO] [stderr] | -------------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:438:17 [INFO] [stderr] | [INFO] [stderr] 438 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 439 | | if it.shape().len() == 0 { [INFO] [stderr] 440 | | Some(*it.iter().next().unwrap()) [INFO] [stderr] 441 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 445 | | None [INFO] [stderr] 446 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 529 | tensor!(f32, F32, as_f32, as_f32s, take_f32s, f32s, []); [INFO] [stderr] | -------------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:450:17 [INFO] [stderr] | [INFO] [stderr] 450 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 451 | | Some(it) [INFO] [stderr] 452 | | } else { [INFO] [stderr] 453 | | None [INFO] [stderr] 454 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 529 | tensor!(f32, F32, as_f32, as_f32s, take_f32s, f32s, []); [INFO] [stderr] | -------------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:438:17 [INFO] [stderr] | [INFO] [stderr] 438 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 439 | | if it.shape().len() == 0 { [INFO] [stderr] 440 | | Some(*it.iter().next().unwrap()) [INFO] [stderr] 441 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 445 | | None [INFO] [stderr] 446 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 530 | / tensor!( [INFO] [stderr] 531 | | i32, [INFO] [stderr] 532 | | I32, [INFO] [stderr] 533 | | as_i32, [INFO] [stderr] ... | [INFO] [stderr] 537 | | [(TDim, as_dims)] [INFO] [stderr] 538 | | ); [INFO] [stderr] | |__- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:450:17 [INFO] [stderr] | [INFO] [stderr] 450 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 451 | | Some(it) [INFO] [stderr] 452 | | } else { [INFO] [stderr] 453 | | None [INFO] [stderr] 454 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 530 | / tensor!( [INFO] [stderr] 531 | | i32, [INFO] [stderr] 532 | | I32, [INFO] [stderr] 533 | | as_i32, [INFO] [stderr] ... | [INFO] [stderr] 537 | | [(TDim, as_dims)] [INFO] [stderr] 538 | | ); [INFO] [stderr] | |__- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:438:17 [INFO] [stderr] | [INFO] [stderr] 438 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 439 | | if it.shape().len() == 0 { [INFO] [stderr] 440 | | Some(*it.iter().next().unwrap()) [INFO] [stderr] 441 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 445 | | None [INFO] [stderr] 446 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 539 | tensor!(u8, U8, as_u8, as_u8s, take_u8s, u8s, []); [INFO] [stderr] | -------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:450:17 [INFO] [stderr] | [INFO] [stderr] 450 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 451 | | Some(it) [INFO] [stderr] 452 | | } else { [INFO] [stderr] 453 | | None [INFO] [stderr] 454 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 539 | tensor!(u8, U8, as_u8, as_u8s, take_u8s, u8s, []); [INFO] [stderr] | -------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:438:17 [INFO] [stderr] | [INFO] [stderr] 438 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 439 | | if it.shape().len() == 0 { [INFO] [stderr] 440 | | Some(*it.iter().next().unwrap()) [INFO] [stderr] 441 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 445 | | None [INFO] [stderr] 446 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 540 | tensor!(i8, I8, as_i8, as_i8s, take_i8s, i8s, []); [INFO] [stderr] | -------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:450:17 [INFO] [stderr] | [INFO] [stderr] 450 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 451 | | Some(it) [INFO] [stderr] 452 | | } else { [INFO] [stderr] 453 | | None [INFO] [stderr] 454 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 540 | tensor!(i8, I8, as_i8, as_i8s, take_i8s, i8s, []); [INFO] [stderr] | -------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:438:17 [INFO] [stderr] | [INFO] [stderr] 438 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 439 | | if it.shape().len() == 0 { [INFO] [stderr] 440 | | Some(*it.iter().next().unwrap()) [INFO] [stderr] 441 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 445 | | None [INFO] [stderr] 446 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 541 | / tensor!( [INFO] [stderr] 542 | | TDim, [INFO] [stderr] 543 | | TDim, [INFO] [stderr] 544 | | as_dim, [INFO] [stderr] ... | [INFO] [stderr] 548 | | [(I32, as_i32s)] [INFO] [stderr] 549 | | ); [INFO] [stderr] | |__- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/tensor.rs:450:17 [INFO] [stderr] | [INFO] [stderr] 450 | / if let &Tensor::$v(ref it) = self { [INFO] [stderr] 451 | | Some(it) [INFO] [stderr] 452 | | } else { [INFO] [stderr] 453 | | None [INFO] [stderr] 454 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] ... [INFO] [stderr] 541 | / tensor!( [INFO] [stderr] 542 | | TDim, [INFO] [stderr] 543 | | TDim, [INFO] [stderr] 544 | | as_dim, [INFO] [stderr] ... | [INFO] [stderr] 548 | | [(I32, as_i32s)] [INFO] [stderr] 549 | | ); [INFO] [stderr] | |__- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: unused `#[macro_use]` import [INFO] [stderr] --> benches/conv.rs:4:1 [INFO] [stderr] | [INFO] [stderr] 4 | #[macro_use] [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 39.73s [INFO] running `"docker" "inspect" "d0cf340c47e9d9a6955e0650c5e5a7f55958e31c6d0229df08d650e5d5150f71"` [INFO] running `"docker" "rm" "-f" "d0cf340c47e9d9a6955e0650c5e5a7f55958e31c6d0229df08d650e5d5150f71"` [INFO] [stdout] d0cf340c47e9d9a6955e0650c5e5a7f55958e31c6d0229df08d650e5d5150f71