[INFO] cloning repository https://github.com/vbo/nnrs
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/vbo/nnrs" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fvbo%2Fnnrs", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fvbo%2Fnnrs'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] d2321ff9ded9e103826e2f6523d21cf5b8912a3b
[INFO] checking vbo/nnrs against master#5518eaa946291f00471af8b254b2a1715f234882 for pr-120393
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fvbo%2Fnnrs" "/workspace/builds/worker-3-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc1/source'...
[INFO] [stderr] done.
[INFO] validating manifest of git repo https://github.com/vbo/nnrs on toolchain 5518eaa946291f00471af8b254b2a1715f234882
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+5518eaa946291f00471af8b254b2a1715f234882" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] started tweaking git repo https://github.com/vbo/nnrs
[INFO] finished tweaking git repo https://github.com/vbo/nnrs
[INFO] tweaked toml for git repo https://github.com/vbo/nnrs written to /workspace/builds/worker-3-tc1/source/Cargo.toml
[INFO] crate git repo https://github.com/vbo/nnrs already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+5518eaa946291f00471af8b254b2a1715f234882" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded rand_derive v0.3.1
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:2788e3201cd34a07e3172128adcd8b3090168a8e3bcc40d7c032b9dda1df7d1c" "/opt/rustwide/cargo-home/bin/cargo" "+5518eaa946291f00471af8b254b2a1715f234882" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] f9f036977d2e34447da749b0f5a4150b7f63695132e42b8ae0efd93d9fc954e3
[INFO] running `Command { std: "docker" "start" "-a" "f9f036977d2e34447da749b0f5a4150b7f63695132e42b8ae0efd93d9fc954e3", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "f9f036977d2e34447da749b0f5a4150b7f63695132e42b8ae0efd93d9fc954e3", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "f9f036977d2e34447da749b0f5a4150b7f63695132e42b8ae0efd93d9fc954e3", kill_on_drop: false }`
[INFO] [stdout] f9f036977d2e34447da749b0f5a4150b7f63695132e42b8ae0efd93d9fc954e3
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:2788e3201cd34a07e3172128adcd8b3090168a8e3bcc40d7c032b9dda1df7d1c" "/opt/rustwide/cargo-home/bin/cargo" "+5518eaa946291f00471af8b254b2a1715f234882" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 71436bf7385043cb3d1951981a96e7b88856a13e9eb0997cdd2a6f7fde2a3d2f
[INFO] running `Command { std: "docker" "start" "-a" "71436bf7385043cb3d1951981a96e7b88856a13e9eb0997cdd2a6f7fde2a3d2f", kill_on_drop: false }`
[INFO] [stderr]    Compiling unicode-xid v0.1.0
[INFO] [stderr]     Checking libc v0.2.40
[INFO] [stderr]    Compiling unicode-xid v0.0.4
[INFO] [stderr]     Checking unicode-width v0.1.4
[INFO] [stderr]    Compiling quote v0.3.15
[INFO] [stderr]    Compiling matrixmultiply v0.1.14
[INFO] [stderr]     Checking itoa v0.4.1
[INFO] [stderr]     Checking vec_map v0.8.0
[INFO] [stderr]    Compiling proc-macro2 v0.3.7
[INFO] [stderr]    Compiling synom v0.11.3
[INFO] [stderr]     Checking textwrap v0.9.0
[INFO] [stderr]     Checking bitflags v1.0.1
[INFO] [stderr]     Checking dtoa v0.4.2
[INFO] [stderr]    Compiling syn v0.11.11
[INFO] [stderr]     Checking ansi_term v0.11.0
[INFO] [stderr]     Checking rawpointer v0.1.0
[INFO] [stderr]     Checking strsim v0.7.0
[INFO] [stderr]     Checking yaml-rust v0.3.5
[INFO] [stderr]     Checking serde v1.0.43
[INFO] [stderr]     Checking byteorder v1.2.2
[INFO] [stderr]    Compiling quote v0.5.2
[INFO] [stderr]     Checking atty v0.2.9
[INFO] [stderr]     Checking rand v0.4.2
[INFO] [stderr]    Compiling syn v0.13.1
[INFO] [stderr]     Checking num_cpus v1.8.0
[INFO] [stderr]     Checking clap v2.31.2
[INFO] [stderr]    Compiling rand_derive v0.3.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/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::time`
[INFO] [stdout]  --> src/mnist.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::time;
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `math`
[INFO] [stdout]   --> src/mnist.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use math;
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `math::Matrix`
[INFO] [stdout]   --> src/mnist.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use math::Matrix;
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `timing`
[INFO] [stdout]   --> src/mnist.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use timing;
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::mem`
[INFO] [stdout]  --> src/network.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::mem;
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `timing::Timing`
[INFO] [stdout]  --> src/parallel_trainer.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use timing::Timing;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `serde_json`
[INFO] [stdout]  --> src/snake.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use serde_json;
[INFO] [stdout]   |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Network`
[INFO] [stdout]  --> src/snake_nn.rs:4:15
[INFO] [stdout]   |
[INFO] [stdout] 4 | use network::{Network, NetworkParameters, NetworkPredictor};
[INFO] [stdout]   |               ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `IndependentSample`, `Range`
[INFO] [stdout]  --> src/snake_nn.rs:7:27
[INFO] [stdout]   |
[INFO] [stdout] 7 | use rand::distributions::{IndependentSample, Range};
[INFO] [stdout]   |                           ^^^^^^^^^^^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::mpsc`
[INFO] [stdout]   --> src/snake_nn.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use std::sync::mpsc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Receiver`, `Sender`
[INFO] [stdout]   --> src/snake_nn.rs:19:23
[INFO] [stdout]    |
[INFO] [stdout] 19 | use std::sync::mpsc::{Receiver, Sender};
[INFO] [stdout]    |                       ^^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `timing::duration_as_total_nanos`
[INFO] [stdout]   --> src/snake_nn.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use timing::duration_as_total_nanos;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time`
[INFO] [stdout]  --> src/mnist.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::time;
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `math`
[INFO] [stdout]   --> src/mnist.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use math;
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `math::Matrix`
[INFO] [stdout]   --> src/mnist.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use math::Matrix;
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `timing`
[INFO] [stdout]   --> src/mnist.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use timing;
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::mem`
[INFO] [stdout]  --> src/network.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::mem;
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `timing::Timing`
[INFO] [stdout]  --> src/parallel_trainer.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use timing::Timing;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `serde_json`
[INFO] [stdout]  --> src/snake.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use serde_json;
[INFO] [stdout]   |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Network`
[INFO] [stdout]  --> src/snake_nn.rs:4:15
[INFO] [stdout]   |
[INFO] [stdout] 4 | use network::{Network, NetworkParameters, NetworkPredictor};
[INFO] [stdout]   |               ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `IndependentSample`, `Range`
[INFO] [stdout]  --> src/snake_nn.rs:7:27
[INFO] [stdout]   |
[INFO] [stdout] 7 | use rand::distributions::{IndependentSample, Range};
[INFO] [stdout]   |                           ^^^^^^^^^^^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::mpsc`
[INFO] [stdout]   --> src/snake_nn.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use std::sync::mpsc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Receiver`, `Sender`
[INFO] [stdout]   --> src/snake_nn.rs:19:23
[INFO] [stdout]    |
[INFO] [stdout] 19 | use std::sync::mpsc::{Receiver, Sender};
[INFO] [stdout]    |                       ^^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]    --> src/snake_nn.rs:340:8
[INFO] [stdout]     |
[INFO] [stdout] 340 |     if (rng.gen_range(0.0, 1.0) <= random_move_prob) {
[INFO] [stdout]     |        ^                                           ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 340 -     if (rng.gen_range(0.0, 1.0) <= random_move_prob) {
[INFO] [stdout] 340 +     if rng.gen_range(0.0, 1.0) <= random_move_prob {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `timing::duration_as_total_nanos`
[INFO] [stdout]   --> src/snake_nn.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use timing::duration_as_total_nanos;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::hash_map::Entry`
[INFO] [stdout]  --> src/timing.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::collections::hash_map::Entry;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]    --> src/snake_nn.rs:340:8
[INFO] [stdout]     |
[INFO] [stdout] 340 |     if (rng.gen_range(0.0, 1.0) <= random_move_prob) {
[INFO] [stdout]     |        ^                                           ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 340 -     if (rng.gen_range(0.0, 1.0) <= random_move_prob) {
[INFO] [stdout] 340 +     if rng.gen_range(0.0, 1.0) <= random_move_prob {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::hash_map::Entry`
[INFO] [stdout]  --> src/timing.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::collections::hash_map::Entry;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: crate-level attribute should be in the root module
[INFO] [stdout]  --> src/snake_nn.rs:1:1
[INFO] [stdout]   |
[INFO] [stdout] 1 | #![feature(test)]
[INFO] [stdout]   | ^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_attributes)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: crate-level attribute should be in the root module
[INFO] [stdout]  --> src/snake_nn.rs:1:1
[INFO] [stdout]   |
[INFO] [stdout] 1 | #![feature(test)]
[INFO] [stdout]   | ^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_attributes)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `std::thread::sleep_ms`: replaced by `std::thread::sleep`
[INFO] [stdout]    --> src/snake_nn.rs:176:21
[INFO] [stdout]     |
[INFO] [stdout] 176 |             thread::sleep_ms(SLEEP_INTERVAL_MS);
[INFO] [stdout]     |                     ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `std::thread::sleep_ms`: replaced by `std::thread::sleep`
[INFO] [stdout]    --> src/snake_nn.rs:212:25
[INFO] [stdout]     |
[INFO] [stdout] 212 |                 thread::sleep_ms(SLEEP_INTERVAL_MS);
[INFO] [stdout]     |                         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `std::thread::sleep_ms`: replaced by `std::thread::sleep`
[INFO] [stdout]    --> src/snake_nn.rs:176:21
[INFO] [stdout]     |
[INFO] [stdout] 176 |             thread::sleep_ms(SLEEP_INTERVAL_MS);
[INFO] [stdout]     |                     ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `std::thread::sleep_ms`: replaced by `std::thread::sleep`
[INFO] [stdout]    --> src/snake_nn.rs:212:25
[INFO] [stdout]     |
[INFO] [stdout] 212 |                 thread::sleep_ms(SLEEP_INTERVAL_MS);
[INFO] [stdout]     |                         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rand::Rng`
[INFO] [stdout]  --> src/snake.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use rand::Rng;
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rand::Rng`
[INFO] [stdout]  --> src/snake.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use rand::Rng;
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `hits`
[INFO] [stdout]   --> src/mnist.rs:64:13
[INFO] [stdout]    |
[INFO] [stdout] 64 |     let mut hits = 0usize;
[INFO] [stdout]    |             ^^^^ help: if this is intentional, prefix it with an underscore: `_hits`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `predictor`
[INFO] [stdout]   --> src/mnist.rs:98:30
[INFO] [stdout]    |
[INFO] [stdout] 98 |                 let (params, predictor, _) = parallel_trainer.borrow_network_parts();
[INFO] [stdout]    |                              ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_predictor`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `log_every_n`
[INFO] [stdout]   --> src/mnist.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 |     log_every_n: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_log_every_n`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/mnist.rs:64:9
[INFO] [stdout]    |
[INFO] [stdout] 64 |     let mut hits = 0usize;
[INFO] [stdout]    |         ----^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `hits`
[INFO] [stdout]   --> src/mnist.rs:64:13
[INFO] [stdout]    |
[INFO] [stdout] 64 |     let mut hits = 0usize;
[INFO] [stdout]    |             ^^^^ help: if this is intentional, prefix it with an underscore: `_hits`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `predictor`
[INFO] [stdout]   --> src/mnist.rs:98:30
[INFO] [stdout]    |
[INFO] [stdout] 98 |                 let (params, predictor, _) = parallel_trainer.borrow_network_parts();
[INFO] [stdout]    |                              ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_predictor`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `log_every_n`
[INFO] [stdout]   --> src/mnist.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 |     log_every_n: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_log_every_n`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/mnist.rs:64:9
[INFO] [stdout]    |
[INFO] [stdout] 64 |     let mut hits = 0usize;
[INFO] [stdout]    |         ----^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/network.rs:55:13
[INFO] [stdout]    |
[INFO] [stdout] 55 |         let mut nn: Self = serde_json::from_reader(&file).unwrap();
[INFO] [stdout]    |             ----^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/network.rs:55:13
[INFO] [stdout]    |
[INFO] [stdout] 55 |         let mut nn: Self = serde_json::from_reader(&file).unwrap();
[INFO] [stdout]    |             ----^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `thread_no`
[INFO] [stdout]   --> src/parallel_trainer.rs:46:13
[INFO] [stdout]    |
[INFO] [stdout] 46 |         for thread_no in 0..num_threads {
[INFO] [stdout]    |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_thread_no`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/parallel_trainer.rs:37:14
[INFO] [stdout]    |
[INFO] [stdout] 37 |         let (mut nn_parameters, mut nn_predictor, mut nn_trainer) = network.as_parts();
[INFO] [stdout]    |              ----^^^^^^^^^^^^^
[INFO] [stdout]    |              |
[INFO] [stdout]    |              help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/parallel_trainer.rs:37:33
[INFO] [stdout]    |
[INFO] [stdout] 37 |         let (mut nn_parameters, mut nn_predictor, mut nn_trainer) = network.as_parts();
[INFO] [stdout]    |                                 ----^^^^^^^^^^^^
[INFO] [stdout]    |                                 |
[INFO] [stdout]    |                                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/parallel_trainer.rs:37:51
[INFO] [stdout]    |
[INFO] [stdout] 37 |         let (mut nn_parameters, mut nn_predictor, mut nn_trainer) = network.as_parts();
[INFO] [stdout]    |                                                   ----^^^^^^^^^^
[INFO] [stdout]    |                                                   |
[INFO] [stdout]    |                                                   help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/parallel_trainer.rs:48:17
[INFO] [stdout]    |
[INFO] [stdout] 48 |             let mut local_nn_predictor = nn_predictor.clone();
[INFO] [stdout]    |                 ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |                 |
[INFO] [stdout]    |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/parallel_trainer.rs:49:17
[INFO] [stdout]    |
[INFO] [stdout] 49 |             let mut local_nn_trainer = Arc::new(Mutex::new(nn_trainer.clone()));
[INFO] [stdout]    |                 ----^^^^^^^^^^^^^^^^
[INFO] [stdout]    |                 |
[INFO] [stdout]    |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/parallel_trainer.rs:94:21
[INFO] [stdout]    |
[INFO] [stdout] 94 |                 let mut output_nn_trainer = output_nn_trainer.lock().unwrap();
[INFO] [stdout]    |                     ----^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `outputs`
[INFO] [stdout]    --> src/parallel_trainer.rs:150:21
[INFO] [stdout]     |
[INFO] [stdout] 150 |                 let outputs = local_nn_predictor
[INFO] [stdout]     |                     ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_outputs`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/parallel_trainer.rs:123:5
[INFO] [stdout]     |
[INFO] [stdout] 123 |     mut job_receiver: Arc<Mutex<Receiver<TrainingJob>>>,
[INFO] [stdout]     |     ----^^^^^^^^^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/parallel_trainer.rs:124:5
[INFO] [stdout]     |
[INFO] [stdout] 124 |     mut output_sender: Sender<Arc<Mutex<NetworkTrainer>>>,
[INFO] [stdout]     |     ----^^^^^^^^^^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/parallel_trainer.rs:126:5
[INFO] [stdout]     |
[INFO] [stdout] 126 |     mut local_nn_trainer: Arc<Mutex<NetworkTrainer>>,
[INFO] [stdout]     |     ----^^^^^^^^^^^^^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `layer_order`
[INFO] [stdout]    --> src/network.rs:645:13
[INFO] [stdout]     |
[INFO] [stdout] 645 |         let layer_order = nn.calc_layers_order();
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_layer_order`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `thread_no`
[INFO] [stdout]   --> src/parallel_trainer.rs:46:13
[INFO] [stdout]    |
[INFO] [stdout] 46 |         for thread_no in 0..num_threads {
[INFO] [stdout]    |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_thread_no`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/parallel_trainer.rs:37:14
[INFO] [stdout]    |
[INFO] [stdout] 37 |         let (mut nn_parameters, mut nn_predictor, mut nn_trainer) = network.as_parts();
[INFO] [stdout]    |              ----^^^^^^^^^^^^^
[INFO] [stdout]    |              |
[INFO] [stdout]    |              help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/parallel_trainer.rs:37:33
[INFO] [stdout]    |
[INFO] [stdout] 37 |         let (mut nn_parameters, mut nn_predictor, mut nn_trainer) = network.as_parts();
[INFO] [stdout]    |                                 ----^^^^^^^^^^^^
[INFO] [stdout]    |                                 |
[INFO] [stdout]    |                                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/parallel_trainer.rs:37:51
[INFO] [stdout]    |
[INFO] [stdout] 37 |         let (mut nn_parameters, mut nn_predictor, mut nn_trainer) = network.as_parts();
[INFO] [stdout]    |                                                   ----^^^^^^^^^^
[INFO] [stdout]    |                                                   |
[INFO] [stdout]    |                                                   help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/parallel_trainer.rs:48:17
[INFO] [stdout]    |
[INFO] [stdout] 48 |             let mut local_nn_predictor = nn_predictor.clone();
[INFO] [stdout]    |                 ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |                 |
[INFO] [stdout]    |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/parallel_trainer.rs:49:17
[INFO] [stdout]    |
[INFO] [stdout] 49 |             let mut local_nn_trainer = Arc::new(Mutex::new(nn_trainer.clone()));
[INFO] [stdout]    |                 ----^^^^^^^^^^^^^^^^
[INFO] [stdout]    |                 |
[INFO] [stdout]    |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/parallel_trainer.rs:94:21
[INFO] [stdout]    |
[INFO] [stdout] 94 |                 let mut output_nn_trainer = output_nn_trainer.lock().unwrap();
[INFO] [stdout]    |                     ----^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `outputs`
[INFO] [stdout]    --> src/parallel_trainer.rs:150:21
[INFO] [stdout]     |
[INFO] [stdout] 150 |                 let outputs = local_nn_predictor
[INFO] [stdout]     |                     ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_outputs`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/parallel_trainer.rs:123:5
[INFO] [stdout]     |
[INFO] [stdout] 123 |     mut job_receiver: Arc<Mutex<Receiver<TrainingJob>>>,
[INFO] [stdout]     |     ----^^^^^^^^^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/parallel_trainer.rs:124:5
[INFO] [stdout]     |
[INFO] [stdout] 124 |     mut output_sender: Sender<Arc<Mutex<NetworkTrainer>>>,
[INFO] [stdout]     |     ----^^^^^^^^^^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/parallel_trainer.rs:126:5
[INFO] [stdout]     |
[INFO] [stdout] 126 |     mut local_nn_trainer: Arc<Mutex<NetworkTrainer>>,
[INFO] [stdout]     |     ----^^^^^^^^^^^^^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `iters`
[INFO] [stdout]    --> src/snake.rs:168:21
[INFO] [stdout]     |
[INFO] [stdout] 168 |             let mut iters = 0;
[INFO] [stdout]     |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_iters`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/snake.rs:168:17
[INFO] [stdout]     |
[INFO] [stdout] 168 |             let mut iters = 0;
[INFO] [stdout]     |                 ----^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `epoch_no`
[INFO] [stdout]   --> src/snake_nn.rs:73:9
[INFO] [stdout]    |
[INFO] [stdout] 73 |     for epoch_no in 0..num_epochs {
[INFO] [stdout]    |         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_epoch_no`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `predictor`
[INFO] [stdout]   --> src/snake_nn.rs:90:30
[INFO] [stdout]    |
[INFO] [stdout] 90 |                 let (params, predictor, _) = parallel_trainer.borrow_network_parts();
[INFO] [stdout]    |                              ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_predictor`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `predictor`
[INFO] [stdout]    --> src/snake_nn.rs:109:18
[INFO] [stdout]     |
[INFO] [stdout] 109 |     let (params, predictor, _) = parallel_trainer.borrow_network_parts();
[INFO] [stdout]     |                  ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_predictor`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `iters`
[INFO] [stdout]    --> src/snake.rs:168:21
[INFO] [stdout]     |
[INFO] [stdout] 168 |             let mut iters = 0;
[INFO] [stdout]     |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_iters`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/snake.rs:168:17
[INFO] [stdout]     |
[INFO] [stdout] 168 |             let mut iters = 0;
[INFO] [stdout]     |                 ----^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/snake_nn.rs:57:9
[INFO] [stdout]    |
[INFO] [stdout] 57 |     let mut nn = network::Network::load_from_file(model_input_path);
[INFO] [stdout]    |         ----^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/snake_nn.rs:131:21
[INFO] [stdout]     |
[INFO] [stdout] 131 |                 let mut state = GameState {
[INFO] [stdout]     |                     ----^^^^^
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/snake_nn.rs:115:9
[INFO] [stdout]     |
[INFO] [stdout] 115 |     let mut nn = network::Network::load_from_file(model_path);
[INFO] [stdout]     |         ----^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `epoch_no`
[INFO] [stdout]   --> src/snake_nn.rs:73:9
[INFO] [stdout]    |
[INFO] [stdout] 73 |     for epoch_no in 0..num_epochs {
[INFO] [stdout]    |         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_epoch_no`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `predictor`
[INFO] [stdout]   --> src/snake_nn.rs:90:30
[INFO] [stdout]    |
[INFO] [stdout] 90 |                 let (params, predictor, _) = parallel_trainer.borrow_network_parts();
[INFO] [stdout]    |                              ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_predictor`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `predictor`
[INFO] [stdout]    --> src/snake_nn.rs:109:18
[INFO] [stdout]     |
[INFO] [stdout] 109 |     let (params, predictor, _) = parallel_trainer.borrow_network_parts();
[INFO] [stdout]     |                  ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_predictor`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/snake_nn.rs:231:13
[INFO] [stdout]     |
[INFO] [stdout] 231 |         let mut layer = nn.add_hidden_layer(shape[i]);
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/snake_nn.rs:57:9
[INFO] [stdout]    |
[INFO] [stdout] 57 |     let mut nn = network::Network::load_from_file(model_input_path);
[INFO] [stdout]    |         ----^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `max_gain`
[INFO] [stdout]    --> src/snake_nn.rs:357:13
[INFO] [stdout]     |
[INFO] [stdout] 357 |     let (i, max_gain) = get_max_with_pos(snake_inputs_gains.as_slice());
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_max_gain`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/snake_nn.rs:131:21
[INFO] [stdout]     |
[INFO] [stdout] 131 |                 let mut state = GameState {
[INFO] [stdout]     |                     ----^^^^^
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/snake_nn.rs:115:9
[INFO] [stdout]     |
[INFO] [stdout] 115 |     let mut nn = network::Network::load_from_file(model_path);
[INFO] [stdout]     |         ----^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `is_next_action_optimal`
[INFO] [stdout]    --> src/snake_nn.rs:503:13
[INFO] [stdout]     |
[INFO] [stdout] 503 |         let is_next_action_optimal = session[i - 1].is_optimal;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_is_next_action_optimal`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/snake_nn.rs:231:13
[INFO] [stdout]     |
[INFO] [stdout] 231 |         let mut layer = nn.add_hidden_layer(shape[i]);
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i`
[INFO] [stdout]    --> src/snake_nn.rs:530:9
[INFO] [stdout]     |
[INFO] [stdout] 530 |     for i in 0..MAP_WIDTH * MAP_HEIGHT - 1 {
[INFO] [stdout]     |         ^ help: if this is intentional, prefix it with an underscore: `_i`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `max_gain`
[INFO] [stdout]    --> src/snake_nn.rs:357:13
[INFO] [stdout]     |
[INFO] [stdout] 357 |     let (i, max_gain) = get_max_with_pos(snake_inputs_gains.as_slice());
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_max_gain`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `is_next_action_optimal`
[INFO] [stdout]    --> src/snake_nn.rs:503:13
[INFO] [stdout]     |
[INFO] [stdout] 503 |         let is_next_action_optimal = session[i - 1].is_optimal;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_is_next_action_optimal`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i`
[INFO] [stdout]    --> src/snake_nn.rs:530:9
[INFO] [stdout]     |
[INFO] [stdout] 530 |     for i in 0..MAP_WIDTH * MAP_HEIGHT - 1 {
[INFO] [stdout]     |         ^ help: if this is intentional, prefix it with an underscore: `_i`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `matches`
[INFO] [stdout]   --> src/main.rs:53:24
[INFO] [stdout]    |
[INFO] [stdout] 53 | fn execute_mnist_train(matches: &ArgMatches, submatches: &ArgMatches) {
[INFO] [stdout]    |                        ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_matches`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `matches`
[INFO] [stdout]   --> src/main.rs:68:22
[INFO] [stdout]    |
[INFO] [stdout] 68 | fn execute_snake_new(matches: &ArgMatches, submatches: &ArgMatches) {
[INFO] [stdout]    |                      ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_matches`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `matches`
[INFO] [stdout]   --> src/main.rs:73:24
[INFO] [stdout]    |
[INFO] [stdout] 73 | fn execute_snake_train(matches: &ArgMatches, submatches: &ArgMatches) {
[INFO] [stdout]    |                        ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_matches`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `matches`
[INFO] [stdout]   --> src/main.rs:93:22
[INFO] [stdout]    |
[INFO] [stdout] 93 | fn execute_snake_gen(matches: &ArgMatches, submatches: &ArgMatches) {
[INFO] [stdout]    |                      ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_matches`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `matches`
[INFO] [stdout]    --> src/main.rs:101:23
[INFO] [stdout]     |
[INFO] [stdout] 101 | fn execute_snake_demo(matches: &ArgMatches, submatches: &ArgMatches) {
[INFO] [stdout]     |                       ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_matches`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new_same_dim`, `from_slice`, `dot_vec`, and `transpose` are never used
[INFO] [stdout]    --> src/math.rs:21:12
[INFO] [stdout]     |
[INFO] [stdout] 12  | impl Matrix {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 21  |     pub fn new_same_dim(m: &Matrix) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27  |     pub fn from_slice(rows: usize, cols: usize, content: &[f64]) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 71  |     pub fn dot_vec(&self, vec: &Vector, res: &mut Vector) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     pub fn transpose(&self, res: &mut Matrix) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_slice`, `empty`, `init_rand`, `copy_from`, `add`, and `fill_rand` are never used
[INFO] [stdout]    --> src/math.rs:241:12
[INFO] [stdout]     |
[INFO] [stdout] 233 | impl Vector {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 241 |     pub fn from_slice(content: &[f64]) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 248 |     pub fn empty() -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 267 |     pub fn init_rand(mut self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 286 |     pub fn copy_from(&mut self, v: &Vector) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 322 |     pub fn add(&mut self, v: &Vector) {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 335 |     pub fn fill_rand(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NANOS_IN_SECOND` is never used
[INFO] [stdout]   --> src/mnist.rs:28:7
[INFO] [stdout]    |
[INFO] [stdout] 28 | const NANOS_IN_SECOND: u64 = 1_000_000_000;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_layer_mut` is never used
[INFO] [stdout]   --> src/network.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 38 | impl NetworkParameters {
[INFO] [stdout]    | ---------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     fn get_layer_mut(&mut self, id: LayerID) -> &mut Layer {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `calc_layers_order`, `predict`, `backward_propagation`, and `apply_batch` are never used
[INFO] [stdout]    --> src/network.rs:462:8
[INFO] [stdout]     |
[INFO] [stdout] 394 | impl Network {
[INFO] [stdout]     | ------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 462 |     fn calc_layers_order(&self) -> Vec<LayerID> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 466 |     pub fn predict(&mut self, input_data: &[f64]) -> &Vector {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 470 |     pub fn backward_propagation(&mut self, true_outputs: &Vector) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 530 |     pub fn apply_batch(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `shared_training_data`, `job_receiver`, `output_sender`, and `join_handles` are never read
[INFO] [stdout]   --> src/parallel_trainer.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct ParallelTrainer<D> {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 22 |     shared_training_data: Arc<D>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     job_receiver: Arc<Mutex<Receiver<TrainingJob>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 30 |     output_sender: Sender<Arc<Mutex<NetworkTrainer>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 31 |     output_receiver: Receiver<Arc<Mutex<NetworkTrainer>>>,
[INFO] [stdout] 32 |     join_handles: Vec<JoinHandle<()>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `teach_nn` is never used
[INFO] [stdout]    --> src/snake_nn.rs:384:4
[INFO] [stdout]     |
[INFO] [stdout] 384 | fn teach_nn(
[INFO] [stdout]     |    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `elapsed` is never used
[INFO] [stdout]   --> src/timing.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl Timing {
[INFO] [stdout]    | ----------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn elapsed(&self, name: &str) -> time::Duration {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `matches`
[INFO] [stdout]   --> src/main.rs:53:24
[INFO] [stdout]    |
[INFO] [stdout] 53 | fn execute_mnist_train(matches: &ArgMatches, submatches: &ArgMatches) {
[INFO] [stdout]    |                        ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_matches`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `matches`
[INFO] [stdout]   --> src/main.rs:68:22
[INFO] [stdout]    |
[INFO] [stdout] 68 | fn execute_snake_new(matches: &ArgMatches, submatches: &ArgMatches) {
[INFO] [stdout]    |                      ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_matches`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `matches`
[INFO] [stdout]   --> src/main.rs:73:24
[INFO] [stdout]    |
[INFO] [stdout] 73 | fn execute_snake_train(matches: &ArgMatches, submatches: &ArgMatches) {
[INFO] [stdout]    |                        ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_matches`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `matches`
[INFO] [stdout]   --> src/main.rs:93:22
[INFO] [stdout]    |
[INFO] [stdout] 93 | fn execute_snake_gen(matches: &ArgMatches, submatches: &ArgMatches) {
[INFO] [stdout]    |                      ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_matches`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `matches`
[INFO] [stdout]    --> src/main.rs:101:23
[INFO] [stdout]     |
[INFO] [stdout] 101 | fn execute_snake_demo(matches: &ArgMatches, submatches: &ArgMatches) {
[INFO] [stdout]     |                       ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_matches`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new_same_dim` and `dot_vec` are never used
[INFO] [stdout]   --> src/math.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl Matrix {
[INFO] [stdout]    | ----------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub fn new_same_dim(m: &Matrix) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 71 |     pub fn dot_vec(&self, vec: &Vector, res: &mut Vector) {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `empty`, `init_rand`, `copy_from`, `add`, and `fill_rand` are never used
[INFO] [stdout]    --> src/math.rs:248:12
[INFO] [stdout]     |
[INFO] [stdout] 233 | impl Vector {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 248 |     pub fn empty() -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 267 |     pub fn init_rand(mut self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 286 |     pub fn copy_from(&mut self, v: &Vector) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 322 |     pub fn add(&mut self, v: &Vector) {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 335 |     pub fn fill_rand(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NANOS_IN_SECOND` is never used
[INFO] [stdout]   --> src/mnist.rs:28:7
[INFO] [stdout]    |
[INFO] [stdout] 28 | const NANOS_IN_SECOND: u64 = 1_000_000_000;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_layer_mut` is never used
[INFO] [stdout]   --> src/network.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 38 | impl NetworkParameters {
[INFO] [stdout]    | ---------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     fn get_layer_mut(&mut self, id: LayerID) -> &mut Layer {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `predict`, `backward_propagation`, and `apply_batch` are never used
[INFO] [stdout]    --> src/network.rs:466:12
[INFO] [stdout]     |
[INFO] [stdout] 394 | impl Network {
[INFO] [stdout]     | ------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 466 |     pub fn predict(&mut self, input_data: &[f64]) -> &Vector {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 470 |     pub fn backward_propagation(&mut self, true_outputs: &Vector) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 530 |     pub fn apply_batch(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `shared_training_data`, `job_receiver`, `output_sender`, and `join_handles` are never read
[INFO] [stdout]   --> src/parallel_trainer.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct ParallelTrainer<D> {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 22 |     shared_training_data: Arc<D>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     job_receiver: Arc<Mutex<Receiver<TrainingJob>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 30 |     output_sender: Sender<Arc<Mutex<NetworkTrainer>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 31 |     output_receiver: Receiver<Arc<Mutex<NetworkTrainer>>>,
[INFO] [stdout] 32 |     join_handles: Vec<JoinHandle<()>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `teach_nn` is never used
[INFO] [stdout]    --> src/snake_nn.rs:384:4
[INFO] [stdout]     |
[INFO] [stdout] 384 | fn teach_nn(
[INFO] [stdout]     |    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `elapsed` is never used
[INFO] [stdout]   --> src/timing.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl Timing {
[INFO] [stdout]    | ----------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn elapsed(&self, name: &str) -> time::Duration {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/parallel_trainer.rs:85:13
[INFO] [stdout]    |
[INFO] [stdout] 85 | /             self.job_sender.send(TrainingJob {
[INFO] [stdout] 86 | |                 examples_indices: chunk,
[INFO] [stdout] 87 | |                 network_parameters: self.shared_nn_parameters.clone(),
[INFO] [stdout] 88 | |             });
[INFO] [stdout]    | |______________^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]    = note: `#[warn(unused_must_use)]` on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 85 |             let _ = self.job_sender.send(TrainingJob {
[INFO] [stdout]    |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/parallel_trainer.rs:160:9
[INFO] [stdout]     |
[INFO] [stdout] 160 |         output_sender.send(local_nn_trainer.clone());
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 160 |         let _ = output_sender.send(local_nn_trainer.clone());
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/snake.rs:118:9
[INFO] [stdout]     |
[INFO] [stdout] 118 |         writer.write("\n".as_bytes());
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 118 |         let _ = writer.write("\n".as_bytes());
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/snake.rs:120:5
[INFO] [stdout]     |
[INFO] [stdout] 120 |     writer.flush();
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 120 |     let _ = writer.flush();
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/snake.rs:131:5
[INFO] [stdout]     |
[INFO] [stdout] 131 |     writer.write(character.as_bytes());
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 131 |     let _ = writer.write(character.as_bytes());
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/snake_nn.rs:140:21
[INFO] [stdout]     |
[INFO] [stdout] 140 |                     write!(training_data_file, "\n");
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: this warning originates in the macro `write` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/snake_nn.rs:150:9
[INFO] [stdout]     |
[INFO] [stdout] 150 |         jh.join();
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 150 |         let _ = jh.join();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: the `game_over:` in this pattern is redundant
[INFO] [stdout]    --> src/snake_nn.rs:203:17
[INFO] [stdout]     |
[INFO] [stdout] 203 |                 game_over: game_over,
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^ help: use shorthand field pattern: `game_over`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(non_shorthand_field_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: the `game_over:` in this pattern is redundant
[INFO] [stdout]    --> src/snake_nn.rs:271:13
[INFO] [stdout]     |
[INFO] [stdout] 271 |             game_over: game_over,
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ help: use shorthand field pattern: `game_over`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: the `game_over:` in this pattern is redundant
[INFO] [stdout]    --> src/snake_nn.rs:308:17
[INFO] [stdout]     |
[INFO] [stdout] 308 |                 game_over: game_over,
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^ help: use shorthand field pattern: `game_over`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/timing.rs:75:9
[INFO] [stdout]    |
[INFO] [stdout] 75 |         writeln!(f, "=== Timing ===");
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]    = note: this warning originates in the macro `writeln` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/timing.rs:77:13
[INFO] [stdout]    |
[INFO] [stdout] 77 | /             writeln!(
[INFO] [stdout] 78 | |                 f,
[INFO] [stdout] 79 | |                 "{}: {}.{:04}s",
[INFO] [stdout] 80 | |                 name,
[INFO] [stdout] 81 | |                 timer.duration.as_secs(),
[INFO] [stdout] 82 | |                 timer.duration.subsec_nanos() / 1000000
[INFO] [stdout] 83 | |             );
[INFO] [stdout]    | |_____________^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]    = note: this warning originates in the macro `writeln` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/parallel_trainer.rs:85:13
[INFO] [stdout]    |
[INFO] [stdout] 85 | /             self.job_sender.send(TrainingJob {
[INFO] [stdout] 86 | |                 examples_indices: chunk,
[INFO] [stdout] 87 | |                 network_parameters: self.shared_nn_parameters.clone(),
[INFO] [stdout] 88 | |             });
[INFO] [stdout]    | |______________^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]    = note: `#[warn(unused_must_use)]` on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 85 |             let _ = self.job_sender.send(TrainingJob {
[INFO] [stdout]    |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/parallel_trainer.rs:160:9
[INFO] [stdout]     |
[INFO] [stdout] 160 |         output_sender.send(local_nn_trainer.clone());
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 160 |         let _ = output_sender.send(local_nn_trainer.clone());
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/snake.rs:118:9
[INFO] [stdout]     |
[INFO] [stdout] 118 |         writer.write("\n".as_bytes());
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 118 |         let _ = writer.write("\n".as_bytes());
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/snake.rs:120:5
[INFO] [stdout]     |
[INFO] [stdout] 120 |     writer.flush();
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 120 |     let _ = writer.flush();
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/snake.rs:131:5
[INFO] [stdout]     |
[INFO] [stdout] 131 |     writer.write(character.as_bytes());
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 131 |     let _ = writer.write(character.as_bytes());
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/snake_nn.rs:140:21
[INFO] [stdout]     |
[INFO] [stdout] 140 |                     write!(training_data_file, "\n");
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: this warning originates in the macro `write` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/snake_nn.rs:150:9
[INFO] [stdout]     |
[INFO] [stdout] 150 |         jh.join();
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 150 |         let _ = jh.join();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: the `game_over:` in this pattern is redundant
[INFO] [stdout]    --> src/snake_nn.rs:203:17
[INFO] [stdout]     |
[INFO] [stdout] 203 |                 game_over: game_over,
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^ help: use shorthand field pattern: `game_over`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(non_shorthand_field_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: the `game_over:` in this pattern is redundant
[INFO] [stdout]    --> src/snake_nn.rs:271:13
[INFO] [stdout]     |
[INFO] [stdout] 271 |             game_over: game_over,
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ help: use shorthand field pattern: `game_over`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: the `game_over:` in this pattern is redundant
[INFO] [stdout]    --> src/snake_nn.rs:308:17
[INFO] [stdout]     |
[INFO] [stdout] 308 |                 game_over: game_over,
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^ help: use shorthand field pattern: `game_over`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/timing.rs:75:9
[INFO] [stdout]    |
[INFO] [stdout] 75 |         writeln!(f, "=== Timing ===");
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]    = note: this warning originates in the macro `writeln` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/timing.rs:77:13
[INFO] [stdout]    |
[INFO] [stdout] 77 | /             writeln!(
[INFO] [stdout] 78 | |                 f,
[INFO] [stdout] 79 | |                 "{}: {}.{:04}s",
[INFO] [stdout] 80 | |                 name,
[INFO] [stdout] 81 | |                 timer.duration.as_secs(),
[INFO] [stdout] 82 | |                 timer.duration.subsec_nanos() / 1000000
[INFO] [stdout] 83 | |             );
[INFO] [stdout]    | |_____________^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]    = note: this warning originates in the macro `writeln` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: 71 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: 72 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished dev [unoptimized + debuginfo] target(s) in 3.29s
[INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: syn v0.13.1
[INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 1`
[INFO] running `Command { std: "docker" "inspect" "71436bf7385043cb3d1951981a96e7b88856a13e9eb0997cdd2a6f7fde2a3d2f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "71436bf7385043cb3d1951981a96e7b88856a13e9eb0997cdd2a6f7fde2a3d2f", kill_on_drop: false }`
[INFO] [stdout] 71436bf7385043cb3d1951981a96e7b88856a13e9eb0997cdd2a6f7fde2a3d2f
