[INFO] cloning repository https://github.com/SHAfoin/othello_rust
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/SHAfoin/othello_rust" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSHAfoin%2Fothello_rust", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSHAfoin%2Fothello_rust'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 6a96853c65784c2fb5a30bb1b4488f15da55a877
[INFO] checking SHAfoin/othello_rust against try#5ef65a4ed75279dc1b7a26cedc27293a9f4ca8db for pr-143717
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSHAfoin%2Fothello_rust" "/workspace/builds/worker-3-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/SHAfoin/othello_rust
[INFO] finished tweaking git repo https://github.com/SHAfoin/othello_rust
[INFO] tweaked toml for git repo https://github.com/SHAfoin/othello_rust written to /workspace/builds/worker-3-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/SHAfoin/othello_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/SHAfoin/othello_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] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Blocking waiting for file lock on package cache
[ERROR] error running command: no output for 300 seconds
[INFO] checking SHAfoin/othello_rust against try#5ef65a4ed75279dc1b7a26cedc27293a9f4ca8db for pr-143717
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSHAfoin%2Fothello_rust" "/workspace/builds/worker-3-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/SHAfoin/othello_rust
[INFO] finished tweaking git repo https://github.com/SHAfoin/othello_rust
[INFO] tweaked toml for git repo https://github.com/SHAfoin/othello_rust written to /workspace/builds/worker-3-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/SHAfoin/othello_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/SHAfoin/othello_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] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded tui-big-text v0.7.1
[INFO] [stderr]   Downloaded font8x8 v0.3.1
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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] fe1b45122ed5bd52df32312b87e127d66766b120d59f42c40da6d6b99d00cae5
[INFO] running `Command { std: "docker" "start" "-a" "fe1b45122ed5bd52df32312b87e127d66766b120d59f42c40da6d6b99d00cae5", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "fe1b45122ed5bd52df32312b87e127d66766b120d59f42c40da6d6b99d00cae5", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "fe1b45122ed5bd52df32312b87e127d66766b120d59f42c40da6d6b99d00cae5", kill_on_drop: false }`
[INFO] [stdout] fe1b45122ed5bd52df32312b87e127d66766b120d59f42c40da6d6b99d00cae5
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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] f2fdd54e4fef6f14586baa09c2d37439bb0c0a0cc63c82236dd25b6633f2e0f9
[INFO] running `Command { std: "docker" "start" "-a" "f2fdd54e4fef6f14586baa09c2d37439bb0c0a0cc63c82236dd25b6633f2e0f9", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.95
[INFO] [stderr]    Compiling unicode-ident v1.0.18
[INFO] [stderr]    Compiling libc v0.2.174
[INFO] [stderr]     Checking cfg-if v1.0.1
[INFO] [stderr]    Compiling fnv v1.0.7
[INFO] [stderr]    Compiling strsim v0.11.1
[INFO] [stderr]    Compiling ident_case v1.0.1
[INFO] [stderr]    Compiling rustversion v1.0.21
[INFO] [stderr]    Compiling autocfg v1.5.0
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]    Compiling parking_lot_core v0.9.11
[INFO] [stderr]     Checking smallvec v1.15.1
[INFO] [stderr]    Compiling getrandom v0.3.3
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]     Checking log v0.4.27
[INFO] [stderr]     Checking scopeguard v1.2.0
[INFO] [stderr]     Checking either v1.15.0
[INFO] [stderr]    Compiling zerocopy v0.8.26
[INFO] [stderr]     Checking linux-raw-sys v0.4.15
[INFO] [stderr]     Checking allocator-api2 v0.2.21
[INFO] [stderr]    Compiling paste v1.0.15
[INFO] [stderr]     Checking foldhash v0.1.5
[INFO] [stderr]     Checking ryu v1.0.20
[INFO] [stderr]     Checking equivalent v1.0.2
[INFO] [stderr]     Checking bitflags v2.9.1
[INFO] [stderr]    Compiling heck v0.5.0
[INFO] [stderr]     Checking itoa v1.0.15
[INFO] [stderr]     Checking itertools v0.13.0
[INFO] [stderr]     Checking unicode-segmentation v1.12.0
[INFO] [stderr]     Checking static_assertions v1.1.0
[INFO] [stderr]    Compiling serde v1.0.219
[INFO] [stderr]    Compiling indoc v2.0.6
[INFO] [stderr]     Checking hashbrown v0.15.4
[INFO] [stderr]     Checking unicode-width v0.1.14
[INFO] [stderr]     Checking cassowary v0.3.0
[INFO] [stderr]     Checking unicode-width v0.2.0
[INFO] [stderr]    Compiling serde_json v1.0.140
[INFO] [stderr]    Compiling lock_api v0.4.13
[INFO] [stderr]     Checking itertools v0.14.0
[INFO] [stderr]     Checking memchr v2.7.5
[INFO] [stderr]     Checking font8x8 v0.3.1
[INFO] [stderr]     Checking castaway v0.2.3
[INFO] [stderr]    Compiling quote v1.0.40
[INFO] [stderr]     Checking compact_str v0.8.1
[INFO] [stderr]     Checking lru v0.12.5
[INFO] [stderr]    Compiling syn v2.0.104
[INFO] [stderr]     Checking signal-hook-registry v1.4.5
[INFO] [stderr]     Checking mio v1.0.4
[INFO] [stderr]     Checking rand_core v0.9.3
[INFO] [stderr]     Checking parking_lot v0.12.4
[INFO] [stderr]     Checking unicode-truncate v1.1.0
[INFO] [stderr]     Checking signal-hook-mio v0.2.4
[INFO] [stderr]     Checking crossterm v0.28.1
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking rand_chacha v0.9.0
[INFO] [stderr]     Checking rand v0.9.1
[INFO] [stderr]    Compiling darling_core v0.20.11
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]    Compiling serde_derive v1.0.219
[INFO] [stderr]     Checking strum v0.26.3
[INFO] [stderr]    Compiling darling_macro v0.20.11
[INFO] [stderr]    Compiling darling v0.20.11
[INFO] [stderr]    Compiling derive_builder_core v0.20.2
[INFO] [stderr]    Compiling instability v0.3.7
[INFO] [stderr]     Checking ratatui v0.29.0
[INFO] [stderr]    Compiling derive_builder_macro v0.20.2
[INFO] [stderr]     Checking derive_builder v0.20.2
[INFO] [stderr]     Checking tui-big-text v0.7.1
[INFO] [stderr]     Checking othello_rust v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `MAX_DEPTH` and `ULTRA_THREADING`
[INFO] [stdout]  --> src/ai/alphabeta.rs:5:14
[INFO] [stdout]   |
[INFO] [stdout] 5 |     consts::{MAX_DEPTH, SIZE, ULTRA_THREADING},
[INFO] [stdout]   |              ^^^^^^^^^        ^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `random_range`
[INFO] [stdout]  --> src/ai/qlearning.rs:1:12
[INFO] [stdout]   |
[INFO] [stdout] 1 | use rand::{random_range, rng, Rng};
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `hash::Hash`
[INFO] [stdout]  --> src/ai/qlearning.rs:2:43
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::{collections::HashMap, fs::File, hash::Hash, io::Write};
[INFO] [stdout]   |                                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SIZE`
[INFO] [stdout]  --> src/ai/qlearning.rs:6:54
[INFO] [stdout]   |
[INFO] [stdout] 6 |     consts::{EPSILON, GAMMA, LAMBDA_LEARN, MATRIX_A, SIZE},
[INFO] [stdout]   |                                                      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]    --> src/game/board.rs:101:17
[INFO] [stdout]     |
[INFO] [stdout] 101 |     ) -> Result<(usize), String> {
[INFO] [stdout]     |                 ^     ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 101 -     ) -> Result<(usize), String> {
[INFO] [stdout] 101 +     ) -> Result<usize, String> {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Widget` and `crossterm::terminal`
[INFO] [stdout]  --> src/gui/ui.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 |     crossterm::terminal,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 7 |         Block, BorderType, Borders, Clear, List, ListItem, ListState, Padding, Paragraph, Widget,
[INFO] [stdout]   |                                                                                           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `board::Board`
[INFO] [stdout]   --> src/gui/ui.rs:15:19
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::game::{board::Board, cell::Cell};
[INFO] [stdout]    |                   ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `human::Human` and `minmax::AIMinMax`
[INFO] [stdout]   --> src/main.rs:26:57
[INFO] [stdout]    |
[INFO] [stdout] 26 |     ai::{alphabeta::AIAlphaBeta, common::HeuristicType, minmax::AIMinMax, qlearning::QLearning},
[INFO] [stdout]    |                                                         ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     human::Human,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::crossterm::event::KeyEventKind`
[INFO] [stdout]   --> src/main.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 | use ratatui::crossterm::event::KeyEventKind;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `MAX_DEPTH` and `ULTRA_THREADING`
[INFO] [stdout]  --> src/ai/alphabeta.rs:5:14
[INFO] [stdout]   |
[INFO] [stdout] 5 |     consts::{MAX_DEPTH, SIZE, ULTRA_THREADING},
[INFO] [stdout]   |              ^^^^^^^^^        ^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `random_range`
[INFO] [stdout]  --> src/ai/qlearning.rs:1:12
[INFO] [stdout]   |
[INFO] [stdout] 1 | use rand::{random_range, rng, Rng};
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `hash::Hash`
[INFO] [stdout]  --> src/ai/qlearning.rs:2:43
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::{collections::HashMap, fs::File, hash::Hash, io::Write};
[INFO] [stdout]   |                                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SIZE`
[INFO] [stdout]  --> src/ai/qlearning.rs:6:54
[INFO] [stdout]   |
[INFO] [stdout] 6 |     consts::{EPSILON, GAMMA, LAMBDA_LEARN, MATRIX_A, SIZE},
[INFO] [stdout]   |                                                      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]    --> src/game/board.rs:101:17
[INFO] [stdout]     |
[INFO] [stdout] 101 |     ) -> Result<(usize), String> {
[INFO] [stdout]     |                 ^     ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 101 -     ) -> Result<(usize), String> {
[INFO] [stdout] 101 +     ) -> Result<usize, String> {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Widget` and `crossterm::terminal`
[INFO] [stdout]  --> src/gui/ui.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 |     crossterm::terminal,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 7 |         Block, BorderType, Borders, Clear, List, ListItem, ListState, Padding, Paragraph, Widget,
[INFO] [stdout]   |                                                                                           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `board::Board`
[INFO] [stdout]   --> src/gui/ui.rs:15:19
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::game::{board::Board, cell::Cell};
[INFO] [stdout]    |                   ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `human::Human` and `minmax::AIMinMax`
[INFO] [stdout]   --> src/main.rs:26:57
[INFO] [stdout]    |
[INFO] [stdout] 26 |     ai::{alphabeta::AIAlphaBeta, common::HeuristicType, minmax::AIMinMax, qlearning::QLearning},
[INFO] [stdout]    |                                                         ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     human::Human,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::crossterm::event::KeyEventKind`
[INFO] [stdout]   --> src/main.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 | use ratatui::crossterm::event::KeyEventKind;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Stylize`
[INFO] [stdout]  --> src/gui/ui.rs:4:27
[INFO] [stdout]   |
[INFO] [stdout] 4 |     style::{Color, Style, Stylize},
[INFO] [stdout]   |                           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `total_r`
[INFO] [stdout]    --> src/ai/qlearning.rs:154:18
[INFO] [stdout]     |
[INFO] [stdout] 154 |             let (total_r, done) = self.q_learning();
[INFO] [stdout]     |                  ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_total_r`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `done`
[INFO] [stdout]    --> src/ai/qlearning.rs:154:27
[INFO] [stdout]     |
[INFO] [stdout] 154 |             let (total_r, done) = self.q_learning();
[INFO] [stdout]     |                           ^^^^ help: if this is intentional, prefix it with an underscore: `_done`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Stylize`
[INFO] [stdout]  --> src/gui/ui.rs:4:27
[INFO] [stdout]   |
[INFO] [stdout] 4 |     style::{Color, Style, Stylize},
[INFO] [stdout]   |                           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> src/gui/ui.rs:133:19
[INFO] [stdout]     |
[INFO] [stdout] 133 | pub fn footer<'a>(frame: &mut Frame, app: &App, text: &'a str) -> Paragraph<'a> {
[INFO] [stdout]     |                   ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> src/gui/ui.rs:133:38
[INFO] [stdout]     |
[INFO] [stdout] 133 | pub fn footer<'a>(frame: &mut Frame, app: &App, text: &'a str) -> Paragraph<'a> {
[INFO] [stdout]     |                                      ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> src/gui/ui.rs:295:24
[INFO] [stdout]     |
[INFO] [stdout] 295 | pub fn tutorial_screen(frame: &mut Frame, app: &App) {}
[INFO] [stdout]     |                        ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> src/gui/ui.rs:295:43
[INFO] [stdout]     |
[INFO] [stdout] 295 | pub fn tutorial_screen(frame: &mut Frame, app: &App) {}
[INFO] [stdout]     |                                           ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> src/gui/ui.rs:297:27
[INFO] [stdout]     |
[INFO] [stdout] 297 | pub fn human_vs_ai_screen(frame: &mut Frame, app: &App) {}
[INFO] [stdout]     |                           ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> src/gui/ui.rs:297:46
[INFO] [stdout]     |
[INFO] [stdout] 297 | pub fn human_vs_ai_screen(frame: &mut Frame, app: &App) {}
[INFO] [stdout]     |                                              ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> src/gui/ui.rs:299:24
[INFO] [stdout]     |
[INFO] [stdout] 299 | pub fn ai_vs_ai_screen(frame: &mut Frame, app: &App) {}
[INFO] [stdout]     |                        ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> src/gui/ui.rs:299:43
[INFO] [stdout]     |
[INFO] [stdout] 299 | pub fn ai_vs_ai_screen(frame: &mut Frame, app: &App) {}
[INFO] [stdout]     |                                           ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> src/gui/ui.rs:301:37
[INFO] [stdout]     |
[INFO] [stdout] 301 | pub fn q_learning_parameters_screen(frame: &mut Frame, app: &App) {}
[INFO] [stdout]     |                                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> src/gui/ui.rs:301:56
[INFO] [stdout]     |
[INFO] [stdout] 301 | pub fn q_learning_parameters_screen(frame: &mut Frame, app: &App) {}
[INFO] [stdout]     |                                                        ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `total_r`
[INFO] [stdout]    --> src/ai/qlearning.rs:154:18
[INFO] [stdout]     |
[INFO] [stdout] 154 |             let (total_r, done) = self.q_learning();
[INFO] [stdout]     |                  ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_total_r`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `res`
[INFO] [stdout]    --> src/main.rs:134:9
[INFO] [stdout]     |
[INFO] [stdout] 134 |     let res = run_app(&mut terminal, &mut app);
[INFO] [stdout]     |         ^^^ help: if this is intentional, prefix it with an underscore: `_res`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `done`
[INFO] [stdout]    --> src/ai/qlearning.rs:154:27
[INFO] [stdout]     |
[INFO] [stdout] 154 |             let (total_r, done) = self.q_learning();
[INFO] [stdout]     |                           ^^^^ help: if this is intentional, prefix it with an underscore: `_done`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Absolute`, `Matrix`, and `Mobility` are never constructed
[INFO] [stdout]   --> src/ai/common.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum HeuristicType {
[INFO] [stdout]    |          ------------- variants in this enum
[INFO] [stdout] 11 |     Absolute,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 12 |     Matrix,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 13 |     Mobility,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HeuristicType` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AIMinMax` is never constructed
[INFO] [stdout]   --> src/ai/minmax.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct AIMinMax {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `get_color`, `play_turn`, `init_tree`, and `tree_step` are never used
[INFO] [stdout]   --> src/ai/minmax.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl AIMinMax {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] 18 |     pub fn new(
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn get_color(&self) -> Cell {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn play_turn(&self, board: &mut Board) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 93 |     pub fn init_tree(&self, board: &Board, depth: usize) -> isize {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 97 |     pub fn tree_step(&self, board: &Board, depth: usize) -> isize {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `max_step`, `heuristic`, `epoch`, `epsilon`, and `color` are never read
[INFO] [stdout]   --> src/ai/qlearning.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct QLearning {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout] 11 |     max_step: usize,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 12 |     q_table: HashMap<String, HashMap<String, isize>>,
[INFO] [stdout] 13 |     heuristic: HeuristicType,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 14 |     epoch: usize,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 15 |     epsilon: f64,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 16 |     color: Cell,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_q_table`, `get_epsilon`, `set_epsilon`, `q_learning`, `try_q_learning`, and `export_q_table` are never used
[INFO] [stdout]    --> src/ai/qlearning.rs:35:12
[INFO] [stdout]     |
[INFO] [stdout] 19  | impl QLearning {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 35  |     pub fn set_q_table(&mut self, state: String, action: (String, isize)) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42  |     pub fn get_epsilon(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 46  |     pub fn set_epsilon(&mut self, epsilon: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50  |     pub fn q_learning(&mut self) -> (isize, bool) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 150 |     pub fn try_q_learning(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub fn export_q_table(&self, file_path: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ULTRA_THREADING` is never used
[INFO] [stdout]  --> src/consts.rs:3:11
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub const ULTRA_THREADING: bool = false; // Enable or disable ultra threading for AI calculations
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LAMBDA_LEARN` is never used
[INFO] [stdout]  --> src/consts.rs:6:11
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub const LAMBDA_LEARN: f64 = 0.8; // Learning rate for Q-learning
[INFO] [stdout]   |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `GAMMA` is never used
[INFO] [stdout]  --> src/consts.rs:7:11
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub const GAMMA: f64 = 0.99; // Discount factor for future rewards
[INFO] [stdout]   |           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MATRIX_A` is never used
[INFO] [stdout]   --> src/consts.rs:10:11
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub const MATRIX_A: [[isize; SIZE]; SIZE] = [
[INFO] [stdout]    |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_cells` and `get_winner` are never used
[INFO] [stdout]    --> src/game/board.rs:92:12
[INFO] [stdout]     |
[INFO] [stdout] 15  | impl Board {
[INFO] [stdout]     | ---------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 92  |     pub fn get_cells(&self) -> &[[Cell; SIZE]; SIZE] {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 252 |     pub fn get_winner(&self) -> Option<Cell> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Tutorial` is never constructed
[INFO] [stdout]  --> src/gui/app.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub enum CurrentScreen {
[INFO] [stdout]   |          ------------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 8 |     Tutorial,
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `centered_rect` is never used
[INFO] [stdout]   --> src/gui/ui.rs:18:4
[INFO] [stdout]    |
[INFO] [stdout] 18 | fn centered_rect(percent_x: u16, percent_y: u16, r: Rect) -> Rect {
[INFO] [stdout]    |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Human` is never constructed
[INFO] [stdout]  --> src/human.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct Human {
[INFO] [stdout]   |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `get_color`, `get_player_move`, and `play_turn` are never used
[INFO] [stdout]   --> src/human.rs:8:12
[INFO] [stdout]    |
[INFO] [stdout] 7  | impl Human {
[INFO] [stdout]    | ---------- associated items in this implementation
[INFO] [stdout] 8  |     pub fn new(color: Cell) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 12 |     fn get_color(&self) -> Cell {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 16 |     fn get_player_move(&self) -> Option<(usize, usize)> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn play_turn(&self, board: &mut Board) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> src/gui/ui.rs:133:19
[INFO] [stdout]     |
[INFO] [stdout] 133 | pub fn footer<'a>(frame: &mut Frame, app: &App, text: &'a str) -> Paragraph<'a> {
[INFO] [stdout]     |                   ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> src/gui/ui.rs:133:38
[INFO] [stdout]     |
[INFO] [stdout] 133 | pub fn footer<'a>(frame: &mut Frame, app: &App, text: &'a str) -> Paragraph<'a> {
[INFO] [stdout]     |                                      ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> src/gui/ui.rs:295:24
[INFO] [stdout]     |
[INFO] [stdout] 295 | pub fn tutorial_screen(frame: &mut Frame, app: &App) {}
[INFO] [stdout]     |                        ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> src/gui/ui.rs:295:43
[INFO] [stdout]     |
[INFO] [stdout] 295 | pub fn tutorial_screen(frame: &mut Frame, app: &App) {}
[INFO] [stdout]     |                                           ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> src/gui/ui.rs:297:27
[INFO] [stdout]     |
[INFO] [stdout] 297 | pub fn human_vs_ai_screen(frame: &mut Frame, app: &App) {}
[INFO] [stdout]     |                           ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> src/gui/ui.rs:297:46
[INFO] [stdout]     |
[INFO] [stdout] 297 | pub fn human_vs_ai_screen(frame: &mut Frame, app: &App) {}
[INFO] [stdout]     |                                              ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> src/gui/ui.rs:299:24
[INFO] [stdout]     |
[INFO] [stdout] 299 | pub fn ai_vs_ai_screen(frame: &mut Frame, app: &App) {}
[INFO] [stdout]     |                        ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> src/gui/ui.rs:299:43
[INFO] [stdout]     |
[INFO] [stdout] 299 | pub fn ai_vs_ai_screen(frame: &mut Frame, app: &App) {}
[INFO] [stdout]     |                                           ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> src/gui/ui.rs:301:37
[INFO] [stdout]     |
[INFO] [stdout] 301 | pub fn q_learning_parameters_screen(frame: &mut Frame, app: &App) {}
[INFO] [stdout]     |                                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> src/gui/ui.rs:301:56
[INFO] [stdout]     |
[INFO] [stdout] 301 | pub fn q_learning_parameters_screen(frame: &mut Frame, app: &App) {}
[INFO] [stdout]     |                                                        ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `res`
[INFO] [stdout]    --> src/main.rs:134:9
[INFO] [stdout]     |
[INFO] [stdout] 134 |     let res = run_app(&mut terminal, &mut app);
[INFO] [stdout]     |         ^^^ help: if this is intentional, prefix it with an underscore: `_res`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Absolute`, `Matrix`, and `Mobility` are never constructed
[INFO] [stdout]   --> src/ai/common.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum HeuristicType {
[INFO] [stdout]    |          ------------- variants in this enum
[INFO] [stdout] 11 |     Absolute,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 12 |     Matrix,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 13 |     Mobility,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HeuristicType` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AIMinMax` is never constructed
[INFO] [stdout]   --> src/ai/minmax.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct AIMinMax {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `get_color`, `play_turn`, `init_tree`, and `tree_step` are never used
[INFO] [stdout]   --> src/ai/minmax.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl AIMinMax {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] 18 |     pub fn new(
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn get_color(&self) -> Cell {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn play_turn(&self, board: &mut Board) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 93 |     pub fn init_tree(&self, board: &Board, depth: usize) -> isize {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 97 |     pub fn tree_step(&self, board: &Board, depth: usize) -> isize {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `max_step`, `heuristic`, `epoch`, `epsilon`, and `color` are never read
[INFO] [stdout]   --> src/ai/qlearning.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct QLearning {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout] 11 |     max_step: usize,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 12 |     q_table: HashMap<String, HashMap<String, isize>>,
[INFO] [stdout] 13 |     heuristic: HeuristicType,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 14 |     epoch: usize,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 15 |     epsilon: f64,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 16 |     color: Cell,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_q_table`, `get_epsilon`, `set_epsilon`, `q_learning`, `try_q_learning`, and `export_q_table` are never used
[INFO] [stdout]    --> src/ai/qlearning.rs:35:12
[INFO] [stdout]     |
[INFO] [stdout] 19  | impl QLearning {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 35  |     pub fn set_q_table(&mut self, state: String, action: (String, isize)) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42  |     pub fn get_epsilon(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 46  |     pub fn set_epsilon(&mut self, epsilon: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50  |     pub fn q_learning(&mut self) -> (isize, bool) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 150 |     pub fn try_q_learning(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub fn export_q_table(&self, file_path: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ULTRA_THREADING` is never used
[INFO] [stdout]  --> src/consts.rs:3:11
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub const ULTRA_THREADING: bool = false; // Enable or disable ultra threading for AI calculations
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LAMBDA_LEARN` is never used
[INFO] [stdout]  --> src/consts.rs:6:11
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub const LAMBDA_LEARN: f64 = 0.8; // Learning rate for Q-learning
[INFO] [stdout]   |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `GAMMA` is never used
[INFO] [stdout]  --> src/consts.rs:7:11
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub const GAMMA: f64 = 0.99; // Discount factor for future rewards
[INFO] [stdout]   |           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MATRIX_A` is never used
[INFO] [stdout]   --> src/consts.rs:10:11
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub const MATRIX_A: [[isize; SIZE]; SIZE] = [
[INFO] [stdout]    |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_cells` and `get_winner` are never used
[INFO] [stdout]    --> src/game/board.rs:92:12
[INFO] [stdout]     |
[INFO] [stdout] 15  | impl Board {
[INFO] [stdout]     | ---------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 92  |     pub fn get_cells(&self) -> &[[Cell; SIZE]; SIZE] {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 252 |     pub fn get_winner(&self) -> Option<Cell> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Tutorial` is never constructed
[INFO] [stdout]  --> src/gui/app.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub enum CurrentScreen {
[INFO] [stdout]   |          ------------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 8 |     Tutorial,
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `centered_rect` is never used
[INFO] [stdout]   --> src/gui/ui.rs:18:4
[INFO] [stdout]    |
[INFO] [stdout] 18 | fn centered_rect(percent_x: u16, percent_y: u16, r: Rect) -> Rect {
[INFO] [stdout]    |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Human` is never constructed
[INFO] [stdout]  --> src/human.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct Human {
[INFO] [stdout]   |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `get_color`, `get_player_move`, and `play_turn` are never used
[INFO] [stdout]   --> src/human.rs:8:12
[INFO] [stdout]    |
[INFO] [stdout] 7  | impl Human {
[INFO] [stdout]    | ---------- associated items in this implementation
[INFO] [stdout] 8  |     pub fn new(color: Cell) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 12 |     fn get_color(&self) -> Cell {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 16 |     fn get_player_move(&self) -> Option<(usize, usize)> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn play_turn(&self, board: &mut Board) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 19.08s
[INFO] running `Command { std: "docker" "inspect" "f2fdd54e4fef6f14586baa09c2d37439bb0c0a0cc63c82236dd25b6633f2e0f9", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "f2fdd54e4fef6f14586baa09c2d37439bb0c0a0cc63c82236dd25b6633f2e0f9", kill_on_drop: false }`
[INFO] [stdout] f2fdd54e4fef6f14586baa09c2d37439bb0c0a0cc63c82236dd25b6633f2e0f9
