[INFO] cloning repository https://github.com/0xjackson/gto-cli
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/0xjackson/gto-cli" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2F0xjackson%2Fgto-cli", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2F0xjackson%2Fgto-cli'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] ce90d6c25522ca476bc31b32832bb58d9e02c043
[INFO] testing 0xjackson/gto-cli against master#ec6f9a5b4413f74386267ef8efc93712c2ce6db6 for pr-155739
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2F0xjackson%2Fgto-cli" "/workspace/builds/worker-3-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/0xjackson/gto-cli
[INFO] finished tweaking git repo https://github.com/0xjackson/gto-cli
[INFO] tweaked toml for git repo https://github.com/0xjackson/gto-cli written to /workspace/builds/worker-3-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/0xjackson/gto-cli on toolchain ec6f9a5b4413f74386267ef8efc93712c2ce6db6
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+ec6f9a5b4413f74386267ef8efc93712c2ce6db6" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/0xjackson/gto-cli 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" "+ec6f9a5b4413f74386267ef8efc93712c2ce6db6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded zmij v1.0.20
[INFO] [stderr]   Downloaded comfy-table v7.1.4
[INFO] [stderr]   Downloaded clap v4.5.57
[INFO] [stderr]   Downloaded clap_builder v4.5.57
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+ec6f9a5b4413f74386267ef8efc93712c2ce6db6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] d7d93706d76fdac46fd89e5c6f3afb5810aee7a2b7b04443032ecf335aad3708
[INFO] running `Command { std: "docker" "start" "-a" "d7d93706d76fdac46fd89e5c6f3afb5810aee7a2b7b04443032ecf335aad3708", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "d7d93706d76fdac46fd89e5c6f3afb5810aee7a2b7b04443032ecf335aad3708", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "d7d93706d76fdac46fd89e5c6f3afb5810aee7a2b7b04443032ecf335aad3708", kill_on_drop: false }`
[INFO] [stdout] d7d93706d76fdac46fd89e5c6f3afb5810aee7a2b7b04443032ecf335aad3708
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+ec6f9a5b4413f74386267ef8efc93712c2ce6db6" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 40c8d2b71b2caedb6cd9b3a05398cd1e253fae83c844c3854a0003520f78164f
[INFO] running `Command { std: "docker" "start" "-a" "40c8d2b71b2caedb6cd9b3a05398cd1e253fae83c844c3854a0003520f78164f", kill_on_drop: false }`
[INFO] [stderr]    Compiling quote v1.0.44
[INFO] [stderr]    Compiling zerocopy v0.8.39
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]    Compiling linux-raw-sys v0.4.15
[INFO] [stderr]    Compiling zmij v1.0.20
[INFO] [stderr]    Compiling rayon-core v1.13.0
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling clap_lex v0.7.7
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.18
[INFO] [stderr]    Compiling anstream v0.6.21
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling itoa v1.0.17
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling lazy_static v1.5.0
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling colored v2.2.0
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling clap_builder v4.5.57
[INFO] [stderr]    Compiling syn v2.0.114
[INFO] [stderr]    Compiling crossbeam-deque v0.8.6
[INFO] [stderr]    Compiling crossterm v0.28.1
[INFO] [stderr]    Compiling rayon v1.11.0
[INFO] [stderr]    Compiling comfy-table v7.1.4
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling clap_derive v4.5.55
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling clap v4.5.57
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling bincode v1.3.3
[INFO] [stderr]    Compiling gto-cli v1.0.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `Rank`
[INFO] [stdout]  --> src/card_encoding.rs:7:26
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::cards::{Card, Rank, Suit, ALL_RANKS, ALL_SUITS};
[INFO] [stdout]   |                          ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `break_even_pct` and `spr as calc_spr`
[INFO] [stdout]   --> src/play.rs:10:26
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::math_engine::{break_even_pct, spr as calc_spr, SprZone};
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::multiway::multiway_range_adjustment`
[INFO] [stdout]   --> src/play.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::multiway::multiway_range_adjustment;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `get_rfi_pct`
[INFO] [stdout]   --> src/play.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 |     get_rfi_pct, get_rfi_range, preflop_action, positions_for,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HAND_RANKING`
[INFO] [stdout]   --> src/play.rs:17:58
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::ranges::{blockers_remove, range_from_top_pct, HAND_RANKING};
[INFO] [stdout]    |                                                          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `detect_street`
[INFO] [stdout]   --> src/play.rs:19:22
[INFO] [stdout]    |
[INFO] [stdout] 19 |     default_villain, detect_street, format_strategy, StrategyEngine, StrategySource,
[INFO] [stdout]    |                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bb_amount`
[INFO] [stdout]    --> src/play.rs:455:9
[INFO] [stdout]     |
[INFO] [stdout] 455 |     let bb_amount = 1.0; // Use bb as unit
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bb_amount`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_solver_preflop`
[INFO] [stdout]    --> src/play.rs:495:9
[INFO] [stdout]     |
[INFO] [stdout] 495 |     let has_solver_preflop = show_preflop_advice(
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_solver_preflop`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `board_str` is never read
[INFO] [stdout]    --> src/play.rs:514:25
[INFO] [stdout]     |
[INFO] [stdout] 514 |     let mut board_str = String::new();
[INFO] [stdout]     |                         ^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 550 |         board_str = board.iter().map(|c| format!("{}", c)).collect();
[INFO] [stdout]     |         --------- `board_str` is overwritten here before the previous value is read
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_sizing_pct` is never used
[INFO] [stdout]    --> src/play.rs:377:4
[INFO] [stdout]     |
[INFO] [stdout] 377 | fn parse_sizing_pct(sizing: &str) -> Option<f64> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `fold` is never read
[INFO] [stdout]   --> src/preflop.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | struct SqueezeEntry {
[INFO] [stdout]    |        ------------ field in this struct
[INFO] [stdout] 36 |     squeeze: Vec<String>,
[INFO] [stdout] 37 |     fold: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SqueezeEntry` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Rank`
[INFO] [stdout]  --> src/card_encoding.rs:7:26
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::cards::{Card, Rank, Suit, ALL_RANKS, ALL_SUITS};
[INFO] [stdout]   |                          ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `break_even_pct` and `spr as calc_spr`
[INFO] [stdout]   --> src/play.rs:10:26
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::math_engine::{break_even_pct, spr as calc_spr, SprZone};
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::multiway::multiway_range_adjustment`
[INFO] [stdout]   --> src/play.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::multiway::multiway_range_adjustment;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `get_rfi_pct`
[INFO] [stdout]   --> src/play.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 |     get_rfi_pct, get_rfi_range, preflop_action, positions_for,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HAND_RANKING`
[INFO] [stdout]   --> src/play.rs:17:58
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::ranges::{blockers_remove, range_from_top_pct, HAND_RANKING};
[INFO] [stdout]    |                                                          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `detect_street`
[INFO] [stdout]   --> src/play.rs:19:22
[INFO] [stdout]    |
[INFO] [stdout] 19 |     default_villain, detect_street, format_strategy, StrategyEngine, StrategySource,
[INFO] [stdout]    |                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bb_amount`
[INFO] [stdout]    --> src/play.rs:455:9
[INFO] [stdout]     |
[INFO] [stdout] 455 |     let bb_amount = 1.0; // Use bb as unit
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bb_amount`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_solver_preflop`
[INFO] [stdout]    --> src/play.rs:495:9
[INFO] [stdout]     |
[INFO] [stdout] 495 |     let has_solver_preflop = show_preflop_advice(
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_solver_preflop`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `board_str` is never read
[INFO] [stdout]    --> src/play.rs:514:25
[INFO] [stdout]     |
[INFO] [stdout] 514 |     let mut board_str = String::new();
[INFO] [stdout]     |                         ^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 550 |         board_str = board.iter().map(|c| format!("{}", c)).collect();
[INFO] [stdout]     |         --------- `board_str` is overwritten here before the previous value is read
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cards_to_indices` is never used
[INFO] [stdout]   --> src/card_encoding.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn cards_to_indices(cards: &[Card]) -> Vec<u8> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SUITS_STR` is never used
[INFO] [stdout]   --> src/cards.rs:10:11
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub const SUITS_STR: &str = "shdc";
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Deck` is never constructed
[INFO] [stdout]    --> src/cards.rs:179:12
[INFO] [stdout]     |
[INFO] [stdout] 179 | pub struct Deck {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `shuffle`, `deal`, and `len` are never used
[INFO] [stdout]    --> src/cards.rs:184:12
[INFO] [stdout]     |
[INFO] [stdout] 183 | impl Deck {
[INFO] [stdout]     | --------- associated items in this implementation
[INFO] [stdout] 184 |     pub fn new(exclude: Option<&[Card]>) -> Deck {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     pub fn shuffle(&mut self) -> &mut Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     pub fn deal(&mut self, n: usize) -> GtoResult<Vec<Card>> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rank_index` is never used
[INFO] [stdout]    --> src/cards.rs:314:8
[INFO] [stdout]     |
[INFO] [stdout] 314 | pub fn rank_index(c: char) -> Option<usize> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `as_str` is never used
[INFO] [stdout]   --> src/cli.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl Situation {
[INFO] [stdout]    | -------------- method in this implementation
[INFO] [stdout] 50 |     fn as_str(&self) -> &'static str {
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run` is never used
[INFO] [stdout]    --> src/cli.rs:403:8
[INFO] [stdout]     |
[INFO] [stdout] 403 | pub fn run() {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `range_grid_strs` is never used
[INFO] [stdout]   --> src/display.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn range_grid_strs(hands_in_range: &[&str], title: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `odds_table` is never used
[INFO] [stdout]    --> src/display.rs:119:8
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub fn odds_table(pot: f64, bet: f64, equity_needed: f64, ev_value: Option<f64>) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_action` is never used
[INFO] [stdout]    --> src/display.rs:190:8
[INFO] [stdout]     |
[INFO] [stdout] 190 | pub fn print_action(action: &str, detail: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_section` is never used
[INFO] [stdout]    --> src/display.rs:199:8
[INFO] [stdout]     |
[INFO] [stdout] 199 | pub fn print_section(title: &str, content: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_success` is never used
[INFO] [stdout]    --> src/display.rs:208:8
[INFO] [stdout]     |
[INFO] [stdout] 208 | pub fn print_success(msg: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `NotEnoughDeck` and `RangeDataNotFound` are never constructed
[INFO] [stdout]   --> src/error.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout]  4 | pub enum GtoError {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 24 |     NotEnoughDeck { requested: usize, available: usize },
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     RangeDataNotFound(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GtoError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `num_nodes`, `total_entries`, and `memory_bytes` are never used
[INFO] [stdout]   --> src/flat_cfr.rs:64:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | impl FlatCfr {
[INFO] [stdout]    | ------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn num_nodes(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn total_entries(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn memory_bytes(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `cards` is never read
[INFO] [stdout]   --> src/hand_evaluator.rs:45:9
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct HandResult {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub cards: Vec<Card>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HandResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compare_hands` is never used
[INFO] [stdout]    --> src/hand_evaluator.rs:234:8
[INFO] [stdout]     |
[INFO] [stdout] 234 | pub fn compare_hands(hand1: &[Card], hand2: &[Card], board: &[Card]) -> GtoResult<i32> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `category_from_score` is never used
[INFO] [stdout]    --> src/lookup_eval.rs:202:8
[INFO] [stdout]     |
[INFO] [stdout] 202 | pub fn category_from_score(score: u32) -> HandCategory {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `kickers_from_score` is never used
[INFO] [stdout]    --> src/lookup_eval.rs:218:8
[INFO] [stdout]     |
[INFO] [stdout] 218 | pub fn kickers_from_score(score: u32) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `reverse_implied_odds` is never used
[INFO] [stdout]   --> src/math_engine.rs:21:8
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub fn reverse_implied_odds(pot: f64, bet: f64, risk: f64) -> GtoResult<f64> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fold_equity` is never used
[INFO] [stdout]   --> src/math_engine.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn fold_equity(fold_pct: f64, pot: f64, bet: f64) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `effective_stack` is never used
[INFO] [stdout]    --> src/math_engine.rs:117:8
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub fn effective_stack(stacks: &[f64]) -> GtoResult<f64> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MultiwayBetAdvice` is never constructed
[INFO] [stdout]  --> src/multiway.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct MultiwayBetAdvice {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `multiway_cbet` is never used
[INFO] [stdout]   --> src/multiway.rs:20:8
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub fn multiway_cbet(num_players: usize, board_wetness: &str, position: &str) -> MultiwayBetAdvice {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `multiway_sizing` is never used
[INFO] [stdout]   --> src/multiway.rs:83:8
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub fn multiway_sizing(num_players: usize, board_wetness: &str) -> &'static str {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `POSITION_ORDER_6MAX` is never used
[INFO] [stdout]   --> src/play.rs:26:7
[INFO] [stdout]    |
[INFO] [stdout] 26 | const POSITION_ORDER_6MAX: &[(&str, u8)] = &[
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `POSITION_ORDER_9MAX` is never used
[INFO] [stdout]   --> src/play.rs:30:7
[INFO] [stdout]    |
[INFO] [stdout] 30 | const POSITION_ORDER_9MAX: &[(&str, u8)] = &[
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `position_order` is never used
[INFO] [stdout]   --> src/play.rs:35:4
[INFO] [stdout]    |
[INFO] [stdout] 35 | fn position_order(pos: &str, table_size: &str) -> u8 {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_in_position` is never used
[INFO] [stdout]   --> src/play.rs:44:8
[INFO] [stdout]    |
[INFO] [stdout] 44 | pub fn is_in_position(hero_pos: &str, villain_pos: &str, table_size: &str) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `explain_position` is never used
[INFO] [stdout]   --> src/play.rs:48:8
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub fn explain_position(pos: &str) -> &'static str {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `explain_hand_category` is never used
[INFO] [stdout]    --> src/play.rs:193:8
[INFO] [stdout]     |
[INFO] [stdout] 193 | pub fn explain_hand_category(category: HandCategory) -> &'static str {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `explain_board_texture` is never used
[INFO] [stdout]    --> src/play.rs:208:8
[INFO] [stdout]     |
[INFO] [stdout] 208 | pub fn explain_board_texture(wetness: Wetness) -> &'static str {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `explain_spr` is never used
[INFO] [stdout]    --> src/play.rs:216:8
[INFO] [stdout]     |
[INFO] [stdout] 216 | pub fn explain_spr(zone: SprZone) -> &'static str {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `explain_strength` is never used
[INFO] [stdout]    --> src/play.rs:224:8
[INFO] [stdout]     |
[INFO] [stdout] 224 | pub fn explain_strength(strength: &str) -> &'static str {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_sizing_pct` is never used
[INFO] [stdout]    --> src/play.rs:377:4
[INFO] [stdout]     |
[INFO] [stdout] 377 | fn parse_sizing_pct(sizing: &str) -> Option<f64> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `cards`, `is_monotone`, `is_two_tone`, `is_rainbow`, and `connectedness` are never read
[INFO] [stdout]   --> src/postflop.rs:42:9
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct BoardTexture {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 42 |     pub cards: Vec<Card>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub is_monotone: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 46 |     pub is_two_tone: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 47 |     pub is_rainbow: bool,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub connectedness: Connectedness,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `BoardTexture` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `should_cbet` is never read
[INFO] [stdout]    --> src/postflop.rs:226:9
[INFO] [stdout]     |
[INFO] [stdout] 225 | pub struct CBetRecommendation {
[INFO] [stdout]     |            ------------------ field in this struct
[INFO] [stdout] 226 |     pub should_cbet: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `hand_strength` is never read
[INFO] [stdout]    --> src/postflop.rs:376:9
[INFO] [stdout]     |
[INFO] [stdout] 372 | pub struct StreetStrategy {
[INFO] [stdout]     |            -------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 376 |     pub hand_strength: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `pot`, `stacks`, and `invested` are never read
[INFO] [stdout]   --> src/postflop_tree.rs:84:9
[INFO] [stdout]    |
[INFO] [stdout] 83 |     Chance {
[INFO] [stdout]    |     ------ fields in this variant
[INFO] [stdout] 84 |         pot: f64,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 85 |         stacks: [f64; 2],
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 86 |         invested: [f64; 2],
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TreeNode` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `count_action_nodes` and `count_terminal_nodes` are never used
[INFO] [stdout]    --> src/postflop_tree.rs:95:12
[INFO] [stdout]     |
[INFO] [stdout]  94 | impl TreeNode {
[INFO] [stdout]     | ------------- methods in this implementation
[INFO] [stdout]  95 |     pub fn count_action_nodes(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn count_terminal_nodes(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `default_river` is never used
[INFO] [stdout]    --> src/postflop_tree.rs:137:12
[INFO] [stdout]     |
[INFO] [stdout] 136 | impl TreeConfig {
[INFO] [stdout]     | --------------- associated function in this implementation
[INFO] [stdout] 137 |     pub fn default_river(starting_pot: f64, effective_stack: f64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `squeeze` and `fold` are never read
[INFO] [stdout]   --> src/preflop.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | struct SqueezeEntry {
[INFO] [stdout]    |        ------------ fields in this struct
[INFO] [stdout] 36 |     squeeze: Vec<String>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 37 |     fold: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SqueezeEntry` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `squeeze` is never read
[INFO] [stdout]   --> src/preflop.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | struct RangeData {
[INFO] [stdout]    |        --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 54 |     squeeze: HashMap<String, SqueezeEntry>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RangeData` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `fold` is never read
[INFO] [stdout]    --> src/preflop.rs:116:9
[INFO] [stdout]     |
[INFO] [stdout] 113 | pub struct VsRfiResult {
[INFO] [stdout]     |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fold: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `VsRfiResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `fold` is never read
[INFO] [stdout]    --> src/preflop.rs:154:9
[INFO] [stdout]     |
[INFO] [stdout] 151 | pub struct Vs3BetResult {
[INFO] [stdout]     |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 154 |     pub fold: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Vs3BetResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_squeeze_range` is never used
[INFO] [stdout]    --> src/preflop.rs:186:8
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub fn get_squeeze_range(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `hand` and `position` are never read
[INFO] [stdout]    --> src/preflop.rs:229:9
[INFO] [stdout]     |
[INFO] [stdout] 227 | pub struct PreflopAction {
[INFO] [stdout]     |            ------------- fields in this struct
[INFO] [stdout] 228 |     pub action: String,
[INFO] [stdout] 229 |     pub hand: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout] 230 |     pub position: String,
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `total_combos_strs` is never used
[INFO] [stdout]    --> src/ranges.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 174 | pub fn total_combos_strs(hands: &[&str]) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `range_pct_strs` is never used
[INFO] [stdout]    --> src/ranges.rs:182:8
[INFO] [stdout]     |
[INFO] [stdout] 182 | pub fn range_pct_strs(hands: &[&str]) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `blocked_combos` is never used
[INFO] [stdout]    --> src/ranges.rs:202:8
[INFO] [stdout]     |
[INFO] [stdout] 202 | pub fn blocked_combos(hand_notation: &str, hero_cards: &[Card]) -> GtoResult<u32> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stack_bb` is never read
[INFO] [stdout]   --> src/strategy.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct StrategyEngine {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] 17 |     preflop: Option<PreflopSolution>,
[INFO] [stdout] 18 |     pub stack_bb: f64,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `SolvedOnDemand` is never constructed
[INFO] [stdout]   --> src/strategy.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub enum StrategySource {
[INFO] [stdout]    |          -------------- variant in this enum
[INFO] [stdout] 29 |     Cached,
[INFO] [stdout] 30 |     SolvedOnDemand,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `StrategySource` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `FourBet` is never constructed
[INFO] [stdout]   --> src/strategy.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub enum PotType {
[INFO] [stdout]    |          ------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 42 |     FourBet,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PotType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 34.87s
[INFO] running `Command { std: "docker" "inspect" "40c8d2b71b2caedb6cd9b3a05398cd1e253fae83c844c3854a0003520f78164f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "40c8d2b71b2caedb6cd9b3a05398cd1e253fae83c844c3854a0003520f78164f", kill_on_drop: false }`
[INFO] [stdout] 40c8d2b71b2caedb6cd9b3a05398cd1e253fae83c844c3854a0003520f78164f
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+ec6f9a5b4413f74386267ef8efc93712c2ce6db6" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] d1b53ccc9c21ab2bd588e09ed0bc2ab9d2ea872aaa8bcc36a29b06a2498272e4
[INFO] running `Command { std: "docker" "start" "-a" "d1b53ccc9c21ab2bd588e09ed0bc2ab9d2ea872aaa8bcc36a29b06a2498272e4", kill_on_drop: false }`
[INFO] [stderr]    Compiling autocfg v1.5.0
[INFO] [stdout] warning: unused import: `Rank`
[INFO] [stdout]  --> src/card_encoding.rs:7:26
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::cards::{Card, Rank, Suit, ALL_RANKS, ALL_SUITS};
[INFO] [stdout]   |                          ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `break_even_pct` and `spr as calc_spr`
[INFO] [stdout]   --> src/play.rs:10:26
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::math_engine::{break_even_pct, spr as calc_spr, SprZone};
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::multiway::multiway_range_adjustment`
[INFO] [stdout]   --> src/play.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::multiway::multiway_range_adjustment;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `get_rfi_pct`
[INFO] [stdout]   --> src/play.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 |     get_rfi_pct, get_rfi_range, preflop_action, positions_for,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HAND_RANKING`
[INFO] [stdout]   --> src/play.rs:17:58
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::ranges::{blockers_remove, range_from_top_pct, HAND_RANKING};
[INFO] [stdout]    |                                                          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `detect_street`
[INFO] [stdout]   --> src/play.rs:19:22
[INFO] [stdout]    |
[INFO] [stdout] 19 |     default_villain, detect_street, format_strategy, StrategyEngine, StrategySource,
[INFO] [stdout]    |                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bb_amount`
[INFO] [stdout]    --> src/play.rs:455:9
[INFO] [stdout]     |
[INFO] [stdout] 455 |     let bb_amount = 1.0; // Use bb as unit
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bb_amount`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_solver_preflop`
[INFO] [stdout]    --> src/play.rs:495:9
[INFO] [stdout]     |
[INFO] [stdout] 495 |     let has_solver_preflop = show_preflop_advice(
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_solver_preflop`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `board_str` is never read
[INFO] [stdout]    --> src/play.rs:514:25
[INFO] [stdout]     |
[INFO] [stdout] 514 |     let mut board_str = String::new();
[INFO] [stdout]     |                         ^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 550 |         board_str = board.iter().map(|c| format!("{}", c)).collect();
[INFO] [stdout]     |         --------- `board_str` is overwritten here before the previous value is read
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_sizing_pct` is never used
[INFO] [stdout]    --> src/play.rs:377:4
[INFO] [stdout]     |
[INFO] [stdout] 377 | fn parse_sizing_pct(sizing: &str) -> Option<f64> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `fold` is never read
[INFO] [stdout]   --> src/preflop.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | struct SqueezeEntry {
[INFO] [stdout]    |        ------------ field in this struct
[INFO] [stdout] 36 |     squeeze: Vec<String>,
[INFO] [stdout] 37 |     fold: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SqueezeEntry` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Rank`
[INFO] [stdout]  --> src/card_encoding.rs:7:26
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::cards::{Card, Rank, Suit, ALL_RANKS, ALL_SUITS};
[INFO] [stdout]   |                          ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `break_even_pct` and `spr as calc_spr`
[INFO] [stdout]   --> src/play.rs:10:26
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::math_engine::{break_even_pct, spr as calc_spr, SprZone};
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::multiway::multiway_range_adjustment`
[INFO] [stdout]   --> src/play.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::multiway::multiway_range_adjustment;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `get_rfi_pct`
[INFO] [stdout]   --> src/play.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 |     get_rfi_pct, get_rfi_range, preflop_action, positions_for,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HAND_RANKING`
[INFO] [stdout]   --> src/play.rs:17:58
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::ranges::{blockers_remove, range_from_top_pct, HAND_RANKING};
[INFO] [stdout]    |                                                          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `detect_street`
[INFO] [stdout]   --> src/play.rs:19:22
[INFO] [stdout]    |
[INFO] [stdout] 19 |     default_villain, detect_street, format_strategy, StrategyEngine, StrategySource,
[INFO] [stdout]    |                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bb_amount`
[INFO] [stdout]    --> src/play.rs:455:9
[INFO] [stdout]     |
[INFO] [stdout] 455 |     let bb_amount = 1.0; // Use bb as unit
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bb_amount`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_solver_preflop`
[INFO] [stdout]    --> src/play.rs:495:9
[INFO] [stdout]     |
[INFO] [stdout] 495 |     let has_solver_preflop = show_preflop_advice(
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_solver_preflop`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `board_str` is never read
[INFO] [stdout]    --> src/play.rs:514:25
[INFO] [stdout]     |
[INFO] [stdout] 514 |     let mut board_str = String::new();
[INFO] [stdout]     |                         ^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 550 |         board_str = board.iter().map(|c| format!("{}", c)).collect();
[INFO] [stdout]     |         --------- `board_str` is overwritten here before the previous value is read
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cards_to_indices` is never used
[INFO] [stdout]   --> src/card_encoding.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn cards_to_indices(cards: &[Card]) -> Vec<u8> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SUITS_STR` is never used
[INFO] [stdout]   --> src/cards.rs:10:11
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub const SUITS_STR: &str = "shdc";
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Deck` is never constructed
[INFO] [stdout]    --> src/cards.rs:179:12
[INFO] [stdout]     |
[INFO] [stdout] 179 | pub struct Deck {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `shuffle`, `deal`, and `len` are never used
[INFO] [stdout]    --> src/cards.rs:184:12
[INFO] [stdout]     |
[INFO] [stdout] 183 | impl Deck {
[INFO] [stdout]     | --------- associated items in this implementation
[INFO] [stdout] 184 |     pub fn new(exclude: Option<&[Card]>) -> Deck {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     pub fn shuffle(&mut self) -> &mut Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     pub fn deal(&mut self, n: usize) -> GtoResult<Vec<Card>> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rank_index` is never used
[INFO] [stdout]    --> src/cards.rs:314:8
[INFO] [stdout]     |
[INFO] [stdout] 314 | pub fn rank_index(c: char) -> Option<usize> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `as_str` is never used
[INFO] [stdout]   --> src/cli.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl Situation {
[INFO] [stdout]    | -------------- method in this implementation
[INFO] [stdout] 50 |     fn as_str(&self) -> &'static str {
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run` is never used
[INFO] [stdout]    --> src/cli.rs:403:8
[INFO] [stdout]     |
[INFO] [stdout] 403 | pub fn run() {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `range_grid_strs` is never used
[INFO] [stdout]   --> src/display.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn range_grid_strs(hands_in_range: &[&str], title: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `odds_table` is never used
[INFO] [stdout]    --> src/display.rs:119:8
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub fn odds_table(pot: f64, bet: f64, equity_needed: f64, ev_value: Option<f64>) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_action` is never used
[INFO] [stdout]    --> src/display.rs:190:8
[INFO] [stdout]     |
[INFO] [stdout] 190 | pub fn print_action(action: &str, detail: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_section` is never used
[INFO] [stdout]    --> src/display.rs:199:8
[INFO] [stdout]     |
[INFO] [stdout] 199 | pub fn print_section(title: &str, content: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_success` is never used
[INFO] [stdout]    --> src/display.rs:208:8
[INFO] [stdout]     |
[INFO] [stdout] 208 | pub fn print_success(msg: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `NotEnoughDeck` and `RangeDataNotFound` are never constructed
[INFO] [stdout]   --> src/error.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout]  4 | pub enum GtoError {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 24 |     NotEnoughDeck { requested: usize, available: usize },
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     RangeDataNotFound(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GtoError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `num_nodes`, `total_entries`, and `memory_bytes` are never used
[INFO] [stdout]   --> src/flat_cfr.rs:64:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | impl FlatCfr {
[INFO] [stdout]    | ------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn num_nodes(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn total_entries(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn memory_bytes(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `cards` is never read
[INFO] [stdout]   --> src/hand_evaluator.rs:45:9
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct HandResult {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub cards: Vec<Card>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HandResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compare_hands` is never used
[INFO] [stdout]    --> src/hand_evaluator.rs:234:8
[INFO] [stdout]     |
[INFO] [stdout] 234 | pub fn compare_hands(hand1: &[Card], hand2: &[Card], board: &[Card]) -> GtoResult<i32> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `category_from_score` is never used
[INFO] [stdout]    --> src/lookup_eval.rs:202:8
[INFO] [stdout]     |
[INFO] [stdout] 202 | pub fn category_from_score(score: u32) -> HandCategory {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `kickers_from_score` is never used
[INFO] [stdout]    --> src/lookup_eval.rs:218:8
[INFO] [stdout]     |
[INFO] [stdout] 218 | pub fn kickers_from_score(score: u32) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `reverse_implied_odds` is never used
[INFO] [stdout]   --> src/math_engine.rs:21:8
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub fn reverse_implied_odds(pot: f64, bet: f64, risk: f64) -> GtoResult<f64> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fold_equity` is never used
[INFO] [stdout]   --> src/math_engine.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn fold_equity(fold_pct: f64, pot: f64, bet: f64) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `effective_stack` is never used
[INFO] [stdout]    --> src/math_engine.rs:117:8
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub fn effective_stack(stacks: &[f64]) -> GtoResult<f64> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MultiwayBetAdvice` is never constructed
[INFO] [stdout]  --> src/multiway.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct MultiwayBetAdvice {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `multiway_cbet` is never used
[INFO] [stdout]   --> src/multiway.rs:20:8
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub fn multiway_cbet(num_players: usize, board_wetness: &str, position: &str) -> MultiwayBetAdvice {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `multiway_sizing` is never used
[INFO] [stdout]   --> src/multiway.rs:83:8
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub fn multiway_sizing(num_players: usize, board_wetness: &str) -> &'static str {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `POSITION_ORDER_6MAX` is never used
[INFO] [stdout]   --> src/play.rs:26:7
[INFO] [stdout]    |
[INFO] [stdout] 26 | const POSITION_ORDER_6MAX: &[(&str, u8)] = &[
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `POSITION_ORDER_9MAX` is never used
[INFO] [stdout]   --> src/play.rs:30:7
[INFO] [stdout]    |
[INFO] [stdout] 30 | const POSITION_ORDER_9MAX: &[(&str, u8)] = &[
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `position_order` is never used
[INFO] [stdout]   --> src/play.rs:35:4
[INFO] [stdout]    |
[INFO] [stdout] 35 | fn position_order(pos: &str, table_size: &str) -> u8 {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_in_position` is never used
[INFO] [stdout]   --> src/play.rs:44:8
[INFO] [stdout]    |
[INFO] [stdout] 44 | pub fn is_in_position(hero_pos: &str, villain_pos: &str, table_size: &str) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `explain_position` is never used
[INFO] [stdout]   --> src/play.rs:48:8
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub fn explain_position(pos: &str) -> &'static str {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `explain_hand_category` is never used
[INFO] [stdout]    --> src/play.rs:193:8
[INFO] [stdout]     |
[INFO] [stdout] 193 | pub fn explain_hand_category(category: HandCategory) -> &'static str {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `explain_board_texture` is never used
[INFO] [stdout]    --> src/play.rs:208:8
[INFO] [stdout]     |
[INFO] [stdout] 208 | pub fn explain_board_texture(wetness: Wetness) -> &'static str {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `explain_spr` is never used
[INFO] [stdout]    --> src/play.rs:216:8
[INFO] [stdout]     |
[INFO] [stdout] 216 | pub fn explain_spr(zone: SprZone) -> &'static str {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `explain_strength` is never used
[INFO] [stdout]    --> src/play.rs:224:8
[INFO] [stdout]     |
[INFO] [stdout] 224 | pub fn explain_strength(strength: &str) -> &'static str {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_sizing_pct` is never used
[INFO] [stdout]    --> src/play.rs:377:4
[INFO] [stdout]     |
[INFO] [stdout] 377 | fn parse_sizing_pct(sizing: &str) -> Option<f64> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `cards`, `is_monotone`, `is_two_tone`, `is_rainbow`, and `connectedness` are never read
[INFO] [stdout]   --> src/postflop.rs:42:9
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct BoardTexture {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 42 |     pub cards: Vec<Card>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub is_monotone: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 46 |     pub is_two_tone: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 47 |     pub is_rainbow: bool,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub connectedness: Connectedness,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `BoardTexture` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `should_cbet` is never read
[INFO] [stdout]    --> src/postflop.rs:226:9
[INFO] [stdout]     |
[INFO] [stdout] 225 | pub struct CBetRecommendation {
[INFO] [stdout]     |            ------------------ field in this struct
[INFO] [stdout] 226 |     pub should_cbet: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `hand_strength` is never read
[INFO] [stdout]    --> src/postflop.rs:376:9
[INFO] [stdout]     |
[INFO] [stdout] 372 | pub struct StreetStrategy {
[INFO] [stdout]     |            -------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 376 |     pub hand_strength: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `pot`, `stacks`, and `invested` are never read
[INFO] [stdout]   --> src/postflop_tree.rs:84:9
[INFO] [stdout]    |
[INFO] [stdout] 83 |     Chance {
[INFO] [stdout]    |     ------ fields in this variant
[INFO] [stdout] 84 |         pot: f64,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 85 |         stacks: [f64; 2],
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 86 |         invested: [f64; 2],
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TreeNode` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `count_action_nodes` and `count_terminal_nodes` are never used
[INFO] [stdout]    --> src/postflop_tree.rs:95:12
[INFO] [stdout]     |
[INFO] [stdout]  94 | impl TreeNode {
[INFO] [stdout]     | ------------- methods in this implementation
[INFO] [stdout]  95 |     pub fn count_action_nodes(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn count_terminal_nodes(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `default_river` is never used
[INFO] [stdout]    --> src/postflop_tree.rs:137:12
[INFO] [stdout]     |
[INFO] [stdout] 136 | impl TreeConfig {
[INFO] [stdout]     | --------------- associated function in this implementation
[INFO] [stdout] 137 |     pub fn default_river(starting_pot: f64, effective_stack: f64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `squeeze` and `fold` are never read
[INFO] [stdout]   --> src/preflop.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | struct SqueezeEntry {
[INFO] [stdout]    |        ------------ fields in this struct
[INFO] [stdout] 36 |     squeeze: Vec<String>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 37 |     fold: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SqueezeEntry` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `squeeze` is never read
[INFO] [stdout]   --> src/preflop.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | struct RangeData {
[INFO] [stdout]    |        --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 54 |     squeeze: HashMap<String, SqueezeEntry>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RangeData` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `fold` is never read
[INFO] [stdout]    --> src/preflop.rs:116:9
[INFO] [stdout]     |
[INFO] [stdout] 113 | pub struct VsRfiResult {
[INFO] [stdout]     |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fold: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `VsRfiResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `fold` is never read
[INFO] [stdout]    --> src/preflop.rs:154:9
[INFO] [stdout]     |
[INFO] [stdout] 151 | pub struct Vs3BetResult {
[INFO] [stdout]     |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 154 |     pub fold: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Vs3BetResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_squeeze_range` is never used
[INFO] [stdout]    --> src/preflop.rs:186:8
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub fn get_squeeze_range(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `hand` and `position` are never read
[INFO] [stdout]    --> src/preflop.rs:229:9
[INFO] [stdout]     |
[INFO] [stdout] 227 | pub struct PreflopAction {
[INFO] [stdout]     |            ------------- fields in this struct
[INFO] [stdout] 228 |     pub action: String,
[INFO] [stdout] 229 |     pub hand: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout] 230 |     pub position: String,
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `total_combos_strs` is never used
[INFO] [stdout]    --> src/ranges.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 174 | pub fn total_combos_strs(hands: &[&str]) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `range_pct_strs` is never used
[INFO] [stdout]    --> src/ranges.rs:182:8
[INFO] [stdout]     |
[INFO] [stdout] 182 | pub fn range_pct_strs(hands: &[&str]) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `blocked_combos` is never used
[INFO] [stdout]    --> src/ranges.rs:202:8
[INFO] [stdout]     |
[INFO] [stdout] 202 | pub fn blocked_combos(hand_notation: &str, hero_cards: &[Card]) -> GtoResult<u32> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stack_bb` is never read
[INFO] [stdout]   --> src/strategy.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct StrategyEngine {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] 17 |     preflop: Option<PreflopSolution>,
[INFO] [stdout] 18 |     pub stack_bb: f64,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `SolvedOnDemand` is never constructed
[INFO] [stdout]   --> src/strategy.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub enum StrategySource {
[INFO] [stdout]    |          -------------- variant in this enum
[INFO] [stdout] 29 |     Cached,
[INFO] [stdout] 30 |     SolvedOnDemand,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `StrategySource` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `FourBet` is never constructed
[INFO] [stdout]   --> src/strategy.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub enum PotType {
[INFO] [stdout]    |          ------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 42 |     FourBet,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PotType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling approx v0.5.1
[INFO] [stderr]    Compiling gto-cli v1.0.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `cards_to_indices`
[INFO] [stdout]  --> tests/test_lookup_eval.rs:5:45
[INFO] [stdout]   |
[INFO] [stdout] 5 | use gto_cli::card_encoding::{card_to_index, cards_to_indices, index_to_card};
[INFO] [stdout]   |                                             ^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HandCategory`
[INFO] [stdout]  --> tests/test_lookup_eval.rs:7:61
[INFO] [stdout]   |
[INFO] [stdout] 7 | use gto_cli::hand_evaluator::{compare_hands, evaluate_hand, HandCategory};
[INFO] [stdout]   |                                                             ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `gto_cli::lookup_eval::evaluate_fast`
[INFO] [stdout]  --> tests/test_river_solver.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use gto_cli::lookup_eval::evaluate_fast;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Player`
[INFO] [stdout]  --> tests/test_river_solver.rs:6:42
[INFO] [stdout]   |
[INFO] [stdout] 6 | use gto_cli::postflop_tree::{build_tree, Player, TerminalType, TreeConfig, TreeNode};
[INFO] [stdout]   |                                          ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `gto_cli::error::GtoError`
[INFO] [stdout]  --> tests/test_cards.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use gto_cli::error::GtoError;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `break_even_pct` and `spr as calc_spr`
[INFO] [stdout]   --> src/play.rs:10:26
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::math_engine::{break_even_pct, spr as calc_spr, SprZone};
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::multiway::multiway_range_adjustment`
[INFO] [stdout]   --> src/play.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::multiway::multiway_range_adjustment;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `get_rfi_pct`
[INFO] [stdout]   --> src/play.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 |     get_rfi_pct, get_rfi_range, preflop_action, positions_for,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HAND_RANKING`
[INFO] [stdout]   --> src/play.rs:17:58
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::ranges::{blockers_remove, range_from_top_pct, HAND_RANKING};
[INFO] [stdout]    |                                                          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `detect_street`
[INFO] [stdout]   --> src/play.rs:19:22
[INFO] [stdout]    |
[INFO] [stdout] 19 |     default_villain, detect_street, format_strategy, StrategyEngine, StrategySource,
[INFO] [stdout]    |                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `break_even_pct` and `spr as calc_spr`
[INFO] [stdout]   --> src/play.rs:10:26
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::math_engine::{break_even_pct, spr as calc_spr, SprZone};
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::multiway::multiway_range_adjustment`
[INFO] [stdout]   --> src/play.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::multiway::multiway_range_adjustment;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `get_rfi_pct`
[INFO] [stdout]   --> src/play.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 |     get_rfi_pct, get_rfi_range, preflop_action, positions_for,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HAND_RANKING`
[INFO] [stdout]   --> src/play.rs:17:58
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::ranges::{blockers_remove, range_from_top_pct, HAND_RANKING};
[INFO] [stdout]    |                                                          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `detect_street`
[INFO] [stdout]   --> src/play.rs:19:22
[INFO] [stdout]    |
[INFO] [stdout] 19 |     default_villain, detect_street, format_strategy, StrategyEngine, StrategySource,
[INFO] [stdout]    |                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `b`
[INFO] [stdout]    --> src/flop_enumerator.rs:277:13
[INFO] [stdout]     |
[INFO] [stdout] 277 |         let b = canonicalize(&[(11, 0), (7, 1), (2, 0)]); // Ks9h4s
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_b`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bb_amount`
[INFO] [stdout]    --> src/play.rs:455:9
[INFO] [stdout]     |
[INFO] [stdout] 455 |     let bb_amount = 1.0; // Use bb as unit
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bb_amount`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_solver_preflop`
[INFO] [stdout]    --> src/play.rs:495:9
[INFO] [stdout]     |
[INFO] [stdout] 495 |     let has_solver_preflop = show_preflop_advice(
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_solver_preflop`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `board_str` is never read
[INFO] [stdout]    --> src/play.rs:514:25
[INFO] [stdout]     |
[INFO] [stdout] 514 |     let mut board_str = String::new();
[INFO] [stdout]     |                         ^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 550 |         board_str = board.iter().map(|c| format!("{}", c)).collect();
[INFO] [stdout]     |         --------- `board_str` is overwritten here before the previous value is read
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `fold` is never read
[INFO] [stdout]   --> src/preflop.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | struct SqueezeEntry {
[INFO] [stdout]    |        ------------ field in this struct
[INFO] [stdout] 36 |     squeeze: Vec<String>,
[INFO] [stdout] 37 |     fold: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SqueezeEntry` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `b`
[INFO] [stdout]    --> src/flop_enumerator.rs:277:13
[INFO] [stdout]     |
[INFO] [stdout] 277 |         let b = canonicalize(&[(11, 0), (7, 1), (2, 0)]); // Ks9h4s
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_b`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bb_amount`
[INFO] [stdout]    --> src/play.rs:455:9
[INFO] [stdout]     |
[INFO] [stdout] 455 |     let bb_amount = 1.0; // Use bb as unit
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bb_amount`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_solver_preflop`
[INFO] [stdout]    --> src/play.rs:495:9
[INFO] [stdout]     |
[INFO] [stdout] 495 |     let has_solver_preflop = show_preflop_advice(
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_solver_preflop`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `board_str` is never read
[INFO] [stdout]    --> src/play.rs:514:25
[INFO] [stdout]     |
[INFO] [stdout] 514 |     let mut board_str = String::new();
[INFO] [stdout]     |                         ^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 550 |         board_str = board.iter().map(|c| format!("{}", c)).collect();
[INFO] [stdout]     |         --------- `board_str` is overwritten here before the previous value is read
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cards_to_indices` is never used
[INFO] [stdout]   --> src/card_encoding.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn cards_to_indices(cards: &[Card]) -> Vec<u8> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SUITS_STR` is never used
[INFO] [stdout]   --> src/cards.rs:10:11
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub const SUITS_STR: &str = "shdc";
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Deck` is never constructed
[INFO] [stdout]    --> src/cards.rs:179:12
[INFO] [stdout]     |
[INFO] [stdout] 179 | pub struct Deck {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `shuffle`, `deal`, and `len` are never used
[INFO] [stdout]    --> src/cards.rs:184:12
[INFO] [stdout]     |
[INFO] [stdout] 183 | impl Deck {
[INFO] [stdout]     | --------- associated items in this implementation
[INFO] [stdout] 184 |     pub fn new(exclude: Option<&[Card]>) -> Deck {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     pub fn shuffle(&mut self) -> &mut Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     pub fn deal(&mut self, n: usize) -> GtoResult<Vec<Card>> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rank_index` is never used
[INFO] [stdout]    --> src/cards.rs:314:8
[INFO] [stdout]     |
[INFO] [stdout] 314 | pub fn rank_index(c: char) -> Option<usize> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `as_str` is never used
[INFO] [stdout]   --> src/cli.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl Situation {
[INFO] [stdout]    | -------------- method in this implementation
[INFO] [stdout] 50 |     fn as_str(&self) -> &'static str {
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run` is never used
[INFO] [stdout]    --> src/cli.rs:403:8
[INFO] [stdout]     |
[INFO] [stdout] 403 | pub fn run() {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `range_grid_strs` is never used
[INFO] [stdout]   --> src/display.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn range_grid_strs(hands_in_range: &[&str], title: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `odds_table` is never used
[INFO] [stdout]    --> src/display.rs:119:8
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub fn odds_table(pot: f64, bet: f64, equity_needed: f64, ev_value: Option<f64>) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_action` is never used
[INFO] [stdout]    --> src/display.rs:190:8
[INFO] [stdout]     |
[INFO] [stdout] 190 | pub fn print_action(action: &str, detail: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_section` is never used
[INFO] [stdout]    --> src/display.rs:199:8
[INFO] [stdout]     |
[INFO] [stdout] 199 | pub fn print_section(title: &str, content: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_success` is never used
[INFO] [stdout]    --> src/display.rs:208:8
[INFO] [stdout]     |
[INFO] [stdout] 208 | pub fn print_success(msg: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `NotEnoughDeck` and `RangeDataNotFound` are never constructed
[INFO] [stdout]   --> src/error.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout]  4 | pub enum GtoError {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 24 |     NotEnoughDeck { requested: usize, available: usize },
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     RangeDataNotFound(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GtoError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `cards` is never read
[INFO] [stdout]   --> src/hand_evaluator.rs:45:9
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct HandResult {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub cards: Vec<Card>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HandResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compare_hands` is never used
[INFO] [stdout]    --> src/hand_evaluator.rs:234:8
[INFO] [stdout]     |
[INFO] [stdout] 234 | pub fn compare_hands(hand1: &[Card], hand2: &[Card], board: &[Card]) -> GtoResult<i32> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `reverse_implied_odds` is never used
[INFO] [stdout]   --> src/math_engine.rs:21:8
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub fn reverse_implied_odds(pot: f64, bet: f64, risk: f64) -> GtoResult<f64> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fold_equity` is never used
[INFO] [stdout]   --> src/math_engine.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn fold_equity(fold_pct: f64, pot: f64, bet: f64) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `effective_stack` is never used
[INFO] [stdout]    --> src/math_engine.rs:117:8
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub fn effective_stack(stacks: &[f64]) -> GtoResult<f64> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MultiwayBetAdvice` is never constructed
[INFO] [stdout]  --> src/multiway.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct MultiwayBetAdvice {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `multiway_cbet` is never used
[INFO] [stdout]   --> src/multiway.rs:20:8
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub fn multiway_cbet(num_players: usize, board_wetness: &str, position: &str) -> MultiwayBetAdvice {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `multiway_sizing` is never used
[INFO] [stdout]   --> src/multiway.rs:83:8
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub fn multiway_sizing(num_players: usize, board_wetness: &str) -> &'static str {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `explain_strength` is never used
[INFO] [stdout]    --> src/play.rs:224:8
[INFO] [stdout]     |
[INFO] [stdout] 224 | pub fn explain_strength(strength: &str) -> &'static str {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `cards`, `is_monotone`, `is_two_tone`, `is_rainbow`, and `connectedness` are never read
[INFO] [stdout]   --> src/postflop.rs:42:9
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct BoardTexture {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 42 |     pub cards: Vec<Card>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub is_monotone: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 46 |     pub is_two_tone: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 47 |     pub is_rainbow: bool,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub connectedness: Connectedness,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `BoardTexture` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `should_cbet` is never read
[INFO] [stdout]    --> src/postflop.rs:226:9
[INFO] [stdout]     |
[INFO] [stdout] 225 | pub struct CBetRecommendation {
[INFO] [stdout]     |            ------------------ field in this struct
[INFO] [stdout] 226 |     pub should_cbet: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `hand_strength` is never read
[INFO] [stdout]    --> src/postflop.rs:376:9
[INFO] [stdout]     |
[INFO] [stdout] 372 | pub struct StreetStrategy {
[INFO] [stdout]     |            -------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 376 |     pub hand_strength: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `pot`, `stacks`, and `invested` are never read
[INFO] [stdout]   --> src/postflop_tree.rs:84:9
[INFO] [stdout]    |
[INFO] [stdout] 83 |     Chance {
[INFO] [stdout]    |     ------ fields in this variant
[INFO] [stdout] 84 |         pot: f64,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 85 |         stacks: [f64; 2],
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 86 |         invested: [f64; 2],
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TreeNode` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `squeeze` and `fold` are never read
[INFO] [stdout]   --> src/preflop.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | struct SqueezeEntry {
[INFO] [stdout]    |        ------------ fields in this struct
[INFO] [stdout] 36 |     squeeze: Vec<String>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 37 |     fold: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SqueezeEntry` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `squeeze` is never read
[INFO] [stdout]   --> src/preflop.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | struct RangeData {
[INFO] [stdout]    |        --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 54 |     squeeze: HashMap<String, SqueezeEntry>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RangeData` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `fold` is never read
[INFO] [stdout]    --> src/preflop.rs:116:9
[INFO] [stdout]     |
[INFO] [stdout] 113 | pub struct VsRfiResult {
[INFO] [stdout]     |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fold: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `VsRfiResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `fold` is never read
[INFO] [stdout]    --> src/preflop.rs:154:9
[INFO] [stdout]     |
[INFO] [stdout] 151 | pub struct Vs3BetResult {
[INFO] [stdout]     |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 154 |     pub fold: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Vs3BetResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_squeeze_range` is never used
[INFO] [stdout]    --> src/preflop.rs:186:8
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub fn get_squeeze_range(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `hand` and `position` are never read
[INFO] [stdout]    --> src/preflop.rs:229:9
[INFO] [stdout]     |
[INFO] [stdout] 227 | pub struct PreflopAction {
[INFO] [stdout]     |            ------------- fields in this struct
[INFO] [stdout] 228 |     pub action: String,
[INFO] [stdout] 229 |     pub hand: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout] 230 |     pub position: String,
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `total_combos_strs` is never used
[INFO] [stdout]    --> src/ranges.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 174 | pub fn total_combos_strs(hands: &[&str]) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `range_pct_strs` is never used
[INFO] [stdout]    --> src/ranges.rs:182:8
[INFO] [stdout]     |
[INFO] [stdout] 182 | pub fn range_pct_strs(hands: &[&str]) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `blocked_combos` is never used
[INFO] [stdout]    --> src/ranges.rs:202:8
[INFO] [stdout]     |
[INFO] [stdout] 202 | pub fn blocked_combos(hand_notation: &str, hero_cards: &[Card]) -> GtoResult<u32> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stack_bb` is never read
[INFO] [stdout]   --> src/strategy.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct StrategyEngine {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] 17 |     preflop: Option<PreflopSolution>,
[INFO] [stdout] 18 |     pub stack_bb: f64,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `SolvedOnDemand` is never constructed
[INFO] [stdout]   --> src/strategy.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub enum StrategySource {
[INFO] [stdout]    |          -------------- variant in this enum
[INFO] [stdout] 29 |     Cached,
[INFO] [stdout] 30 |     SolvedOnDemand,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `StrategySource` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `FourBet` is never constructed
[INFO] [stdout]   --> src/strategy.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub enum PotType {
[INFO] [stdout]    |          ------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 42 |     FourBet,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PotType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 15.18s
[INFO] running `Command { std: "docker" "inspect" "d1b53ccc9c21ab2bd588e09ed0bc2ab9d2ea872aaa8bcc36a29b06a2498272e4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "d1b53ccc9c21ab2bd588e09ed0bc2ab9d2ea872aaa8bcc36a29b06a2498272e4", kill_on_drop: false }`
[INFO] [stdout] d1b53ccc9c21ab2bd588e09ed0bc2ab9d2ea872aaa8bcc36a29b06a2498272e4
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+ec6f9a5b4413f74386267ef8efc93712c2ce6db6" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 6accf53872c14f63041f1c77fe67e6c47ebac928d7a1036ce06e4eaf13e0cf18
[INFO] running `Command { std: "docker" "start" "-a" "6accf53872c14f63041f1c77fe67e6c47ebac928d7a1036ce06e4eaf13e0cf18", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `Rank`
[INFO] [stderr]  --> src/card_encoding.rs:7:26
[INFO] [stderr]   |
[INFO] [stderr] 7 | use crate::cards::{Card, Rank, Suit, ALL_RANKS, ALL_SUITS};
[INFO] [stderr]   |                          ^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `break_even_pct` and `spr as calc_spr`
[INFO] [stderr]   --> src/play.rs:10:26
[INFO] [stderr]    |
[INFO] [stderr] 10 | use crate::math_engine::{break_even_pct, spr as calc_spr, SprZone};
[INFO] [stderr]    |                          ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::multiway::multiway_range_adjustment`
[INFO] [stderr]   --> src/play.rs:11:5
[INFO] [stderr]    |
[INFO] [stderr] 11 | use crate::multiway::multiway_range_adjustment;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `get_rfi_pct`
[INFO] [stderr]   --> src/play.rs:14:5
[INFO] [stderr]    |
[INFO] [stderr] 14 |     get_rfi_pct, get_rfi_range, preflop_action, positions_for,
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `HAND_RANKING`
[INFO] [stderr]   --> src/play.rs:17:58
[INFO] [stderr]    |
[INFO] [stderr] 17 | use crate::ranges::{blockers_remove, range_from_top_pct, HAND_RANKING};
[INFO] [stderr]    |                                                          ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `detect_street`
[INFO] [stderr]   --> src/play.rs:19:22
[INFO] [stderr]    |
[INFO] [stderr] 19 |     default_villain, detect_street, format_strategy, StrategyEngine, StrategySource,
[INFO] [stderr]    |                      ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `bb_amount`
[INFO] [stderr]    --> src/play.rs:455:9
[INFO] [stderr]     |
[INFO] [stderr] 455 |     let bb_amount = 1.0; // Use bb as unit
[INFO] [stderr]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bb_amount`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `has_solver_preflop`
[INFO] [stderr]    --> src/play.rs:495:9
[INFO] [stderr]     |
[INFO] [stderr] 495 |     let has_solver_preflop = show_preflop_advice(
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_solver_preflop`
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `board_str` is never read
[INFO] [stderr]    --> src/play.rs:514:25
[INFO] [stderr]     |
[INFO] [stderr] 514 |     let mut board_str = String::new();
[INFO] [stderr]     |                         ^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stderr] ...
[INFO] [stderr] 550 |         board_str = board.iter().map(|c| format!("{}", c)).collect();
[INFO] [stderr]     |         --------- `board_str` is overwritten here before the previous value is read
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: function `parse_sizing_pct` is never used
[INFO] [stderr]    --> src/play.rs:377:4
[INFO] [stderr]     |
[INFO] [stderr] 377 | fn parse_sizing_pct(sizing: &str) -> Option<f64> {
[INFO] [stderr]     |    ^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: field `fold` is never read
[INFO] [stderr]   --> src/preflop.rs:37:5
[INFO] [stderr]    |
[INFO] [stderr] 35 | struct SqueezeEntry {
[INFO] [stderr]    |        ------------ field in this struct
[INFO] [stderr] 36 |     squeeze: Vec<String>,
[INFO] [stderr] 37 |     fold: String,
[INFO] [stderr]    |     ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `SqueezeEntry` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `break_even_pct` and `spr as calc_spr`
[INFO] [stderr]   --> src/play.rs:10:26
[INFO] [stderr]    |
[INFO] [stderr] 10 | use crate::math_engine::{break_even_pct, spr as calc_spr, SprZone};
[INFO] [stderr]    |                          ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `b`
[INFO] [stderr]    --> src/flop_enumerator.rs:277:13
[INFO] [stderr]     |
[INFO] [stderr] 277 |         let b = canonicalize(&[(11, 0), (7, 1), (2, 0)]); // Ks9h4s
[INFO] [stderr]     |             ^ help: if this is intentional, prefix it with an underscore: `_b`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `bb_amount`
[INFO] [stderr]    --> src/play.rs:455:9
[INFO] [stderr]     |
[INFO] [stderr] 455 |     let bb_amount = 1.0; // Use bb as unit
[INFO] [stderr]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bb_amount`
[INFO] [stderr] 
[INFO] [stderr] warning: field `fold` is never read
[INFO] [stderr]   --> src/preflop.rs:37:5
[INFO] [stderr]    |
[INFO] [stderr] 35 | struct SqueezeEntry {
[INFO] [stderr]    |        ------------ field in this struct
[INFO] [stderr] 36 |     squeeze: Vec<String>,
[INFO] [stderr] 37 |     fold: String,
[INFO] [stderr]    |     ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `SqueezeEntry` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: `gto-cli` (lib) generated 11 warnings (run `cargo fix --lib -p gto-cli` to apply 8 suggestions)
[INFO] [stderr] warning: `gto-cli` (lib test) generated 10 warnings (6 duplicates) (run `cargo fix --lib -p gto-cli --tests` to apply 3 suggestions)
[INFO] [stderr] warning: unused import: `gto_cli::lookup_eval::evaluate_fast`
[INFO] [stderr]  --> tests/test_river_solver.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 | use gto_cli::lookup_eval::evaluate_fast;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Player`
[INFO] [stderr]  --> tests/test_river_solver.rs:6:42
[INFO] [stderr]   |
[INFO] [stderr] 6 | use gto_cli::postflop_tree::{build_tree, Player, TerminalType, TreeConfig, TreeNode};
[INFO] [stderr]   |                                          ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `gto_cli::error::GtoError`
[INFO] [stderr]  --> tests/test_cards.rs:2:5
[INFO] [stderr]   |
[INFO] [stderr] 2 | use gto_cli::error::GtoError;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: function `cards_to_indices` is never used
[INFO] [stderr]   --> src/card_encoding.rs:24:8
[INFO] [stderr]    |
[INFO] [stderr] 24 | pub fn cards_to_indices(cards: &[Card]) -> Vec<u8> {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: constant `SUITS_STR` is never used
[INFO] [stderr]   --> src/cards.rs:10:11
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub const SUITS_STR: &str = "shdc";
[INFO] [stderr]    |           ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Deck` is never constructed
[INFO] [stderr]    --> src/cards.rs:179:12
[INFO] [stderr]     |
[INFO] [stderr] 179 | pub struct Deck {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `shuffle`, `deal`, and `len` are never used
[INFO] [stderr]    --> src/cards.rs:184:12
[INFO] [stderr]     |
[INFO] [stderr] 183 | impl Deck {
[INFO] [stderr]     | --------- associated items in this implementation
[INFO] [stderr] 184 |     pub fn new(exclude: Option<&[Card]>) -> Deck {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 196 |     pub fn shuffle(&mut self) -> &mut Self {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 202 |     pub fn deal(&mut self, n: usize) -> GtoResult<Vec<Card>> {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 213 |     pub fn len(&self) -> usize {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `rank_index` is never used
[INFO] [stderr]    --> src/cards.rs:314:8
[INFO] [stderr]     |
[INFO] [stderr] 314 | pub fn rank_index(c: char) -> Option<usize> {
[INFO] [stderr]     |        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `as_str` is never used
[INFO] [stderr]   --> src/cli.rs:50:8
[INFO] [stderr]    |
[INFO] [stderr] 49 | impl Situation {
[INFO] [stderr]    | -------------- method in this implementation
[INFO] [stderr] 50 |     fn as_str(&self) -> &'static str {
[INFO] [stderr]    |        ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `run` is never used
[INFO] [stderr]    --> src/cli.rs:403:8
[INFO] [stderr]     |
[INFO] [stderr] 403 | pub fn run() {
[INFO] [stderr]     |        ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `range_grid_strs` is never used
[INFO] [stderr]   --> src/display.rs:46:8
[INFO] [stderr]    |
[INFO] [stderr] 46 | pub fn range_grid_strs(hands_in_range: &[&str], title: &str) -> String {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `odds_table` is never used
[INFO] [stderr]    --> src/display.rs:119:8
[INFO] [stderr]     |
[INFO] [stderr] 119 | pub fn odds_table(pot: f64, bet: f64, equity_needed: f64, ev_value: Option<f64>) -> String {
[INFO] [stderr]     |        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `print_action` is never used
[INFO] [stderr]    --> src/display.rs:190:8
[INFO] [stderr]     |
[INFO] [stderr] 190 | pub fn print_action(action: &str, detail: &str) {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `print_section` is never used
[INFO] [stderr]    --> src/display.rs:199:8
[INFO] [stderr]     |
[INFO] [stderr] 199 | pub fn print_section(title: &str, content: &str) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `print_success` is never used
[INFO] [stderr]    --> src/display.rs:208:8
[INFO] [stderr]     |
[INFO] [stderr] 208 | pub fn print_success(msg: &str) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variants `NotEnoughDeck` and `RangeDataNotFound` are never constructed
[INFO] [stderr]   --> src/error.rs:24:5
[INFO] [stderr]    |
[INFO] [stderr]  4 | pub enum GtoError {
[INFO] [stderr]    |          -------- variants in this enum
[INFO] [stderr] ...
[INFO] [stderr] 24 |     NotEnoughDeck { requested: usize, available: usize },
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 36 |     RangeDataNotFound(String),
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `GtoError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `num_nodes`, `total_entries`, and `memory_bytes` are never used
[INFO] [stderr]   --> src/flat_cfr.rs:64:12
[INFO] [stderr]    |
[INFO] [stderr] 34 | impl FlatCfr {
[INFO] [stderr]    | ------------ methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 64 |     pub fn num_nodes(&self) -> usize {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 75 |     pub fn total_entries(&self) -> usize {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 80 |     pub fn memory_bytes(&self) -> usize {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `cards` is never read
[INFO] [stderr]   --> src/hand_evaluator.rs:45:9
[INFO] [stderr]    |
[INFO] [stderr] 41 | pub struct HandResult {
[INFO] [stderr]    |            ---------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 45 |     pub cards: Vec<Card>,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `HandResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: function `compare_hands` is never used
[INFO] [stderr]    --> src/hand_evaluator.rs:234:8
[INFO] [stderr]     |
[INFO] [stderr] 234 | pub fn compare_hands(hand1: &[Card], hand2: &[Card], board: &[Card]) -> GtoResult<i32> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `category_from_score` is never used
[INFO] [stderr]    --> src/lookup_eval.rs:202:8
[INFO] [stderr]     |
[INFO] [stderr] 202 | pub fn category_from_score(score: u32) -> HandCategory {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `kickers_from_score` is never used
[INFO] [stderr]    --> src/lookup_eval.rs:218:8
[INFO] [stderr]     |
[INFO] [stderr] 218 | pub fn kickers_from_score(score: u32) -> Vec<u8> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `reverse_implied_odds` is never used
[INFO] [stderr]   --> src/math_engine.rs:21:8
[INFO] [stderr]    |
[INFO] [stderr] 21 | pub fn reverse_implied_odds(pot: f64, bet: f64, risk: f64) -> GtoResult<f64> {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `fold_equity` is never used
[INFO] [stderr]   --> src/math_engine.rs:40:8
[INFO] [stderr]    |
[INFO] [stderr] 40 | pub fn fold_equity(fold_pct: f64, pot: f64, bet: f64) -> f64 {
[INFO] [stderr]    |        ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `effective_stack` is never used
[INFO] [stderr]    --> src/math_engine.rs:117:8
[INFO] [stderr]     |
[INFO] [stderr] 117 | pub fn effective_stack(stacks: &[f64]) -> GtoResult<f64> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `MultiwayBetAdvice` is never constructed
[INFO] [stderr]  --> src/multiway.rs:3:12
[INFO] [stderr]   |
[INFO] [stderr] 3 | pub struct MultiwayBetAdvice {
[INFO] [stderr]   |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `multiway_cbet` is never used
[INFO] [stderr]   --> src/multiway.rs:20:8
[INFO] [stderr]    |
[INFO] [stderr] 20 | pub fn multiway_cbet(num_players: usize, board_wetness: &str, position: &str) -> MultiwayBetAdvice {
[INFO] [stderr]    |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `multiway_sizing` is never used
[INFO] [stderr]   --> src/multiway.rs:83:8
[INFO] [stderr]    |
[INFO] [stderr] 83 | pub fn multiway_sizing(num_players: usize, board_wetness: &str) -> &'static str {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `POSITION_ORDER_6MAX` is never used
[INFO] [stderr]   --> src/play.rs:26:7
[INFO] [stderr]    |
[INFO] [stderr] 26 | const POSITION_ORDER_6MAX: &[(&str, u8)] = &[
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `POSITION_ORDER_9MAX` is never used
[INFO] [stderr]   --> src/play.rs:30:7
[INFO] [stderr]    |
[INFO] [stderr] 30 | const POSITION_ORDER_9MAX: &[(&str, u8)] = &[
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `position_order` is never used
[INFO] [stderr]   --> src/play.rs:35:4
[INFO] [stderr]    |
[INFO] [stderr] 35 | fn position_order(pos: &str, table_size: &str) -> u8 {
[INFO] [stderr]    |    ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_in_position` is never used
[INFO] [stderr]   --> src/play.rs:44:8
[INFO] [stderr]    |
[INFO] [stderr] 44 | pub fn is_in_position(hero_pos: &str, villain_pos: &str, table_size: &str) -> bool {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `explain_position` is never used
[INFO] [stderr]   --> src/play.rs:48:8
[INFO] [stderr]    |
[INFO] [stderr] 48 | pub fn explain_position(pos: &str) -> &'static str {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `explain_hand_category` is never used
[INFO] [stderr]    --> src/play.rs:193:8
[INFO] [stderr]     |
[INFO] [stderr] 193 | pub fn explain_hand_category(category: HandCategory) -> &'static str {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `explain_board_texture` is never used
[INFO] [stderr]    --> src/play.rs:208:8
[INFO] [stderr]     |
[INFO] [stderr] 208 | pub fn explain_board_texture(wetness: Wetness) -> &'static str {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `explain_spr` is never used
[INFO] [stderr]    --> src/play.rs:216:8
[INFO] [stderr]     |
[INFO] [stderr] 216 | pub fn explain_spr(zone: SprZone) -> &'static str {
[INFO] [stderr]     |        ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `explain_strength` is never used
[INFO] [stderr]    --> src/play.rs:224:8
[INFO] [stderr]     |
[INFO] [stderr] 224 | pub fn explain_strength(strength: &str) -> &'static str {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `parse_sizing_pct` is never used
[INFO] [stderr]    --> src/play.rs:377:4
[INFO] [stderr]     |
[INFO] [stderr] 377 | fn parse_sizing_pct(sizing: &str) -> Option<f64> {
[INFO] [stderr]     |    ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `cards`, `is_monotone`, `is_two_tone`, `is_rainbow`, and `connectedness` are never read
[INFO] [stderr]   --> src/postflop.rs:42:9
[INFO] [stderr]    |
[INFO] [stderr] 41 | pub struct BoardTexture {
[INFO] [stderr]    |            ------------ fields in this struct
[INFO] [stderr] 42 |     pub cards: Vec<Card>,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 45 |     pub is_monotone: bool,
[INFO] [stderr]    |         ^^^^^^^^^^^
[INFO] [stderr] 46 |     pub is_two_tone: bool,
[INFO] [stderr]    |         ^^^^^^^^^^^
[INFO] [stderr] 47 |     pub is_rainbow: bool,
[INFO] [stderr]    |         ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 50 |     pub connectedness: Connectedness,
[INFO] [stderr]    |         ^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `BoardTexture` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `should_cbet` is never read
[INFO] [stderr]    --> src/postflop.rs:226:9
[INFO] [stderr]     |
[INFO] [stderr] 225 | pub struct CBetRecommendation {
[INFO] [stderr]     |            ------------------ field in this struct
[INFO] [stderr] 226 |     pub should_cbet: bool,
[INFO] [stderr]     |         ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `hand_strength` is never read
[INFO] [stderr]    --> src/postflop.rs:376:9
[INFO] [stderr]     |
[INFO] [stderr] 372 | pub struct StreetStrategy {
[INFO] [stderr]     |            -------------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 376 |     pub hand_strength: String,
[INFO] [stderr]     |         ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `pot`, `stacks`, and `invested` are never read
[INFO] [stderr]   --> src/postflop_tree.rs:84:9
[INFO] [stderr]    |
[INFO] [stderr] 83 |     Chance {
[INFO] [stderr]    |     ------ fields in this variant
[INFO] [stderr] 84 |         pot: f64,
[INFO] [stderr]    |         ^^^
[INFO] [stderr] 85 |         stacks: [f64; 2],
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr] 86 |         invested: [f64; 2],
[INFO] [stderr]    |         ^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `TreeNode` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `count_action_nodes` and `count_terminal_nodes` are never used
[INFO] [stderr]    --> src/postflop_tree.rs:95:12
[INFO] [stderr]     |
[INFO] [stderr]  94 | impl TreeNode {
[INFO] [stderr]     | ------------- methods in this implementation
[INFO] [stderr]  95 |     pub fn count_action_nodes(&self) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 107 |     pub fn count_terminal_nodes(&self) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `default_river` is never used
[INFO] [stderr]    --> src/postflop_tree.rs:137:12
[INFO] [stderr]     |
[INFO] [stderr] 136 | impl TreeConfig {
[INFO] [stderr]     | --------------- associated function in this implementation
[INFO] [stderr] 137 |     pub fn default_river(starting_pot: f64, effective_stack: f64) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `squeeze` and `fold` are never read
[INFO] [stderr]   --> src/preflop.rs:36:5
[INFO] [stderr]    |
[INFO] [stderr] 35 | struct SqueezeEntry {
[INFO] [stderr]    |        ------------ fields in this struct
[INFO] [stderr] 36 |     squeeze: Vec<String>,
[INFO] [stderr]    |     ^^^^^^^
[INFO] [stderr] 37 |     fold: String,
[INFO] [stderr]    |     ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `SqueezeEntry` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `squeeze` is never read
[INFO] [stderr]   --> src/preflop.rs:54:5
[INFO] [stderr]    |
[INFO] [stderr] 48 | struct RangeData {
[INFO] [stderr]    |        --------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 54 |     squeeze: HashMap<String, SqueezeEntry>,
[INFO] [stderr]    |     ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `RangeData` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `fold` is never read
[INFO] [stderr]    --> src/preflop.rs:116:9
[INFO] [stderr]     |
[INFO] [stderr] 113 | pub struct VsRfiResult {
[INFO] [stderr]     |            ----------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 116 |     pub fold: String,
[INFO] [stderr]     |         ^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `VsRfiResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `fold` is never read
[INFO] [stderr]    --> src/preflop.rs:154:9
[INFO] [stderr]     |
[INFO] [stderr] 151 | pub struct Vs3BetResult {
[INFO] [stderr]     |            ------------ field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 154 |     pub fold: String,
[INFO] [stderr]     |         ^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `Vs3BetResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_squeeze_range` is never used
[INFO] [stderr]    --> src/preflop.rs:186:8
[INFO] [stderr]     |
[INFO] [stderr] 186 | pub fn get_squeeze_range(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `hand` and `position` are never read
[INFO] [stderr]    --> src/preflop.rs:229:9
[INFO] [stderr]     |
[INFO] [stderr] 227 | pub struct PreflopAction {
[INFO] [stderr]     |            ------------- fields in this struct
[INFO] [stderr] 228 |     pub action: String,
[INFO] [stderr] 229 |     pub hand: String,
[INFO] [stderr]     |         ^^^^
[INFO] [stderr] 230 |     pub position: String,
[INFO] [stderr]     |         ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `total_combos_strs` is never used
[INFO] [stderr]    --> src/ranges.rs:174:8
[INFO] [stderr]     |
[INFO] [stderr] 174 | pub fn total_combos_strs(hands: &[&str]) -> u32 {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `range_pct_strs` is never used
[INFO] [stderr]    --> src/ranges.rs:182:8
[INFO] [stderr]     |
[INFO] [stderr] 182 | pub fn range_pct_strs(hands: &[&str]) -> f64 {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `blocked_combos` is never used
[INFO] [stderr]    --> src/ranges.rs:202:8
[INFO] [stderr]     |
[INFO] [stderr] 202 | pub fn blocked_combos(hand_notation: &str, hero_cards: &[Card]) -> GtoResult<u32> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `stack_bb` is never read
[INFO] [stderr]   --> src/strategy.rs:18:9
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub struct StrategyEngine {
[INFO] [stderr]    |            -------------- field in this struct
[INFO] [stderr] 17 |     preflop: Option<PreflopSolution>,
[INFO] [stderr] 18 |     pub stack_bb: f64,
[INFO] [stderr]    |         ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variant `SolvedOnDemand` is never constructed
[INFO] [stderr]   --> src/strategy.rs:30:5
[INFO] [stderr]    |
[INFO] [stderr] 28 | pub enum StrategySource {
[INFO] [stderr]    |          -------------- variant in this enum
[INFO] [stderr] 29 |     Cached,
[INFO] [stderr] 30 |     SolvedOnDemand,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `StrategySource` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: variant `FourBet` is never constructed
[INFO] [stderr]   --> src/strategy.rs:42:5
[INFO] [stderr]    |
[INFO] [stderr] 36 | pub enum PotType {
[INFO] [stderr]    |          ------- variant in this enum
[INFO] [stderr] ...
[INFO] [stderr] 42 |     FourBet,
[INFO] [stderr]    |     ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `PotType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `cards_to_indices`
[INFO] [stderr]  --> tests/test_lookup_eval.rs:5:45
[INFO] [stderr]   |
[INFO] [stderr] 5 | use gto_cli::card_encoding::{card_to_index, cards_to_indices, index_to_card};
[INFO] [stderr]   |                                             ^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `HandCategory`
[INFO] [stderr]  --> tests/test_lookup_eval.rs:7:61
[INFO] [stderr]   |
[INFO] [stderr] 7 | use gto_cli::hand_evaluator::{compare_hands, evaluate_hand, HandCategory};
[INFO] [stderr]   |                                                             ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `gto-cli` (test "test_river_solver") generated 2 warnings (run `cargo fix --test "test_river_solver" -p gto-cli` to apply 2 suggestions)
[INFO] [stderr] warning: `gto-cli` (test "test_cards") generated 1 warning (run `cargo fix --test "test_cards" -p gto-cli` to apply 1 suggestion)
[INFO] [stderr] warning: `gto-cli` (bin "gto") generated 61 warnings (9 duplicates)
[INFO] [stderr] warning: `gto-cli` (test "test_lookup_eval") generated 2 warnings (run `cargo fix --test "test_lookup_eval" -p gto-cli` to apply 2 suggestions)
[INFO] [stderr] warning: `gto-cli` (bin "gto" test) generated 47 warnings (47 duplicates)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.22s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/gto_cli-b58e43ca1c48df48)
[INFO] [stdout] 
[INFO] [stdout] running 119 tests
[INFO] [stdout] test batch::tests::test_position_pairs_non_empty ... ok
[INFO] [stdout] test bucketing::tests::bucket_empty_combos ... ok
[INFO] [stdout] test batch::tests::test_pot_type_scaling ... ok
[INFO] [stdout] test cfr::tests::negative_regret_floored ... ok
[INFO] [stdout] test cfr::tests::trainer_get_or_create ... ok
[INFO] [stdout] test flat_cfr::tests::average_strategy_accumulates ... ok
[INFO] [stdout] test card_encoding::tests::roundtrip ... ok
[INFO] [stdout] test cfr::tests::average_strategy_accumulates ... ok
[INFO] [stdout] test cfr::tests::cfr_plus_floors_regret ... ok
[INFO] [stdout] test flat_cfr::tests::cfr_plus_floors_regret_at_zero ... ok
[INFO] [stdout] test flat_cfr::tests::new_creates_correct_sizes ... ok
[INFO] [stdout] test flat_cfr::tests::update_shifts_strategy ... ok
[INFO] [stdout] test batch::tests::test_representative_flops_valid ... ok
[INFO] [stdout] test flat_cfr::tests::multiple_hands_independent ... ok
[INFO] [stdout] test flat_cfr::tests::multiple_nodes_independent ... ok
[INFO] [stdout] test bucketing::tests::river_equity_low_hand ... ok
[INFO] [stdout] test bucketing::tests::river_equity_aces_vs_random ... ok
[INFO] [stdout] test flop_enumerator::tests::test_strategic_priority_broadway_bonus ... ok
[INFO] [stdout] test flop_enumerator::tests::test_strategic_priority_trips_last ... ok
[INFO] [stdout] test flop_enumerator::tests::test_strategic_priority_unpaired_before_paired ... ok
[INFO] [stdout] test flat_cfr::tests::initial_strategy_is_uniform ... ok
[INFO] [stdout] test flat_cfr::tests::memory_bytes_reasonable ... ok
[INFO] [stdout] test card_encoding::tests::known_cards ... ok
[INFO] [stdout] test flat_cfr::tests::average_strategy_initially_uniform ... ok
[INFO] [stdout] test bucketing::tests::flop_equity_reasonable ... ok
[INFO] [stdout] test game_tree::tests::all_169_hands_unique ... ok
[INFO] [stdout] test flop_enumerator::tests::test_strategic_priority_a_high_beats_low ... ok
[INFO] [stdout] test card_encoding::tests::remaining_deck_size ... ok
[INFO] [stdout] test bucketing::tests::bucket_more_buckets_than_combos ... ok
[INFO] [stdout] test cfr::tests::uniform_with_no_regret ... ok
[INFO] [stdout] test cfr::tests::regret_matching_proportional ... ok
[INFO] [stdout] test bucketing::tests::bucket_assignment_correct_count ... ok
[INFO] [stdout] test flop_enumerator::tests::test_monotone_not_same_as_rainbow ... ok
[INFO] [stdout] test game_tree::tests::bucket_to_hand_diagonal ... ok
[INFO] [stdout] test game_tree::tests::bucket_roundtrip ... ok
[INFO] [stdout] test game_tree::tests::known_buckets ... ok
[INFO] [stdout] test flop_enumerator::tests::test_suit_isomorphism ... ok
[INFO] [stdout] test game_tree::tests::bucket_to_hand_offsuit ... ok
[INFO] [stdout] test flop_enumerator::tests::test_two_tone_variants ... ok
[INFO] [stdout] test game_tree::tests::payoffs_negative_sum_with_rake ... ok
[INFO] [stdout] test game_tree::tests::bucket_to_hand_suited ... ok
[INFO] [stdout] test game_tree::tests::payoffs_zero_sum_no_rake ... ok
[INFO] [stdout] test lookup_eval::tests::high_card ... ok
[INFO] [stdout] test lookup_eval::tests::kicker_resolution_pairs ... ok
[INFO] [stdout] test lookup_eval::tests::royal_flush ... ok
[INFO] [stdout] test lookup_eval::tests::flush ... ok
[INFO] [stdout] test lookup_eval::tests::full_house ... ok
[INFO] [stdout] test lookup_eval::tests::seven_card_finds_best ... ok
[INFO] [stdout] test lookup_eval::tests::category_ordering ... ok
[INFO] [stdout] test lookup_eval::tests::one_pair ... ok
[INFO] [stdout] test lookup_eval::tests::straight_flush_7high ... ok
[INFO] [stdout] test lookup_eval::tests::trips ... ok
[INFO] [stdout] test lookup_eval::tests::two_pair ... ok
[INFO] [stdout] test lookup_eval::tests::quads ... ok
[INFO] [stdout] test lookup_eval::tests::wheel_below_six_high ... ok
[INFO] [stdout] test lookup_eval::tests::seven_card_royal_flush ... ok
[INFO] [stdout] test lookup_eval::tests::straight ... ok
[INFO] [stdout] test lookup_eval::tests::wheel_straight ... ok
[INFO] [stdout] test lookup_eval::tests::seven_card_two_pair_best_kicker ... ok
[INFO] [stdout] test lookup_eval::tests::seven_card_full_house_over_pair ... ok
[INFO] [stdout] test play::tests::test_classify_nuts_quads ... ok
[INFO] [stdout] test play::tests::test_classify_set ... ok
[INFO] [stdout] test play::tests::test_classify_top_pair_good_kicker ... ok
[INFO] [stdout] test play::tests::test_estimate_villain_range_rfi ... ok
[INFO] [stdout] test play::tests::test_classify_weak_high_card ... ok
[INFO] [stdout] test play::tests::test_classify_two_pair ... ok
[INFO] [stdout] test play::tests::test_estimate_villain_range_vs_3bet ... ok
[INFO] [stdout] test play::tests::test_explain_board_texture ... ok
[INFO] [stdout] test play::tests::test_explain_spr ... ok
[INFO] [stdout] test play::tests::test_explain_hand_category ... ok
[INFO] [stdout] test play::tests::test_classify_flush ... ok
[INFO] [stdout] test play::tests::test_is_in_position_9max ... ok
[INFO] [stdout] test play::tests::test_is_in_position_btn_vs_bb ... ok
[INFO] [stdout] test play::tests::test_is_in_position_co_vs_utg ... ok
[INFO] [stdout] test play::tests::test_parse_sizing_pct ... ok
[INFO] [stdout] test postflop_tree::tests::allin_clamped_to_stack ... ok
[INFO] [stdout] test postflop_tree::tests::basic_tree_structure ... ok
[INFO] [stdout] test play::tests::test_interactive_quit_immediately ... ok
[INFO] [stdout] test play::tests::test_is_in_position_bb_vs_btn ... ok
[INFO] [stdout] test play::tests::test_interactive_full_preflop_fold ... ok
[INFO] [stdout] test postflop_tree::tests::check_check_leads_to_showdown ... ok
[INFO] [stdout] test postflop_tree::tests::no_bets_means_only_check ... ok
[INFO] [stdout] test postflop_tree::tests::node_ids_unique_and_sequential ... ok
[INFO] [stdout] test play::tests::test_classify_medium_pair ... ok
[INFO] [stdout] test postflop_tree::tests::turn_tree_chance_node_has_48_children ... ok
[INFO] [stdout] test lookup_eval::tests::steel_wheel ... ok
[INFO] [stdout] test play::tests::test_explain_position ... ok
[INFO] [stdout] test preflop_solver::tests::all_spots_count ... ok
[INFO] [stdout] test preflop_solver::tests::dead_money_calculation ... ok
[INFO] [stdout] test preflop_solver::tests::payoff_opener_fold ... ok
[INFO] [stdout] test preflop_solver::tests::payoff_responder_folds_to_open ... ok
[INFO] [stdout] test preflop_solver::tests::position_blinds ... ok
[INFO] [stdout] test preflop_solver::tests::position_roundtrip ... ok
[INFO] [stdout] test postflop_tree::tests::turn_tree_no_showdown_terminals ... ok
[INFO] [stdout] test postflop_tree::tests::turn_tree_has_chance_nodes ... ok
[INFO] [stdout] test strategy::tests::test_find_combo_index ... ok
[INFO] [stdout] test strategy::tests::test_action_matches ... ok
[INFO] [stdout] test strategy::tests::test_default_villain ... ok
[INFO] [stdout] test strategy::tests::test_detect_street ... ok
[INFO] [stdout] test strategy::tests::test_format_strategy_not_in_range ... ok
[INFO] [stdout] test postflop_tree::tests::turn_tree_collect_metadata ... ok
[INFO] [stdout] test postflop_tree::tests::turn_tree_node_ids_unique ... ok
[INFO] [stdout] test flop_enumerator::tests::test_top_boards_are_unpaired_high_cards ... ok
[INFO] [stdout] test preflop_solver::tests::position_ip ... ok
[INFO] [stdout] test strategy::tests::test_navigate_to_node ... ok
[INFO] [stdout] test strategy::tests::test_format_strategy ... ok
[INFO] [stdout] test strategy::tests::test_lookup_in_template_strategy_not_in_range ... ok
[INFO] [stdout] test strategy::tests::test_pot_type ... ok
[INFO] [stdout] test strategy::tests::test_pretty_hand ... ok
[INFO] [stdout] test strategy::tests::test_lookup_in_template_strategy_finds_bucket ... ok
[INFO] [stdout] test strategy::tests::test_pretty_board ... ok
[INFO] [stdout] test flop_enumerator::tests::test_canonical_flops_sorted_descending_rank ... ok
[INFO] [stdout] test flop_enumerator::tests::test_canonical_flop_count ... ok
[INFO] [stdout] test flop_enumerator::tests::test_canonical_flops_are_valid ... ok
[INFO] [stdout] test game_tree::tests::aa_beats_random has been running for over 60 seconds
[INFO] [stdout] test game_tree::tests::combo_weights_non_negative has been running for over 60 seconds
[INFO] [stdout] test game_tree::tests::equity_in_range has been running for over 60 seconds
[INFO] [stdout] test game_tree::tests::solver_converges has been running for over 60 seconds
[INFO] [stdout] test game_tree::tests::solver_strategies_valid has been running for over 60 seconds
[ERROR] error running command: no output for 300 seconds
[INFO] running `Command { std: "docker" "inspect" "6accf53872c14f63041f1c77fe67e6c47ebac928d7a1036ce06e4eaf13e0cf18", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "6accf53872c14f63041f1c77fe67e6c47ebac928d7a1036ce06e4eaf13e0cf18", kill_on_drop: false }`
[INFO] [stdout] 6accf53872c14f63041f1c77fe67e6c47ebac928d7a1036ce06e4eaf13e0cf18
