[INFO] updating cached repository vbo/nnrs [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/vbo/nnrs [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/vbo/nnrs" "work/ex/clippy-test-run/sources/stable/gh/vbo/nnrs"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/vbo/nnrs'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/vbo/nnrs" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/vbo/nnrs"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/vbo/nnrs'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] d2321ff9ded9e103826e2f6523d21cf5b8912a3b [INFO] sha for GitHub repo vbo/nnrs: d2321ff9ded9e103826e2f6523d21cf5b8912a3b [INFO] validating manifest of vbo/nnrs 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 vbo/nnrs 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 vbo/nnrs [INFO] finished frobbing vbo/nnrs [INFO] frobbed toml for vbo/nnrs written to work/ex/clippy-test-run/sources/stable/gh/vbo/nnrs/Cargo.toml [INFO] started frobbing vbo/nnrs [INFO] finished frobbing vbo/nnrs [INFO] frobbed toml for vbo/nnrs written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/vbo/nnrs/Cargo.toml [INFO] crate vbo/nnrs has a lockfile. skipping [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 vbo/nnrs against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-4/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/vbo/nnrs:/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] 3e0d9c25f47027e28fedad2a02d8b8c8bf7275a77e5c0907861bda439f204bec [INFO] running `"docker" "start" "-a" "3e0d9c25f47027e28fedad2a02d8b8c8bf7275a77e5c0907861bda439f204bec"` [INFO] [stderr] Checking serde v1.0.43 [INFO] [stderr] Checking byteorder v1.2.2 [INFO] [stderr] Compiling proc-macro2 v0.3.7 [INFO] [stderr] Checking atty v0.2.9 [INFO] [stderr] Compiling rand_derive v0.3.1 [INFO] [stderr] Checking clap v2.31.2 [INFO] [stderr] Compiling quote v0.5.2 [INFO] [stderr] Compiling syn v0.13.1 [INFO] [stderr] Compiling serde_derive_internals v0.23.1 [INFO] [stderr] Compiling serde_derive v1.0.43 [INFO] [stderr] Checking serde_json v1.0.16 [INFO] [stderr] Checking nnrs v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/math.rs:16:13 [INFO] [stderr] | [INFO] [stderr] 16 | rows: rows, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `rows` [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/math.rs:17:13 [INFO] [stderr] | [INFO] [stderr] 17 | cols: cols, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `cols` [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: redundant field names in struct initialization [INFO] [stderr] --> src/math.rs:37:13 [INFO] [stderr] | [INFO] [stderr] 37 | rows: rows, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `rows` [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: redundant field names in struct initialization [INFO] [stderr] --> src/math.rs:38:13 [INFO] [stderr] | [INFO] [stderr] 38 | cols: cols, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `cols` [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: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/math.rs:203:9 [INFO] [stderr] | [INFO] [stderr] 203 | write!(f, "Matrix {}x{}:\n", self.rows, self.cols).expect(&WRITE_ERR); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/math.rs:209:13 [INFO] [stderr] | [INFO] [stderr] 209 | write!(f, "\n").expect(&WRITE_ERR); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/math.rs:224:9 [INFO] [stderr] | [INFO] [stderr] 224 | write!(f, "Vector {}x1:\n", self.rows).expect(&WRITE_ERR); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/math.rs:226:13 [INFO] [stderr] | [INFO] [stderr] 226 | write!(f, "{:8.4}\n", self.mem[row]).expect(&WRITE_ERR); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/math.rs:237:13 [INFO] [stderr] | [INFO] [stderr] 237 | rows: rows, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `rows` [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: redundant field names in struct initialization [INFO] [stderr] --> src/mnist_data.rs:116:9 [INFO] [stderr] | [INFO] [stderr] 116 | input_size: input_size, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `input_size` [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: redundant field names in struct initialization [INFO] [stderr] --> src/mnist_data.rs:117:9 [INFO] [stderr] | [INFO] [stderr] 117 | label_size: label_size, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `label_size` [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: redundant field names in struct initialization [INFO] [stderr] --> src/network.rs:412:13 [INFO] [stderr] | [INFO] [stderr] 412 | parameters: parameters, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `parameters` [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: redundant field names in struct initialization [INFO] [stderr] --> src/network.rs:516:13 [INFO] [stderr] | [INFO] [stderr] 516 | weights: weights, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `weights` [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: redundant field names in struct initialization [INFO] [stderr] --> src/network.rs:554:13 [INFO] [stderr] | [INFO] [stderr] 554 | kind: kind, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `kind` [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: redundant field names in struct initialization [INFO] [stderr] --> src/snake.rs:68:13 [INFO] [stderr] | [INFO] [stderr] 68 | width: width, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `width` [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: redundant field names in struct initialization [INFO] [stderr] --> src/snake.rs:69:13 [INFO] [stderr] | [INFO] [stderr] 69 | height: height, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `height` [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: redundant field names in struct initialization [INFO] [stderr] --> src/snake.rs:153:17 [INFO] [stderr] | [INFO] [stderr] 153 | state: state, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `state` [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: redundant field names in struct initialization [INFO] [stderr] --> src/snake.rs:158:13 [INFO] [stderr] | [INFO] [stderr] 158 | state: state, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `state` [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: redundant field names in struct initialization [INFO] [stderr] --> src/snake.rs:178:17 [INFO] [stderr] | [INFO] [stderr] 178 | state: state, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `state` [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: redundant field names in struct initialization [INFO] [stderr] --> src/snake.rs:179:17 [INFO] [stderr] | [INFO] [stderr] 179 | game_over: game_over, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `game_over` [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: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/snake_nn.rs:140:21 [INFO] [stderr] | [INFO] [stderr] 140 | write!(training_data_file, "\n"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/snake_nn.rs:266:13 [INFO] [stderr] | [INFO] [stderr] 266 | is_optimal: is_optimal, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `is_optimal` [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: redundant field names in struct initialization [INFO] [stderr] --> src/math.rs:16:13 [INFO] [stderr] | [INFO] [stderr] 16 | rows: rows, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `rows` [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/math.rs:17:13 [INFO] [stderr] | [INFO] [stderr] 17 | cols: cols, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `cols` [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: redundant field names in struct initialization [INFO] [stderr] --> src/math.rs:37:13 [INFO] [stderr] | [INFO] [stderr] 37 | rows: rows, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `rows` [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: redundant field names in struct initialization [INFO] [stderr] --> src/math.rs:38:13 [INFO] [stderr] | [INFO] [stderr] 38 | cols: cols, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `cols` [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: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/math.rs:203:9 [INFO] [stderr] | [INFO] [stderr] 203 | write!(f, "Matrix {}x{}:\n", self.rows, self.cols).expect(&WRITE_ERR); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/math.rs:209:13 [INFO] [stderr] | [INFO] [stderr] 209 | write!(f, "\n").expect(&WRITE_ERR); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/math.rs:224:9 [INFO] [stderr] | [INFO] [stderr] 224 | write!(f, "Vector {}x1:\n", self.rows).expect(&WRITE_ERR); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/math.rs:226:13 [INFO] [stderr] | [INFO] [stderr] 226 | write!(f, "{:8.4}\n", self.mem[row]).expect(&WRITE_ERR); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/math.rs:237:13 [INFO] [stderr] | [INFO] [stderr] 237 | rows: rows, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `rows` [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: redundant field names in struct initialization [INFO] [stderr] --> src/mnist_data.rs:116:9 [INFO] [stderr] | [INFO] [stderr] 116 | input_size: input_size, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `input_size` [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: redundant field names in struct initialization [INFO] [stderr] --> src/mnist_data.rs:117:9 [INFO] [stderr] | [INFO] [stderr] 117 | label_size: label_size, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `label_size` [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: redundant field names in struct initialization [INFO] [stderr] --> src/network.rs:412:13 [INFO] [stderr] | [INFO] [stderr] 412 | parameters: parameters, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `parameters` [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: redundant field names in struct initialization [INFO] [stderr] --> src/network.rs:516:13 [INFO] [stderr] | [INFO] [stderr] 516 | weights: weights, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `weights` [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: redundant field names in struct initialization [INFO] [stderr] --> src/network.rs:554:13 [INFO] [stderr] | [INFO] [stderr] 554 | kind: kind, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `kind` [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: redundant field names in struct initialization [INFO] [stderr] --> src/snake.rs:68:13 [INFO] [stderr] | [INFO] [stderr] 68 | width: width, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `width` [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: redundant field names in struct initialization [INFO] [stderr] --> src/snake.rs:69:13 [INFO] [stderr] | [INFO] [stderr] 69 | height: height, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `height` [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: redundant field names in struct initialization [INFO] [stderr] --> src/snake.rs:153:17 [INFO] [stderr] | [INFO] [stderr] 153 | state: state, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `state` [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: redundant field names in struct initialization [INFO] [stderr] --> src/snake.rs:158:13 [INFO] [stderr] | [INFO] [stderr] 158 | state: state, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `state` [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: redundant field names in struct initialization [INFO] [stderr] --> src/snake.rs:178:17 [INFO] [stderr] | [INFO] [stderr] 178 | state: state, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `state` [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: redundant field names in struct initialization [INFO] [stderr] --> src/snake.rs:179:17 [INFO] [stderr] | [INFO] [stderr] 179 | game_over: game_over, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `game_over` [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: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/snake_nn.rs:140:21 [INFO] [stderr] | [INFO] [stderr] 140 | write!(training_data_file, "\n"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/snake_nn.rs:266:13 [INFO] [stderr] | [INFO] [stderr] 266 | is_optimal: is_optimal, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `is_optimal` [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: unneeded return statement [INFO] [stderr] --> src/math.rs:14:9 [INFO] [stderr] | [INFO] [stderr] 14 | / return Self { [INFO] [stderr] 15 | | mem: Vec::with_capacity(cols * rows), [INFO] [stderr] 16 | | rows: rows, [INFO] [stderr] 17 | | cols: cols, [INFO] [stderr] 18 | | }; [INFO] [stderr] | |__________^ [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] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 14 | Self { [INFO] [stderr] 15 | mem: Vec::with_capacity(cols * rows), [INFO] [stderr] 16 | rows: rows, [INFO] [stderr] 17 | cols: cols, [INFO] [stderr] 18 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/math.rs:24:9 [INFO] [stderr] | [INFO] [stderr] 24 | return Matrix::new(rows, cols); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Matrix::new(rows, cols)` [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: unneeded return statement [INFO] [stderr] --> src/math.rs:35:9 [INFO] [stderr] | [INFO] [stderr] 35 | / return Self { [INFO] [stderr] 36 | | mem: content.to_vec(), [INFO] [stderr] 37 | | rows: rows, [INFO] [stderr] 38 | | cols: cols, [INFO] [stderr] 39 | | }; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 35 | Self { [INFO] [stderr] 36 | mem: content.to_vec(), [INFO] [stderr] 37 | rows: rows, [INFO] [stderr] 38 | cols: cols, [INFO] [stderr] 39 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/math.rs:51:9 [INFO] [stderr] | [INFO] [stderr] 51 | return self; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `self` [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: unneeded return statement [INFO] [stderr] --> src/math.rs:68:9 [INFO] [stderr] | [INFO] [stderr] 68 | return self; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `self` [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: unneeded return statement [INFO] [stderr] --> src/math.rs:212:9 [INFO] [stderr] | [INFO] [stderr] 212 | return Ok(()); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [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: unneeded return statement [INFO] [stderr] --> src/math.rs:229:9 [INFO] [stderr] | [INFO] [stderr] 229 | return Ok(()); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [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: unneeded return statement [INFO] [stderr] --> src/math.rs:235:9 [INFO] [stderr] | [INFO] [stderr] 235 | / return Self { [INFO] [stderr] 236 | | mem: Vec::with_capacity(rows), [INFO] [stderr] 237 | | rows: rows, [INFO] [stderr] 238 | | }; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 235 | Self { [INFO] [stderr] 236 | mem: Vec::with_capacity(rows), [INFO] [stderr] 237 | rows: rows, [INFO] [stderr] 238 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/math.rs:242:9 [INFO] [stderr] | [INFO] [stderr] 242 | / return Self { [INFO] [stderr] 243 | | mem: content.to_vec(), [INFO] [stderr] 244 | | rows: content.len(), [INFO] [stderr] 245 | | }; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 242 | Self { [INFO] [stderr] 243 | mem: content.to_vec(), [INFO] [stderr] 244 | rows: content.len(), [INFO] [stderr] 245 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/math.rs:249:9 [INFO] [stderr] | [INFO] [stderr] 249 | / return Self { [INFO] [stderr] 250 | | mem: Vec::new(), [INFO] [stderr] 251 | | rows: 0, [INFO] [stderr] 252 | | }; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 249 | Self { [INFO] [stderr] 250 | mem: Vec::new(), [INFO] [stderr] 251 | rows: 0, [INFO] [stderr] 252 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/math.rs:264:9 [INFO] [stderr] | [INFO] [stderr] 264 | return self; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `self` [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: unneeded return statement [INFO] [stderr] --> src/math.rs:274:9 [INFO] [stderr] | [INFO] [stderr] 274 | return self; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `self` [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: unneeded return statement [INFO] [stderr] --> src/math.rs:355:9 [INFO] [stderr] | [INFO] [stderr] 355 | return res.sqrt(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `res.sqrt()` [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: unneeded return statement [INFO] [stderr] --> src/math.rs:363:9 [INFO] [stderr] | [INFO] [stderr] 363 | return res; [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `res` [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: unneeded return statement [INFO] [stderr] --> src/math.rs:378:9 [INFO] [stderr] | [INFO] [stderr] 378 | return (max_i, max); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(max_i, max)` [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: unused import: `std::time` [INFO] [stderr] --> src/mnist.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::time; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `math` [INFO] [stderr] --> src/mnist.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | use math; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `math::Matrix` [INFO] [stderr] --> src/mnist.rs:16:5 [INFO] [stderr] | [INFO] [stderr] 16 | use math::Matrix; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `timing` [INFO] [stderr] --> src/mnist.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | use timing; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/mnist_data.rs:26:9 [INFO] [stderr] | [INFO] [stderr] 26 | return (input_data, label_data); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(input_data, label_data)` [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: unneeded return statement [INFO] [stderr] --> src/mnist_data.rs:120:5 [INFO] [stderr] | [INFO] [stderr] 120 | return res; [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `res` [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: unused import: `std::mem` [INFO] [stderr] --> src/network.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use std::mem; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/network.rs:56:9 [INFO] [stderr] | [INFO] [stderr] 56 | return nn; [INFO] [stderr] | ^^^^^^^^^^ help: remove `return` as shown: `nn` [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: unneeded return statement [INFO] [stderr] --> src/network.rs:90:9 [INFO] [stderr] | [INFO] [stderr] 90 | return layers_order; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `layers_order` [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: unneeded return statement [INFO] [stderr] --> src/network.rs:111:9 [INFO] [stderr] | [INFO] [stderr] 111 | return trainer; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove `return` as shown: `trainer` [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: unneeded return statement [INFO] [stderr] --> src/network.rs:262:9 [INFO] [stderr] | [INFO] [stderr] 262 | return (unsafe { &mut *cur_layer }, deps_layers_vec); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(unsafe { &mut *cur_layer }, deps_layers_vec)` [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: unneeded return statement [INFO] [stderr] --> src/network.rs:335:9 [INFO] [stderr] | [INFO] [stderr] 335 | return self.get_layer_activations(parameters.output_layer()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.get_layer_activations(parameters.output_layer())` [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: unneeded return statement [INFO] [stderr] --> src/network.rs:352:9 [INFO] [stderr] | [INFO] [stderr] 352 | return (unsafe { &mut *cur_layer }, deps_layers_vec); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(unsafe { &mut *cur_layer }, deps_layers_vec)` [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: unneeded return statement [INFO] [stderr] --> src/math.rs:14:9 [INFO] [stderr] | [INFO] [stderr] 14 | / return Self { [INFO] [stderr] 15 | | mem: Vec::with_capacity(cols * rows), [INFO] [stderr] 16 | | rows: rows, [INFO] [stderr] 17 | | cols: cols, [INFO] [stderr] 18 | | }; [INFO] [stderr] | |__________^ [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] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 14 | Self { [INFO] [stderr] 15 | mem: Vec::with_capacity(cols * rows), [INFO] [stderr] 16 | rows: rows, [INFO] [stderr] 17 | cols: cols, [INFO] [stderr] 18 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/math.rs:24:9 [INFO] [stderr] | [INFO] [stderr] 24 | return Matrix::new(rows, cols); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Matrix::new(rows, cols)` [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: unneeded return statement [INFO] [stderr] --> src/math.rs:35:9 [INFO] [stderr] | [INFO] [stderr] 35 | / return Self { [INFO] [stderr] 36 | | mem: content.to_vec(), [INFO] [stderr] 37 | | rows: rows, [INFO] [stderr] 38 | | cols: cols, [INFO] [stderr] 39 | | }; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 35 | Self { [INFO] [stderr] 36 | mem: content.to_vec(), [INFO] [stderr] 37 | rows: rows, [INFO] [stderr] 38 | cols: cols, [INFO] [stderr] 39 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/math.rs:51:9 [INFO] [stderr] | [INFO] [stderr] 51 | return self; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `self` [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: unneeded return statement [INFO] [stderr] --> src/math.rs:68:9 [INFO] [stderr] | [INFO] [stderr] 68 | return self; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `self` [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: unneeded return statement [INFO] [stderr] --> src/math.rs:212:9 [INFO] [stderr] | [INFO] [stderr] 212 | return Ok(()); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [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: unneeded return statement [INFO] [stderr] --> src/math.rs:229:9 [INFO] [stderr] | [INFO] [stderr] 229 | return Ok(()); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [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: unneeded return statement [INFO] [stderr] --> src/math.rs:235:9 [INFO] [stderr] | [INFO] [stderr] 235 | / return Self { [INFO] [stderr] 236 | | mem: Vec::with_capacity(rows), [INFO] [stderr] 237 | | rows: rows, [INFO] [stderr] 238 | | }; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 235 | Self { [INFO] [stderr] 236 | mem: Vec::with_capacity(rows), [INFO] [stderr] 237 | rows: rows, [INFO] [stderr] 238 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/math.rs:242:9 [INFO] [stderr] | [INFO] [stderr] 242 | / return Self { [INFO] [stderr] 243 | | mem: content.to_vec(), [INFO] [stderr] 244 | | rows: content.len(), [INFO] [stderr] 245 | | }; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 242 | Self { [INFO] [stderr] 243 | mem: content.to_vec(), [INFO] [stderr] 244 | rows: content.len(), [INFO] [stderr] 245 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/math.rs:249:9 [INFO] [stderr] | [INFO] [stderr] 249 | / return Self { [INFO] [stderr] 250 | | mem: Vec::new(), [INFO] [stderr] 251 | | rows: 0, [INFO] [stderr] 252 | | }; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 249 | Self { [INFO] [stderr] 250 | mem: Vec::new(), [INFO] [stderr] 251 | rows: 0, [INFO] [stderr] 252 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/math.rs:264:9 [INFO] [stderr] | [INFO] [stderr] 264 | return self; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `self` [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: unneeded return statement [INFO] [stderr] --> src/math.rs:274:9 [INFO] [stderr] | [INFO] [stderr] 274 | return self; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `self` [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: unneeded return statement [INFO] [stderr] --> src/math.rs:355:9 [INFO] [stderr] | [INFO] [stderr] 355 | return res.sqrt(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `res.sqrt()` [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: unneeded return statement [INFO] [stderr] --> src/math.rs:363:9 [INFO] [stderr] | [INFO] [stderr] 363 | return res; [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `res` [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: unneeded return statement [INFO] [stderr] --> src/math.rs:378:9 [INFO] [stderr] | [INFO] [stderr] 378 | return (max_i, max); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(max_i, max)` [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: unused import: `std::time` [INFO] [stderr] --> src/mnist.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::time; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `math` [INFO] [stderr] --> src/mnist.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | use math; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `math::Matrix` [INFO] [stderr] --> src/mnist.rs:16:5 [INFO] [stderr] | [INFO] [stderr] 16 | use math::Matrix; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `timing` [INFO] [stderr] --> src/mnist.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | use timing; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/mnist_data.rs:26:9 [INFO] [stderr] | [INFO] [stderr] 26 | return (input_data, label_data); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(input_data, label_data)` [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: unneeded return statement [INFO] [stderr] --> src/mnist_data.rs:120:5 [INFO] [stderr] | [INFO] [stderr] 120 | return res; [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `res` [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: unused import: `std::mem` [INFO] [stderr] --> src/network.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use std::mem; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/network.rs:56:9 [INFO] [stderr] | [INFO] [stderr] 56 | return nn; [INFO] [stderr] | ^^^^^^^^^^ help: remove `return` as shown: `nn` [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: unneeded return statement [INFO] [stderr] --> src/network.rs:90:9 [INFO] [stderr] | [INFO] [stderr] 90 | return layers_order; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `layers_order` [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: unneeded return statement [INFO] [stderr] --> src/network.rs:111:9 [INFO] [stderr] | [INFO] [stderr] 111 | return trainer; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove `return` as shown: `trainer` [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: unneeded return statement [INFO] [stderr] --> src/network.rs:262:9 [INFO] [stderr] | [INFO] [stderr] 262 | return (unsafe { &mut *cur_layer }, deps_layers_vec); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(unsafe { &mut *cur_layer }, deps_layers_vec)` [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: unneeded return statement [INFO] [stderr] --> src/network.rs:335:9 [INFO] [stderr] | [INFO] [stderr] 335 | return self.get_layer_activations(parameters.output_layer()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.get_layer_activations(parameters.output_layer())` [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: unneeded return statement [INFO] [stderr] --> src/network.rs:352:9 [INFO] [stderr] | [INFO] [stderr] 352 | return (unsafe { &mut *cur_layer }, deps_layers_vec); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(unsafe { &mut *cur_layer }, deps_layers_vec)` [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: unneeded return statement [INFO] [stderr] --> src/network.rs:483:9 [INFO] [stderr] | [INFO] [stderr] 483 | return LayerID(self.parameters.layers.len() - 1); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `LayerID(self.parameters.layers.len() - 1)` [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: unneeded return statement [INFO] [stderr] --> src/network.rs:483:9 [INFO] [stderr] | [INFO] [stderr] 483 | return LayerID(self.parameters.layers.len() - 1); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `LayerID(self.parameters.layers.len() - 1)` [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: unused import: `timing::Timing` [INFO] [stderr] --> src/parallel_trainer.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use timing::Timing; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `serde_json` [INFO] [stderr] --> src/snake.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | use serde_json; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `timing::Timing` [INFO] [stderr] --> src/parallel_trainer.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use timing::Timing; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `serde_json` [INFO] [stderr] --> src/snake.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | use serde_json; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/snake.rs:57:9 [INFO] [stderr] | [INFO] [stderr] 57 | return self.tiles[y * self.width + x]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.tiles[y * self.width + x]` [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: unneeded return statement [INFO] [stderr] --> src/snake.rs:95:9 [INFO] [stderr] | [INFO] [stderr] 95 | return map; [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `map` [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: unneeded return statement [INFO] [stderr] --> src/snake.rs:199:5 [INFO] [stderr] | [INFO] [stderr] 199 | return Some(free_tiles[index]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Some(free_tiles[index])` [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: unused import: `Network` [INFO] [stderr] --> src/snake_nn.rs:4:15 [INFO] [stderr] | [INFO] [stderr] 4 | use network::{Network, NetworkParameters, NetworkPredictor}; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `IndependentSample`, `Range` [INFO] [stderr] --> src/snake_nn.rs:7:27 [INFO] [stderr] | [INFO] [stderr] 7 | use rand::distributions::{IndependentSample, Range}; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::sync::mpsc` [INFO] [stderr] --> src/snake_nn.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 18 | use std::sync::mpsc; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Receiver`, `Sender` [INFO] [stderr] --> src/snake_nn.rs:19:23 [INFO] [stderr] | [INFO] [stderr] 19 | use std::sync::mpsc::{Receiver, Sender}; [INFO] [stderr] | ^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `timing::duration_as_total_nanos` [INFO] [stderr] --> src/snake_nn.rs:22:5 [INFO] [stderr] | [INFO] [stderr] 22 | use timing::duration_as_total_nanos; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/snake_nn.rs:277:5 [INFO] [stderr] | [INFO] [stderr] 277 | return session; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove `return` as shown: `session` [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: unneeded return statement [INFO] [stderr] --> src/snake_nn.rs:361:9 [INFO] [stderr] | [INFO] [stderr] 361 | return (possible_snake_inputs[i], false); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(possible_snake_inputs[i], false)` [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: unneeded return statement [INFO] [stderr] --> src/snake_nn.rs:364:9 [INFO] [stderr] | [INFO] [stderr] 364 | return (possible_snake_inputs[i], true); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(possible_snake_inputs[i], true)` [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: unnecessary parentheses around `if` condition [INFO] [stderr] --> src/snake_nn.rs:340:8 [INFO] [stderr] | [INFO] [stderr] 340 | if (rng.gen_range(0.0, 1.0) <= random_move_prob) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_parens)] on by default [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/snake_nn.rs:381:5 [INFO] [stderr] | [INFO] [stderr] 381 | return (max_i, max); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(max_i, max)` [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: unneeded return statement [INFO] [stderr] --> src/snake_nn.rs:417:9 [INFO] [stderr] | [INFO] [stderr] 417 | return (input_data, label_data); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(input_data, label_data)` [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: unneeded return statement [INFO] [stderr] --> src/snake.rs:57:9 [INFO] [stderr] | [INFO] [stderr] 57 | return self.tiles[y * self.width + x]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.tiles[y * self.width + x]` [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: unneeded return statement [INFO] [stderr] --> src/snake.rs:95:9 [INFO] [stderr] | [INFO] [stderr] 95 | return map; [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `map` [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: unneeded return statement [INFO] [stderr] --> src/snake_nn.rs:487:5 [INFO] [stderr] | [INFO] [stderr] 487 | return result; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `result` [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: unneeded return statement [INFO] [stderr] --> src/snake_nn.rs:525:5 [INFO] [stderr] | [INFO] [stderr] 525 | return (v * 100.0).round() as f64 / 100.0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(v * 100.0).round() as f64 / 100.0` [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: unneeded return statement [INFO] [stderr] --> src/snake_nn.rs:533:5 [INFO] [stderr] | [INFO] [stderr] 533 | return res; [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `res` [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: unneeded return statement [INFO] [stderr] --> src/snake.rs:199:5 [INFO] [stderr] | [INFO] [stderr] 199 | return Some(free_tiles[index]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Some(free_tiles[index])` [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: unneeded return statement [INFO] [stderr] --> src/snake_nn.rs:540:5 [INFO] [stderr] | [INFO] [stderr] 540 | return hasher.finish(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `hasher.finish()` [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: unneeded return statement [INFO] [stderr] --> src/snake_nn.rs:563:5 [INFO] [stderr] | [INFO] [stderr] 563 | return inputs; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `inputs` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] warning: unused import: `Network` [INFO] [stderr] --> src/snake_nn.rs:4:15 [INFO] [stderr] | [INFO] [stderr] 4 | use network::{Network, NetworkParameters, NetworkPredictor}; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] [INFO] [stderr] warning: unused imports: `IndependentSample`, `Range` [INFO] [stderr] --> src/snake_nn.rs:7:27 [INFO] [stderr] | [INFO] [stderr] 7 | use rand::distributions::{IndependentSample, Range}; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::sync::mpsc` [INFO] [stderr] --> src/snake_nn.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 18 | use std::sync::mpsc; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Receiver`, `Sender` [INFO] [stderr] --> src/snake_nn.rs:19:23 [INFO] [stderr] | [INFO] [stderr] 19 | use std::sync::mpsc::{Receiver, Sender}; [INFO] [stderr] | ^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `timing::duration_as_total_nanos` [INFO] [stderr] --> src/snake_nn.rs:22:5 [INFO] [stderr] | [INFO] [stderr] 22 | use timing::duration_as_total_nanos; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::collections::hash_map::Entry` [INFO] [stderr] --> src/timing.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::collections::hash_map::Entry; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/timing.rs:82:49 [INFO] [stderr] | [INFO] [stderr] 82 | timer.duration.subsec_nanos() / 1000000 [INFO] [stderr] | ^^^^^^^ help: consider: `1_000_000` [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: unneeded return statement [INFO] [stderr] --> src/snake_nn.rs:277:5 [INFO] [stderr] | [INFO] [stderr] 277 | return session; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove `return` as shown: `session` [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: unneeded return statement [INFO] [stderr] --> src/snake_nn.rs:361:9 [INFO] [stderr] | [INFO] [stderr] 361 | return (possible_snake_inputs[i], false); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(possible_snake_inputs[i], false)` [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: unneeded return statement [INFO] [stderr] --> src/snake_nn.rs:364:9 [INFO] [stderr] | [INFO] [stderr] 364 | return (possible_snake_inputs[i], true); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(possible_snake_inputs[i], true)` [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: unnecessary parentheses around `if` condition [INFO] [stderr] --> src/snake_nn.rs:340:8 [INFO] [stderr] | [INFO] [stderr] 340 | if (rng.gen_range(0.0, 1.0) <= random_move_prob) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_parens)] on by default [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/snake_nn.rs:381:5 [INFO] [stderr] | [INFO] [stderr] 381 | return (max_i, max); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(max_i, max)` [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: unneeded return statement [INFO] [stderr] --> src/snake_nn.rs:417:9 [INFO] [stderr] | [INFO] [stderr] 417 | return (input_data, label_data); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(input_data, label_data)` [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: unneeded return statement [INFO] [stderr] --> src/snake_nn.rs:487:5 [INFO] [stderr] | [INFO] [stderr] 487 | return result; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `result` [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: unneeded return statement [INFO] [stderr] --> src/snake_nn.rs:525:5 [INFO] [stderr] | [INFO] [stderr] 525 | return (v * 100.0).round() as f64 / 100.0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(v * 100.0).round() as f64 / 100.0` [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: unneeded return statement [INFO] [stderr] --> src/snake_nn.rs:533:5 [INFO] [stderr] | [INFO] [stderr] 533 | return res; [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `res` [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: unneeded return statement [INFO] [stderr] --> src/snake_nn.rs:540:5 [INFO] [stderr] | [INFO] [stderr] 540 | return hasher.finish(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `hasher.finish()` [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: unneeded return statement [INFO] [stderr] --> src/snake_nn.rs:563:5 [INFO] [stderr] | [INFO] [stderr] 563 | return inputs; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `inputs` [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: unused import: `std::collections::hash_map::Entry` [INFO] [stderr] --> src/timing.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::collections::hash_map::Entry; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/timing.rs:82:49 [INFO] [stderr] | [INFO] [stderr] 82 | timer.duration.subsec_nanos() / 1000000 [INFO] [stderr] | ^^^^^^^ help: consider: `1_000_000` [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: use of deprecated item 'std::thread::sleep_ms': replaced by `std::thread::sleep` [INFO] [stderr] --> src/snake_nn.rs:176:13 [INFO] [stderr] | [INFO] [stderr] 176 | thread::sleep_ms(SLEEP_INTERVAL_MS); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::thread::sleep_ms': replaced by `std::thread::sleep` [INFO] [stderr] --> src/snake_nn.rs:212:17 [INFO] [stderr] | [INFO] [stderr] 212 | thread::sleep_ms(SLEEP_INTERVAL_MS); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::thread::sleep_ms': replaced by `std::thread::sleep` [INFO] [stderr] --> src/snake_nn.rs:176:13 [INFO] [stderr] | [INFO] [stderr] 176 | thread::sleep_ms(SLEEP_INTERVAL_MS); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::thread::sleep_ms': replaced by `std::thread::sleep` [INFO] [stderr] --> src/snake_nn.rs:212:17 [INFO] [stderr] | [INFO] [stderr] 212 | thread::sleep_ms(SLEEP_INTERVAL_MS); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `rand::Rng` [INFO] [stderr] --> src/snake.rs:1:5 [INFO] [stderr] | [INFO] [stderr] 1 | use rand::Rng; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `rand::Rng` [INFO] [stderr] --> src/snake.rs:1:5 [INFO] [stderr] | [INFO] [stderr] 1 | use rand::Rng; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `hits` [INFO] [stderr] --> src/mnist.rs:64:13 [INFO] [stderr] | [INFO] [stderr] 64 | let mut hits = 0usize; [INFO] [stderr] | ^^^^ help: consider using `_hits` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `predictor` [INFO] [stderr] --> src/mnist.rs:98:30 [INFO] [stderr] | [INFO] [stderr] 98 | let (params, predictor, _) = parallel_trainer.borrow_network_parts(); [INFO] [stderr] | ^^^^^^^^^ help: consider using `_predictor` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `log_every_n` [INFO] [stderr] --> src/mnist.rs:35:5 [INFO] [stderr] | [INFO] [stderr] 35 | log_every_n: usize, [INFO] [stderr] | ^^^^^^^^^^^ help: consider using `_log_every_n` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `outputs` [INFO] [stderr] --> src/parallel_trainer.rs:150:21 [INFO] [stderr] | [INFO] [stderr] 150 | let outputs = local_nn_predictor [INFO] [stderr] | ^^^^^^^ help: consider using `_outputs` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `iters` [INFO] [stderr] --> src/snake.rs:168:21 [INFO] [stderr] | [INFO] [stderr] 168 | let mut iters = 0; [INFO] [stderr] | ^^^^^ help: consider using `_iters` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `epoch_no` [INFO] [stderr] --> src/snake_nn.rs:73:9 [INFO] [stderr] | [INFO] [stderr] 73 | for epoch_no in 0..num_epochs { [INFO] [stderr] | ^^^^^^^^ help: consider using `_epoch_no` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `predictor` [INFO] [stderr] --> src/snake_nn.rs:90:30 [INFO] [stderr] | [INFO] [stderr] 90 | let (params, predictor, _) = parallel_trainer.borrow_network_parts(); [INFO] [stderr] | ^^^^^^^^^ help: consider using `_predictor` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `predictor` [INFO] [stderr] --> src/snake_nn.rs:109:18 [INFO] [stderr] | [INFO] [stderr] 109 | let (params, predictor, _) = parallel_trainer.borrow_network_parts(); [INFO] [stderr] | ^^^^^^^^^ help: consider using `_predictor` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `max_gain` [INFO] [stderr] --> src/snake_nn.rs:357:13 [INFO] [stderr] | [INFO] [stderr] 357 | let (i, max_gain) = get_max_with_pos(snake_inputs_gains.as_slice()); [INFO] [stderr] | ^^^^^^^^ help: consider using `_max_gain` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `is_next_action_optimal` [INFO] [stderr] --> src/snake_nn.rs:503:13 [INFO] [stderr] | [INFO] [stderr] 503 | let is_next_action_optimal = session[i - 1].is_optimal; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider using `_is_next_action_optimal` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `i` [INFO] [stderr] --> src/snake_nn.rs:530:9 [INFO] [stderr] | [INFO] [stderr] 530 | for i in 0..MAP_WIDTH * MAP_HEIGHT - 1 { [INFO] [stderr] | ^ help: consider using `_i` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `matches` [INFO] [stderr] --> src/main.rs:53:24 [INFO] [stderr] | [INFO] [stderr] 53 | fn execute_mnist_train(matches: &ArgMatches, submatches: &ArgMatches) { [INFO] [stderr] | ^^^^^^^ help: consider using `_matches` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `matches` [INFO] [stderr] --> src/main.rs:68:22 [INFO] [stderr] | [INFO] [stderr] 68 | fn execute_snake_new(matches: &ArgMatches, submatches: &ArgMatches) { [INFO] [stderr] | ^^^^^^^ help: consider using `_matches` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `matches` [INFO] [stderr] --> src/main.rs:73:24 [INFO] [stderr] | [INFO] [stderr] 73 | fn execute_snake_train(matches: &ArgMatches, submatches: &ArgMatches) { [INFO] [stderr] | ^^^^^^^ help: consider using `_matches` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `matches` [INFO] [stderr] --> src/main.rs:93:22 [INFO] [stderr] | [INFO] [stderr] 93 | fn execute_snake_gen(matches: &ArgMatches, submatches: &ArgMatches) { [INFO] [stderr] | ^^^^^^^ help: consider using `_matches` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `matches` [INFO] [stderr] --> src/main.rs:101:23 [INFO] [stderr] | [INFO] [stderr] 101 | fn execute_snake_demo(matches: &ArgMatches, submatches: &ArgMatches) { [INFO] [stderr] | ^^^^^^^ help: consider using `_matches` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `thread_no` [INFO] [stderr] --> src/parallel_trainer.rs:46:13 [INFO] [stderr] | [INFO] [stderr] 46 | for thread_no in 0..num_threads { [INFO] [stderr] | ^^^^^^^^^ help: consider using `_thread_no` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `hits` [INFO] [stderr] --> src/mnist.rs:64:13 [INFO] [stderr] | [INFO] [stderr] 64 | let mut hits = 0usize; [INFO] [stderr] | ^^^^ help: consider using `_hits` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `predictor` [INFO] [stderr] --> src/mnist.rs:98:30 [INFO] [stderr] | [INFO] [stderr] 98 | let (params, predictor, _) = parallel_trainer.borrow_network_parts(); [INFO] [stderr] | ^^^^^^^^^ help: consider using `_predictor` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `log_every_n` [INFO] [stderr] --> src/mnist.rs:35:5 [INFO] [stderr] | [INFO] [stderr] 35 | log_every_n: usize, [INFO] [stderr] | ^^^^^^^^^^^ help: consider using `_log_every_n` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `outputs` [INFO] [stderr] --> src/parallel_trainer.rs:150:21 [INFO] [stderr] | [INFO] [stderr] 150 | let outputs = local_nn_predictor [INFO] [stderr] | ^^^^^^^ help: consider using `_outputs` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `iters` [INFO] [stderr] --> src/snake.rs:168:21 [INFO] [stderr] | [INFO] [stderr] 168 | let mut iters = 0; [INFO] [stderr] | ^^^^^ help: consider using `_iters` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `epoch_no` [INFO] [stderr] --> src/snake_nn.rs:73:9 [INFO] [stderr] | [INFO] [stderr] 73 | for epoch_no in 0..num_epochs { [INFO] [stderr] | ^^^^^^^^ help: consider using `_epoch_no` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `predictor` [INFO] [stderr] --> src/snake_nn.rs:90:30 [INFO] [stderr] | [INFO] [stderr] 90 | let (params, predictor, _) = parallel_trainer.borrow_network_parts(); [INFO] [stderr] | ^^^^^^^^^ help: consider using `_predictor` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `predictor` [INFO] [stderr] --> src/snake_nn.rs:109:18 [INFO] [stderr] | [INFO] [stderr] 109 | let (params, predictor, _) = parallel_trainer.borrow_network_parts(); [INFO] [stderr] | ^^^^^^^^^ help: consider using `_predictor` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `max_gain` [INFO] [stderr] --> src/snake_nn.rs:357:13 [INFO] [stderr] | [INFO] [stderr] 357 | let (i, max_gain) = get_max_with_pos(snake_inputs_gains.as_slice()); [INFO] [stderr] | ^^^^^^^^ help: consider using `_max_gain` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `is_next_action_optimal` [INFO] [stderr] --> src/snake_nn.rs:503:13 [INFO] [stderr] | [INFO] [stderr] 503 | let is_next_action_optimal = session[i - 1].is_optimal; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider using `_is_next_action_optimal` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `i` [INFO] [stderr] --> src/snake_nn.rs:530:9 [INFO] [stderr] | [INFO] [stderr] 530 | for i in 0..MAP_WIDTH * MAP_HEIGHT - 1 { [INFO] [stderr] | ^ help: consider using `_i` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `matches` [INFO] [stderr] --> src/main.rs:53:24 [INFO] [stderr] | [INFO] [stderr] 53 | fn execute_mnist_train(matches: &ArgMatches, submatches: &ArgMatches) { [INFO] [stderr] | ^^^^^^^ help: consider using `_matches` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `matches` [INFO] [stderr] --> src/main.rs:68:22 [INFO] [stderr] | [INFO] [stderr] 68 | fn execute_snake_new(matches: &ArgMatches, submatches: &ArgMatches) { [INFO] [stderr] | ^^^^^^^ help: consider using `_matches` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `matches` [INFO] [stderr] --> src/main.rs:73:24 [INFO] [stderr] | [INFO] [stderr] 73 | fn execute_snake_train(matches: &ArgMatches, submatches: &ArgMatches) { [INFO] [stderr] | ^^^^^^^ help: consider using `_matches` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `matches` [INFO] [stderr] --> src/main.rs:93:22 [INFO] [stderr] | [INFO] [stderr] 93 | fn execute_snake_gen(matches: &ArgMatches, submatches: &ArgMatches) { [INFO] [stderr] | ^^^^^^^ help: consider using `_matches` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `matches` [INFO] [stderr] --> src/main.rs:101:23 [INFO] [stderr] | [INFO] [stderr] 101 | fn execute_snake_demo(matches: &ArgMatches, submatches: &ArgMatches) { [INFO] [stderr] | ^^^^^^^ help: consider using `_matches` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `layer_order` [INFO] [stderr] --> src/network.rs:645:13 [INFO] [stderr] | [INFO] [stderr] 645 | let layer_order = nn.calc_layers_order(); [INFO] [stderr] | ^^^^^^^^^^^ help: consider using `_layer_order` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `thread_no` [INFO] [stderr] --> src/parallel_trainer.rs:46:13 [INFO] [stderr] | [INFO] [stderr] 46 | for thread_no in 0..num_threads { [INFO] [stderr] | ^^^^^^^^^ help: consider using `_thread_no` instead [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/mnist.rs:64:9 [INFO] [stderr] | [INFO] [stderr] 64 | let mut hits = 0usize; [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/network.rs:55:13 [INFO] [stderr] | [INFO] [stderr] 55 | let mut nn: Self = serde_json::from_reader(&file).unwrap(); [INFO] [stderr] | ----^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/mnist.rs:64:9 [INFO] [stderr] | [INFO] [stderr] 64 | let mut hits = 0usize; [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/parallel_trainer.rs:37:14 [INFO] [stderr] | [INFO] [stderr] 37 | let (mut nn_parameters, mut nn_predictor, mut nn_trainer) = network.as_parts(); [INFO] [stderr] | ----^^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/parallel_trainer.rs:37:51 [INFO] [stderr] | [INFO] [stderr] 37 | let (mut nn_parameters, mut nn_predictor, mut nn_trainer) = network.as_parts(); [INFO] [stderr] | ----^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/parallel_trainer.rs:37:33 [INFO] [stderr] | [INFO] [stderr] 37 | let (mut nn_parameters, mut nn_predictor, mut nn_trainer) = network.as_parts(); [INFO] [stderr] | ----^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/parallel_trainer.rs:123:5 [INFO] [stderr] | [INFO] [stderr] 123 | mut job_receiver: Arc>>, [INFO] [stderr] | ----^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/parallel_trainer.rs:124:5 [INFO] [stderr] | [INFO] [stderr] 124 | mut output_sender: Sender>>, [INFO] [stderr] | ----^^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/parallel_trainer.rs:126:5 [INFO] [stderr] | [INFO] [stderr] 126 | mut local_nn_trainer: Arc>, [INFO] [stderr] | ----^^^^^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/network.rs:55:13 [INFO] [stderr] | [INFO] [stderr] 55 | let mut nn: Self = serde_json::from_reader(&file).unwrap(); [INFO] [stderr] | ----^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/snake_nn.rs:57:9 [INFO] [stderr] | [INFO] [stderr] 57 | let mut nn = network::Network::load_from_file(model_input_path); [INFO] [stderr] | ----^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/snake_nn.rs:131:21 [INFO] [stderr] | [INFO] [stderr] 131 | let mut state = GameState { [INFO] [stderr] | ----^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/snake_nn.rs:115:9 [INFO] [stderr] | [INFO] [stderr] 115 | let mut nn = network::Network::load_from_file(model_path); [INFO] [stderr] | ----^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/parallel_trainer.rs:37:14 [INFO] [stderr] | [INFO] [stderr] 37 | let (mut nn_parameters, mut nn_predictor, mut nn_trainer) = network.as_parts(); [INFO] [stderr] | ----^^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/parallel_trainer.rs:37:51 [INFO] [stderr] | [INFO] [stderr] 37 | let (mut nn_parameters, mut nn_predictor, mut nn_trainer) = network.as_parts(); [INFO] [stderr] | ----^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/parallel_trainer.rs:37:33 [INFO] [stderr] | [INFO] [stderr] 37 | let (mut nn_parameters, mut nn_predictor, mut nn_trainer) = network.as_parts(); [INFO] [stderr] | ----^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/parallel_trainer.rs:123:5 [INFO] [stderr] | [INFO] [stderr] 123 | mut job_receiver: Arc>>, [INFO] [stderr] | ----^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/parallel_trainer.rs:124:5 [INFO] [stderr] | [INFO] [stderr] 124 | mut output_sender: Sender>>, [INFO] [stderr] | ----^^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/parallel_trainer.rs:126:5 [INFO] [stderr] | [INFO] [stderr] 126 | mut local_nn_trainer: Arc>, [INFO] [stderr] | ----^^^^^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new_same_dim` [INFO] [stderr] --> src/math.rs:21:5 [INFO] [stderr] | [INFO] [stderr] 21 | pub fn new_same_dim(m: &Matrix) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `from_slice` [INFO] [stderr] --> src/math.rs:27:5 [INFO] [stderr] | [INFO] [stderr] 27 | pub fn from_slice(rows: usize, cols: usize, content: &[f64]) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `dot_vec` [INFO] [stderr] --> src/math.rs:71:5 [INFO] [stderr] | [INFO] [stderr] 71 | pub fn dot_vec(&self, vec: &Vector, res: &mut Vector) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `transpose` [INFO] [stderr] --> src/math.rs:155:5 [INFO] [stderr] | [INFO] [stderr] 155 | pub fn transpose(&self, res: &mut Matrix) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `from_slice` [INFO] [stderr] --> src/math.rs:241:5 [INFO] [stderr] | [INFO] [stderr] 241 | pub fn from_slice(content: &[f64]) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `empty` [INFO] [stderr] --> src/math.rs:248:5 [INFO] [stderr] | [INFO] [stderr] 248 | pub fn empty() -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `init_rand` [INFO] [stderr] --> src/math.rs:267:5 [INFO] [stderr] | [INFO] [stderr] 267 | pub fn init_rand(mut self) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `copy_from` [INFO] [stderr] --> src/math.rs:286:5 [INFO] [stderr] | [INFO] [stderr] 286 | pub fn copy_from(&mut self, v: &Vector) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `add` [INFO] [stderr] --> src/math.rs:322:5 [INFO] [stderr] | [INFO] [stderr] 322 | pub fn add(&mut self, v: &Vector) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `fill_rand` [INFO] [stderr] --> src/math.rs:335:5 [INFO] [stderr] | [INFO] [stderr] 335 | pub fn fill_rand(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `NANOS_IN_SECOND` [INFO] [stderr] --> src/mnist.rs:28:1 [INFO] [stderr] | [INFO] [stderr] 28 | const NANOS_IN_SECOND: u64 = 1_000_000_000; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_layer_mut` [INFO] [stderr] --> src/network.rs:46:5 [INFO] [stderr] | [INFO] [stderr] 46 | fn get_layer_mut(&mut self, id: LayerID) -> &mut Layer { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `calc_layers_order` [INFO] [stderr] --> src/network.rs:462:5 [INFO] [stderr] | [INFO] [stderr] 462 | fn calc_layers_order(&self) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `predict` [INFO] [stderr] --> src/network.rs:466:5 [INFO] [stderr] | [INFO] [stderr] 466 | pub fn predict(&mut self, input_data: &[f64]) -> &Vector { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `backward_propagation` [INFO] [stderr] --> src/network.rs:470:5 [INFO] [stderr] | [INFO] [stderr] 470 | pub fn backward_propagation(&mut self, true_outputs: &Vector) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `apply_batch` [INFO] [stderr] --> src/network.rs:530:5 [INFO] [stderr] | [INFO] [stderr] 530 | pub fn apply_batch(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `shared_training_data` [INFO] [stderr] --> src/parallel_trainer.rs:22:5 [INFO] [stderr] | [INFO] [stderr] 22 | shared_training_data: Arc, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `job_receiver` [INFO] [stderr] --> src/parallel_trainer.rs:29:5 [INFO] [stderr] | [INFO] [stderr] 29 | job_receiver: Arc>>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `output_sender` [INFO] [stderr] --> src/parallel_trainer.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | output_sender: Sender>>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `join_handles` [INFO] [stderr] --> src/parallel_trainer.rs:32:5 [INFO] [stderr] | [INFO] [stderr] 32 | join_handles: Vec>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `teach_nn` [INFO] [stderr] --> src/snake_nn.rs:384:1 [INFO] [stderr] | [INFO] [stderr] 384 | / fn teach_nn( [INFO] [stderr] 385 | | nn: &mut network::Network, [INFO] [stderr] 386 | | state: &GameState, [INFO] [stderr] 387 | | snake_input: SnakeInput, [INFO] [stderr] ... | [INFO] [stderr] 398 | | nn.backward_propagation(&true_output_vec); [INFO] [stderr] 399 | | } [INFO] [stderr] | |_^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `elapsed` [INFO] [stderr] --> src/timing.rs:46:5 [INFO] [stderr] | [INFO] [stderr] 46 | pub fn elapsed(&self, name: &str) -> time::Duration { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/math.rs:44:13 [INFO] [stderr] | [INFO] [stderr] 44 | self.mem.len() == 0, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.mem.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: length comparison to zero [INFO] [stderr] --> src/math.rs:257:13 [INFO] [stderr] | [INFO] [stderr] 257 | self.mem.len() == 0, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.mem.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: the loop variable `i` is used to index `s` [INFO] [stderr] --> src/math.rs:303:18 [INFO] [stderr] | [INFO] [stderr] 303 | for i in 0..self.rows { [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] 303 | for (i, ) in s.iter().enumerate().take(self.rows) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/math.rs:303:18 [INFO] [stderr] | [INFO] [stderr] 303 | for i in 0..self.rows { [INFO] [stderr] | ^^^^^^^^^^^^ help: try replacing the loop by: `self.mem[..self.rows].clone_from_slice(&s[..self.rows])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::manual_memcpy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/math.rs:331:13 [INFO] [stderr] | [INFO] [stderr] 331 | self.mem[row] = self.mem[row] + v.mem[row]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.mem[row] += v.mem[row]` [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: variable does not need to be mutable [INFO] [stderr] --> src/snake_nn.rs:57:9 [INFO] [stderr] | [INFO] [stderr] 57 | let mut nn = network::Network::load_from_file(model_input_path); [INFO] [stderr] | ----^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/snake_nn.rs:131:21 [INFO] [stderr] | [INFO] [stderr] 131 | let mut state = GameState { [INFO] [stderr] | ----^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/snake_nn.rs:115:9 [INFO] [stderr] | [INFO] [stderr] 115 | let mut nn = network::Network::load_from_file(model_path); [INFO] [stderr] | ----^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `read_buf`. [INFO] [stderr] --> src/mnist_data.rs:70:18 [INFO] [stderr] | [INFO] [stderr] 70 | for i in 0..bytes_read { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 70 | for in read_buf.iter().take(bytes_read) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f64 may become silently lossy if types change [INFO] [stderr] --> src/mnist_data.rs:71:30 [INFO] [stderr] | [INFO] [stderr] 71 | images_data.push((read_buf[i] as f64) / 255.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(read_buf[i])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `read_buf`. [INFO] [stderr] --> src/mnist_data.rs:96:18 [INFO] [stderr] | [INFO] [stderr] 96 | for i in 0..bytes_read { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 96 | for in read_buf.iter().take(bytes_read) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/network.rs:255:54 [INFO] [stderr] | [INFO] [stderr] 255 | let cur_layer: *mut TrainingLayer = unsafe { layers_buf.offset(layer_id.0 as isize) }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `layers_buf.add(layer_id.0)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_offset_with_cast)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/network.rs:258:58 [INFO] [stderr] | [INFO] [stderr] 258 | let dep_layer: *mut TrainingLayer = unsafe { layers_buf.offset(dep.id.0 as isize) }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `layers_buf.add(dep.id.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/network.rs:345:47 [INFO] [stderr] | [INFO] [stderr] 345 | let cur_layer: *mut Vector = unsafe { layers_buf.offset(layer_id.0 as isize) }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `layers_buf.add(layer_id.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/network.rs:348:51 [INFO] [stderr] | [INFO] [stderr] 348 | let dep_layer: *mut Vector = unsafe { layers_buf.offset(dep.id.0 as isize) }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `layers_buf.add(dep.id.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new_same_dim` [INFO] [stderr] --> src/math.rs:21:5 [INFO] [stderr] | [INFO] [stderr] 21 | pub fn new_same_dim(m: &Matrix) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `dot_vec` [INFO] [stderr] --> src/math.rs:71:5 [INFO] [stderr] | [INFO] [stderr] 71 | pub fn dot_vec(&self, vec: &Vector, res: &mut Vector) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `empty` [INFO] [stderr] --> src/math.rs:248:5 [INFO] [stderr] | [INFO] [stderr] 248 | pub fn empty() -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `init_rand` [INFO] [stderr] --> src/math.rs:267:5 [INFO] [stderr] | [INFO] [stderr] 267 | pub fn init_rand(mut self) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `copy_from` [INFO] [stderr] --> src/math.rs:286:5 [INFO] [stderr] | [INFO] [stderr] 286 | pub fn copy_from(&mut self, v: &Vector) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `add` [INFO] [stderr] --> src/math.rs:322:5 [INFO] [stderr] | [INFO] [stderr] 322 | pub fn add(&mut self, v: &Vector) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `fill_rand` [INFO] [stderr] --> src/math.rs:335:5 [INFO] [stderr] | [INFO] [stderr] 335 | pub fn fill_rand(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `NANOS_IN_SECOND` [INFO] [stderr] --> src/mnist.rs:28:1 [INFO] [stderr] | [INFO] [stderr] 28 | const NANOS_IN_SECOND: u64 = 1_000_000_000; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_layer_mut` [INFO] [stderr] --> src/network.rs:46:5 [INFO] [stderr] | [INFO] [stderr] 46 | fn get_layer_mut(&mut self, id: LayerID) -> &mut Layer { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `predict` [INFO] [stderr] --> src/network.rs:466:5 [INFO] [stderr] | [INFO] [stderr] 466 | pub fn predict(&mut self, input_data: &[f64]) -> &Vector { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `backward_propagation` [INFO] [stderr] --> src/network.rs:470:5 [INFO] [stderr] | [INFO] [stderr] 470 | pub fn backward_propagation(&mut self, true_outputs: &Vector) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `apply_batch` [INFO] [stderr] --> src/network.rs:530:5 [INFO] [stderr] | [INFO] [stderr] 530 | pub fn apply_batch(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `shared_training_data` [INFO] [stderr] --> src/parallel_trainer.rs:22:5 [INFO] [stderr] | [INFO] [stderr] 22 | shared_training_data: Arc, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `job_receiver` [INFO] [stderr] --> src/parallel_trainer.rs:29:5 [INFO] [stderr] | [INFO] [stderr] 29 | job_receiver: Arc>>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `output_sender` [INFO] [stderr] --> src/parallel_trainer.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | output_sender: Sender>>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `join_handles` [INFO] [stderr] --> src/parallel_trainer.rs:32:5 [INFO] [stderr] | [INFO] [stderr] 32 | join_handles: Vec>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `teach_nn` [INFO] [stderr] --> src/snake_nn.rs:384:1 [INFO] [stderr] | [INFO] [stderr] 384 | / fn teach_nn( [INFO] [stderr] 385 | | nn: &mut network::Network, [INFO] [stderr] 386 | | state: &GameState, [INFO] [stderr] 387 | | snake_input: SnakeInput, [INFO] [stderr] ... | [INFO] [stderr] 398 | | nn.backward_propagation(&true_output_vec); [INFO] [stderr] 399 | | } [INFO] [stderr] | |_^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `elapsed` [INFO] [stderr] --> src/timing.rs:46:5 [INFO] [stderr] | [INFO] [stderr] 46 | pub fn elapsed(&self, name: &str) -> time::Duration { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: methods called `as_*` usually take self by reference or self by mutable reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/network.rs:416:21 [INFO] [stderr] | [INFO] [stderr] 416 | pub fn as_parts(self) -> (NetworkParameters, NetworkPredictor, NetworkTrainer) { [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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/parallel_trainer.rs:85:13 [INFO] [stderr] | [INFO] [stderr] 85 | / self.job_sender.send(TrainingJob { [INFO] [stderr] 86 | | examples_indices: chunk, [INFO] [stderr] 87 | | network_parameters: self.shared_nn_parameters.clone(), [INFO] [stderr] 88 | | }); [INFO] [stderr] | |_______________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: the variable `output_no` is used as a loop counter. Consider using `for (output_no, item) in self.output_receiver.iter().enumerate()` or similar iterators [INFO] [stderr] --> src/parallel_trainer.rs:92:34 [INFO] [stderr] | [INFO] [stderr] 92 | for output_nn_trainer in self.output_receiver.iter() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/parallel_trainer.rs:160:9 [INFO] [stderr] | [INFO] [stderr] 160 | output_sender.send(local_nn_trainer.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/math.rs:44:13 [INFO] [stderr] | [INFO] [stderr] 44 | self.mem.len() == 0, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.mem.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: length comparison to zero [INFO] [stderr] --> src/snake.rs:99:17 [INFO] [stderr] | [INFO] [stderr] 99 | assert!(self.body.len() > 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.body.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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/snake.rs:118:9 [INFO] [stderr] | [INFO] [stderr] 118 | writer.write("\n".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/snake.rs:120:5 [INFO] [stderr] | [INFO] [stderr] 120 | writer.flush(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/snake.rs:131:5 [INFO] [stderr] | [INFO] [stderr] 131 | writer.write(character.as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/snake.rs:194:8 [INFO] [stderr] | [INFO] [stderr] 194 | if free_tiles.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `free_tiles.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/math.rs:257:13 [INFO] [stderr] | [INFO] [stderr] 257 | self.mem.len() == 0, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.mem.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: the loop variable `i` is used to index `s` [INFO] [stderr] --> src/math.rs:303:18 [INFO] [stderr] | [INFO] [stderr] 303 | for i in 0..self.rows { [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] 303 | for (i, ) in s.iter().enumerate().take(self.rows) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/math.rs:303:18 [INFO] [stderr] | [INFO] [stderr] 303 | for i in 0..self.rows { [INFO] [stderr] | ^^^^^^^^^^^^ help: try replacing the loop by: `self.mem[..self.rows].clone_from_slice(&s[..self.rows])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::manual_memcpy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/math.rs:331:13 [INFO] [stderr] | [INFO] [stderr] 331 | self.mem[row] = self.mem[row] + v.mem[row]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.mem[row] += v.mem[row]` [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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/snake_nn.rs:140:21 [INFO] [stderr] | [INFO] [stderr] 140 | write!(training_data_file, "\n"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/snake_nn.rs:150:9 [INFO] [stderr] | [INFO] [stderr] 150 | jh.join(); [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: the `game_over:` in this pattern is redundant [INFO] [stderr] --> src/snake_nn.rs:203:17 [INFO] [stderr] | [INFO] [stderr] 203 | game_over: game_over, [INFO] [stderr] | ----------^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_shorthand_field_patterns)] on by default [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `shape`. [INFO] [stderr] --> src/snake_nn.rs:230:14 [INFO] [stderr] | [INFO] [stderr] 230 | for i in 1..shape.len() - 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 230 | for in shape.iter().take(shape.len() - 1).skip(1) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the `game_over:` in this pattern is redundant [INFO] [stderr] --> src/snake_nn.rs:271:13 [INFO] [stderr] | [INFO] [stderr] 271 | game_over: game_over, [INFO] [stderr] | ----------^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this [INFO] [stderr] [INFO] [stderr] warning: the `game_over:` in this pattern is redundant [INFO] [stderr] --> src/snake_nn.rs:308:17 [INFO] [stderr] | [INFO] [stderr] 308 | game_over: game_over, [INFO] [stderr] | ----------^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this [INFO] [stderr] [INFO] [stderr] warning: casting i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/snake_nn.rs:323:9 [INFO] [stderr] | [INFO] [stderr] 323 | loops as f64 / count as f64 [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `f64::from(loops)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/snake_nn.rs:369:13 [INFO] [stderr] | [INFO] [stderr] 369 | assert!(xs.len() > 0); [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!xs.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: the loop variable `i` is used to index `xs` [INFO] [stderr] --> src/snake_nn.rs:373:14 [INFO] [stderr] | [INFO] [stderr] 373 | for i in 1..xs.len() { [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 373 | for (i, ) in xs.iter().enumerate().skip(1) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the variable `steps_read` is used as a loop counter. Consider using `for (steps_read, item) in bufreader.lines().enumerate()` or similar iterators [INFO] [stderr] --> src/snake_nn.rs:476:17 [INFO] [stderr] | [INFO] [stderr] 476 | for line in bufreader.lines() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/snake_nn.rs:510:9 [INFO] [stderr] | [INFO] [stderr] 510 | step.state.score = step.state.score + FORGET_RATE * next_score; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `step.state.score += FORGET_RATE * next_score` [INFO] [stderr] | [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: unused attribute [INFO] [stderr] --> src/snake_nn.rs:1:1 [INFO] [stderr] | [INFO] [stderr] 1 | #![feature(test)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_attributes)] on by default [INFO] [stderr] [INFO] [stderr] warning: crate-level attribute should be in the root module [INFO] [stderr] --> src/snake_nn.rs:1:1 [INFO] [stderr] | [INFO] [stderr] 1 | #![feature(test)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/timing.rs:70:42 [INFO] [stderr] | [INFO] [stderr] 70 | duration.as_secs() * 1_000_000_000 + duration.subsec_nanos() as u64 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(duration.subsec_nanos())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/timing.rs:75:9 [INFO] [stderr] | [INFO] [stderr] 75 | writeln!(f, "=== Timing ==="); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/timing.rs:77:13 [INFO] [stderr] | [INFO] [stderr] 77 | / writeln!( [INFO] [stderr] 78 | | f, [INFO] [stderr] 79 | | "{}: {}.{:04}s", [INFO] [stderr] 80 | | name, [INFO] [stderr] 81 | | timer.duration.as_secs(), [INFO] [stderr] 82 | | timer.duration.subsec_nanos() / 1000000 [INFO] [stderr] 83 | | ); [INFO] [stderr] | |______________^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: Calling `subsec_millis()` is more concise than this calculation [INFO] [stderr] --> src/timing.rs:82:17 [INFO] [stderr] | [INFO] [stderr] 82 | timer.duration.subsec_nanos() / 1000000 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `timer.duration.subsec_millis()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::duration_subsec)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#duration_subsec [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `read_buf`. [INFO] [stderr] --> src/mnist_data.rs:70:18 [INFO] [stderr] | [INFO] [stderr] 70 | for i in 0..bytes_read { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 70 | for in read_buf.iter().take(bytes_read) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f64 may become silently lossy if types change [INFO] [stderr] --> src/mnist_data.rs:71:30 [INFO] [stderr] | [INFO] [stderr] 71 | images_data.push((read_buf[i] as f64) / 255.0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(read_buf[i])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `read_buf`. [INFO] [stderr] --> src/mnist_data.rs:96:18 [INFO] [stderr] | [INFO] [stderr] 96 | for i in 0..bytes_read { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 96 | for in read_buf.iter().take(bytes_read) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/network.rs:255:54 [INFO] [stderr] | [INFO] [stderr] 255 | let cur_layer: *mut TrainingLayer = unsafe { layers_buf.offset(layer_id.0 as isize) }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `layers_buf.add(layer_id.0)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_offset_with_cast)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/network.rs:258:58 [INFO] [stderr] | [INFO] [stderr] 258 | let dep_layer: *mut TrainingLayer = unsafe { layers_buf.offset(dep.id.0 as isize) }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `layers_buf.add(dep.id.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/network.rs:345:47 [INFO] [stderr] | [INFO] [stderr] 345 | let cur_layer: *mut Vector = unsafe { layers_buf.offset(layer_id.0 as isize) }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `layers_buf.add(layer_id.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/network.rs:348:51 [INFO] [stderr] | [INFO] [stderr] 348 | let dep_layer: *mut Vector = unsafe { layers_buf.offset(dep.id.0 as isize) }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `layers_buf.add(dep.id.0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] warning: methods called `as_*` usually take self by reference or self by mutable reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/network.rs:416:21 [INFO] [stderr] | [INFO] [stderr] 416 | pub fn as_parts(self) -> (NetworkParameters, NetworkPredictor, NetworkTrainer) { [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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/parallel_trainer.rs:85:13 [INFO] [stderr] | [INFO] [stderr] 85 | / self.job_sender.send(TrainingJob { [INFO] [stderr] 86 | | examples_indices: chunk, [INFO] [stderr] 87 | | network_parameters: self.shared_nn_parameters.clone(), [INFO] [stderr] 88 | | }); [INFO] [stderr] | |_______________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: the variable `output_no` is used as a loop counter. Consider using `for (output_no, item) in self.output_receiver.iter().enumerate()` or similar iterators [INFO] [stderr] --> src/parallel_trainer.rs:92:34 [INFO] [stderr] | [INFO] [stderr] 92 | for output_nn_trainer in self.output_receiver.iter() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/parallel_trainer.rs:160:9 [INFO] [stderr] | [INFO] [stderr] 160 | output_sender.send(local_nn_trainer.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/snake.rs:99:17 [INFO] [stderr] | [INFO] [stderr] 99 | assert!(self.body.len() > 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.body.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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/snake.rs:118:9 [INFO] [stderr] | [INFO] [stderr] 118 | writer.write("\n".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/snake.rs:120:5 [INFO] [stderr] | [INFO] [stderr] 120 | writer.flush(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/snake.rs:131:5 [INFO] [stderr] | [INFO] [stderr] 131 | writer.write(character.as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/snake.rs:194:8 [INFO] [stderr] | [INFO] [stderr] 194 | if free_tiles.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `free_tiles.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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/snake_nn.rs:140:21 [INFO] [stderr] | [INFO] [stderr] 140 | write!(training_data_file, "\n"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/snake_nn.rs:150:9 [INFO] [stderr] | [INFO] [stderr] 150 | jh.join(); [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: the `game_over:` in this pattern is redundant [INFO] [stderr] --> src/snake_nn.rs:203:17 [INFO] [stderr] | [INFO] [stderr] 203 | game_over: game_over, [INFO] [stderr] | ----------^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_shorthand_field_patterns)] on by default [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `shape`. [INFO] [stderr] --> src/snake_nn.rs:230:14 [INFO] [stderr] | [INFO] [stderr] 230 | for i in 1..shape.len() - 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 230 | for in shape.iter().take(shape.len() - 1).skip(1) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the `game_over:` in this pattern is redundant [INFO] [stderr] --> src/snake_nn.rs:271:13 [INFO] [stderr] | [INFO] [stderr] 271 | game_over: game_over, [INFO] [stderr] | ----------^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this [INFO] [stderr] [INFO] [stderr] warning: the `game_over:` in this pattern is redundant [INFO] [stderr] --> src/snake_nn.rs:308:17 [INFO] [stderr] | [INFO] [stderr] 308 | game_over: game_over, [INFO] [stderr] | ----------^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this [INFO] [stderr] [INFO] [stderr] warning: casting i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/snake_nn.rs:323:9 [INFO] [stderr] | [INFO] [stderr] 323 | loops as f64 / count as f64 [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `f64::from(loops)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/snake_nn.rs:369:13 [INFO] [stderr] | [INFO] [stderr] 369 | assert!(xs.len() > 0); [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!xs.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: the loop variable `i` is used to index `xs` [INFO] [stderr] --> src/snake_nn.rs:373:14 [INFO] [stderr] | [INFO] [stderr] 373 | for i in 1..xs.len() { [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 373 | for (i, ) in xs.iter().enumerate().skip(1) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the variable `steps_read` is used as a loop counter. Consider using `for (steps_read, item) in bufreader.lines().enumerate()` or similar iterators [INFO] [stderr] --> src/snake_nn.rs:476:17 [INFO] [stderr] | [INFO] [stderr] 476 | for line in bufreader.lines() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/snake_nn.rs:510:9 [INFO] [stderr] | [INFO] [stderr] 510 | step.state.score = step.state.score + FORGET_RATE * next_score; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `step.state.score += FORGET_RATE * next_score` [INFO] [stderr] | [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: unused attribute [INFO] [stderr] --> src/snake_nn.rs:1:1 [INFO] [stderr] | [INFO] [stderr] 1 | #![feature(test)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_attributes)] on by default [INFO] [stderr] [INFO] [stderr] warning: crate-level attribute should be in the root module [INFO] [stderr] --> src/snake_nn.rs:1:1 [INFO] [stderr] | [INFO] [stderr] 1 | #![feature(test)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/timing.rs:70:42 [INFO] [stderr] | [INFO] [stderr] 70 | duration.as_secs() * 1_000_000_000 + duration.subsec_nanos() as u64 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(duration.subsec_nanos())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/timing.rs:75:9 [INFO] [stderr] | [INFO] [stderr] 75 | writeln!(f, "=== Timing ==="); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/timing.rs:77:13 [INFO] [stderr] | [INFO] [stderr] 77 | / writeln!( [INFO] [stderr] 78 | | f, [INFO] [stderr] 79 | | "{}: {}.{:04}s", [INFO] [stderr] 80 | | name, [INFO] [stderr] 81 | | timer.duration.as_secs(), [INFO] [stderr] 82 | | timer.duration.subsec_nanos() / 1000000 [INFO] [stderr] 83 | | ); [INFO] [stderr] | |______________^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: Calling `subsec_millis()` is more concise than this calculation [INFO] [stderr] --> src/timing.rs:82:17 [INFO] [stderr] | [INFO] [stderr] 82 | timer.duration.subsec_nanos() / 1000000 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `timer.duration.subsec_millis()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::duration_subsec)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#duration_subsec [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 32.40s [INFO] running `"docker" "inspect" "3e0d9c25f47027e28fedad2a02d8b8c8bf7275a77e5c0907861bda439f204bec"` [INFO] running `"docker" "rm" "-f" "3e0d9c25f47027e28fedad2a02d8b8c8bf7275a77e5c0907861bda439f204bec"` [INFO] [stdout] 3e0d9c25f47027e28fedad2a02d8b8c8bf7275a77e5c0907861bda439f204bec