[INFO] cloning repository https://github.com/portaloffreedom/reinforcement-learning-in-rust
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/portaloffreedom/reinforcement-learning-in-rust" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fportaloffreedom%2Freinforcement-learning-in-rust", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fportaloffreedom%2Freinforcement-learning-in-rust'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 470a8b6486a2c83dccbab9a0ef4bfd020e975d56
[INFO] checking portaloffreedom/reinforcement-learning-in-rust against try#5ef65a4ed75279dc1b7a26cedc27293a9f4ca8db for pr-143717
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fportaloffreedom%2Freinforcement-learning-in-rust" "/workspace/builds/worker-7-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/portaloffreedom/reinforcement-learning-in-rust
[INFO] finished tweaking git repo https://github.com/portaloffreedom/reinforcement-learning-in-rust
[INFO] tweaked toml for git repo https://github.com/portaloffreedom/reinforcement-learning-in-rust written to /workspace/builds/worker-7-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/portaloffreedom/reinforcement-learning-in-rust on toolchain 5ef65a4ed75279dc1b7a26cedc27293a9f4ca8db
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+5ef65a4ed75279dc1b7a26cedc27293a9f4ca8db" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/portaloffreedom/reinforcement-learning-in-rust 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" "+5ef65a4ed75279dc1b7a26cedc27293a9f4ca8db" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/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:90999bfc7ae267e83380e433d8e61a7c072ca6729e92edbae886d3423b3a6f4c" "/opt/rustwide/cargo-home/bin/cargo" "+5ef65a4ed75279dc1b7a26cedc27293a9f4ca8db" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] eda66b47b0bcf758b7e0a2bdc2aa922cbaf623f56a81a8e4302c49eb523680c7
[INFO] running `Command { std: "docker" "start" "-a" "eda66b47b0bcf758b7e0a2bdc2aa922cbaf623f56a81a8e4302c49eb523680c7", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "eda66b47b0bcf758b7e0a2bdc2aa922cbaf623f56a81a8e4302c49eb523680c7", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "eda66b47b0bcf758b7e0a2bdc2aa922cbaf623f56a81a8e4302c49eb523680c7", kill_on_drop: false }`
[INFO] [stdout] eda66b47b0bcf758b7e0a2bdc2aa922cbaf623f56a81a8e4302c49eb523680c7
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/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:90999bfc7ae267e83380e433d8e61a7c072ca6729e92edbae886d3423b3a6f4c" "/opt/rustwide/cargo-home/bin/cargo" "+5ef65a4ed75279dc1b7a26cedc27293a9f4ca8db" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] e1f6ed4e5b4db5357145f96cdc52c2282afab657e9a7bd108bd8dde946a42d14
[INFO] running `Command { std: "docker" "start" "-a" "e1f6ed4e5b4db5357145f96cdc52c2282afab657e9a7bd108bd8dde946a42d14", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.51
[INFO] [stderr]     Checking rand_core v0.4.0
[INFO] [stderr]    Compiling autocfg v0.1.2
[INFO] [stderr]    Compiling num-traits v0.2.6
[INFO] [stderr]    Compiling memchr v2.2.0
[INFO] [stderr]    Compiling num-complex v0.2.1
[INFO] [stderr]    Compiling ryu v0.2.8
[INFO] [stderr]    Compiling matrixmultiply v0.1.15
[INFO] [stderr]     Checking rand_core v0.3.1
[INFO] [stderr]    Compiling serde v1.0.91
[INFO] [stderr]     Checking either v1.5.2
[INFO] [stderr]     Checking cfg-if v0.1.7
[INFO] [stderr]    Compiling ndarray v0.12.1
[INFO] [stderr]     Checking rawpointer v0.1.0
[INFO] [stderr]     Checking void v1.0.2
[INFO] [stderr]    Compiling rand_pcg v0.1.2
[INFO] [stderr]    Compiling rand_chacha v0.1.1
[INFO] [stderr]    Compiling rand v0.6.5
[INFO] [stderr]     Checking unreachable v0.1.1
[INFO] [stderr]     Checking itertools v0.7.11
[INFO] [stderr]     Checking rand_hc v0.1.0
[INFO] [stderr]     Checking rand_isaac v0.1.1
[INFO] [stderr]     Checking num-traits v0.1.43
[INFO] [stderr]     Checking rand v0.4.6
[INFO] [stderr]     Checking rand_os v0.1.3
[INFO] [stderr]     Checking rand_xorshift v0.1.1
[INFO] [stderr]     Checking rand_jitter v0.1.3
[INFO] [stderr]     Checking csv-core v0.1.5
[INFO] [stderr]     Checking itoa v0.4.4
[INFO] [stderr]     Checking maplit v1.0.1
[INFO] [stderr]     Checking ordered-float v0.2.3
[INFO] [stderr]     Checking uuid v0.6.5
[INFO] [stderr]     Checking lp-modeler v0.3.2
[INFO] [stderr]     Checking csv v1.0.7
[INFO] [stderr]     Checking reinforcement_learning v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `Read`
[INFO] [stdout]  --> src/policy.rs:1:21
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::io::{self, Read};
[INFO] [stdout]   |                     ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ordered_float::NotNaN`
[INFO] [stdout]  --> src/policy.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use ordered_float::NotNaN;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ndarray::Array2`
[INFO] [stdout]  --> src/policy.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use ndarray::Array2;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::cmp::Ordering`
[INFO] [stdout]  --> src/policy.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::cmp::Ordering;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Problem`
[INFO] [stdout]   --> src/environment.rs:14:40
[INFO] [stdout]    |
[INFO] [stdout] 14 | use lp_modeler::problem::{LpObjective, Problem, LpProblem, LpFileFormat};
[INFO] [stdout]    |                                        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `lp_modeler::variables::LpExpression::*`
[INFO] [stdout]   --> src/environment.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use lp_modeler::variables::LpExpression::*;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `max` and `min`
[INFO] [stdout]    --> src/environment.rs:165:24
[INFO] [stdout]     |
[INFO] [stdout] 165 |         use std::cmp::{min, max};
[INFO] [stdout]     |                        ^^^  ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Cell`
[INFO] [stdout]  --> src/agent.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 |     Cell,
[INFO] [stdout]   |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]   --> src/agent.rs:11:21
[INFO] [stdout]    |
[INFO] [stdout] 11 |     pub cum_reward: (i32),
[INFO] [stdout]    |                     ^   ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 11 -     pub cum_reward: (i32),
[INFO] [stdout] 11 +     pub cum_reward: i32,
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `EnvIter`
[INFO] [stdout]  --> src/rl.rs:3:46
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::environment::{Movement, Pos, Env, EnvIter};
[INFO] [stdout]   |                                              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]  --> src/rl.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::fs::File;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `csv::Writer`
[INFO] [stdout]  --> src/rl.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use csv::Writer;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SARSAActionSelector` and `SoftMaxExploration`
[INFO] [stdout]  --> src/main.rs:9:35
[INFO] [stdout]   |
[INFO] [stdout] 9 | use rl::{QLearningActionSelector, SARSAActionSelector, EpsilonGreedy, SoftMaxExploration};
[INFO] [stdout]   |                                   ^^^^^^^^^^^^^^^^^^^                 ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]   --> src/main.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use std::fs::File;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated
[INFO] [stdout]    --> src/rl.rs:297:62
[INFO] [stdout]     |
[INFO] [stdout] 297 | pub fn model_free_learning (env: &Env, action_selector: &mut ActionSelector, step_size: f32, discount: f32, amt_episodes: i32, mut mode: ...
[INFO] [stdout]     |                                                              ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout]     = note: `#[warn(bare_trait_objects)]` on by default
[INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn`
[INFO] [stdout]     |
[INFO] [stdout] 297 | pub fn model_free_learning (env: &Env, action_selector: &mut dyn ActionSelector, step_size: f32, discount: f32, amt_episodes: i32, mut mode: Mode)
[INFO] [stdout]     |                                                              +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated
[INFO] [stdout]    --> src/rl.rs:405:60
[INFO] [stdout]     |
[INFO] [stdout] 405 | pub fn double_q_learning (env: &Env, action_selector: &mut ActionSelector, step_size: f32, discount: f32, amt_episodes: i32)
[INFO] [stdout]     |                                                            ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn`
[INFO] [stdout]     |
[INFO] [stdout] 405 | pub fn double_q_learning (env: &Env, action_selector: &mut dyn ActionSelector, step_size: f32, discount: f32, amt_episodes: i32)
[INFO] [stdout]     |                                                            +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated
[INFO] [stdout]   --> src/main.rs:71:47
[INFO] [stdout]    |
[INFO] [stdout] 71 | fn write_statistics(name: &str, closure: &mut Fn() -> (DetPolicy, Vec<String>, Vec<String>)) {
[INFO] [stdout]    |                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn`
[INFO] [stdout]    |
[INFO] [stdout] 71 | fn write_statistics(name: &str, closure: &mut dyn Fn() -> (DetPolicy, Vec<String>, Vec<String>)) {
[INFO] [stdout]    |                                               +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `policy::Policy`
[INFO] [stdout]   --> src/main.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use policy::Policy;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `s` is never read
[INFO] [stdout]   --> src/policy.rs:33:17
[INFO] [stdout]    |
[INFO] [stdout] 33 |         let mut s: i32= 0;
[INFO] [stdout]    |                 ^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout]    = note: `#[warn(unused_assignments)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Read`
[INFO] [stdout]  --> src/policy.rs:1:21
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::io::{self, Read};
[INFO] [stdout]   |                     ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `env`
[INFO] [stdout]   --> src/policy.rs:42:20
[INFO] [stdout]    |
[INFO] [stdout] 42 |     fn prob(&self, env: &Env, pos: Pos, movement: &Movement) -> f32 {
[INFO] [stdout]    |                    ^^^ help: if this is intentional, prefix it with an underscore: `_env`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ordered_float::NotNaN`
[INFO] [stdout]  --> src/policy.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use ordered_float::NotNaN;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pos`
[INFO] [stdout]   --> src/policy.rs:42:31
[INFO] [stdout]    |
[INFO] [stdout] 42 |     fn prob(&self, env: &Env, pos: Pos, movement: &Movement) -> f32 {
[INFO] [stdout]    |                               ^^^ help: if this is intentional, prefix it with an underscore: `_pos`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ndarray::Array2`
[INFO] [stdout]  --> src/policy.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use ndarray::Array2;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::cmp::Ordering`
[INFO] [stdout]  --> src/policy.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::cmp::Ordering;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Problem`
[INFO] [stdout]   --> src/environment.rs:14:40
[INFO] [stdout]    |
[INFO] [stdout] 14 | use lp_modeler::problem::{LpObjective, Problem, LpProblem, LpFileFormat};
[INFO] [stdout]    |                                        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `lp_modeler::variables::LpExpression::*`
[INFO] [stdout]   --> src/environment.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use lp_modeler::variables::LpExpression::*;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `max` and `min`
[INFO] [stdout]    --> src/environment.rs:165:24
[INFO] [stdout]     |
[INFO] [stdout] 165 |         use std::cmp::{min, max};
[INFO] [stdout]     |                        ^^^  ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Cell`
[INFO] [stdout]  --> src/agent.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 |     Cell,
[INFO] [stdout]   |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `movement`
[INFO] [stdout]   --> src/policy.rs:42:41
[INFO] [stdout]    |
[INFO] [stdout] 42 |     fn prob(&self, env: &Env, pos: Pos, movement: &Movement) -> f32 {
[INFO] [stdout]    |                                         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_movement`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]   --> src/agent.rs:11:21
[INFO] [stdout]    |
[INFO] [stdout] 11 |     pub cum_reward: (i32),
[INFO] [stdout]    |                     ^   ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 11 -     pub cum_reward: (i32),
[INFO] [stdout] 11 +     pub cum_reward: i32,
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `EnvIter`
[INFO] [stdout]  --> src/rl.rs:3:46
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::environment::{Movement, Pos, Env, EnvIter};
[INFO] [stdout]   |                                              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]  --> src/rl.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::fs::File;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `csv::Writer`
[INFO] [stdout]  --> src/rl.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use csv::Writer;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SARSAActionSelector` and `SoftMaxExploration`
[INFO] [stdout]  --> src/main.rs:9:35
[INFO] [stdout]   |
[INFO] [stdout] 9 | use rl::{QLearningActionSelector, SARSAActionSelector, EpsilonGreedy, SoftMaxExploration};
[INFO] [stdout]   |                                   ^^^^^^^^^^^^^^^^^^^                 ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]   --> src/main.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use std::fs::File;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `env`
[INFO] [stdout]   --> src/policy.rs:81:20
[INFO] [stdout]    |
[INFO] [stdout] 81 |     fn prob(&self, env: &Env, pos: Pos, movement: &Movement) -> f32 {
[INFO] [stdout]    |                    ^^^ help: if this is intentional, prefix it with an underscore: `_env`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pos`
[INFO] [stdout]   --> src/policy.rs:81:31
[INFO] [stdout]    |
[INFO] [stdout] 81 |     fn prob(&self, env: &Env, pos: Pos, movement: &Movement) -> f32 {
[INFO] [stdout]    |                               ^^^ help: if this is intentional, prefix it with an underscore: `_pos`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `movement`
[INFO] [stdout]   --> src/policy.rs:81:41
[INFO] [stdout]    |
[INFO] [stdout] 81 |     fn prob(&self, env: &Env, pos: Pos, movement: &Movement) -> f32 {
[INFO] [stdout]    |                                         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_movement`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `env`
[INFO] [stdout]    --> src/policy.rs:127:20
[INFO] [stdout]     |
[INFO] [stdout] 127 |     fn prob(&self, env: &Env, pos: Pos, movement: &Movement) -> f32 {
[INFO] [stdout]     |                    ^^^ help: if this is intentional, prefix it with an underscore: `_env`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `y`
[INFO] [stdout]    --> src/policy.rs:150:13
[INFO] [stdout]     |
[INFO] [stdout] 150 |         for y in 0..size.y { print!("--") }
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_y`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `y`
[INFO] [stdout]    --> src/policy.rs:171:13
[INFO] [stdout]     |
[INFO] [stdout] 171 |         for y in 0..size.y { print!("--") }
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_y`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `env`
[INFO] [stdout]    --> src/policy.rs:192:20
[INFO] [stdout]     |
[INFO] [stdout] 192 |     fn prob(&self, env: &Env, pos: Pos, movement: &Movement) -> f32 {
[INFO] [stdout]     |                    ^^^ help: if this is intentional, prefix it with an underscore: `_env`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `boundaries`
[INFO] [stdout]    --> src/environment.rs:112:21
[INFO] [stdout]     |
[INFO] [stdout] 112 |                 let boundaries = self.size();
[INFO] [stdout]     |                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_boundaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `wall_hit`
[INFO] [stdout]    --> src/environment.rs:113:31
[INFO] [stdout]     |
[INFO] [stdout] 113 |                 let (new_pos, wall_hit) = self.check_movement(pos, movement_vec);
[INFO] [stdout]     |                               ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_wall_hit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `reward`
[INFO] [stdout]    --> src/environment.rs:124:46
[INFO] [stdout]     |
[INFO] [stdout] 124 | ...                   if let Cell::Ice(reward) = *(&self.map[other_pos.x][other_pos.y]) { }
[INFO] [stdout]     |                                        ^^^^^^ help: if this is intentional, prefix it with an underscore: `_reward`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `count_i` is assigned to, but never used
[INFO] [stdout]    --> src/environment.rs:236:17
[INFO] [stdout]     |
[INFO] [stdout] 236 |         let mut count_i = 1;
[INFO] [stdout]     |                 ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_count_i` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `r`
[INFO] [stdout]    --> src/environment.rs:244:31
[INFO] [stdout]     |
[INFO] [stdout] 244 |                     Cell::Ice(r) => {
[INFO] [stdout]     |                               ^ help: if this is intentional, prefix it with an underscore: `_r`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `x`
[INFO] [stdout]    --> src/rl.rs:224:13
[INFO] [stdout]     |
[INFO] [stdout] 224 |         for x in 0..size.x {
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_x`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `y`
[INFO] [stdout]    --> src/rl.rs:226:17
[INFO] [stdout]     |
[INFO] [stdout] 226 |             for y in 0..size.y {
[INFO] [stdout]     |                 ^ help: if this is intentional, prefix it with an underscore: `_y`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]    --> src/rl.rs:249:25
[INFO] [stdout]     |
[INFO] [stdout] 249 |             .for_each(|(action, trace)| {
[INFO] [stdout]     |                         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]    --> src/rl.rs:270:28
[INFO] [stdout]     |
[INFO] [stdout] 270 |             .filter(|(pos, action, trace)| match env.cell(pos) {
[INFO] [stdout]     |                            ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `trace`
[INFO] [stdout]    --> src/rl.rs:270:36
[INFO] [stdout]     |
[INFO] [stdout] 270 |             .filter(|(pos, action, trace)| match env.cell(pos) {
[INFO] [stdout]     |                                    ^^^^^ help: if this is intentional, prefix it with an underscore: `_trace`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/rl.rs:445:17
[INFO] [stdout]     |
[INFO] [stdout] 445 |             let mut state_value;
[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/rl.rs:446:17
[INFO] [stdout]     |
[INFO] [stdout] 446 |             let mut backup_q;
[INFO] [stdout]     |                 ----^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `agent`
[INFO] [stdout]   --> src/main.rs:21:13
[INFO] [stdout]    |
[INFO] [stdout] 21 |     let mut agent = agent::Agent::new(&env);
[INFO] [stdout]    |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_agent`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temperature`
[INFO] [stdout]   --> src/main.rs:37:9
[INFO] [stdout]    |
[INFO] [stdout] 37 |     let temperature = 20.0;
[INFO] [stdout]    |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temperature`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/main.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 21 |     let mut agent = agent::Agent::new(&env);
[INFO] [stdout]    |         ----^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `policy`
[INFO] [stdout]   --> src/main.rs:77:14
[INFO] [stdout]    |
[INFO] [stdout] 77 |         let (policy, results_r, results_e) = closure();
[INFO] [stdout]    |              ^^^^^^ help: if this is intentional, prefix it with an underscore: `_policy`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `write_statistics` is never used
[INFO] [stdout]   --> src/main.rs:71:4
[INFO] [stdout]    |
[INFO] [stdout] 71 | fn write_statistics(name: &str, closure: &mut Fn() -> (DetPolicy, Vec<String>, Vec<String>)) {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HumanControlPolicy` is never constructed
[INFO] [stdout]   --> src/policy.rs:47:8
[INFO] [stdout]    |
[INFO] [stdout] 47 | struct HumanControlPolicy {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TablePolicy` is never constructed
[INFO] [stdout]   --> src/policy.rs:86:8
[INFO] [stdout]    |
[INFO] [stdout] 86 | struct TablePolicy {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `initialize` is never used
[INFO] [stdout]   --> src/policy.rs:93:8
[INFO] [stdout]    |
[INFO] [stdout] 90 | impl TablePolicy{
[INFO] [stdout]    | ---------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 93 |     fn initialize(& mut self, env: &Env) {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RandomExplorationStrategy` is never constructed
[INFO] [stdout]   --> src/rl.rs:10:8
[INFO] [stdout]    |
[INFO] [stdout] 10 | struct RandomExplorationStrategy {}
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EpsilonGreedyExplorationStrategy` is never constructed
[INFO] [stdout]   --> src/rl.rs:11:8
[INFO] [stdout]    |
[INFO] [stdout] 11 | struct EpsilonGreedyExplorationStrategy {}
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SoftMaxExplorationStrategy` is never constructed
[INFO] [stdout]   --> src/rl.rs:12:8
[INFO] [stdout]    |
[INFO] [stdout] 12 | struct SoftMaxExplorationStrategy {}
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NoExplorationStrategy` is never constructed
[INFO] [stdout]   --> src/rl.rs:75:8
[INFO] [stdout]    |
[INFO] [stdout] 75 | struct NoExplorationStrategy {}
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `k`, `l`, and `t` are never read
[INFO] [stdout]    --> src/rl.rs:138:5
[INFO] [stdout]     |
[INFO] [stdout] 137 | pub struct StepSample {
[INFO] [stdout]     |            ---------- fields in this struct
[INFO] [stdout] 138 |     k: i32,
[INFO] [stdout]     |     ^
[INFO] [stdout] 139 |     l: usize,
[INFO] [stdout]     |     ^
[INFO] [stdout] 140 |     t: i32,
[INFO] [stdout]     |     ^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `size` is never read
[INFO] [stdout]    --> src/rl.rs:215:5
[INFO] [stdout]     |
[INFO] [stdout] 214 | pub struct EligibilityTraces {
[INFO] [stdout]     |            ----------------- field in this struct
[INFO] [stdout] 215 |     size: Pos,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `V` should have a snake case name
[INFO] [stdout]    --> src/environment.rs:219:17
[INFO] [stdout]     |
[INFO] [stdout] 219 |         let mut V = Array2::<f32>::zeros((self.size().x, self.size().y));
[INFO] [stdout]     |                 ^ help: convert the identifier to snake case (notice the capitalization): `v`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(non_snake_case)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `V` should have a snake case name
[INFO] [stdout]    --> src/environment.rs:234:64
[INFO] [stdout]     |
[INFO] [stdout] 234 |     fn value_iterate_pol<P: Policy>(&self, policy: Option<&P>, V: &mut Array2<f32>, discount: f32, max_delta: f32) {
[INFO] [stdout]     |                                                                ^ help: convert the identifier to snake case (notice the capitalization): `v`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `V` should have a snake case name
[INFO] [stdout]    --> src/environment.rs:265:63
[INFO] [stdout]     |
[INFO] [stdout] 265 |     fn inner<P: Policy>(&self, pos: &Pos, policy: Option<&P>, V: &Array2<f32>, discount: f32) -> (f32, f32, Movement) {
[INFO] [stdout]     |                                                               ^ help: convert the identifier to snake case (notice the capitalization): `v`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `V` should have a snake case name
[INFO] [stdout]    --> src/environment.rs:302:17
[INFO] [stdout]     |
[INFO] [stdout] 302 |         let mut V = Array2::<f32>::zeros((self.size().x, self.size().y));
[INFO] [stdout]     |                 ^ help: convert the identifier to snake case (notice the capitalization): `v`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `V` should have a snake case name
[INFO] [stdout]    --> src/environment.rs:309:17
[INFO] [stdout]     |
[INFO] [stdout] 309 |         let mut V = Array2::<f32>::zeros((self.size().x, self.size().y));
[INFO] [stdout]     |                 ^ help: convert the identifier to snake case (notice the capitalization): `v`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/environment.rs:360:9
[INFO] [stdout]     |
[INFO] [stdout] 360 |         problem.write_lp("problem.lp");
[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] 360 |         let _ = problem.write_lp("problem.lp");
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated
[INFO] [stdout]    --> src/rl.rs:297:62
[INFO] [stdout]     |
[INFO] [stdout] 297 | pub fn model_free_learning (env: &Env, action_selector: &mut ActionSelector, step_size: f32, discount: f32, amt_episodes: i32, mut mode: ...
[INFO] [stdout]     |                                                              ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout]     = note: `#[warn(bare_trait_objects)]` on by default
[INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn`
[INFO] [stdout]     |
[INFO] [stdout] 297 | pub fn model_free_learning (env: &Env, action_selector: &mut dyn ActionSelector, step_size: f32, discount: f32, amt_episodes: i32, mut mode: Mode)
[INFO] [stdout]     |                                                              +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated
[INFO] [stdout]    --> src/rl.rs:405:60
[INFO] [stdout]     |
[INFO] [stdout] 405 | pub fn double_q_learning (env: &Env, action_selector: &mut ActionSelector, step_size: f32, discount: f32, amt_episodes: i32)
[INFO] [stdout]     |                                                            ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn`
[INFO] [stdout]     |
[INFO] [stdout] 405 | pub fn double_q_learning (env: &Env, action_selector: &mut dyn ActionSelector, step_size: f32, discount: f32, amt_episodes: i32)
[INFO] [stdout]     |                                                            +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated
[INFO] [stdout]   --> src/main.rs:71:47
[INFO] [stdout]    |
[INFO] [stdout] 71 | fn write_statistics(name: &str, closure: &mut Fn() -> (DetPolicy, Vec<String>, Vec<String>)) {
[INFO] [stdout]    |                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn`
[INFO] [stdout]    |
[INFO] [stdout] 71 | fn write_statistics(name: &str, closure: &mut dyn Fn() -> (DetPolicy, Vec<String>, Vec<String>)) {
[INFO] [stdout]    |                                               +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `policy::Policy`
[INFO] [stdout]   --> src/main.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use policy::Policy;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `s` is never read
[INFO] [stdout]   --> src/policy.rs:33:17
[INFO] [stdout]    |
[INFO] [stdout] 33 |         let mut s: i32= 0;
[INFO] [stdout]    |                 ^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout]    = note: `#[warn(unused_assignments)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `env`
[INFO] [stdout]   --> src/policy.rs:42:20
[INFO] [stdout]    |
[INFO] [stdout] 42 |     fn prob(&self, env: &Env, pos: Pos, movement: &Movement) -> f32 {
[INFO] [stdout]    |                    ^^^ help: if this is intentional, prefix it with an underscore: `_env`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pos`
[INFO] [stdout]   --> src/policy.rs:42:31
[INFO] [stdout]    |
[INFO] [stdout] 42 |     fn prob(&self, env: &Env, pos: Pos, movement: &Movement) -> f32 {
[INFO] [stdout]    |                               ^^^ help: if this is intentional, prefix it with an underscore: `_pos`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `movement`
[INFO] [stdout]   --> src/policy.rs:42:41
[INFO] [stdout]    |
[INFO] [stdout] 42 |     fn prob(&self, env: &Env, pos: Pos, movement: &Movement) -> f32 {
[INFO] [stdout]    |                                         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_movement`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `env`
[INFO] [stdout]   --> src/policy.rs:81:20
[INFO] [stdout]    |
[INFO] [stdout] 81 |     fn prob(&self, env: &Env, pos: Pos, movement: &Movement) -> f32 {
[INFO] [stdout]    |                    ^^^ help: if this is intentional, prefix it with an underscore: `_env`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pos`
[INFO] [stdout]   --> src/policy.rs:81:31
[INFO] [stdout]    |
[INFO] [stdout] 81 |     fn prob(&self, env: &Env, pos: Pos, movement: &Movement) -> f32 {
[INFO] [stdout]    |                               ^^^ help: if this is intentional, prefix it with an underscore: `_pos`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `movement`
[INFO] [stdout]   --> src/policy.rs:81:41
[INFO] [stdout]    |
[INFO] [stdout] 81 |     fn prob(&self, env: &Env, pos: Pos, movement: &Movement) -> f32 {
[INFO] [stdout]    |                                         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_movement`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `env`
[INFO] [stdout]    --> src/policy.rs:127:20
[INFO] [stdout]     |
[INFO] [stdout] 127 |     fn prob(&self, env: &Env, pos: Pos, movement: &Movement) -> f32 {
[INFO] [stdout]     |                    ^^^ help: if this is intentional, prefix it with an underscore: `_env`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `y`
[INFO] [stdout]    --> src/policy.rs:150:13
[INFO] [stdout]     |
[INFO] [stdout] 150 |         for y in 0..size.y { print!("--") }
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_y`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `y`
[INFO] [stdout]    --> src/policy.rs:171:13
[INFO] [stdout]     |
[INFO] [stdout] 171 |         for y in 0..size.y { print!("--") }
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_y`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `env`
[INFO] [stdout]    --> src/policy.rs:192:20
[INFO] [stdout]     |
[INFO] [stdout] 192 |     fn prob(&self, env: &Env, pos: Pos, movement: &Movement) -> f32 {
[INFO] [stdout]     |                    ^^^ help: if this is intentional, prefix it with an underscore: `_env`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `boundaries`
[INFO] [stdout]    --> src/environment.rs:112:21
[INFO] [stdout]     |
[INFO] [stdout] 112 |                 let boundaries = self.size();
[INFO] [stdout]     |                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_boundaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `wall_hit`
[INFO] [stdout]    --> src/environment.rs:113:31
[INFO] [stdout]     |
[INFO] [stdout] 113 |                 let (new_pos, wall_hit) = self.check_movement(pos, movement_vec);
[INFO] [stdout]     |                               ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_wall_hit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `reward`
[INFO] [stdout]    --> src/environment.rs:124:46
[INFO] [stdout]     |
[INFO] [stdout] 124 | ...                   if let Cell::Ice(reward) = *(&self.map[other_pos.x][other_pos.y]) { }
[INFO] [stdout]     |                                        ^^^^^^ help: if this is intentional, prefix it with an underscore: `_reward`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `count_i` is assigned to, but never used
[INFO] [stdout]    --> src/environment.rs:236:17
[INFO] [stdout]     |
[INFO] [stdout] 236 |         let mut count_i = 1;
[INFO] [stdout]     |                 ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_count_i` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `r`
[INFO] [stdout]    --> src/environment.rs:244:31
[INFO] [stdout]     |
[INFO] [stdout] 244 |                     Cell::Ice(r) => {
[INFO] [stdout]     |                               ^ help: if this is intentional, prefix it with an underscore: `_r`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `x`
[INFO] [stdout]    --> src/rl.rs:224:13
[INFO] [stdout]     |
[INFO] [stdout] 224 |         for x in 0..size.x {
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_x`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `y`
[INFO] [stdout]    --> src/rl.rs:226:17
[INFO] [stdout]     |
[INFO] [stdout] 226 |             for y in 0..size.y {
[INFO] [stdout]     |                 ^ help: if this is intentional, prefix it with an underscore: `_y`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]    --> src/rl.rs:249:25
[INFO] [stdout]     |
[INFO] [stdout] 249 |             .for_each(|(action, trace)| {
[INFO] [stdout]     |                         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]    --> src/rl.rs:270:28
[INFO] [stdout]     |
[INFO] [stdout] 270 |             .filter(|(pos, action, trace)| match env.cell(pos) {
[INFO] [stdout]     |                            ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `trace`
[INFO] [stdout]    --> src/rl.rs:270:36
[INFO] [stdout]     |
[INFO] [stdout] 270 |             .filter(|(pos, action, trace)| match env.cell(pos) {
[INFO] [stdout]     |                                    ^^^^^ help: if this is intentional, prefix it with an underscore: `_trace`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/rl.rs:445:17
[INFO] [stdout]     |
[INFO] [stdout] 445 |             let mut state_value;
[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/rl.rs:446:17
[INFO] [stdout]     |
[INFO] [stdout] 446 |             let mut backup_q;
[INFO] [stdout]     |                 ----^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `agent`
[INFO] [stdout]   --> src/main.rs:21:13
[INFO] [stdout]    |
[INFO] [stdout] 21 |     let mut agent = agent::Agent::new(&env);
[INFO] [stdout]    |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_agent`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temperature`
[INFO] [stdout]   --> src/main.rs:37:9
[INFO] [stdout]    |
[INFO] [stdout] 37 |     let temperature = 20.0;
[INFO] [stdout]    |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temperature`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/main.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 21 |     let mut agent = agent::Agent::new(&env);
[INFO] [stdout]    |         ----^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `policy`
[INFO] [stdout]   --> src/main.rs:77:14
[INFO] [stdout]    |
[INFO] [stdout] 77 |         let (policy, results_r, results_e) = closure();
[INFO] [stdout]    |              ^^^^^^ help: if this is intentional, prefix it with an underscore: `_policy`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `write_statistics` is never used
[INFO] [stdout]   --> src/main.rs:71:4
[INFO] [stdout]    |
[INFO] [stdout] 71 | fn write_statistics(name: &str, closure: &mut Fn() -> (DetPolicy, Vec<String>, Vec<String>)) {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HumanControlPolicy` is never constructed
[INFO] [stdout]   --> src/policy.rs:47:8
[INFO] [stdout]    |
[INFO] [stdout] 47 | struct HumanControlPolicy {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TablePolicy` is never constructed
[INFO] [stdout]   --> src/policy.rs:86:8
[INFO] [stdout]    |
[INFO] [stdout] 86 | struct TablePolicy {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `initialize` is never used
[INFO] [stdout]   --> src/policy.rs:93:8
[INFO] [stdout]    |
[INFO] [stdout] 90 | impl TablePolicy{
[INFO] [stdout]    | ---------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 93 |     fn initialize(& mut self, env: &Env) {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RandomExplorationStrategy` is never constructed
[INFO] [stdout]   --> src/rl.rs:10:8
[INFO] [stdout]    |
[INFO] [stdout] 10 | struct RandomExplorationStrategy {}
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EpsilonGreedyExplorationStrategy` is never constructed
[INFO] [stdout]   --> src/rl.rs:11:8
[INFO] [stdout]    |
[INFO] [stdout] 11 | struct EpsilonGreedyExplorationStrategy {}
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SoftMaxExplorationStrategy` is never constructed
[INFO] [stdout]   --> src/rl.rs:12:8
[INFO] [stdout]    |
[INFO] [stdout] 12 | struct SoftMaxExplorationStrategy {}
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NoExplorationStrategy` is never constructed
[INFO] [stdout]   --> src/rl.rs:75:8
[INFO] [stdout]    |
[INFO] [stdout] 75 | struct NoExplorationStrategy {}
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `k`, `l`, and `t` are never read
[INFO] [stdout]    --> src/rl.rs:138:5
[INFO] [stdout]     |
[INFO] [stdout] 137 | pub struct StepSample {
[INFO] [stdout]     |            ---------- fields in this struct
[INFO] [stdout] 138 |     k: i32,
[INFO] [stdout]     |     ^
[INFO] [stdout] 139 |     l: usize,
[INFO] [stdout]     |     ^
[INFO] [stdout] 140 |     t: i32,
[INFO] [stdout]     |     ^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `size` is never read
[INFO] [stdout]    --> src/rl.rs:215:5
[INFO] [stdout]     |
[INFO] [stdout] 214 | pub struct EligibilityTraces {
[INFO] [stdout]     |            ----------------- field in this struct
[INFO] [stdout] 215 |     size: Pos,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `V` should have a snake case name
[INFO] [stdout]    --> src/environment.rs:219:17
[INFO] [stdout]     |
[INFO] [stdout] 219 |         let mut V = Array2::<f32>::zeros((self.size().x, self.size().y));
[INFO] [stdout]     |                 ^ help: convert the identifier to snake case (notice the capitalization): `v`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(non_snake_case)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `V` should have a snake case name
[INFO] [stdout]    --> src/environment.rs:234:64
[INFO] [stdout]     |
[INFO] [stdout] 234 |     fn value_iterate_pol<P: Policy>(&self, policy: Option<&P>, V: &mut Array2<f32>, discount: f32, max_delta: f32) {
[INFO] [stdout]     |                                                                ^ help: convert the identifier to snake case (notice the capitalization): `v`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `V` should have a snake case name
[INFO] [stdout]    --> src/environment.rs:265:63
[INFO] [stdout]     |
[INFO] [stdout] 265 |     fn inner<P: Policy>(&self, pos: &Pos, policy: Option<&P>, V: &Array2<f32>, discount: f32) -> (f32, f32, Movement) {
[INFO] [stdout]     |                                                               ^ help: convert the identifier to snake case (notice the capitalization): `v`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `V` should have a snake case name
[INFO] [stdout]    --> src/environment.rs:302:17
[INFO] [stdout]     |
[INFO] [stdout] 302 |         let mut V = Array2::<f32>::zeros((self.size().x, self.size().y));
[INFO] [stdout]     |                 ^ help: convert the identifier to snake case (notice the capitalization): `v`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `V` should have a snake case name
[INFO] [stdout]    --> src/environment.rs:309:17
[INFO] [stdout]     |
[INFO] [stdout] 309 |         let mut V = Array2::<f32>::zeros((self.size().x, self.size().y));
[INFO] [stdout]     |                 ^ help: convert the identifier to snake case (notice the capitalization): `v`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/environment.rs:360:9
[INFO] [stdout]     |
[INFO] [stdout] 360 |         problem.write_lp("problem.lp");
[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] 360 |         let _ = problem.write_lp("problem.lp");
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 8.02s
[INFO] running `Command { std: "docker" "inspect" "e1f6ed4e5b4db5357145f96cdc52c2282afab657e9a7bd108bd8dde946a42d14", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "e1f6ed4e5b4db5357145f96cdc52c2282afab657e9a7bd108bd8dde946a42d14", kill_on_drop: false }`
[INFO] [stdout] e1f6ed4e5b4db5357145f96cdc52c2282afab657e9a7bd108bd8dde946a42d14
