[INFO] cloning repository https://github.com/cesco345/youtube_image_viewer
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/cesco345/youtube_image_viewer" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fcesco345%2Fyoutube_image_viewer", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fcesco345%2Fyoutube_image_viewer'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] a19bc197e67181dcab6e72b9ffb04ba38cc898b6
[INFO] testing cesco345/youtube_image_viewer against master#1ef7943ee607160a564655b6596f83670ef95df5 for pr-146098-6
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fcesco345%2Fyoutube_image_viewer" "/workspace/builds/worker-2-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/cesco345/youtube_image_viewer
[INFO] finished tweaking git repo https://github.com/cesco345/youtube_image_viewer
[INFO] tweaked toml for git repo https://github.com/cesco345/youtube_image_viewer written to /workspace/builds/worker-2-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/cesco345/youtube_image_viewer on toolchain 1ef7943ee607160a564655b6596f83670ef95df5
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1ef7943ee607160a564655b6596f83670ef95df5" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/cesco345/youtube_image_viewer 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" "+1ef7943ee607160a564655b6596f83670ef95df5" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded dtoa v1.0.9
[INFO] [stderr]   Downloaded gdk-pixbuf-sys v0.16.3
[INFO] [stderr]   Downloaded ego-tree v0.6.3
[INFO] [stderr]   Downloaded console v0.15.10
[INFO] [stderr]   Downloaded xml-rs v0.8.24
[INFO] [stderr]   Downloaded cmk v0.1.2
[INFO] [stderr]   Downloaded scraper v0.12.0
[INFO] [stderr]   Downloaded open v3.2.0
[INFO] [stderr]   Downloaded image-webp v0.2.0
[INFO] [stderr]   Downloaded kamadak-exif v0.5.5
[INFO] [stderr]   Downloaded fltk v1.5.2
[INFO] [stderr]   Downloaded winnow v0.6.22
[INFO] [stderr]   Downloaded image v0.25.5
[INFO] [stderr]   Downloaded syn v2.0.94
[INFO] [stderr]   Downloaded serde_json v1.0.134
[INFO] [stderr]   Downloaded minifb v0.27.0
[INFO] [stderr]   Downloaded gdk-sys v0.16.0
[INFO] [stderr]   Downloaded gio-sys v0.16.3
[INFO] [stderr]   Downloaded cc v1.2.7
[INFO] [stderr]   Downloaded libfuzzer-sys v0.4.8
[INFO] [stderr]   Downloaded built v0.7.5
[INFO] [stderr]   Downloaded cairo-sys-rs v0.16.3
[INFO] [stderr]   Downloaded atk-sys v0.16.0
[INFO] [stderr]   Downloaded gobject-sys v0.16.3
[INFO] [stderr]   Downloaded epub v1.2.4
[INFO] [stderr]   Downloaded pango-sys v0.16.3
[INFO] [stderr]   Downloaded owned_ttf_parser v0.15.2
[INFO] [stderr]   Downloaded glib-sys v0.16.3
[INFO] [stderr]   Downloaded rusttype v0.9.3
[INFO] [stderr]   Downloaded rfd v0.11.4
[INFO] [stderr]   Downloaded fltk-sys v1.5.2
[INFO] [stderr]   Downloaded avif-serialize v0.8.2
[INFO] [stderr]   Downloaded fltk-theme v0.7.4
[INFO] [stderr]   Downloaded rustix v0.37.28
[INFO] [stderr]   Downloaded cmake v0.1.52
[INFO] [stderr]   Downloaded gtk-sys v0.16.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+1ef7943ee607160a564655b6596f83670ef95df5" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 382ceff900a86187a21e279fa624de8defe78dc7567790e1b2d10db61b71cf5e
[INFO] running `Command { std: "docker" "start" "-a" "382ceff900a86187a21e279fa624de8defe78dc7567790e1b2d10db61b71cf5e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "382ceff900a86187a21e279fa624de8defe78dc7567790e1b2d10db61b71cf5e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "382ceff900a86187a21e279fa624de8defe78dc7567790e1b2d10db61b71cf5e", kill_on_drop: false }`
[INFO] [stdout] 382ceff900a86187a21e279fa624de8defe78dc7567790e1b2d10db61b71cf5e
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+1ef7943ee607160a564655b6596f83670ef95df5" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] a732e7cb22dcf81ec95384ea2193acced636fc459c92fec11cab15d45fee7001
[INFO] running `Command { std: "docker" "start" "-a" "a732e7cb22dcf81ec95384ea2193acced636fc459c92fec11cab15d45fee7001", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.169
[INFO] [stderr]    Compiling serde v1.0.217
[INFO] [stderr]    Compiling target-lexicon v0.12.16
[INFO] [stderr]    Compiling winnow v0.6.22
[INFO] [stderr]    Compiling smallvec v1.13.2
[INFO] [stderr]    Compiling version-compare v0.2.0
[INFO] [stderr]    Compiling heck v0.5.0
[INFO] [stderr]    Compiling byteorder v1.5.0
[INFO] [stderr]    Compiling getrandom v0.1.16
[INFO] [stderr]    Compiling log v0.4.22
[INFO] [stderr]    Compiling siphasher v0.3.11
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling syn v2.0.94
[INFO] [stderr]    Compiling stable_deref_trait v1.2.0
[INFO] [stderr]    Compiling version_check v0.9.5
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling phf_shared v0.8.0
[INFO] [stderr]    Compiling pin-project-lite v0.2.15
[INFO] [stderr]    Compiling bitflags v2.6.0
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]    Compiling adler2 v2.0.0
[INFO] [stderr]    Compiling libloading v0.8.6
[INFO] [stderr]    Compiling xml-rs v0.8.24
[INFO] [stderr]    Compiling crc32fast v1.4.2
[INFO] [stderr]    Compiling miniz_oxide v0.8.2
[INFO] [stderr]    Compiling dlib v0.5.2
[INFO] [stderr]    Compiling slab v0.4.9
[INFO] [stderr]    Compiling litemap v0.7.4
[INFO] [stderr]    Compiling proc-macro-hack v0.5.20+deprecated
[INFO] [stderr]    Compiling semver v1.0.24
[INFO] [stderr]    Compiling writeable v0.5.5
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]    Compiling new_debug_unreachable v1.0.6
[INFO] [stderr]    Compiling flate2 v1.0.35
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.18
[INFO] [stderr]    Compiling phf_shared v0.10.0
[INFO] [stderr]    Compiling jobserver v0.1.32
[INFO] [stderr]    Compiling cfg-expr v0.15.8
[INFO] [stderr]    Compiling getrandom v0.2.15
[INFO] [stderr]    Compiling wayland-scanner v0.29.5
[INFO] [stderr]    Compiling rand_core v0.5.1
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling memoffset v0.6.5
[INFO] [stderr]    Compiling futures-io v0.3.31
[INFO] [stderr]    Compiling cc v1.2.7
[INFO] [stderr]    Compiling subtle v2.6.1
[INFO] [stderr]    Compiling crossbeam-deque v0.8.6
[INFO] [stderr]    Compiling rand_pcg v0.2.1
[INFO] [stderr]    Compiling wayland-sys v0.29.5
[INFO] [stderr]    Compiling paste v1.0.15
[INFO] [stderr]    Compiling icu_locid_transform_data v1.5.0
[INFO] [stderr]    Compiling anyhow v1.0.95
[INFO] [stderr]    Compiling rustc_version v0.4.1
[INFO] [stderr]    Compiling parking_lot_core v0.9.10
[INFO] [stderr]    Compiling parking_lot v0.12.3
[INFO] [stderr]    Compiling mio v1.0.3
[INFO] [stderr]    Compiling socket2 v0.5.8
[INFO] [stderr]    Compiling signal-hook-registry v1.4.2
[INFO] [stderr]    Compiling crypto-common v0.1.6
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling rayon-core v1.12.1
[INFO] [stderr]    Compiling num-integer v0.1.46
[INFO] [stderr]    Compiling weezl v0.1.8
[INFO] [stderr]    Compiling openssl v0.10.68
[INFO] [stderr]    Compiling cpufeatures v0.2.16
[INFO] [stderr]    Compiling either v1.13.0
[INFO] [stderr]    Compiling icu_properties_data v1.5.0
[INFO] [stderr]    Compiling futures-util v0.3.31
[INFO] [stderr]    Compiling http v0.2.12
[INFO] [stderr]    Compiling pathfinder_simd v0.5.4
[INFO] [stderr]    Compiling wayland-client v0.29.5
[INFO] [stderr]    Compiling nix v0.24.3
[INFO] [stderr]    Compiling cmake v0.1.52
[INFO] [stderr]    Compiling num-bigint v0.4.6
[INFO] [stderr]    Compiling fdeflate v0.3.7
[INFO] [stderr]    Compiling yeslogic-fontconfig-sys v6.0.0
[INFO] [stderr]    Compiling tracing-core v0.1.33
[INFO] [stderr]    Compiling aligned-vec v0.5.0
[INFO] [stderr]    Compiling openssl-sys v0.9.104
[INFO] [stderr]    Compiling zstd-sys v2.0.13+zstd.1.5.6
[INFO] [stderr]    Compiling bzip2-sys v0.1.11+1.0.8
[INFO] [stderr]    Compiling freetype-sys v0.20.1
[INFO] [stderr]    Compiling arrayvec v0.7.6
[INFO] [stderr]    Compiling minimal-lexical v0.2.1
[INFO] [stderr]    Compiling utf16_iter v1.0.5
[INFO] [stderr]    Compiling built v0.7.5
[INFO] [stderr]    Compiling mac v0.1.1
[INFO] [stderr]    Compiling bytemuck v1.21.0
[INFO] [stderr]    Compiling native-tls v0.2.12
[INFO] [stderr]    Compiling utf8_iter v1.0.4
[INFO] [stderr]    Compiling zstd-safe v5.0.2+zstd.1.5.2
[INFO] [stderr]    Compiling serde_spanned v0.6.8
[INFO] [stderr]    Compiling toml_datetime v0.6.8
[INFO] [stderr]    Compiling precomputed-hash v0.1.1
[INFO] [stderr]    Compiling write16 v1.0.0
[INFO] [stderr]    Compiling cmk v0.1.2
[INFO] [stderr]    Compiling futures-sink v0.3.31
[INFO] [stderr]    Compiling jpeg-decoder v0.3.1
[INFO] [stderr]    Compiling icu_normalizer_data v1.5.0
[INFO] [stderr]    Compiling io-lifetimes v1.0.11
[INFO] [stderr]    Compiling toml_edit v0.22.22
[INFO] [stderr]    Compiling num-rational v0.4.2
[INFO] [stderr]    Compiling rav1e v0.7.1
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]    Compiling futf v0.1.5
[INFO] [stderr]    Compiling fltk-sys v1.5.2
[INFO] [stderr]    Compiling png v0.17.16
[INFO] [stderr]    Compiling tracing v0.1.41
[INFO] [stderr]    Compiling synstructure v0.13.1
[INFO] [stderr]    Compiling wayland-commons v0.29.5
[INFO] [stderr]    Compiling v_frame v0.3.8
[INFO] [stderr]    Compiling rayon v1.10.0
[INFO] [stderr]    Compiling inout v0.1.3
[INFO] [stderr]    Compiling aho-corasick v1.1.3
[INFO] [stderr]    Compiling polling v2.8.0
[INFO] [stderr]    Compiling openssl-probe v0.1.5
[INFO] [stderr]    Compiling dtoa v1.0.9
[INFO] [stderr]    Compiling rustix v0.38.42
[INFO] [stderr]    Compiling option-ext v0.2.0
[INFO] [stderr]    Compiling utf-8 v0.7.6
[INFO] [stderr]    Compiling rustix v0.37.28
[INFO] [stderr]    Compiling base64ct v1.6.0
[INFO] [stderr]    Compiling scoped-tls v1.0.1
[INFO] [stderr]    Compiling regex-syntax v0.8.5
[INFO] [stderr]    Compiling downcast-rs v1.2.1
[INFO] [stderr]    Compiling try-lock v0.2.5
[INFO] [stderr]    Compiling dtoa-short v0.3.5
[INFO] [stderr]    Compiling tendril v0.4.3
[INFO] [stderr]    Compiling want v0.3.1
[INFO] [stderr]    Compiling av1-grain v0.2.3
[INFO] [stderr]    Compiling dirs-sys v0.4.1
[INFO] [stderr]    Compiling password-hash v0.4.2
[INFO] [stderr]    Compiling toml v0.8.19
[INFO] [stderr]    Compiling cipher v0.4.4
[INFO] [stderr]    Compiling http-body v0.4.6
[INFO] [stderr]    Compiling itertools v0.12.1
[INFO] [stderr]    Compiling wayland-protocols v0.29.5
[INFO] [stderr]    Compiling sha2 v0.10.8
[INFO] [stderr]    Compiling hmac v0.12.1
[INFO] [stderr]    Compiling system-deps v6.2.2
[INFO] [stderr]    Compiling simd_helpers v0.1.0
[INFO] [stderr]    Compiling cssparser v0.27.2
[INFO] [stderr]    Compiling html5ever v0.25.2
[INFO] [stderr]    Compiling maybe-rayon v0.1.1
[INFO] [stderr]    Compiling async-io v1.13.0
[INFO] [stderr]    Compiling x11-dl v2.21.0
[INFO] [stderr]    Compiling zerocopy-derive v0.7.35
[INFO] [stderr]    Compiling zerofrom-derive v0.1.5
[INFO] [stderr]    Compiling yoke-derive v0.7.5
[INFO] [stderr]    Compiling zerovec-derive v0.10.3
[INFO] [stderr]    Compiling serde_derive v1.0.217
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling icu_provider_macros v1.5.0
[INFO] [stderr]    Compiling glib-sys v0.16.3
[INFO] [stderr]    Compiling zerocopy v0.7.35
[INFO] [stderr]    Compiling gobject-sys v0.16.3
[INFO] [stderr]    Compiling tokio-macros v2.4.0
[INFO] [stderr]    Compiling gio-sys v0.16.3
[INFO] [stderr]    Compiling atk-sys v0.16.0
[INFO] [stderr]    Compiling gdk-sys v0.16.0
[INFO] [stderr]    Compiling zerofrom v0.1.5
[INFO] [stderr]    Compiling gdk-pixbuf-sys v0.16.3
[INFO] [stderr]    Compiling pango-sys v0.16.3
[INFO] [stderr]    Compiling yoke v0.7.5
[INFO] [stderr]    Compiling cairo-sys-rs v0.16.3
[INFO] [stderr]    Compiling openssl-macros v0.1.1
[INFO] [stderr]    Compiling ppv-lite86 v0.2.20
[INFO] [stderr]    Compiling zerovec v0.10.4
[INFO] [stderr]    Compiling tokio v1.42.0
[INFO] [stderr]    Compiling gtk-sys v0.16.0
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling profiling-procmacros v1.0.16
[INFO] [stderr]    Compiling profiling v1.0.16
[INFO] [stderr]    Compiling regex-automata v0.4.9
[INFO] [stderr]    Compiling cssparser-macros v0.6.1
[INFO] [stderr]    Compiling num-derive v0.4.2
[INFO] [stderr]    Compiling rand_chacha v0.2.2
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling rand v0.7.3
[INFO] [stderr]    Compiling tinystr v0.7.6
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling icu_locid v1.5.0
[INFO] [stderr]    Compiling icu_collections v1.5.0
[INFO] [stderr]    Compiling arg_enum_proc_macro v0.3.4
[INFO] [stderr]    Compiling waker-fn v1.2.0
[INFO] [stderr]    Compiling convert_case v0.4.0
[INFO] [stderr]    Compiling itoa v0.4.8
[INFO] [stderr]    Compiling phf_generator v0.8.0
[INFO] [stderr]    Compiling phf_codegen v0.8.0
[INFO] [stderr]    Compiling icu_provider v1.5.0
[INFO] [stderr]    Compiling phf_macros v0.8.0
[INFO] [stderr]    Compiling phf_generator v0.10.0
[INFO] [stderr]    Compiling selectors v0.22.0
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling string_cache_codegen v0.5.2
[INFO] [stderr]    Compiling matches v0.1.10
[INFO] [stderr]    Compiling linux-raw-sys v0.4.14
[INFO] [stderr]    Compiling plotters-backend v0.3.7
[INFO] [stderr]    Compiling bitstream-io v2.6.0
[INFO] [stderr]    Compiling icu_locid_transform v1.5.0
[INFO] [stderr]    Compiling serde_json v1.0.134
[INFO] [stderr]    Compiling nodrop v0.1.14
[INFO] [stderr]    Compiling parking v2.2.1
[INFO] [stderr]    Compiling same-file v1.0.6
[INFO] [stderr]    Compiling quick-error v2.0.1
[INFO] [stderr]    Compiling linux-raw-sys v0.3.8
[INFO] [stderr]    Compiling imgref v1.11.0
[INFO] [stderr]    Compiling markup5ever v0.10.1
[INFO] [stderr]    Compiling font-kit v0.14.2
[INFO] [stderr]    Compiling noop_proc_macro v0.3.0
[INFO] [stderr]    Compiling phf v0.8.0
[INFO] [stderr]    Compiling futures-lite v1.13.0
[INFO] [stderr]    Compiling loop9 v0.1.5
[INFO] [stderr]    Compiling walkdir v2.5.0
[INFO] [stderr]    Compiling time v0.3.37
[INFO] [stderr]    Compiling regex v1.11.1
[INFO] [stderr]    Compiling servo_arc v0.1.1
[INFO] [stderr]    Compiling derive_more v0.99.18
[INFO] [stderr]    Compiling icu_properties v1.5.1
[INFO] [stderr]    Compiling pbkdf2 v0.11.0
[INFO] [stderr]    Compiling pathfinder_geometry v0.5.1
[INFO] [stderr]    Compiling aes v0.8.4
[INFO] [stderr]    Compiling bzip2 v0.4.4
[INFO] [stderr]    Compiling dirs v5.0.1
[INFO] [stderr]    Compiling image v0.24.9
[INFO] [stderr]    Compiling avif-serialize v0.8.2
[INFO] [stderr]    Compiling minifb v0.27.0
[INFO] [stderr]    Compiling gif v0.12.0
[INFO] [stderr]    Compiling sha1 v0.10.6
[INFO] [stderr]    Compiling socket2 v0.4.10
[INFO] [stderr]    Compiling concurrent-queue v2.5.0
[INFO] [stderr]    Compiling crossbeam-channel v0.5.14
[INFO] [stderr]    Compiling tokio-util v0.7.13
[INFO] [stderr]    Compiling string_cache v0.8.7
[INFO] [stderr]    Compiling icu_normalizer v1.5.0
[INFO] [stderr]    Compiling tokio-native-tls v0.3.1
[INFO] [stderr]    Compiling zune-inflate v0.2.54
[INFO] [stderr]    Compiling fxhash v0.2.1
[INFO] [stderr]    Compiling half v2.4.1
[INFO] [stderr]    Compiling fastrand v2.3.0
[INFO] [stderr]    Compiling lebe v0.5.2
[INFO] [stderr]    Compiling rfd v0.11.4
[INFO] [stderr]    Compiling h2 v0.3.26
[INFO] [stderr]    Compiling constant_time_eq v0.1.5
[INFO] [stderr]    Compiling idna_adapter v1.2.0
[INFO] [stderr]    Compiling thin-slice v0.1.1
[INFO] [stderr]    Compiling bit_field v0.10.2
[INFO] [stderr]    Compiling unicode-width v0.1.14
[INFO] [stderr]    Compiling idna v1.0.3
[INFO] [stderr]    Compiling float-ord v0.3.2
[INFO] [stderr]    Compiling ttf-parser v0.15.2
[INFO] [stderr]    Compiling zune-core v0.4.12
[INFO] [stderr]    Compiling rgb v0.8.50
[INFO] [stderr]    Compiling ttf-parser v0.25.1
[INFO] [stderr]    Compiling byteorder-lite v0.1.0
[INFO] [stderr]    Compiling xcursor v0.3.8
[INFO] [stderr]    Compiling zune-jpeg v0.4.14
[INFO] [stderr]    Compiling url v2.5.4
[INFO] [stderr]    Compiling wayland-cursor v0.29.5
[INFO] [stderr]    Compiling image-webp v0.2.0
[INFO] [stderr]    Compiling plotters-bitmap v0.3.7
[INFO] [stderr]    Compiling getopts v0.2.21
[INFO] [stderr]    Compiling rustls-pemfile v1.0.4
[INFO] [stderr]    Compiling exr v1.73.0
[INFO] [stderr]    Compiling tempfile v3.15.0
[INFO] [stderr]    Compiling chrono v0.4.39
[INFO] [stderr]    Compiling owned_ttf_parser v0.15.2
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling ravif v0.11.11
[INFO] [stderr]    Compiling hyper v0.14.32
[INFO] [stderr]    Compiling plotters-svg v0.3.7
[INFO] [stderr]    Compiling tiff v0.9.1
[INFO] [stderr]    Compiling qoi v0.4.1
[INFO] [stderr]    Compiling gif v0.13.1
[INFO] [stderr]    Compiling console v0.15.10
[INFO] [stderr]    Compiling csv-core v0.1.11
[INFO] [stderr]    Compiling encoding_rs v0.8.35
[INFO] [stderr]    Compiling ego-tree v0.6.3
[INFO] [stderr]    Compiling number_prefix v0.4.0
[INFO] [stderr]    Compiling ttf-parser v0.20.0
[INFO] [stderr]    Compiling ipnet v2.10.1
[INFO] [stderr]    Compiling pathdiff v0.2.3
[INFO] [stderr]    Compiling raw-window-handle v0.6.2
[INFO] [stderr]    Compiling ab_glyph_rasterizer v0.1.8
[INFO] [stderr]    Compiling mutate_once v0.1.1
[INFO] [stderr]    Compiling rusttype v0.9.3
[INFO] [stderr]    Compiling kamadak-exif v0.5.5
[INFO] [stderr]    Compiling open v3.2.0
[INFO] [stderr]    Compiling indicatif v0.16.2
[INFO] [stderr]    Compiling scraper v0.12.0
[INFO] [stderr]    Compiling csv v1.3.1
[INFO] [stderr]    Compiling base64 v0.13.1
[INFO] [stderr]    Compiling image v0.25.5
[INFO] [stderr]    Compiling plotters v0.3.7
[INFO] [stderr]    Compiling zstd v0.11.2+zstd.1.5.2
[INFO] [stderr]    Compiling hyper-tls v0.5.0
[INFO] [stderr]    Compiling zip v0.6.6
[INFO] [stderr]    Compiling reqwest v0.11.27
[INFO] [stderr]    Compiling epub v1.2.4
[INFO] [stderr]    Compiling fltk v1.5.2
[INFO] [stderr]    Compiling fltk-theme v0.7.4
[INFO] [stderr]    Compiling youtube_image-viewer v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `crop_tool::CropSelection`
[INFO] [stdout]  --> src/menu/edit/crop/mod.rs:3:9
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub use crop_tool::CropSelection;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `match` scrutinee expression
[INFO] [stdout]   --> src/menu/edit/filters/basic/hue.rs:47:31
[INFO] [stdout]    |
[INFO] [stdout] 47 |         let (r, g, b) = match (h as i32) {
[INFO] [stdout]    |                               ^        ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 47 -         let (r, g, b) = match (h as i32) {
[INFO] [stdout] 47 +         let (r, g, b) = match h as i32  {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]    --> src/menu/edit/filters/advanced/convolution.rs:197:21
[INFO] [stdout]     |
[INFO] [stdout] 197 |                     ((filtered as f32 * factor + orig as f32 * (1.0 - factor)) as u8)
[INFO] [stdout]     |                     ^                                                               ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 197 -                     ((filtered as f32 * factor + orig as f32 * (1.0 - factor)) as u8)
[INFO] [stdout] 197 +                     (filtered as f32 * factor + orig as f32 * (1.0 - factor)) as u8
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]    --> src/menu/edit/filters/advanced/pixelate.rs:139:9
[INFO] [stdout]     |
[INFO] [stdout] 139 |         ((pixelated as f32 * factor + original as f32 * (1.0 - factor)) as u8)
[INFO] [stdout]     |         ^                                                                    ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 139 -         ((pixelated as f32 * factor + original as f32 * (1.0 - factor)) as u8)
[INFO] [stdout] 139 +         (pixelated as f32 * factor + original as f32 * (1.0 - factor)) as u8
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `EdgeDetectionFilter` and `NoiseFilter`
[INFO] [stdout]   --> src/menu/edit/filters/handlers.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     EdgeDetectionFilter,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 29 |     EdgeDetectionMethod,
[INFO] [stdout] 30 |     NoiseFilter,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `start_interactive_pixelate`
[INFO] [stdout]   --> src/menu/edit/filters/handlers.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 40 |     start_interactive_pixelate,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `handle_apply_motion_blur` and `handle_apply_posterize`
[INFO] [stdout]   --> src/menu/edit/filters/dialog.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 44 |     handle_apply_posterize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 45 |     handle_apply_motion_blur,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::ImageFilter`
[INFO] [stdout]   --> src/menu/edit/filters/pixelate_tool.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use super::ImageFilter;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ConvolutionType` and `EdgeDetectionMethod`
[INFO] [stdout]   --> src/menu/edit/filters/mod.rs:35:20
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub use advanced::{ConvolutionType, EdgeDetectionMethod};  // Re-export from advanced module
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]   --> src/menu/edit/layers/color_filter.rs:73:9
[INFO] [stdout]    |
[INFO] [stdout] 73 |         ((color as f32 * factor + original as f32 * (1.0 - factor)) as u8)
[INFO] [stdout]    |         ^                                                                ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 73 -         ((color as f32 * factor + original as f32 * (1.0 - factor)) as u8)
[INFO] [stdout] 73 +         (color as f32 * factor + original as f32 * (1.0 - factor)) as u8
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `color_tool::start_interactive_color`
[INFO] [stdout]  --> src/menu/edit/layers/mod.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub use color_tool::start_interactive_color;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `dialog::show_cell_analysis_dialog`
[INFO] [stdout]  --> src/menu/scientific/analysis/handlers.rs:8:13
[INFO] [stdout]   |
[INFO] [stdout] 8 |             dialog::show_cell_analysis_dialog,
[INFO] [stdout]   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `handle_batch_analysis`, `handle_cell_analysis`, `handle_export_analysis`, `handle_show_statistics`, and `handle_stop_analysis`
[INFO] [stdout]   --> src/menu/scientific/analysis/mod.rs:7:5
[INFO] [stdout]    |
[INFO] [stdout]  7 |     handle_cell_analysis,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  8 |     handle_batch_analysis,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  9 |     handle_show_statistics,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 10 |     handle_export_analysis,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 11 |     handle_stop_analysis,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `fltk::image::RgbImage`
[INFO] [stdout]  --> src/scientific/analysis/colocalization.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use fltk::image::RgbImage;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/scientific/analysis/colocalization.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MeasurementTool`
[INFO] [stdout]  --> src/scientific/analysis/cell_analysis.rs:3:23
[INFO] [stdout]   |
[INFO] [stdout] 3 |     types::{ROIShape, MeasurementTool},
[INFO] [stdout]   |                       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `fltk::image::RgbImage`
[INFO] [stdout]  --> src/scientific/calibration/spatial_calibration.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use fltk::image::RgbImage;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Metadata`
[INFO] [stdout]  --> src/scientific/state/scientific_state.rs:7:50
[INFO] [stdout]   |
[INFO] [stdout] 7 |     layers::{Channel, Annotation, AnnotationType,Metadata, Calibration},
[INFO] [stdout]   |                                                  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Button` and `Pack`
[INFO] [stdout]  --> src/scientific/tools/interactive/roi_tool.rs:7:20
[INFO] [stdout]   |
[INFO] [stdout] 7 |     group::{Group, Pack},
[INFO] [stdout]   |                    ^^^^
[INFO] [stdout] 8 |     button::{RadioRoundButton, Button},
[INFO] [stdout]   |                                ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AnnotationType` and `Annotation`
[INFO] [stdout]   --> src/scientific/tools/interactive/roi_tool.rs:15:14
[INFO] [stdout]    |
[INFO] [stdout] 15 |     layers::{Annotation, AnnotationType},
[INFO] [stdout]    |              ^^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/scientific/tools/interactive/roi_tool.rs:466:45
[INFO] [stdout]     |
[INFO] [stdout] 466 | ...                   let angle = (i as f64 * 2.0 * std::f64::consts::PI / num_points as f64);
[INFO] [stdout]     |                                   ^                                                         ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 466 -                                 let angle = (i as f64 * 2.0 * std::f64::consts::PI / num_points as f64);
[INFO] [stdout] 466 +                                 let angle = i as f64 * 2.0 * std::f64::consts::PI / num_points as f64 ;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Event`
[INFO] [stdout]  --> src/scientific/tools/interactive/metadata_tool.rs:2:13
[INFO] [stdout]   |
[INFO] [stdout] 2 |     enums::{Event, Color, Align},
[INFO] [stdout]   |             ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `measurement_tool::*`
[INFO] [stdout]   --> src/scientific/tools/interactive/mod.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub use measurement_tool::*;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ScaleRenderer`
[INFO] [stdout]  --> src/scientific/tools/handlers/scale.rs:4:36
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::scientific::rendering::{ScaleRenderer, FrameRenderer};
[INFO] [stdout]   |                                    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `MeasurementTool`, `ROIShape`, and `ROITool`
[INFO] [stdout]  --> src/scientific/tools/mod.rs:5:23
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use interactive::{ROITool, ROIShape, MeasurementTool};
[INFO] [stdout]   |                       ^^^^^^^  ^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Align` and `Input`
[INFO] [stdout]  --> src/scientific/ui/channel_dialog.rs:6:25
[INFO] [stdout]   |
[INFO] [stdout] 6 |     input::{FloatInput, Input},
[INFO] [stdout]   |                         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 9 |     enums::{Color, FrameType, Align},
[INFO] [stdout]   |                               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]   --> src/scientific/ui/measurement_dialog.rs:12:25
[INFO] [stdout]    |
[INFO] [stdout] 12 | use crate::scientific::{self, Annotation, AnnotationType};
[INFO] [stdout]    |                         ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FloatInput`
[INFO] [stdout]  --> src/scientific/ui/scale_dialog.rs:4:20
[INFO] [stdout]   |
[INFO] [stdout] 4 |     input::{Input, FloatInput},
[INFO] [stdout]   |                    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Color`
[INFO] [stdout]  --> src/scientific/ui/cell_analysis/dialog.rs:7:13
[INFO] [stdout]   |
[INFO] [stdout] 7 |     enums::{Color, FrameType},
[INFO] [stdout]   |             ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CellStatistics` and `StatisticalAnalysis`
[INFO] [stdout]   --> src/scientific/ui/cell_analysis/dialog.rs:16:31
[INFO] [stdout]    |
[INFO] [stdout] 16 |             cell_statistics::{CellStatistics, StatisticalAnalysis}
[INFO] [stdout]    |                               ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Pack`
[INFO] [stdout]  --> src/scientific/ui/cell_analysis/statistics.rs:5:13
[INFO] [stdout]   |
[INFO] [stdout] 5 |     group::{Pack, Tabs, Group},
[INFO] [stdout]   |             ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `dialog::show_cell_analysis_dialog`
[INFO] [stdout]  --> src/scientific/ui/cell_analysis/mod.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub use dialog::show_cell_analysis_dialog;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `statistics::show_statistics_dialog`
[INFO] [stdout]  --> src/scientific/ui/cell_analysis/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use statistics::show_statistics_dialog;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `export_batch_measurements` and `export_measurement_data`
[INFO] [stdout]  --> src/scientific/ui/cell_analysis/mod.rs:8:18
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use export::{export_measurement_data, export_batch_measurements};
[INFO] [stdout]   |                  ^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Font`
[INFO] [stdout]  --> src/scientific/ui/roi/batch_dialog.rs:9:20
[INFO] [stdout]   |
[INFO] [stdout] 9 |     enums::{Color, Font, FrameType, Align},
[INFO] [stdout]   |                    ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `collections::HashMap`
[INFO] [stdout]   --> src/scientific/ui/roi/batch_dialog.rs:12:34
[INFO] [stdout]    |
[INFO] [stdout] 12 | use std::{rc::Rc, cell::RefCell, collections::HashMap};
[INFO] [stdout]    |                                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tools::interactive::roi::measurements::MeasurementCalculator`
[INFO] [stdout]   --> src/scientific/ui/roi/batch_dialog.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 |     tools::interactive::roi::measurements::MeasurementCalculator,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FrameType`
[INFO] [stdout]   --> src/scientific/ui/roi/components/line_style_selector.rs:10:13
[INFO] [stdout]    |
[INFO] [stdout] 10 |     enums::{FrameType, Align},
[INFO] [stdout]    |             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `measurement_table::MeasurementTable`
[INFO] [stdout]  --> src/scientific/ui/roi/components/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use measurement_table::MeasurementTable;  // Make public
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Color`
[INFO] [stdout]  --> src/scientific/ui/roi/export_dialog.rs:7:20
[INFO] [stdout]   |
[INFO] [stdout] 7 |     enums::{Align, Color, FrameType},
[INFO] [stdout]   |                    ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ROIMeasurements`, `ROIShape`, and `tools::interactive::roi::measurements::MeasurementCalculator`
[INFO] [stdout]   --> src/scientific/ui/roi/export_dialog.rs:12:13
[INFO] [stdout]    |
[INFO] [stdout] 12 |     types::{ROIMeasurements, ROIShape},
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 13 |     tools::interactive::roi::measurements::MeasurementCalculator,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tools::interactive::roi::measurements::MeasurementCalculator`
[INFO] [stdout]   --> src/scientific/ui/roi/measurement_dialog.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 |     tools::interactive::roi::measurements::MeasurementCalculator,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BatchDialog`
[INFO] [stdout]   --> src/scientific/ui/roi/mod.rs:11:24
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub use batch_dialog::{BatchDialog, show_batch_analysis_dialog};
[INFO] [stdout]    |                        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `batch_dialog::*`
[INFO] [stdout]   --> src/scientific/ui/roi/mod.rs:13:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub use batch_dialog::*;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `export_dialog::*`
[INFO] [stdout]   --> src/scientific/ui/roi/mod.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub use export_dialog::*;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `measurement_dialog::*`
[INFO] [stdout]   --> src/scientific/ui/roi/mod.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub use measurement_dialog::*;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `properties_dialog::*`
[INFO] [stdout]   --> src/scientific/ui/roi/mod.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub use properties_dialog::*;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self::batch_dialog::BatchStatistics`
[INFO] [stdout]   --> src/scientific/ui/roi/mod.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub use self::batch_dialog::BatchStatistics;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `cell_analysis::*`
[INFO] [stdout]   --> src/scientific/ui/mod.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub use cell_analysis::*;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `roi::*`
[INFO] [stdout]   --> src/scientific/ui/mod.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub use roi::*;
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::scientific::rendering::frame_renderer::FrameRenderer`
[INFO] [stdout]  --> src/scientific/rendering/scale_renderer.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::scientific::rendering::frame_renderer::FrameRenderer;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Metadata`
[INFO] [stdout]   --> src/scientific/mod.rs:12:55
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub use layers::{Channel, Annotation, AnnotationType, Metadata};
[INFO] [stdout]    |                                                       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ColocalizationAnalysis`
[INFO] [stdout]   --> src/scientific/mod.rs:13:38
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub use analysis::{IntensityProfile, ColocalizationAnalysis};
[INFO] [stdout]    |                                      ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `calibration::SpatialCalibration`
[INFO] [stdout]   --> src/scientific/mod.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub use calibration::SpatialCalibration;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `state::ScientificState`
[INFO] [stdout]   --> src/scientific/mod.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub use state::ScientificState;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `LegendPosition`, `MeasurementTool`, `ROIShape`, and `ROITool`
[INFO] [stdout]   --> src/scientific/mod.rs:16:17
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub use types::{LegendPosition, ROIShape, ROITool, MeasurementTool};
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^  ^^^^^^^^  ^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `reporting::CalibrationReport`
[INFO] [stdout]   --> src/scientific/mod.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub use reporting::CalibrationReport;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `visualization::CellVisualizer`
[INFO] [stdout]   --> src/scientific/mod.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub use visualization::CellVisualizer;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Event`
[INFO] [stdout]   --> src/main.rs:12:23
[INFO] [stdout]    |
[INFO] [stdout] 12 |     enums::{Shortcut, Event, CallbackTrigger},
[INFO] [stdout]    |                       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::scientific::tools::interactive::cell_analysis_tool::CellAnalysisState`
[INFO] [stdout]   --> src/main.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use crate::scientific::tools::interactive::cell_analysis_tool::CellAnalysisState;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `prelude`
[INFO] [stdout]  --> src/menu/file/open.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 |     prelude::*,
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `prelude`
[INFO] [stdout]  --> src/scientific/tools/interactive/cell_analysis_tool.rs:1:29
[INFO] [stdout]   |
[INFO] [stdout] 1 | use fltk::{image::RgbImage, prelude::*, enums::Event};
[INFO] [stdout]   |                             ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/menu/edit/crop/crop_tool.rs:132:17
[INFO] [stdout]     |
[INFO] [stdout] 132 |     if let Some(mut fltk_image) = cropped_img {
[INFO] [stdout]     |                 ----^^^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `now`
[INFO] [stdout]   --> src/menu/edit/watermark/templates/defaults.rs:15:13
[INFO] [stdout]    |
[INFO] [stdout] 15 |         let now = chrono::Utc::now();
[INFO] [stdout]    |             ^^^ help: if this is intentional, prefix it with an underscore: `_now`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pack`
[INFO] [stdout]    --> src/menu/edit/layers/dialog.rs:103:5
[INFO] [stdout]     |
[INFO] [stdout] 103 |     pack: &mut Pack,
[INFO] [stdout]     |     ^^^^ help: if this is intentional, prefix it with an underscore: `_pack`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pack`
[INFO] [stdout]    --> src/menu/edit/layers/dialog.rs:139:5
[INFO] [stdout]     |
[INFO] [stdout] 139 |     pack: &mut Pack,
[INFO] [stdout]     |     ^^^^ help: if this is intentional, prefix it with an underscore: `_pack`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `filter`
[INFO] [stdout]   --> src/menu/edit/layers/interactive_tool/mod.rs:40:9
[INFO] [stdout]    |
[INFO] [stdout] 40 |     let filter = ColorFilter::new(color);
[INFO] [stdout]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_filter`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame_clone`
[INFO] [stdout]   --> src/menu/edit/layers/color_tool.rs:57:13
[INFO] [stdout]    |
[INFO] [stdout] 57 |         let frame_clone = frame_clone.clone();
[INFO] [stdout]    |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_frame_clone`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]   --> src/menu/scientific/analysis/handlers.rs:78:31
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub fn handle_show_statistics(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stdout]    |                               ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]   --> src/menu/scientific/analysis/handlers.rs:92:31
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub fn handle_export_analysis(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stdout]    |                               ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `is_analyzing`
[INFO] [stdout]    --> src/menu/scientific/analysis/cell.rs:157:25
[INFO] [stdout]     |
[INFO] [stdout] 157 |                     let is_analyzing = state_ref.scientific_state.is_analyzing_cells();
[INFO] [stdout]     |                         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_is_analyzing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `stats`
[INFO] [stdout]   --> src/scientific/analysis/cell_statistics.rs:89:31
[INFO] [stdout]    |
[INFO] [stdout] 89 |             for (metric_name, stats, values) in &metrics {
[INFO] [stdout]    |                               ^^^^^ help: if this is intentional, prefix it with an underscore: `_stats`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/analysis/cell_statistics.rs:224:15
[INFO] [stdout]     |
[INFO] [stdout] 224 | fn percentile(mut values: impl Iterator<Item = f64>, p: f64) -> f64 {
[INFO] [stdout]     |               ----^^^^^^
[INFO] [stdout]     |               |
[INFO] [stdout]     |               help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `unit`
[INFO] [stdout]    --> src/scientific/state/scientific_state.rs:449:54
[INFO] [stdout]     |
[INFO] [stdout] 449 |             AnnotationType::Scale { pixels_per_unit, unit } => {
[INFO] [stdout]     |                                                      ^^^^ help: try ignoring the field: `unit: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pixels_per_unit`
[INFO] [stdout]    --> src/scientific/state/scientific_state.rs:491:103
[INFO] [stdout]     |
[INFO] [stdout] 491 |     fn draw_scale_bar(&self, composite: &mut Vec<u8>, width: i32, height: i32, points: &[(i32, i32)], pixels_per_unit: f32) {
[INFO] [stdout]     |                                                                                                       ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pixels_per_unit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `length`
[INFO] [stdout]    --> src/scientific/state/scientific_state.rs:568:105
[INFO] [stdout]     |
[INFO] [stdout] 568 |     fn draw_measurement(&self, composite: &mut Vec<u8>, width: i32, height: i32, points: &[(i32, i32)], length: f32, unit: &str) {
[INFO] [stdout]     |                                                                                                         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_length`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/scientific/tools/interactive/roi_tool.rs:422:17
[INFO] [stdout]     |
[INFO] [stdout] 422 |                 _ => {}
[INFO] [stdout]     |                 ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/scientific/tools/interactive/roi_tool.rs:422:17
[INFO] [stdout]     |
[INFO] [stdout] 378 |                 ROIShape::Rectangle { .. } => {
[INFO] [stdout]     |                 -------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 395 |                 ROIShape::Ellipse { .. } => {
[INFO] [stdout]     |                 ------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 409 |                 ROIShape::Line { .. } => {
[INFO] [stdout]     |                 --------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 417 |                 ROIShape::Polygon { .. } => {
[INFO] [stdout]     |                 ------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 422 |                 _ => {}
[INFO] [stdout]     |                 ^ collectively making this unreachable
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/tools/interactive/roi_tool.rs:235:19
[INFO] [stdout]     |
[INFO] [stdout] 235 |         if let Ok(mut state_ref) = state.try_borrow_mut() {
[INFO] [stdout]     |                   ----^^^^^^^^^
[INFO] [stdout]     |                   |
[INFO] [stdout]     |                   help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/scientific/tools/interactive/metadata_tool.rs:28:13
[INFO] [stdout]    |
[INFO] [stdout] 28 |         let mut window = Window::default()
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/tools/interactive/metadata_tool.rs:153:19
[INFO] [stdout]     |
[INFO] [stdout] 153 |         if let Ok(mut state_ref) = state_clone.try_borrow_mut() {
[INFO] [stdout]     |                   ----^^^^^^^^^
[INFO] [stdout]     |                   |
[INFO] [stdout]     |                   help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `state_ref`
[INFO] [stdout]    --> src/scientific/tools/interactive/metadata_tool.rs:153:19
[INFO] [stdout]     |
[INFO] [stdout] 153 |         if let Ok(mut state_ref) = state_clone.try_borrow_mut() {
[INFO] [stdout]     |                   ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_state_ref`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `new_metadata`
[INFO] [stdout]    --> src/scientific/tools/interactive/metadata_tool.rs:154:17
[INFO] [stdout]     |
[INFO] [stdout] 154 |             let new_metadata = editor.get_metadata();
[INFO] [stdout]     |                 ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_new_metadata`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `convex_hull_area`
[INFO] [stdout]    --> src/scientific/tools/interactive/roi/measurements.rs:110:14
[INFO] [stdout]     |
[INFO] [stdout] 110 |         let (convex_hull_area, solidity) = self.calculate_solidity(points, area);
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_convex_hull_area`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `points`
[INFO] [stdout]    --> src/scientific/tools/interactive/roi/measurements.rs:181:34
[INFO] [stdout]     |
[INFO] [stdout] 181 |     fn calculate_solidity(&self, points: &[(i32, i32)], area: f64) -> (f64, f64) {
[INFO] [stdout]     |                                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_points`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `channel_list`
[INFO] [stdout]   --> src/scientific/ui/channel_dialog.rs:29:9
[INFO] [stdout]    |
[INFO] [stdout] 29 |     let channel_list = create_channel_list(&mut pack, state.clone());
[INFO] [stdout]    |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_channel_list`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vis_header`
[INFO] [stdout]   --> src/scientific/ui/channel_dialog.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 63 |     let vis_header = Frame::new(0, 0, 25, 25, "");
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_vis_header`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action_header`
[INFO] [stdout]   --> src/scientific/ui/channel_dialog.rs:70:9
[INFO] [stdout]    |
[INFO] [stdout] 70 |     let action_header = Frame::new(0, 0, 60, 25, "");
[INFO] [stdout]    |         ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_action_header`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/channel_dialog.rs:109:13
[INFO] [stdout]     |
[INFO] [stdout] 109 |         let mut wavelength = Frame::new(0, 0, 100, 35, &*wavelength_text);
[INFO] [stdout]     |             ----^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `wavelength`
[INFO] [stdout]    --> src/scientific/ui/channel_dialog.rs:109:13
[INFO] [stdout]     |
[INFO] [stdout] 109 |         let mut wavelength = Frame::new(0, 0, 100, 35, &*wavelength_text);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_wavelength`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `profile`
[INFO] [stdout]  --> src/scientific/ui/profile_dialog.rs:7:28
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub fn show_profile_dialog(profile: &IntensityProfile) {
[INFO] [stdout]   |                            ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_profile`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> src/scientific/ui/scale_dialog.rs:250:13
[INFO] [stdout]     |
[INFO] [stdout] 250 |         let frame = frame.clone();
[INFO] [stdout]     |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> src/scientific/ui/cell_analysis/dialog.rs:113:5
[INFO] [stdout]     |
[INFO] [stdout] 113 |     frame: &Rc<RefCell<Frame>>,
[INFO] [stdout]     |     ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/scientific/ui/cell_analysis/statistics.rs:32:9
[INFO] [stdout]    |
[INFO] [stdout] 32 |     let mut tabs = Tabs::new(WINDOW_PADDING, WINDOW_PADDING, 780, 540, "");
[INFO] [stdout]    |         ----^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/scientific/ui/cell_analysis/statistics.rs:35:9
[INFO] [stdout]    |
[INFO] [stdout] 35 |     let mut summary_group = Group::new(WINDOW_PADDING, 35, 780, 515, "Summary");
[INFO] [stdout]    |         ----^^^^^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/scientific/ui/cell_analysis/statistics.rs:67:9
[INFO] [stdout]    |
[INFO] [stdout] 67 |     let mut correlations_group = Group::new(WINDOW_PADDING, 35, 780, 515, "Correlations");
[INFO] [stdout]    |         ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `measurement`
[INFO] [stdout]  --> src/scientific/ui/cell_analysis/export.rs:8:53
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub fn export_measurement_data(_state: &ImageState, measurement: &CellMeasurement) {
[INFO] [stdout]   |                                                     ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_measurement`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `measurements`
[INFO] [stdout]   --> src/scientific/ui/cell_analysis/export.rs:12:55
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub fn export_batch_measurements(_state: &ImageState, measurements: &[CellMeasurement]) {
[INFO] [stdout]    |                                                       ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_measurements`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/batch_dialog.rs:105:13
[INFO] [stdout]     |
[INFO] [stdout] 105 |         let mut scroll = Scroll::new(5, 25, 770, 270, "");
[INFO] [stdout]     |             ----^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/batch_dialog.rs:137:13
[INFO] [stdout]     |
[INFO] [stdout] 137 |         let mut auto_update = CheckButton::new(0, 0, 150, 30, "Auto Update");
[INFO] [stdout]     |             ----^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path`
[INFO] [stdout]    --> src/scientific/ui/roi/batch_dialog.rs:333:30
[INFO] [stdout]     |
[INFO] [stdout] 333 |     fn export_to_file(&self, path: &std::path::Path) {
[INFO] [stdout]     |                              ^^^^ help: if this is intentional, prefix it with an underscore: `_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> src/scientific/ui/roi/batch_dialog.rs:350:5
[INFO] [stdout]     |
[INFO] [stdout] 350 |     frame: &Rc<RefCell<Frame>>,
[INFO] [stdout]     |     ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `state`
[INFO] [stdout]    --> src/scientific/ui/roi/batch_dialog.rs:351:5
[INFO] [stdout]     |
[INFO] [stdout] 351 |     state: &Rc<RefCell<ImageState>>,
[INFO] [stdout]     |     ^^^^^ help: if this is intentional, prefix it with an underscore: `_state`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `measurements`
[INFO] [stdout]    --> src/scientific/ui/roi/batch_dialog.rs:352:5
[INFO] [stdout]     |
[INFO] [stdout] 352 |     measurements: &Vec<CellMeasurement>
[INFO] [stdout]     |     ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_measurements`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/scientific/ui/roi/export_dialog.rs:93:13
[INFO] [stdout]    |
[INFO] [stdout] 93 |         let mut path_input = Input::new(0, 0, 300, 30, None);
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/scientific/ui/roi/export_dialog.rs:94:13
[INFO] [stdout]    |
[INFO] [stdout] 94 |         let mut browse_btn = Button::new(0, 0, 75, 30, Some("Browse"));
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:105:13
[INFO] [stdout]     |
[INFO] [stdout] 105 |         let mut json_radio = RadioRoundButton::new(20, 35, 160, 25, Some("JSON (.json)"));
[INFO] [stdout]     |             ----^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:106:13
[INFO] [stdout]     |
[INFO] [stdout] 106 |         let mut excel_radio = RadioRoundButton::new(20, 60, 160, 25, Some("Excel (.xlsx)"));
[INFO] [stdout]     |             ----^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:120:13
[INFO] [stdout]     |
[INFO] [stdout] 120 |         let mut measurements_check = CheckButton::new(20, 10, 340, 25, Some("Include Measurements"));
[INFO] [stdout]     |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:121:13
[INFO] [stdout]     |
[INFO] [stdout] 121 |         let mut statistics_check = CheckButton::new(20, 35, 340, 25, Some("Include Statistics"));
[INFO] [stdout]     |             ----^^^^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:122:13
[INFO] [stdout]     |
[INFO] [stdout] 122 |         let mut images_check = CheckButton::new(20, 60, 340, 25, Some("Include Images"));
[INFO] [stdout]     |             ----^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:123:13
[INFO] [stdout]     |
[INFO] [stdout] 123 |         let mut metadata_check = CheckButton::new(20, 85, 340, 25, Some("Include Metadata"));
[INFO] [stdout]     |             ----^^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:124:13
[INFO] [stdout]     |
[INFO] [stdout] 124 |         let mut batch_check = CheckButton::new(20, 110, 340, 25, Some("Batch Export"));
[INFO] [stdout]     |             ----^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:136:13
[INFO] [stdout]     |
[INFO] [stdout] 136 |         let mut export_btn = Button::new(0, 0, 185, 30, Some("Export"));
[INFO] [stdout]     |             ----^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:137:13
[INFO] [stdout]     |
[INFO] [stdout] 137 |         let mut cancel_btn = Button::new(0, 0, 185, 30, Some("Cancel"));
[INFO] [stdout]     |             ----^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `image_radio`
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:171:13
[INFO] [stdout]     |
[INFO] [stdout] 171 |         let image_radio = self.image_radio.clone();
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_image_radio`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/scientific/ui/roi/measurement_dialog.rs:49:13
[INFO] [stdout]    |
[INFO] [stdout] 49 |         let mut scroll = Scroll::new(0, 0, 380, 380, "");
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/scientific/ui/roi/measurement_dialog.rs:66:13
[INFO] [stdout]    |
[INFO] [stdout] 66 |         let mut export_btn = Button::new(0, 0, 185, 25, "Export Data");
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/scientific/ui/roi/measurement_dialog.rs:67:13
[INFO] [stdout]    |
[INFO] [stdout] 67 |         let mut close_btn = Button::new(195, 0, 185, 25, "Close");
[INFO] [stdout]    |             ----^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/properties_dialog.rs:138:23
[INFO] [stdout]     |
[INFO] [stdout] 138 |             if let Ok(mut state_ref) = state.try_borrow_mut() {
[INFO] [stdout]     |                       ----^^^^^^^^^
[INFO] [stdout]     |                       |
[INFO] [stdout]     |                       help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pixels_per_unit`
[INFO] [stdout]   --> src/scientific/rendering/scale_renderer.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 16 |         pixels_per_unit: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pixels_per_unit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `unit`
[INFO] [stdout]   --> src/scientific/rendering/scale_renderer.rs:46:9
[INFO] [stdout]    |
[INFO] [stdout] 46 |         unit: &str,
[INFO] [stdout]    |         ^^^^ help: if this is intentional, prefix it with an underscore: `_unit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `ShapeSelector` is more private than the item `InteractiveROIState::show_roi_mode_dialog`
[INFO] [stdout]    --> src/scientific/tools/interactive/roi_tool.rs:160:5
[INFO] [stdout]     |
[INFO] [stdout] 160 |     pub fn show_roi_mode_dialog(on_select: impl Fn(ROIShape) + 'static) -> ShapeSelector {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ associated function `InteractiveROIState::show_roi_mode_dialog` is reachable at visibility `pub(crate)`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `ShapeSelector` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/scientific/tools/interactive/roi_tool.rs:28:1
[INFO] [stdout]     |
[INFO] [stdout]  28 | struct ShapeSelector {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `InvalidPosition`, `InvalidOpacity`, `TextRenderingError`, `BlendingError`, and `TemplateError` are never constructed
[INFO] [stdout]   --> src/menu/edit/watermark/mod.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub enum WatermarkError {
[INFO] [stdout]    |          -------------- variants in this enum
[INFO] [stdout] 36 |     InvalidPosition(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 37 |     InvalidOpacity(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 38 |     TextRenderingError(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 39 |     ImageLoadError(String),
[INFO] [stdout] 40 |     BlendingError(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 41 |     FontError(String),
[INFO] [stdout] 42 |     TemplateError(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `WatermarkError` has derived impls for the traits `Clone` and `Debug`, but these are 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: enum `WatermarkSource` is never used
[INFO] [stdout]   --> src/menu/edit/watermark/mod.rs:46:10
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub enum WatermarkSource {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WatermarkTemplate` is never constructed
[INFO] [stdout]   --> src/menu/edit/watermark/mod.rs:80:12
[INFO] [stdout]    |
[INFO] [stdout] 80 | pub struct WatermarkTemplate {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `WatermarkType` is never used
[INFO] [stdout]   --> src/menu/edit/watermark/mod.rs:90:10
[INFO] [stdout]    |
[INFO] [stdout] 90 | pub enum WatermarkType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `WatermarkData` is never used
[INFO] [stdout]    --> src/menu/edit/watermark/mod.rs:103:10
[INFO] [stdout]     |
[INFO] [stdout] 103 | pub enum WatermarkData {
[INFO] [stdout]     |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `remove` is never used
[INFO] [stdout]    --> src/menu/edit/watermark/mod.rs:127:8
[INFO] [stdout]     |
[INFO] [stdout] 123 | pub trait Watermark {
[INFO] [stdout]     |           --------- method in this trait
[INFO] [stdout] ...
[INFO] [stdout] 127 |     fn remove(&self, image: &mut image::ImageBuffer<image::Rgba<u8>, Vec<u8>>, area: &WatermarkPosition) 
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `data` and `font` are never read
[INFO] [stdout]   --> src/menu/edit/watermark/fonts/mod.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | struct StaticFontData {
[INFO] [stdout]    |        -------------- fields in this struct
[INFO] [stdout] 11 |     data: Vec<u8>,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 12 |     font: Arc<Font<'static>>,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `fonts` is never read
[INFO] [stdout]   --> src/menu/edit/watermark/fonts/mod.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub struct FontManager {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 32 |     fonts: HashMap<String, StaticFontData>,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `add_font`, `get_font`, `list_fonts`, and `remove_font` are never used
[INFO] [stdout]   --> src/menu/edit/watermark/fonts/mod.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | impl FontManager {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 55 |     pub fn add_font(&mut self, name: String, font_data: Vec<u8>) -> Result<(), WatermarkError> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn get_font(&self, name: &str) -> Option<Arc<Font<'static>>> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn list_fonts(&self) -> Vec<String> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn remove_font(&mut self, name: &str) -> Result<(), WatermarkError> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_add_watermark` is never used
[INFO] [stdout]    --> src/menu/edit/watermark/handlers.rs:117:8
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub fn handle_add_watermark(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_position_valid` is never used
[INFO] [stdout]   --> src/menu/edit/watermark/position.rs:64:8
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub fn is_position_valid(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TemplateManager` is never constructed
[INFO] [stdout]   --> src/menu/edit/watermark/templates/mod.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct TemplateManager {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `save_template`, `load_template`, `list_templates`, `load_templates_from_disk`, and `save_template_to_disk` are never used
[INFO] [stdout]    --> src/menu/edit/watermark/templates/mod.rs:18:12
[INFO] [stdout]     |
[INFO] [stdout]  17 | impl TemplateManager {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout]  18 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  48 |     pub fn save_template(
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  59 |     pub fn load_template(&self, name: &str) 
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  68 |     pub fn list_templates(&self) -> Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  72 |     fn load_templates_from_disk(&mut self) -> Result<(), WatermarkError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     fn save_template_to_disk(&self, name: &str) -> Result<(), WatermarkError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `draw` is never used
[INFO] [stdout]   --> src/menu/edit/watermark/removal_tool.rs:94:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl WatermarkRemovalTool {
[INFO] [stdout]    | ------------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 94 |     pub fn draw(&self) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fltk_to_image_buffer` is never used
[INFO] [stdout]   --> src/menu/edit/filters/mod.rs:44:15
[INFO] [stdout]    |
[INFO] [stdout] 44 | pub(crate) fn fltk_to_image_buffer(fltk_image: &RgbImage) -> ImageBuffer<Rgba<u8>, Vec<u8>> {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `image_buffer_to_fltk` is never used
[INFO] [stdout]   --> src/menu/edit/filters/mod.rs:67:15
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub(crate) fn image_buffer_to_fltk(buffer: &ImageBuffer<Rgba<u8>, Vec<u8>>) -> Option<RgbImage> {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `gaussian_kernel` is never used
[INFO] [stdout]    --> src/menu/edit/filters/advanced/edge_detection.rs:117:8
[INFO] [stdout]     |
[INFO] [stdout]  23 | impl EdgeDetectionFilter {
[INFO] [stdout]     | ------------------------ associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 117 |     fn gaussian_kernel(size: usize, sigma: f32) -> Vec<f32> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_apply_edge_detection` is never used
[INFO] [stdout]    --> src/menu/edit/filters/handlers.rs:241:8
[INFO] [stdout]     |
[INFO] [stdout] 241 | pub fn handle_apply_edge_detection(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_apply_canny_edge_detection` is never used
[INFO] [stdout]    --> src/menu/edit/filters/handlers.rs:250:8
[INFO] [stdout]     |
[INFO] [stdout] 250 | pub fn handle_apply_canny_edge_detection(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_apply_noise` is never used
[INFO] [stdout]    --> src/menu/edit/filters/handlers.rs:258:8
[INFO] [stdout]     |
[INFO] [stdout] 258 | pub fn handle_apply_noise(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_apply_vignette` is never used
[INFO] [stdout]    --> src/menu/edit/filters/handlers.rs:266:8
[INFO] [stdout]     |
[INFO] [stdout] 266 | pub fn handle_apply_vignette(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_apply_posterize` is never used
[INFO] [stdout]    --> src/menu/edit/filters/handlers.rs:288:8
[INFO] [stdout]     |
[INFO] [stdout] 288 | pub fn handle_apply_posterize(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_apply_pixelate` is never used
[INFO] [stdout]    --> src/menu/edit/filters/handlers.rs:310:8
[INFO] [stdout]     |
[INFO] [stdout] 310 | pub fn handle_apply_pixelate(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_apply_motion_blur` is never used
[INFO] [stdout]    --> src/menu/edit/filters/handlers.rs:334:8
[INFO] [stdout]     |
[INFO] [stdout] 334 | pub fn handle_apply_motion_blur(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `with_opacity` is never used
[INFO] [stdout]    --> src/menu/edit/layers/color_filter.rs:106:12
[INFO] [stdout]     |
[INFO] [stdout] 104 | impl ColorFilter {
[INFO] [stdout]     | ---------------- method in this implementation
[INFO] [stdout] 105 |     // this method exists to support opacity
[INFO] [stdout] 106 |     pub fn with_opacity(mut self, opacity: f32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `start_interactive_layer` is never used
[INFO] [stdout]   --> src/menu/edit/layers/interactive_tool/mod.rs:16:8
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub fn start_interactive_layer(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_cell_analysis` is never used
[INFO] [stdout]   --> src/menu/scientific/analysis/handlers.rs:21:8
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub fn handle_cell_analysis(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_batch_analysis` is never used
[INFO] [stdout]   --> src/menu/scientific/analysis/handlers.rs:59:8
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn handle_batch_analysis(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_show_statistics` is never used
[INFO] [stdout]   --> src/menu/scientific/analysis/handlers.rs:78:8
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub fn handle_show_statistics(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_export_analysis` is never used
[INFO] [stdout]   --> src/menu/scientific/analysis/handlers.rs:92:8
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub fn handle_export_analysis(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_stop_analysis` is never used
[INFO] [stdout]    --> src/menu/scientific/analysis/handlers.rs:106:8
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub fn handle_stop_analysis(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_watermark_options`, `get_scientific_state`, and `get_scientific_state_mut` are never used
[INFO] [stdout]   --> src/state/mod.rs:55:11
[INFO] [stdout]    |
[INFO] [stdout] 41 | impl ImageState {
[INFO] [stdout]    | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 55 |    pub fn get_watermark_options(&self) -> WatermarkOptions {
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |    pub fn get_scientific_state(&self) -> &ScientificState {
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |    pub fn get_scientific_state_mut(&mut self) -> &mut ScientificState {
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `current_filter` is never read
[INFO] [stdout]   --> src/state/filter_state.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct FilterState {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 27 |     is_preview_active: bool,
[INFO] [stdout] 28 |     current_filter: Option<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FilterState` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_current_filter` and `set_current_filter` are never used
[INFO] [stdout]   --> src/state/filter_state.rs:92:12
[INFO] [stdout]    |
[INFO] [stdout] 31 | impl FilterState {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 92 |     pub fn get_current_filter(&self) -> Option<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 96 |     pub fn set_current_filter(&mut self, filter: Option<String>) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `message` is never read
[INFO] [stdout]   --> src/state/watermark_state.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct WatermarkError {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] 16 |     pub message: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `WatermarkError` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name` and `options` are never read
[INFO] [stdout]   --> src/state/watermark_state.rs:29:9
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub struct WatermarkTemplate {
[INFO] [stdout]    |            ----------------- fields in this struct
[INFO] [stdout] 29 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 30 |     pub options: WatermarkOptions,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `WatermarkTemplate` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `list_templates` is never used
[INFO] [stdout]   --> src/state/watermark_state.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | impl TemplateManager {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn list_templates(&self) -> Vec<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `template_manager` and `current_template` are never read
[INFO] [stdout]   --> src/state/watermark_state.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct WatermarkState {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] 54 |     template_manager: Arc<Mutex<TemplateManager>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 55 |     current_template: Option<WatermarkTemplate>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `WatermarkState` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `clear_watermark`, `get_current_watermark_type`, `get_current_template`, and `list_templates` are never used
[INFO] [stdout]    --> src/state/watermark_state.rs:221:12
[INFO] [stdout]     |
[INFO] [stdout]  61 | impl WatermarkState {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 221 |     pub fn clear_watermark(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     pub fn get_current_watermark_type(&self) -> Option<&'static str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 280 |     pub fn get_current_template(&self) -> Option<WatermarkTemplate> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 292 |     pub fn list_templates(&self) -> Result<Vec<String>, WatermarkError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `image` is never read
[INFO] [stdout]  --> src/state/layer_state.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct Layer {
[INFO] [stdout]   |            ----- field in this struct
[INFO] [stdout] 7 |     pub name: String,
[INFO] [stdout] 8 |     pub image: RgbImage,
[INFO] [stdout]   |         ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `Layer` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_active_layer` and `set_active_layer` are never used
[INFO] [stdout]    --> src/state/layer_state.rs:244:12
[INFO] [stdout]     |
[INFO] [stdout]  33 | impl LayerState {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 244 |     pub fn get_active_layer(&self) -> Option<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 248 |     pub fn set_active_layer(&mut self, index: usize) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TemplateExport` is never constructed
[INFO] [stdout]   --> src/utils/template_utils.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct TemplateExport {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `export_template` is never used
[INFO] [stdout]   --> src/utils/template_utils.rs:20:8
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub fn export_template(template: &WatermarkTemplate, export_dir: &Path) -> Result<(), WatermarkError> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `import_template` is never used
[INFO] [stdout]   --> src/utils/template_utils.rs:49:8
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub fn import_template<P: AsRef<Path>>(template_path: P) -> Result<TemplateExport, WatermarkError> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `validate_template` is never used
[INFO] [stdout]   --> src/utils/template_utils.rs:77:8
[INFO] [stdout]    |
[INFO] [stdout] 77 | pub fn validate_template(template: &WatermarkTemplate) -> Result<(), WatermarkError> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ImageData` is never constructed
[INFO] [stdout]  --> src/utils/image_data.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct ImageData {
[INFO] [stdout]   |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `get_intensity`, `get_image`, `width`, and `height` are never used
[INFO] [stdout]   --> src/utils/image_data.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout]  9 | impl ImageData {
[INFO] [stdout]    | -------------- associated items in this implementation
[INFO] [stdout] 10 |     pub fn new(image: RgbImage) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 14 |     pub fn get_intensity(&self, x: i32, y: i32) -> u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub fn get_image(&self) -> &RgbImage {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub fn width(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 38 |     pub fn height(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `channels` is never read
[INFO] [stdout]  --> src/scientific/analysis/intensity_profile.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct IntensityProfile {
[INFO] [stdout]   |            ---------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 7 |     pub channels: Vec<usize>,
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ColocalizationAnalysis` is never constructed
[INFO] [stdout]  --> src/scientific/analysis/colocalization.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct ColocalizationAnalysis {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `analyze`, `get_intensity_vectors`, `calculate_pearson`, `calculate_overlap`, `calculate_manders`, and `calculate_icq` are never used
[INFO] [stdout]   --> src/scientific/analysis/colocalization.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl ColocalizationAnalysis {
[INFO] [stdout]    | --------------------------- associated functions in this implementation
[INFO] [stdout] 15 |     pub fn analyze(channel1: &Channel, channel2: &Channel) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     fn get_intensity_vectors(channel1: &Channel, channel2: &Channel) -> (Vec<f32>, Vec<f32>) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     fn calculate_pearson(x: &[f32], y: &[f32]) -> f32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     fn calculate_overlap(x: &[f32], y: &[f32]) -> f32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     fn calculate_manders(x: &[f32], y: &[f32]) -> (f32, f32) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 93 |     fn calculate_icq(x: &[f32], y: &[f32]) -> f32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `create_metrics` and `detect_outliers` are never used
[INFO] [stdout]   --> src/scientific/analysis/cell_statistics.rs:68:8
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl CellStatistics {
[INFO] [stdout]    | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 68 |     fn create_metrics<'a>(&'a self, measurements: &'a [CellMeasurement]) -> Vec<(&str, &MetricStatistics, Box<dyn Iterator<Item = f64> + ...
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub fn detect_outliers(&self, measurements: &[CellMeasurement]) -> Vec<(usize, String)> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `percentile` is never used
[INFO] [stdout]    --> src/scientific/analysis/cell_statistics.rs:224:4
[INFO] [stdout]     |
[INFO] [stdout] 224 | fn percentile(mut values: impl Iterator<Item = f64>, p: f64) -> f64 {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `detect_outliers` and `calculate_shape_factors` are never used
[INFO] [stdout]    --> src/scientific/analysis/cell_statistics.rs:244:8
[INFO] [stdout]     |
[INFO] [stdout] 242 | pub trait StatisticalAnalysis {
[INFO] [stdout]     |           ------------------- methods in this trait
[INFO] [stdout] 243 |     fn analyze(&self) -> CellStatistics;
[INFO] [stdout] 244 |     fn detect_outliers(&self) -> Vec<(usize, String)>;
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 245 |     fn calculate_shape_factors(&self) -> Vec<f64>;
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `export_statistics_report` is never used
[INFO] [stdout]    --> src/scientific/analysis/cell_statistics.rs:271:8
[INFO] [stdout]     |
[INFO] [stdout] 271 | pub fn export_statistics_report(stats: &CellStatistics, path: &std::path::Path) -> std::io::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `timestamp` is never read
[INFO] [stdout]   --> src/scientific/analysis/cell_analysis.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct CellMeasurement {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] 11 |     pub timestamp: chrono::DateTime<Utc>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CellMeasurement` 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: methods `get_measurements`, `clear_measurements`, and `create_measurement_annotation` are never used
[INFO] [stdout]    --> src/scientific/analysis/cell_analysis.rs:165:12
[INFO] [stdout]     |
[INFO] [stdout]  75 | impl CellAnalyzer {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 165 |     pub fn get_measurements(&self) -> &Vec<CellMeasurement> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 169 |     pub fn clear_measurements(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |     pub fn create_measurement_annotation(&self, measurement: &CellMeasurement, roi: &ROIShape) -> Annotation {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `transformation_matrix` is never read
[INFO] [stdout]   --> src/scientific/calibration/spatial_calibration.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct SpatialCalibration {
[INFO] [stdout]    |            ------------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     pub transformation_matrix: Option<[[f32; 3]; 3]>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SpatialCalibration` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `pixel_to_real` and `real_to_pixel` are never used
[INFO] [stdout]   --> src/scientific/calibration/spatial_calibration.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | impl SpatialCalibration {
[INFO] [stdout]    | ----------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn pixel_to_real(&self, pixel_coord: (i32, i32)) -> (f32, f32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn real_to_pixel(&self, real_coord: (f32, f32)) -> (i32, i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `pseudo_color` and `opacity` are never read
[INFO] [stdout]   --> src/scientific/layers/channel.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct Channel {
[INFO] [stdout]    |            ------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 10 |     pub pseudo_color: (u8, u8, u8),
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 11 |     pub opacity: f32,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Channel` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Measurement` and `Text` are never constructed
[INFO] [stdout]   --> src/scientific/layers/annotation.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout]  5 | pub enum AnnotationType {
[INFO] [stdout]    |          -------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 14 |     Measurement {
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 18 |     Text {
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AnnotationType` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `image` is never read
[INFO] [stdout]   --> src/scientific/layers/annotation.rs:27:9
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct Annotation {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] 26 |     pub name: String,
[INFO] [stdout] 27 |     pub image: RgbImage,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Annotation` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/scientific/layers/metadata.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 29 | impl Calibration {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn new(
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `current_measurement_points`, `frame`, and `state` are never read
[INFO] [stdout]   --> src/scientific/state/scientific_state.rs:27:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct ScientificState {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub current_measurement_points: Vec<(i32, i32)>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     frame: Option<Rc<RefCell<Frame>>>,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 34 |     state: Option<Rc<RefCell<ImageState>>>,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/scientific/state/scientific_state.rs:130:12
[INFO] [stdout]     |
[INFO] [stdout]  45 | impl ScientificState {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn get_base_image(&self) -> Option<RgbImage> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn set_frame(&mut self, frame: Rc<RefCell<Frame>>) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn set_state(&mut self, state: Rc<RefCell<ImageState>>) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn get_frame(&self) -> Option<Rc<RefCell<Frame>>> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 151 |     pub fn get_state(&self) -> Option<Rc<RefCell<ImageState>>> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     pub fn update_current_roi(&mut self, points: Vec<(i32, i32)>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 162 |     pub fn clear_current_roi(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 220 |     pub fn get_active_roi_type(&self) -> ROIShape {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 231 |     pub fn add_point(&mut self, point: (i32, i32)) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     pub fn clear_points(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 247 |     pub fn set_show_overlay(&mut self, show: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 277 |     pub fn get_annotation_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 324 |     pub fn blend_channel(&self, composite: &mut Vec<u8>, channel: &Channel) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 426 |     pub fn set_measurement_tool(&mut self, tool: MeasurementTool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 461 |     fn draw_in_progress(&self, composite: &mut Vec<u8>, width: i32, height: i32, points: &[(i32, i32)], color: (u8, u8, u8)) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 645 |     pub fn add_measurement(&mut self, start: (i32, i32), end: (i32, i32)) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 665 |     pub fn calculate_roi_area(&self, points: &[(i32, i32)]) -> (f64, String) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 685 |     pub fn toggle_annotation_visibility(&mut self, index: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 692 |     pub fn get_visible_annotations(&self) -> Vec<&Annotation> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_measurements`, `analyze_roi`, `clear_measurements`, and `get_statistics` are never used
[INFO] [stdout]    --> src/scientific/tools/interactive/cell_analysis_tool.rs:31:12
[INFO] [stdout]     |
[INFO] [stdout]  19 | impl CellAnalysisTool {
[INFO] [stdout]     | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  31 |     pub fn get_measurements(&self) -> &[CellMeasurement] {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |     pub fn analyze_roi(
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 162 |     pub fn clear_measurements(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 166 |     pub fn get_statistics(&self) -> Option<CellStatistics> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_cell_statistics` and `get_measurements` are never used
[INFO] [stdout]    --> src/scientific/tools/interactive/cell_analysis_tool.rs:193:8
[INFO] [stdout]     |
[INFO] [stdout] 188 | pub trait CellAnalysisState {
[INFO] [stdout]     |           ----------------- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 193 |     fn get_cell_statistics(&self) -> Option<CellStatistics>;
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 194 |     fn get_measurements(&self) -> Option<Vec<CellMeasurement>>;
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `outline_color` and `line_width` are never read
[INFO] [stdout]    --> src/scientific/tools/interactive/roi_tool.rs:107:9
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub struct ROIProperties {
[INFO] [stdout]     |            ------------- fields in this struct
[INFO] [stdout] 107 |     pub outline_color: (u8, u8, u8),
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 108 |     pub line_width: i32,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ROIProperties` 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: fields `base_image` and `properties` are never read
[INFO] [stdout]    --> src/scientific/tools/interactive/roi_tool.rs:134:5
[INFO] [stdout]     |
[INFO] [stdout] 130 | pub struct InteractiveROIState {
[INFO] [stdout]     |            ------------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 134 |     base_image: Option<RgbImage>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 135 |     scaling: Option<ScalingInfo>,
[INFO] [stdout] 136 |     properties: ROIProperties,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `calculate_rectangle` and `show_roi_mode_dialog` are never used
[INFO] [stdout]    --> src/scientific/tools/interactive/roi_tool.rs:153:8
[INFO] [stdout]     |
[INFO] [stdout] 140 | impl InteractiveROIState {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 153 |     fn calculate_rectangle(&self, start: (i32, i32), current: (i32, i32)) -> (i32, i32, i32, i32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 160 |     pub fn show_roi_mode_dialog(on_select: impl Fn(ROIShape) + 'static) -> ShapeSelector {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MeasurementTool` is never constructed
[INFO] [stdout]   --> src/scientific/tools/interactive/measurement_tool.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct MeasurementTool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `create_measurement`, `calculate_distance`, `create_scale_bar`, and `handle_measurement` are never used
[INFO] [stdout]   --> src/scientific/tools/interactive/measurement_tool.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl MeasurementTool {
[INFO] [stdout]    | -------------------- associated items in this implementation
[INFO] [stdout] 23 |     pub fn new(calibration: SpatialCalibration, line_color: (u8, u8, u8), line_width: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn create_measurement(&self, points: Vec<(i32, i32)>, name: String, _image: RgbImage) -> Annotation {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn calculate_distance(&self, points: &[(i32, i32)]) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn create_scale_bar(&self, length: f32, position: (i32, i32), image: RgbImage) -> Annotation {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn handle_measurement(&self, state_ref: &mut ImageState, points: &[(i32, i32)]) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `start_interactive_measurement` is never used
[INFO] [stdout]   --> src/scientific/tools/interactive/measurement_tool.rs:95:8
[INFO] [stdout]    |
[INFO] [stdout] 95 | pub fn start_interactive_measurement(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>, tool: MeasurementTool) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IntensityStatistics` is never constructed
[INFO] [stdout]  --> src/scientific/tools/interactive/roi/measurements.rs:9:8
[INFO] [stdout]   |
[INFO] [stdout] 9 | struct IntensityStatistics {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MeasurementCalculator` is never constructed
[INFO] [stdout]   --> src/scientific/tools/interactive/roi/measurements.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct MeasurementCalculator {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/scientific/tools/interactive/roi/measurements.rs:22:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl MeasurementCalculator {
[INFO] [stdout]     | -------------------------- associated items in this implementation
[INFO] [stdout]  22 |     pub fn new(calibration: Option<SpatialCalibration>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  26 |     fn generate_ellipse_points(&self, width: i32, height: i32) -> Vec<(i32, i32)> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  49 |     fn calculate_ellipse_measurements(&self, width: i32, height: i32, image_data: &ImageData) -> ROIMeasurements {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  78 |     pub fn calculate_measurements(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  95 |     fn calculate_polygon_measurements(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 133 |     fn calculate_polygon_area(&self, points: &[(i32, i32)]) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     fn calculate_polygon_perimeter(&self, points: &[(i32, i32)]) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     fn calculate_centroid(&self, points: &[(i32, i32)]) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 181 |     fn calculate_solidity(&self, points: &[(i32, i32)], area: f64) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     fn calculate_shape_factors(&self, points: &[(i32, i32)]) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 212 |     fn calculate_rectangle_measurements(&self, width: i32, height: i32, image_data: &ImageData) -> ROIMeasurements {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 245 |     fn calculate_line_measurements(&self, points: &[(i32, i32)], image_data: &ImageData) -> ROIMeasurements {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 276 |     fn calculate_intensity_statistics(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 331 |     fn point_in_polygon(&self, point: (i32, i32), vertices: &[(i32, i32)]) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 352 |     fn calibrate_area(&self, area: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 360 |     fn calibrate_length(&self, length: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 368 |     fn get_units(&self) -> String {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ROIProperties` is never constructed
[INFO] [stdout]  --> src/scientific/tools/interactive/roi/properties.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct ROIProperties {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `set_visibility`, `set_selection`, `toggle_lock`, `update_style`, and `update_colors` are never used
[INFO] [stdout]   --> src/scientific/tools/interactive/roi/properties.rs:37:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | impl ROIProperties {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] 37 |     pub fn new(color: (u8, u8, u8), line_width: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn set_visibility(&mut self, visible: bool) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn set_selection(&mut self, selected: bool) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn toggle_lock(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn update_style(&mut self, line_style: LineStyle, line_width: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn update_colors(&mut self, outline: (u8, u8, u8), fill: Option<(u8, u8, u8)>) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ROIState` is never constructed
[INFO] [stdout]   --> src/scientific/tools/interactive/roi/properties.rs:73:12
[INFO] [stdout]    |
[INFO] [stdout] 73 | pub struct ROIState {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/scientific/tools/interactive/roi/properties.rs:84:12
[INFO] [stdout]     |
[INFO] [stdout]  83 | impl ROIState {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout]  84 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn set_frame(&mut self, frame: Rc<RefCell<Frame>>) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 100 |     pub fn get_frame(&self) -> Option<Rc<RefCell<Frame>>> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn get_active_tool_mut(&self) -> Option<Rc<RefCell<ROITool>>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub fn set_active_tool(&mut self, tool: ROITool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn start_drawing(&mut self, shape_type: ROIShape) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn add_point(&mut self, point: (i32, i32)) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn finish_drawing(&mut self) -> Option<ROIShape> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |     fn update_shape(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 166 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub fn is_active(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub fn lock(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 182 |     pub fn unlock(&mut self) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 186 |     pub fn set_properties(&mut self, properties: ROIProperties) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn get_measurements(&self) -> Option<ROIMeasurements> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 220 |     pub fn set_notes(&mut self, notes: Option<String>) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn toggle_measurements(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 230 |     pub fn get_bounding_box(&self) -> Option<(i32, i32, i32, i32)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_scale_bar` is never used
[INFO] [stdout]   --> src/scientific/ui/measurement_dialog.rs:15:4
[INFO] [stdout]    |
[INFO] [stdout] 15 | fn add_scale_bar(state: &mut ScientificState, length: f32, unit: String) {
[INFO] [stdout]    |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `show_measurement_dialog` is never used
[INFO] [stdout]   --> src/scientific/ui/measurement_dialog.rs:31:8
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub fn show_measurement_dialog(state: &Rc<RefCell<ImageState>>) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `show_roi_dialog` is never used
[INFO] [stdout]   --> src/scientific/ui/roi_dialog.rs:15:8
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub fn show_roi_dialog(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `show_batch_analysis_dialog` is never used
[INFO] [stdout]    --> src/scientific/ui/cell_analysis/dialog.rs:112:8
[INFO] [stdout]     |
[INFO] [stdout] 112 | pub fn show_batch_analysis_dialog(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_col_widths` is never used
[INFO] [stdout]   --> src/scientific/ui/cell_analysis/table.rs:88:8
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub fn set_col_widths(table: &mut Table, data: &[Vec<String>]) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `customize_table` is never used
[INFO] [stdout]    --> src/scientific/ui/cell_analysis/table.rs:108:8
[INFO] [stdout]     |
[INFO] [stdout] 108 | pub fn customize_table(table: &mut Table) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `statistics_table` and `auto_update` are never read
[INFO] [stdout]   --> src/scientific/ui/roi/batch_dialog.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub struct BatchDialog {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 39 |     statistics_table: TableRow,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     auto_update: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `BatchDialog` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `add_measurement`, `hide`, and `is_visible` are never used
[INFO] [stdout]    --> src/scientific/ui/roi/batch_dialog.rs:312:12
[INFO] [stdout]     |
[INFO] [stdout]  52 | impl BatchDialog {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 312 |     pub fn add_measurement(&mut self, measurement: ROIMeasurements) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 341 |     pub fn hide(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 345 |     pub fn is_visible(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PADDING` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/components/mod.rs:10:11
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub const PADDING: i32 = 5;
[INFO] [stdout]    |           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BUTTON_HEIGHT` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/components/mod.rs:11:11
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub const BUTTON_HEIGHT: i32 = 25;
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INPUT_HEIGHT` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/components/mod.rs:12:11
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub const INPUT_HEIGHT: i32 = 25;
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `HEADER_HEIGHT` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/components/mod.rs:14:11
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub const HEADER_HEIGHT: i32 = 30;
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRIMARY_COLOR` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/components/mod.rs:17:11
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub const PRIMARY_COLOR: (u8, u8, u8) = (0, 121, 194);    // Blue
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SECONDARY_COLOR` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/components/mod.rs:18:11
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub const SECONDARY_COLOR: (u8, u8, u8) = (88, 88, 88);   // Gray
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SUCCESS_COLOR` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/components/mod.rs:19:11
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub const SUCCESS_COLOR: (u8, u8, u8) = (40, 167, 69);    // Green
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WARNING_COLOR` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/components/mod.rs:20:11
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub const WARNING_COLOR: (u8, u8, u8) = (255, 193, 7);    // Yellow
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ERROR_COLOR` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/components/mod.rs:21:11
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub const ERROR_COLOR: (u8, u8, u8) = (220, 53, 69);      // Red
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TITLE_FONT_SIZE` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/components/mod.rs:26:11
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub const TITLE_FONT_SIZE: i32 = 16;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ColorPicker` is never constructed
[INFO] [stdout]   --> src/scientific/ui/roi/components/color_picker.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct ColorPicker {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/scientific/ui/roi/components/color_picker.rs:22:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl ColorPicker {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  22 |     pub fn new(x: i32, y: i32, w: i32, h: i32, label: &str, initial_color: (u8, u8, u8)) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     pub fn x(&self) -> i32 {
[INFO] [stdout]     |            ^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn y(&self) -> i32 {
[INFO] [stdout]     |            ^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn width(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn height(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub fn label(&self) -> String {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     fn setup_callbacks(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 179 |     pub fn get_color(&self) -> (u8, u8, u8) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     pub fn set_color(&mut self, color: (u8, u8, u8)) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LineStyleSelector` is never constructed
[INFO] [stdout]   --> src/scientific/ui/roi/components/line_style_selector.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct LineStyleSelector {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `setup_callbacks`, `get_style`, `get_width`, `set_style`, and `set_width` are never used
[INFO] [stdout]    --> src/scientific/ui/roi/components/line_style_selector.rs:22:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl LineStyleSelector {
[INFO] [stdout]     | ---------------------- associated items in this implementation
[INFO] [stdout]  22 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  84 |     fn setup_callbacks(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn get_style(&self) -> LineStyle {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fn get_width(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn set_style(&mut self, style: LineStyle) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 133 |     pub fn set_width(&mut self, width: i32) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `selected_row` is never read
[INFO] [stdout]   --> src/scientific/ui/roi/components/measurement_table.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub struct MeasurementTable {
[INFO] [stdout]    |            ---------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 33 |     selected_row: Option<i32>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MeasurementTable` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_selected_measurement`, `set_row_callback`, `clear`, `get_row_count`, `get_all_measurements`, and `export_csv` are never used
[INFO] [stdout]    --> src/scientific/ui/roi/components/measurement_table.rs:193:12
[INFO] [stdout]     |
[INFO] [stdout]  36 | impl MeasurementTable {
[INFO] [stdout]     | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 193 |     pub fn get_selected_measurement(&self) -> Option<ROIMeasurements> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub fn set_row_callback<F: Fn(i32) + 'static>(&mut self, callback: F) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 212 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     pub fn get_row_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 223 |     pub fn get_all_measurements(&self) -> Vec<ROIMeasurements> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 227 |     pub fn export_csv(&self, path: &std::path::Path) -> std::io::Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ExportFormat` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/export_dialog.rs:17:10
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub enum ExportFormat {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExportOptions` is never constructed
[INFO] [stdout]   --> src/scientific/ui/roi/export_dialog.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct ExportOptions {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExportDialog` is never constructed
[INFO] [stdout]   --> src/scientific/ui/roi/export_dialog.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub struct ExportDialog {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:70:12
[INFO] [stdout]     |
[INFO] [stdout]  69 | impl ExportDialog {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout]  70 |     pub fn new(parent: Rc<RefCell<Window>>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     fn setup_callbacks(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     fn update_options(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 238 |     fn validate_export(&self) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 246 |     fn perform_export(&self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 255 |     fn export_csv(&self) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     fn export_json(&self) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 263 |     fn export_excel(&self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 267 |     fn export_image_roi(&self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 271 |     pub fn show(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 275 |     pub fn hide(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 279 |     pub fn is_visible(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MeasurementDialog` is never constructed
[INFO] [stdout]   --> src/scientific/ui/roi/measurement_dialog.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct MeasurementDialog {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `setup_callbacks`, `export_measurements`, `show`, `hide`, and `is_visible` are never used
[INFO] [stdout]    --> src/scientific/ui/roi/measurement_dialog.rs:25:12
[INFO] [stdout]     |
[INFO] [stdout]  24 | impl MeasurementDialog {
[INFO] [stdout]     | ---------------------- associated items in this implementation
[INFO] [stdout]  25 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     fn setup_callbacks(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     fn export_measurements(measurements: &ROIMeasurements, path: &std::path::Path) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub fn show(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 122 |     pub fn hide(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn is_visible(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PropertiesDialog` is never constructed
[INFO] [stdout]   --> src/scientific/ui/roi/properties_dialog.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub struct PropertiesDialog {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `setup_callbacks`, `show`, `hide`, and `is_visible` are never used
[INFO] [stdout]    --> src/scientific/ui/roi/properties_dialog.rs:49:12
[INFO] [stdout]     |
[INFO] [stdout]  48 | impl PropertiesDialog {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout]  49 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     fn setup_callbacks(&self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn show(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub fn hide(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub fn is_visible(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `LineStyle` is never used
[INFO] [stdout]  --> src/scientific/types.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub enum LineStyle {
[INFO] [stdout]   |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `integrated_density`, `std_dev`, `aspect_ratio`, `roundness`, `solidity`, and `is_calibrated` are never read
[INFO] [stdout]   --> src/scientific/types.rs:76:9
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub struct ROIMeasurements {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub integrated_density: f64,  // Added to match usage
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 77 |     pub std_dev: f64,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 78 |     pub aspect_ratio: f64,      
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 79 |     pub roundness: f64,        
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 80 |     pub solidity: f64,         
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 81 |     pub shape_type: ROIShape,     // Added to match usage
[INFO] [stdout] 82 |     pub is_calibrated: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ROIMeasurements` 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: fields `active`, `unit`, `color`, and `line_width` are never read
[INFO] [stdout]   --> src/scientific/types.rs:87:9
[INFO] [stdout]    |
[INFO] [stdout] 86 | pub struct MeasurementTool {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 87 |     pub active: bool,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 88 |     pub unit: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 89 |     pub color: (u8, u8, u8),
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 90 |     pub line_width: i32,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/scientific/types.rs:94:12
[INFO] [stdout]    |
[INFO] [stdout] 93 | impl MeasurementTool {
[INFO] [stdout]    | -------------------- associated function in this implementation
[INFO] [stdout] 94 |     pub fn new(unit: String) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `draw_text_with_background`, `draw_line_with_endpoints`, `draw_measurement`, `draw_guide_text`, and `calculate_position` are never used
[INFO] [stdout]    --> src/scientific/rendering/frame_renderer.rs:79:12
[INFO] [stdout]     |
[INFO] [stdout]  15 | impl FrameRenderer {
[INFO] [stdout]     | ------------------ associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  79 |     pub fn draw_text_with_background(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn draw_line_with_endpoints(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn draw_measurement(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 160 |     pub fn draw_guide_text(text: &str, x: i32, y: i32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |     pub fn calculate_position(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: eliding a lifetime that's named elsewhere is confusing
[INFO] [stdout]   --> src/scientific/analysis/cell_statistics.rs:68:82
[INFO] [stdout]    |
[INFO] [stdout] 68 | ...etrics<'a>(&'a self, measurements: &'a [CellMeasurement]) -> Vec<(&str, &MetricStatistics, Box<dyn Iterator<Item = f64> + 'a>)> {
[INFO] [stdout]    |                --                      --                            ^^^^  ^^^^^^^^^^^^^^^^^ the same lifetime is elided here
[INFO] [stdout]    |                |                       |                             |
[INFO] [stdout]    |                |                       the lifetime is named here    the same lifetime is elided here
[INFO] [stdout]    |                the lifetime is named here
[INFO] [stdout]    |
[INFO] [stdout]    = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]    = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: consistently use `'a`
[INFO] [stdout]    |
[INFO] [stdout] 68 |     fn create_metrics<'a>(&'a self, measurements: &'a [CellMeasurement]) -> Vec<(&'a str, &'a MetricStatistics, Box<dyn Iterator<Item = f64> + 'a>)> {
[INFO] [stdout]    |                                                                                   ++       ++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 00s
[INFO] running `Command { std: "docker" "inspect" "a732e7cb22dcf81ec95384ea2193acced636fc459c92fec11cab15d45fee7001", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "a732e7cb22dcf81ec95384ea2193acced636fc459c92fec11cab15d45fee7001", kill_on_drop: false }`
[INFO] [stdout] a732e7cb22dcf81ec95384ea2193acced636fc459c92fec11cab15d45fee7001
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+1ef7943ee607160a564655b6596f83670ef95df5" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 5f4c418a1652318b4158f487215fe3c8147a44f46737ee8df1a59643baba8371
[INFO] running `Command { std: "docker" "start" "-a" "5f4c418a1652318b4158f487215fe3c8147a44f46737ee8df1a59643baba8371", kill_on_drop: false }`
[INFO] [stderr]    Compiling youtube_image-viewer v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `crop_tool::CropSelection`
[INFO] [stdout]  --> src/menu/edit/crop/mod.rs:3:9
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub use crop_tool::CropSelection;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `match` scrutinee expression
[INFO] [stdout]   --> src/menu/edit/filters/basic/hue.rs:47:31
[INFO] [stdout]    |
[INFO] [stdout] 47 |         let (r, g, b) = match (h as i32) {
[INFO] [stdout]    |                               ^        ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 47 -         let (r, g, b) = match (h as i32) {
[INFO] [stdout] 47 +         let (r, g, b) = match h as i32  {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]    --> src/menu/edit/filters/advanced/convolution.rs:197:21
[INFO] [stdout]     |
[INFO] [stdout] 197 |                     ((filtered as f32 * factor + orig as f32 * (1.0 - factor)) as u8)
[INFO] [stdout]     |                     ^                                                               ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 197 -                     ((filtered as f32 * factor + orig as f32 * (1.0 - factor)) as u8)
[INFO] [stdout] 197 +                     (filtered as f32 * factor + orig as f32 * (1.0 - factor)) as u8
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]    --> src/menu/edit/filters/advanced/pixelate.rs:139:9
[INFO] [stdout]     |
[INFO] [stdout] 139 |         ((pixelated as f32 * factor + original as f32 * (1.0 - factor)) as u8)
[INFO] [stdout]     |         ^                                                                    ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 139 -         ((pixelated as f32 * factor + original as f32 * (1.0 - factor)) as u8)
[INFO] [stdout] 139 +         (pixelated as f32 * factor + original as f32 * (1.0 - factor)) as u8
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `EdgeDetectionFilter` and `NoiseFilter`
[INFO] [stdout]   --> src/menu/edit/filters/handlers.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     EdgeDetectionFilter,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 29 |     EdgeDetectionMethod,
[INFO] [stdout] 30 |     NoiseFilter,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `start_interactive_pixelate`
[INFO] [stdout]   --> src/menu/edit/filters/handlers.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 40 |     start_interactive_pixelate,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `handle_apply_motion_blur` and `handle_apply_posterize`
[INFO] [stdout]   --> src/menu/edit/filters/dialog.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 44 |     handle_apply_posterize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 45 |     handle_apply_motion_blur,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::ImageFilter`
[INFO] [stdout]   --> src/menu/edit/filters/pixelate_tool.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use super::ImageFilter;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ConvolutionType` and `EdgeDetectionMethod`
[INFO] [stdout]   --> src/menu/edit/filters/mod.rs:35:20
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub use advanced::{ConvolutionType, EdgeDetectionMethod};  // Re-export from advanced module
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]   --> src/menu/edit/layers/color_filter.rs:73:9
[INFO] [stdout]    |
[INFO] [stdout] 73 |         ((color as f32 * factor + original as f32 * (1.0 - factor)) as u8)
[INFO] [stdout]    |         ^                                                                ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 73 -         ((color as f32 * factor + original as f32 * (1.0 - factor)) as u8)
[INFO] [stdout] 73 +         (color as f32 * factor + original as f32 * (1.0 - factor)) as u8
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `color_tool::start_interactive_color`
[INFO] [stdout]  --> src/menu/edit/layers/mod.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub use color_tool::start_interactive_color;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `dialog::show_cell_analysis_dialog`
[INFO] [stdout]  --> src/menu/scientific/analysis/handlers.rs:8:13
[INFO] [stdout]   |
[INFO] [stdout] 8 |             dialog::show_cell_analysis_dialog,
[INFO] [stdout]   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `handle_batch_analysis`, `handle_cell_analysis`, `handle_export_analysis`, `handle_show_statistics`, and `handle_stop_analysis`
[INFO] [stdout]   --> src/menu/scientific/analysis/mod.rs:7:5
[INFO] [stdout]    |
[INFO] [stdout]  7 |     handle_cell_analysis,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  8 |     handle_batch_analysis,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  9 |     handle_show_statistics,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 10 |     handle_export_analysis,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 11 |     handle_stop_analysis,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `fltk::image::RgbImage`
[INFO] [stdout]  --> src/scientific/analysis/colocalization.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use fltk::image::RgbImage;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/scientific/analysis/colocalization.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MeasurementTool`
[INFO] [stdout]  --> src/scientific/analysis/cell_analysis.rs:3:23
[INFO] [stdout]   |
[INFO] [stdout] 3 |     types::{ROIShape, MeasurementTool},
[INFO] [stdout]   |                       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `fltk::image::RgbImage`
[INFO] [stdout]  --> src/scientific/calibration/spatial_calibration.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use fltk::image::RgbImage;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Metadata`
[INFO] [stdout]  --> src/scientific/state/scientific_state.rs:7:50
[INFO] [stdout]   |
[INFO] [stdout] 7 |     layers::{Channel, Annotation, AnnotationType,Metadata, Calibration},
[INFO] [stdout]   |                                                  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Button` and `Pack`
[INFO] [stdout]  --> src/scientific/tools/interactive/roi_tool.rs:7:20
[INFO] [stdout]   |
[INFO] [stdout] 7 |     group::{Group, Pack},
[INFO] [stdout]   |                    ^^^^
[INFO] [stdout] 8 |     button::{RadioRoundButton, Button},
[INFO] [stdout]   |                                ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AnnotationType` and `Annotation`
[INFO] [stdout]   --> src/scientific/tools/interactive/roi_tool.rs:15:14
[INFO] [stdout]    |
[INFO] [stdout] 15 |     layers::{Annotation, AnnotationType},
[INFO] [stdout]    |              ^^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/scientific/tools/interactive/roi_tool.rs:466:45
[INFO] [stdout]     |
[INFO] [stdout] 466 | ...                   let angle = (i as f64 * 2.0 * std::f64::consts::PI / num_points as f64);
[INFO] [stdout]     |                                   ^                                                         ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 466 -                                 let angle = (i as f64 * 2.0 * std::f64::consts::PI / num_points as f64);
[INFO] [stdout] 466 +                                 let angle = i as f64 * 2.0 * std::f64::consts::PI / num_points as f64 ;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Event`
[INFO] [stdout]  --> src/scientific/tools/interactive/metadata_tool.rs:2:13
[INFO] [stdout]   |
[INFO] [stdout] 2 |     enums::{Event, Color, Align},
[INFO] [stdout]   |             ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `measurement_tool::*`
[INFO] [stdout]   --> src/scientific/tools/interactive/mod.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub use measurement_tool::*;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ScaleRenderer`
[INFO] [stdout]  --> src/scientific/tools/handlers/scale.rs:4:36
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::scientific::rendering::{ScaleRenderer, FrameRenderer};
[INFO] [stdout]   |                                    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `MeasurementTool`, `ROIShape`, and `ROITool`
[INFO] [stdout]  --> src/scientific/tools/mod.rs:5:23
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use interactive::{ROITool, ROIShape, MeasurementTool};
[INFO] [stdout]   |                       ^^^^^^^  ^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Align` and `Input`
[INFO] [stdout]  --> src/scientific/ui/channel_dialog.rs:6:25
[INFO] [stdout]   |
[INFO] [stdout] 6 |     input::{FloatInput, Input},
[INFO] [stdout]   |                         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 9 |     enums::{Color, FrameType, Align},
[INFO] [stdout]   |                               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]   --> src/scientific/ui/measurement_dialog.rs:12:25
[INFO] [stdout]    |
[INFO] [stdout] 12 | use crate::scientific::{self, Annotation, AnnotationType};
[INFO] [stdout]    |                         ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FloatInput`
[INFO] [stdout]  --> src/scientific/ui/scale_dialog.rs:4:20
[INFO] [stdout]   |
[INFO] [stdout] 4 |     input::{Input, FloatInput},
[INFO] [stdout]   |                    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Color`
[INFO] [stdout]  --> src/scientific/ui/cell_analysis/dialog.rs:7:13
[INFO] [stdout]   |
[INFO] [stdout] 7 |     enums::{Color, FrameType},
[INFO] [stdout]   |             ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CellStatistics` and `StatisticalAnalysis`
[INFO] [stdout]   --> src/scientific/ui/cell_analysis/dialog.rs:16:31
[INFO] [stdout]    |
[INFO] [stdout] 16 |             cell_statistics::{CellStatistics, StatisticalAnalysis}
[INFO] [stdout]    |                               ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Pack`
[INFO] [stdout]  --> src/scientific/ui/cell_analysis/statistics.rs:5:13
[INFO] [stdout]   |
[INFO] [stdout] 5 |     group::{Pack, Tabs, Group},
[INFO] [stdout]   |             ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `dialog::show_cell_analysis_dialog`
[INFO] [stdout]  --> src/scientific/ui/cell_analysis/mod.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub use dialog::show_cell_analysis_dialog;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `statistics::show_statistics_dialog`
[INFO] [stdout]  --> src/scientific/ui/cell_analysis/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use statistics::show_statistics_dialog;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `export_batch_measurements` and `export_measurement_data`
[INFO] [stdout]  --> src/scientific/ui/cell_analysis/mod.rs:8:18
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use export::{export_measurement_data, export_batch_measurements};
[INFO] [stdout]   |                  ^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Font`
[INFO] [stdout]  --> src/scientific/ui/roi/batch_dialog.rs:9:20
[INFO] [stdout]   |
[INFO] [stdout] 9 |     enums::{Color, Font, FrameType, Align},
[INFO] [stdout]   |                    ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `collections::HashMap`
[INFO] [stdout]   --> src/scientific/ui/roi/batch_dialog.rs:12:34
[INFO] [stdout]    |
[INFO] [stdout] 12 | use std::{rc::Rc, cell::RefCell, collections::HashMap};
[INFO] [stdout]    |                                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tools::interactive::roi::measurements::MeasurementCalculator`
[INFO] [stdout]   --> src/scientific/ui/roi/batch_dialog.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 |     tools::interactive::roi::measurements::MeasurementCalculator,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FrameType`
[INFO] [stdout]   --> src/scientific/ui/roi/components/line_style_selector.rs:10:13
[INFO] [stdout]    |
[INFO] [stdout] 10 |     enums::{FrameType, Align},
[INFO] [stdout]    |             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `measurement_table::MeasurementTable`
[INFO] [stdout]  --> src/scientific/ui/roi/components/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use measurement_table::MeasurementTable;  // Make public
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Color`
[INFO] [stdout]  --> src/scientific/ui/roi/export_dialog.rs:7:20
[INFO] [stdout]   |
[INFO] [stdout] 7 |     enums::{Align, Color, FrameType},
[INFO] [stdout]   |                    ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ROIMeasurements`, `ROIShape`, and `tools::interactive::roi::measurements::MeasurementCalculator`
[INFO] [stdout]   --> src/scientific/ui/roi/export_dialog.rs:12:13
[INFO] [stdout]    |
[INFO] [stdout] 12 |     types::{ROIMeasurements, ROIShape},
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 13 |     tools::interactive::roi::measurements::MeasurementCalculator,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tools::interactive::roi::measurements::MeasurementCalculator`
[INFO] [stdout]   --> src/scientific/ui/roi/measurement_dialog.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 |     tools::interactive::roi::measurements::MeasurementCalculator,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BatchDialog`
[INFO] [stdout]   --> src/scientific/ui/roi/mod.rs:11:24
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub use batch_dialog::{BatchDialog, show_batch_analysis_dialog};
[INFO] [stdout]    |                        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `batch_dialog::*`
[INFO] [stdout]   --> src/scientific/ui/roi/mod.rs:13:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub use batch_dialog::*;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `export_dialog::*`
[INFO] [stdout]   --> src/scientific/ui/roi/mod.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub use export_dialog::*;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `measurement_dialog::*`
[INFO] [stdout]   --> src/scientific/ui/roi/mod.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub use measurement_dialog::*;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `properties_dialog::*`
[INFO] [stdout]   --> src/scientific/ui/roi/mod.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub use properties_dialog::*;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self::batch_dialog::BatchStatistics`
[INFO] [stdout]   --> src/scientific/ui/roi/mod.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub use self::batch_dialog::BatchStatistics;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `cell_analysis::*`
[INFO] [stdout]   --> src/scientific/ui/mod.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub use cell_analysis::*;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `roi::*`
[INFO] [stdout]   --> src/scientific/ui/mod.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub use roi::*;
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::scientific::rendering::frame_renderer::FrameRenderer`
[INFO] [stdout]  --> src/scientific/rendering/scale_renderer.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::scientific::rendering::frame_renderer::FrameRenderer;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Metadata`
[INFO] [stdout]   --> src/scientific/mod.rs:12:55
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub use layers::{Channel, Annotation, AnnotationType, Metadata};
[INFO] [stdout]    |                                                       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ColocalizationAnalysis`
[INFO] [stdout]   --> src/scientific/mod.rs:13:38
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub use analysis::{IntensityProfile, ColocalizationAnalysis};
[INFO] [stdout]    |                                      ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `calibration::SpatialCalibration`
[INFO] [stdout]   --> src/scientific/mod.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub use calibration::SpatialCalibration;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `state::ScientificState`
[INFO] [stdout]   --> src/scientific/mod.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub use state::ScientificState;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `LegendPosition`, `MeasurementTool`, `ROIShape`, and `ROITool`
[INFO] [stdout]   --> src/scientific/mod.rs:16:17
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub use types::{LegendPosition, ROIShape, ROITool, MeasurementTool};
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^  ^^^^^^^^  ^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `reporting::CalibrationReport`
[INFO] [stdout]   --> src/scientific/mod.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub use reporting::CalibrationReport;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `visualization::CellVisualizer`
[INFO] [stdout]   --> src/scientific/mod.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub use visualization::CellVisualizer;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Event`
[INFO] [stdout]   --> src/main.rs:12:23
[INFO] [stdout]    |
[INFO] [stdout] 12 |     enums::{Shortcut, Event, CallbackTrigger},
[INFO] [stdout]    |                       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::scientific::tools::interactive::cell_analysis_tool::CellAnalysisState`
[INFO] [stdout]   --> src/main.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use crate::scientific::tools::interactive::cell_analysis_tool::CellAnalysisState;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `prelude`
[INFO] [stdout]  --> src/menu/file/open.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 |     prelude::*,
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `prelude`
[INFO] [stdout]  --> src/scientific/tools/interactive/cell_analysis_tool.rs:1:29
[INFO] [stdout]   |
[INFO] [stdout] 1 | use fltk::{image::RgbImage, prelude::*, enums::Event};
[INFO] [stdout]   |                             ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/menu/edit/crop/crop_tool.rs:132:17
[INFO] [stdout]     |
[INFO] [stdout] 132 |     if let Some(mut fltk_image) = cropped_img {
[INFO] [stdout]     |                 ----^^^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `now`
[INFO] [stdout]   --> src/menu/edit/watermark/templates/defaults.rs:15:13
[INFO] [stdout]    |
[INFO] [stdout] 15 |         let now = chrono::Utc::now();
[INFO] [stdout]    |             ^^^ help: if this is intentional, prefix it with an underscore: `_now`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pack`
[INFO] [stdout]    --> src/menu/edit/layers/dialog.rs:103:5
[INFO] [stdout]     |
[INFO] [stdout] 103 |     pack: &mut Pack,
[INFO] [stdout]     |     ^^^^ help: if this is intentional, prefix it with an underscore: `_pack`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pack`
[INFO] [stdout]    --> src/menu/edit/layers/dialog.rs:139:5
[INFO] [stdout]     |
[INFO] [stdout] 139 |     pack: &mut Pack,
[INFO] [stdout]     |     ^^^^ help: if this is intentional, prefix it with an underscore: `_pack`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `filter`
[INFO] [stdout]   --> src/menu/edit/layers/interactive_tool/mod.rs:40:9
[INFO] [stdout]    |
[INFO] [stdout] 40 |     let filter = ColorFilter::new(color);
[INFO] [stdout]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_filter`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame_clone`
[INFO] [stdout]   --> src/menu/edit/layers/color_tool.rs:57:13
[INFO] [stdout]    |
[INFO] [stdout] 57 |         let frame_clone = frame_clone.clone();
[INFO] [stdout]    |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_frame_clone`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]   --> src/menu/scientific/analysis/handlers.rs:78:31
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub fn handle_show_statistics(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stdout]    |                               ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]   --> src/menu/scientific/analysis/handlers.rs:92:31
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub fn handle_export_analysis(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stdout]    |                               ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `is_analyzing`
[INFO] [stdout]    --> src/menu/scientific/analysis/cell.rs:157:25
[INFO] [stdout]     |
[INFO] [stdout] 157 |                     let is_analyzing = state_ref.scientific_state.is_analyzing_cells();
[INFO] [stdout]     |                         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_is_analyzing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `stats`
[INFO] [stdout]   --> src/scientific/analysis/cell_statistics.rs:89:31
[INFO] [stdout]    |
[INFO] [stdout] 89 |             for (metric_name, stats, values) in &metrics {
[INFO] [stdout]    |                               ^^^^^ help: if this is intentional, prefix it with an underscore: `_stats`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/analysis/cell_statistics.rs:224:15
[INFO] [stdout]     |
[INFO] [stdout] 224 | fn percentile(mut values: impl Iterator<Item = f64>, p: f64) -> f64 {
[INFO] [stdout]     |               ----^^^^^^
[INFO] [stdout]     |               |
[INFO] [stdout]     |               help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `unit`
[INFO] [stdout]    --> src/scientific/state/scientific_state.rs:449:54
[INFO] [stdout]     |
[INFO] [stdout] 449 |             AnnotationType::Scale { pixels_per_unit, unit } => {
[INFO] [stdout]     |                                                      ^^^^ help: try ignoring the field: `unit: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pixels_per_unit`
[INFO] [stdout]    --> src/scientific/state/scientific_state.rs:491:103
[INFO] [stdout]     |
[INFO] [stdout] 491 |     fn draw_scale_bar(&self, composite: &mut Vec<u8>, width: i32, height: i32, points: &[(i32, i32)], pixels_per_unit: f32) {
[INFO] [stdout]     |                                                                                                       ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pixels_per_unit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `length`
[INFO] [stdout]    --> src/scientific/state/scientific_state.rs:568:105
[INFO] [stdout]     |
[INFO] [stdout] 568 |     fn draw_measurement(&self, composite: &mut Vec<u8>, width: i32, height: i32, points: &[(i32, i32)], length: f32, unit: &str) {
[INFO] [stdout]     |                                                                                                         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_length`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/scientific/tools/interactive/roi_tool.rs:422:17
[INFO] [stdout]     |
[INFO] [stdout] 422 |                 _ => {}
[INFO] [stdout]     |                 ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/scientific/tools/interactive/roi_tool.rs:422:17
[INFO] [stdout]     |
[INFO] [stdout] 378 |                 ROIShape::Rectangle { .. } => {
[INFO] [stdout]     |                 -------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 395 |                 ROIShape::Ellipse { .. } => {
[INFO] [stdout]     |                 ------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 409 |                 ROIShape::Line { .. } => {
[INFO] [stdout]     |                 --------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 417 |                 ROIShape::Polygon { .. } => {
[INFO] [stdout]     |                 ------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 422 |                 _ => {}
[INFO] [stdout]     |                 ^ collectively making this unreachable
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/tools/interactive/roi_tool.rs:235:19
[INFO] [stdout]     |
[INFO] [stdout] 235 |         if let Ok(mut state_ref) = state.try_borrow_mut() {
[INFO] [stdout]     |                   ----^^^^^^^^^
[INFO] [stdout]     |                   |
[INFO] [stdout]     |                   help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/scientific/tools/interactive/metadata_tool.rs:28:13
[INFO] [stdout]    |
[INFO] [stdout] 28 |         let mut window = Window::default()
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/tools/interactive/metadata_tool.rs:153:19
[INFO] [stdout]     |
[INFO] [stdout] 153 |         if let Ok(mut state_ref) = state_clone.try_borrow_mut() {
[INFO] [stdout]     |                   ----^^^^^^^^^
[INFO] [stdout]     |                   |
[INFO] [stdout]     |                   help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `state_ref`
[INFO] [stdout]    --> src/scientific/tools/interactive/metadata_tool.rs:153:19
[INFO] [stdout]     |
[INFO] [stdout] 153 |         if let Ok(mut state_ref) = state_clone.try_borrow_mut() {
[INFO] [stdout]     |                   ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_state_ref`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `new_metadata`
[INFO] [stdout]    --> src/scientific/tools/interactive/metadata_tool.rs:154:17
[INFO] [stdout]     |
[INFO] [stdout] 154 |             let new_metadata = editor.get_metadata();
[INFO] [stdout]     |                 ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_new_metadata`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `convex_hull_area`
[INFO] [stdout]    --> src/scientific/tools/interactive/roi/measurements.rs:110:14
[INFO] [stdout]     |
[INFO] [stdout] 110 |         let (convex_hull_area, solidity) = self.calculate_solidity(points, area);
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_convex_hull_area`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `points`
[INFO] [stdout]    --> src/scientific/tools/interactive/roi/measurements.rs:181:34
[INFO] [stdout]     |
[INFO] [stdout] 181 |     fn calculate_solidity(&self, points: &[(i32, i32)], area: f64) -> (f64, f64) {
[INFO] [stdout]     |                                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_points`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `channel_list`
[INFO] [stdout]   --> src/scientific/ui/channel_dialog.rs:29:9
[INFO] [stdout]    |
[INFO] [stdout] 29 |     let channel_list = create_channel_list(&mut pack, state.clone());
[INFO] [stdout]    |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_channel_list`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vis_header`
[INFO] [stdout]   --> src/scientific/ui/channel_dialog.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 63 |     let vis_header = Frame::new(0, 0, 25, 25, "");
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_vis_header`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action_header`
[INFO] [stdout]   --> src/scientific/ui/channel_dialog.rs:70:9
[INFO] [stdout]    |
[INFO] [stdout] 70 |     let action_header = Frame::new(0, 0, 60, 25, "");
[INFO] [stdout]    |         ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_action_header`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/channel_dialog.rs:109:13
[INFO] [stdout]     |
[INFO] [stdout] 109 |         let mut wavelength = Frame::new(0, 0, 100, 35, &*wavelength_text);
[INFO] [stdout]     |             ----^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `wavelength`
[INFO] [stdout]    --> src/scientific/ui/channel_dialog.rs:109:13
[INFO] [stdout]     |
[INFO] [stdout] 109 |         let mut wavelength = Frame::new(0, 0, 100, 35, &*wavelength_text);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_wavelength`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `profile`
[INFO] [stdout]  --> src/scientific/ui/profile_dialog.rs:7:28
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub fn show_profile_dialog(profile: &IntensityProfile) {
[INFO] [stdout]   |                            ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_profile`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> src/scientific/ui/scale_dialog.rs:250:13
[INFO] [stdout]     |
[INFO] [stdout] 250 |         let frame = frame.clone();
[INFO] [stdout]     |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> src/scientific/ui/cell_analysis/dialog.rs:113:5
[INFO] [stdout]     |
[INFO] [stdout] 113 |     frame: &Rc<RefCell<Frame>>,
[INFO] [stdout]     |     ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/scientific/ui/cell_analysis/statistics.rs:32:9
[INFO] [stdout]    |
[INFO] [stdout] 32 |     let mut tabs = Tabs::new(WINDOW_PADDING, WINDOW_PADDING, 780, 540, "");
[INFO] [stdout]    |         ----^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/scientific/ui/cell_analysis/statistics.rs:35:9
[INFO] [stdout]    |
[INFO] [stdout] 35 |     let mut summary_group = Group::new(WINDOW_PADDING, 35, 780, 515, "Summary");
[INFO] [stdout]    |         ----^^^^^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/scientific/ui/cell_analysis/statistics.rs:67:9
[INFO] [stdout]    |
[INFO] [stdout] 67 |     let mut correlations_group = Group::new(WINDOW_PADDING, 35, 780, 515, "Correlations");
[INFO] [stdout]    |         ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `measurement`
[INFO] [stdout]  --> src/scientific/ui/cell_analysis/export.rs:8:53
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub fn export_measurement_data(_state: &ImageState, measurement: &CellMeasurement) {
[INFO] [stdout]   |                                                     ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_measurement`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `measurements`
[INFO] [stdout]   --> src/scientific/ui/cell_analysis/export.rs:12:55
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub fn export_batch_measurements(_state: &ImageState, measurements: &[CellMeasurement]) {
[INFO] [stdout]    |                                                       ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_measurements`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/batch_dialog.rs:105:13
[INFO] [stdout]     |
[INFO] [stdout] 105 |         let mut scroll = Scroll::new(5, 25, 770, 270, "");
[INFO] [stdout]     |             ----^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/batch_dialog.rs:137:13
[INFO] [stdout]     |
[INFO] [stdout] 137 |         let mut auto_update = CheckButton::new(0, 0, 150, 30, "Auto Update");
[INFO] [stdout]     |             ----^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path`
[INFO] [stdout]    --> src/scientific/ui/roi/batch_dialog.rs:333:30
[INFO] [stdout]     |
[INFO] [stdout] 333 |     fn export_to_file(&self, path: &std::path::Path) {
[INFO] [stdout]     |                              ^^^^ help: if this is intentional, prefix it with an underscore: `_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> src/scientific/ui/roi/batch_dialog.rs:350:5
[INFO] [stdout]     |
[INFO] [stdout] 350 |     frame: &Rc<RefCell<Frame>>,
[INFO] [stdout]     |     ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `state`
[INFO] [stdout]    --> src/scientific/ui/roi/batch_dialog.rs:351:5
[INFO] [stdout]     |
[INFO] [stdout] 351 |     state: &Rc<RefCell<ImageState>>,
[INFO] [stdout]     |     ^^^^^ help: if this is intentional, prefix it with an underscore: `_state`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `measurements`
[INFO] [stdout]    --> src/scientific/ui/roi/batch_dialog.rs:352:5
[INFO] [stdout]     |
[INFO] [stdout] 352 |     measurements: &Vec<CellMeasurement>
[INFO] [stdout]     |     ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_measurements`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/scientific/ui/roi/export_dialog.rs:93:13
[INFO] [stdout]    |
[INFO] [stdout] 93 |         let mut path_input = Input::new(0, 0, 300, 30, None);
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/scientific/ui/roi/export_dialog.rs:94:13
[INFO] [stdout]    |
[INFO] [stdout] 94 |         let mut browse_btn = Button::new(0, 0, 75, 30, Some("Browse"));
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:105:13
[INFO] [stdout]     |
[INFO] [stdout] 105 |         let mut json_radio = RadioRoundButton::new(20, 35, 160, 25, Some("JSON (.json)"));
[INFO] [stdout]     |             ----^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:106:13
[INFO] [stdout]     |
[INFO] [stdout] 106 |         let mut excel_radio = RadioRoundButton::new(20, 60, 160, 25, Some("Excel (.xlsx)"));
[INFO] [stdout]     |             ----^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:120:13
[INFO] [stdout]     |
[INFO] [stdout] 120 |         let mut measurements_check = CheckButton::new(20, 10, 340, 25, Some("Include Measurements"));
[INFO] [stdout]     |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:121:13
[INFO] [stdout]     |
[INFO] [stdout] 121 |         let mut statistics_check = CheckButton::new(20, 35, 340, 25, Some("Include Statistics"));
[INFO] [stdout]     |             ----^^^^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:122:13
[INFO] [stdout]     |
[INFO] [stdout] 122 |         let mut images_check = CheckButton::new(20, 60, 340, 25, Some("Include Images"));
[INFO] [stdout]     |             ----^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:123:13
[INFO] [stdout]     |
[INFO] [stdout] 123 |         let mut metadata_check = CheckButton::new(20, 85, 340, 25, Some("Include Metadata"));
[INFO] [stdout]     |             ----^^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:124:13
[INFO] [stdout]     |
[INFO] [stdout] 124 |         let mut batch_check = CheckButton::new(20, 110, 340, 25, Some("Batch Export"));
[INFO] [stdout]     |             ----^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:136:13
[INFO] [stdout]     |
[INFO] [stdout] 136 |         let mut export_btn = Button::new(0, 0, 185, 30, Some("Export"));
[INFO] [stdout]     |             ----^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:137:13
[INFO] [stdout]     |
[INFO] [stdout] 137 |         let mut cancel_btn = Button::new(0, 0, 185, 30, Some("Cancel"));
[INFO] [stdout]     |             ----^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `image_radio`
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:171:13
[INFO] [stdout]     |
[INFO] [stdout] 171 |         let image_radio = self.image_radio.clone();
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_image_radio`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/scientific/ui/roi/measurement_dialog.rs:49:13
[INFO] [stdout]    |
[INFO] [stdout] 49 |         let mut scroll = Scroll::new(0, 0, 380, 380, "");
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/scientific/ui/roi/measurement_dialog.rs:66:13
[INFO] [stdout]    |
[INFO] [stdout] 66 |         let mut export_btn = Button::new(0, 0, 185, 25, "Export Data");
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/scientific/ui/roi/measurement_dialog.rs:67:13
[INFO] [stdout]    |
[INFO] [stdout] 67 |         let mut close_btn = Button::new(195, 0, 185, 25, "Close");
[INFO] [stdout]    |             ----^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/scientific/ui/roi/properties_dialog.rs:138:23
[INFO] [stdout]     |
[INFO] [stdout] 138 |             if let Ok(mut state_ref) = state.try_borrow_mut() {
[INFO] [stdout]     |                       ----^^^^^^^^^
[INFO] [stdout]     |                       |
[INFO] [stdout]     |                       help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pixels_per_unit`
[INFO] [stdout]   --> src/scientific/rendering/scale_renderer.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 16 |         pixels_per_unit: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pixels_per_unit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `unit`
[INFO] [stdout]   --> src/scientific/rendering/scale_renderer.rs:46:9
[INFO] [stdout]    |
[INFO] [stdout] 46 |         unit: &str,
[INFO] [stdout]    |         ^^^^ help: if this is intentional, prefix it with an underscore: `_unit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `ShapeSelector` is more private than the item `InteractiveROIState::show_roi_mode_dialog`
[INFO] [stdout]    --> src/scientific/tools/interactive/roi_tool.rs:160:5
[INFO] [stdout]     |
[INFO] [stdout] 160 |     pub fn show_roi_mode_dialog(on_select: impl Fn(ROIShape) + 'static) -> ShapeSelector {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ associated function `InteractiveROIState::show_roi_mode_dialog` is reachable at visibility `pub(crate)`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `ShapeSelector` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/scientific/tools/interactive/roi_tool.rs:28:1
[INFO] [stdout]     |
[INFO] [stdout]  28 | struct ShapeSelector {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `InvalidPosition`, `InvalidOpacity`, `TextRenderingError`, and `BlendingError` are never constructed
[INFO] [stdout]   --> src/menu/edit/watermark/mod.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub enum WatermarkError {
[INFO] [stdout]    |          -------------- variants in this enum
[INFO] [stdout] 36 |     InvalidPosition(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 37 |     InvalidOpacity(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 38 |     TextRenderingError(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 39 |     ImageLoadError(String),
[INFO] [stdout] 40 |     BlendingError(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `WatermarkError` has derived impls for the traits `Clone` and `Debug`, but these are 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: enum `WatermarkSource` is never used
[INFO] [stdout]   --> src/menu/edit/watermark/mod.rs:46:10
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub enum WatermarkSource {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WatermarkTemplate` is never constructed
[INFO] [stdout]   --> src/menu/edit/watermark/mod.rs:80:12
[INFO] [stdout]    |
[INFO] [stdout] 80 | pub struct WatermarkTemplate {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `remove` is never used
[INFO] [stdout]    --> src/menu/edit/watermark/mod.rs:127:8
[INFO] [stdout]     |
[INFO] [stdout] 123 | pub trait Watermark {
[INFO] [stdout]     |           --------- method in this trait
[INFO] [stdout] ...
[INFO] [stdout] 127 |     fn remove(&self, image: &mut image::ImageBuffer<image::Rgba<u8>, Vec<u8>>, area: &WatermarkPosition) 
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `data` and `font` are never read
[INFO] [stdout]   --> src/menu/edit/watermark/fonts/mod.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | struct StaticFontData {
[INFO] [stdout]    |        -------------- fields in this struct
[INFO] [stdout] 11 |     data: Vec<u8>,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 12 |     font: Arc<Font<'static>>,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_font` and `remove_font` are never used
[INFO] [stdout]   --> src/menu/edit/watermark/fonts/mod.rs:61:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | impl FontManager {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn get_font(&self, name: &str) -> Option<Arc<Font<'static>>> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn remove_font(&mut self, name: &str) -> Result<(), WatermarkError> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_add_watermark` is never used
[INFO] [stdout]    --> src/menu/edit/watermark/handlers.rs:117:8
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub fn handle_add_watermark(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_position_valid` is never used
[INFO] [stdout]   --> src/menu/edit/watermark/position.rs:64:8
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub fn is_position_valid(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `save_template`, `load_template`, and `save_template_to_disk` are never used
[INFO] [stdout]    --> src/menu/edit/watermark/templates/mod.rs:48:12
[INFO] [stdout]     |
[INFO] [stdout]  17 | impl TemplateManager {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  48 |     pub fn save_template(
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  59 |     pub fn load_template(&self, name: &str) 
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     fn save_template_to_disk(&self, name: &str) -> Result<(), WatermarkError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `draw` is never used
[INFO] [stdout]   --> src/menu/edit/watermark/removal_tool.rs:94:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl WatermarkRemovalTool {
[INFO] [stdout]    | ------------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 94 |     pub fn draw(&self) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fltk_to_image_buffer` is never used
[INFO] [stdout]   --> src/menu/edit/filters/mod.rs:44:15
[INFO] [stdout]    |
[INFO] [stdout] 44 | pub(crate) fn fltk_to_image_buffer(fltk_image: &RgbImage) -> ImageBuffer<Rgba<u8>, Vec<u8>> {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `image_buffer_to_fltk` is never used
[INFO] [stdout]   --> src/menu/edit/filters/mod.rs:67:15
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub(crate) fn image_buffer_to_fltk(buffer: &ImageBuffer<Rgba<u8>, Vec<u8>>) -> Option<RgbImage> {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `gaussian_kernel` is never used
[INFO] [stdout]    --> src/menu/edit/filters/advanced/edge_detection.rs:117:8
[INFO] [stdout]     |
[INFO] [stdout]  23 | impl EdgeDetectionFilter {
[INFO] [stdout]     | ------------------------ associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 117 |     fn gaussian_kernel(size: usize, sigma: f32) -> Vec<f32> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_apply_edge_detection` is never used
[INFO] [stdout]    --> src/menu/edit/filters/handlers.rs:241:8
[INFO] [stdout]     |
[INFO] [stdout] 241 | pub fn handle_apply_edge_detection(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_apply_canny_edge_detection` is never used
[INFO] [stdout]    --> src/menu/edit/filters/handlers.rs:250:8
[INFO] [stdout]     |
[INFO] [stdout] 250 | pub fn handle_apply_canny_edge_detection(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_apply_noise` is never used
[INFO] [stdout]    --> src/menu/edit/filters/handlers.rs:258:8
[INFO] [stdout]     |
[INFO] [stdout] 258 | pub fn handle_apply_noise(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_apply_vignette` is never used
[INFO] [stdout]    --> src/menu/edit/filters/handlers.rs:266:8
[INFO] [stdout]     |
[INFO] [stdout] 266 | pub fn handle_apply_vignette(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_apply_posterize` is never used
[INFO] [stdout]    --> src/menu/edit/filters/handlers.rs:288:8
[INFO] [stdout]     |
[INFO] [stdout] 288 | pub fn handle_apply_posterize(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_apply_pixelate` is never used
[INFO] [stdout]    --> src/menu/edit/filters/handlers.rs:310:8
[INFO] [stdout]     |
[INFO] [stdout] 310 | pub fn handle_apply_pixelate(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_apply_motion_blur` is never used
[INFO] [stdout]    --> src/menu/edit/filters/handlers.rs:334:8
[INFO] [stdout]     |
[INFO] [stdout] 334 | pub fn handle_apply_motion_blur(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `with_opacity` is never used
[INFO] [stdout]    --> src/menu/edit/layers/color_filter.rs:106:12
[INFO] [stdout]     |
[INFO] [stdout] 104 | impl ColorFilter {
[INFO] [stdout]     | ---------------- method in this implementation
[INFO] [stdout] 105 |     // this method exists to support opacity
[INFO] [stdout] 106 |     pub fn with_opacity(mut self, opacity: f32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `start_interactive_layer` is never used
[INFO] [stdout]   --> src/menu/edit/layers/interactive_tool/mod.rs:16:8
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub fn start_interactive_layer(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_cell_analysis` is never used
[INFO] [stdout]   --> src/menu/scientific/analysis/handlers.rs:21:8
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub fn handle_cell_analysis(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_batch_analysis` is never used
[INFO] [stdout]   --> src/menu/scientific/analysis/handlers.rs:59:8
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn handle_batch_analysis(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_show_statistics` is never used
[INFO] [stdout]   --> src/menu/scientific/analysis/handlers.rs:78:8
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub fn handle_show_statistics(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_export_analysis` is never used
[INFO] [stdout]   --> src/menu/scientific/analysis/handlers.rs:92:8
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub fn handle_export_analysis(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_stop_analysis` is never used
[INFO] [stdout]    --> src/menu/scientific/analysis/handlers.rs:106:8
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub fn handle_stop_analysis(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_watermark_options`, `get_scientific_state`, and `get_scientific_state_mut` are never used
[INFO] [stdout]   --> src/state/mod.rs:55:11
[INFO] [stdout]    |
[INFO] [stdout] 41 | impl ImageState {
[INFO] [stdout]    | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 55 |    pub fn get_watermark_options(&self) -> WatermarkOptions {
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |    pub fn get_scientific_state(&self) -> &ScientificState {
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |    pub fn get_scientific_state_mut(&mut self) -> &mut ScientificState {
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `current_filter` is never read
[INFO] [stdout]   --> src/state/filter_state.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct FilterState {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 27 |     is_preview_active: bool,
[INFO] [stdout] 28 |     current_filter: Option<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FilterState` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_current_filter` and `set_current_filter` are never used
[INFO] [stdout]   --> src/state/filter_state.rs:92:12
[INFO] [stdout]    |
[INFO] [stdout] 31 | impl FilterState {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 92 |     pub fn get_current_filter(&self) -> Option<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 96 |     pub fn set_current_filter(&mut self, filter: Option<String>) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `message` is never read
[INFO] [stdout]   --> src/state/watermark_state.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct WatermarkError {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] 16 |     pub message: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `WatermarkError` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name` and `options` are never read
[INFO] [stdout]   --> src/state/watermark_state.rs:29:9
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub struct WatermarkTemplate {
[INFO] [stdout]    |            ----------------- fields in this struct
[INFO] [stdout] 29 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 30 |     pub options: WatermarkOptions,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `WatermarkTemplate` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `list_templates` is never used
[INFO] [stdout]   --> src/state/watermark_state.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | impl TemplateManager {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn list_templates(&self) -> Vec<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `template_manager` and `current_template` are never read
[INFO] [stdout]   --> src/state/watermark_state.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct WatermarkState {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] 54 |     template_manager: Arc<Mutex<TemplateManager>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 55 |     current_template: Option<WatermarkTemplate>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `WatermarkState` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `clear_watermark`, `get_current_watermark_type`, `get_current_template`, and `list_templates` are never used
[INFO] [stdout]    --> src/state/watermark_state.rs:221:12
[INFO] [stdout]     |
[INFO] [stdout]  61 | impl WatermarkState {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 221 |     pub fn clear_watermark(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     pub fn get_current_watermark_type(&self) -> Option<&'static str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 280 |     pub fn get_current_template(&self) -> Option<WatermarkTemplate> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 292 |     pub fn list_templates(&self) -> Result<Vec<String>, WatermarkError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `image` is never read
[INFO] [stdout]  --> src/state/layer_state.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct Layer {
[INFO] [stdout]   |            ----- field in this struct
[INFO] [stdout] 7 |     pub name: String,
[INFO] [stdout] 8 |     pub image: RgbImage,
[INFO] [stdout]   |         ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `Layer` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_active_layer` and `set_active_layer` are never used
[INFO] [stdout]    --> src/state/layer_state.rs:244:12
[INFO] [stdout]     |
[INFO] [stdout]  33 | impl LayerState {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 244 |     pub fn get_active_layer(&self) -> Option<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 248 |     pub fn set_active_layer(&mut self, index: usize) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TemplateExport` is never constructed
[INFO] [stdout]   --> src/utils/template_utils.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct TemplateExport {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `export_template` is never used
[INFO] [stdout]   --> src/utils/template_utils.rs:20:8
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub fn export_template(template: &WatermarkTemplate, export_dir: &Path) -> Result<(), WatermarkError> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `import_template` is never used
[INFO] [stdout]   --> src/utils/template_utils.rs:49:8
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub fn import_template<P: AsRef<Path>>(template_path: P) -> Result<TemplateExport, WatermarkError> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `validate_template` is never used
[INFO] [stdout]   --> src/utils/template_utils.rs:77:8
[INFO] [stdout]    |
[INFO] [stdout] 77 | pub fn validate_template(template: &WatermarkTemplate) -> Result<(), WatermarkError> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ImageData` is never constructed
[INFO] [stdout]  --> src/utils/image_data.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct ImageData {
[INFO] [stdout]   |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `get_intensity`, `get_image`, `width`, and `height` are never used
[INFO] [stdout]   --> src/utils/image_data.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout]  9 | impl ImageData {
[INFO] [stdout]    | -------------- associated items in this implementation
[INFO] [stdout] 10 |     pub fn new(image: RgbImage) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 14 |     pub fn get_intensity(&self, x: i32, y: i32) -> u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub fn get_image(&self) -> &RgbImage {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub fn width(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 38 |     pub fn height(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `channels` is never read
[INFO] [stdout]  --> src/scientific/analysis/intensity_profile.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct IntensityProfile {
[INFO] [stdout]   |            ---------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 7 |     pub channels: Vec<usize>,
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ColocalizationAnalysis` is never constructed
[INFO] [stdout]  --> src/scientific/analysis/colocalization.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct ColocalizationAnalysis {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `analyze`, `get_intensity_vectors`, `calculate_pearson`, `calculate_overlap`, `calculate_manders`, and `calculate_icq` are never used
[INFO] [stdout]   --> src/scientific/analysis/colocalization.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl ColocalizationAnalysis {
[INFO] [stdout]    | --------------------------- associated functions in this implementation
[INFO] [stdout] 15 |     pub fn analyze(channel1: &Channel, channel2: &Channel) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     fn get_intensity_vectors(channel1: &Channel, channel2: &Channel) -> (Vec<f32>, Vec<f32>) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     fn calculate_pearson(x: &[f32], y: &[f32]) -> f32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     fn calculate_overlap(x: &[f32], y: &[f32]) -> f32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     fn calculate_manders(x: &[f32], y: &[f32]) -> (f32, f32) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 93 |     fn calculate_icq(x: &[f32], y: &[f32]) -> f32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `create_metrics` and `detect_outliers` are never used
[INFO] [stdout]   --> src/scientific/analysis/cell_statistics.rs:68:8
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl CellStatistics {
[INFO] [stdout]    | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 68 |     fn create_metrics<'a>(&'a self, measurements: &'a [CellMeasurement]) -> Vec<(&str, &MetricStatistics, Box<dyn Iterator<Item = f64> + ...
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub fn detect_outliers(&self, measurements: &[CellMeasurement]) -> Vec<(usize, String)> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `percentile` is never used
[INFO] [stdout]    --> src/scientific/analysis/cell_statistics.rs:224:4
[INFO] [stdout]     |
[INFO] [stdout] 224 | fn percentile(mut values: impl Iterator<Item = f64>, p: f64) -> f64 {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `detect_outliers` and `calculate_shape_factors` are never used
[INFO] [stdout]    --> src/scientific/analysis/cell_statistics.rs:244:8
[INFO] [stdout]     |
[INFO] [stdout] 242 | pub trait StatisticalAnalysis {
[INFO] [stdout]     |           ------------------- methods in this trait
[INFO] [stdout] 243 |     fn analyze(&self) -> CellStatistics;
[INFO] [stdout] 244 |     fn detect_outliers(&self) -> Vec<(usize, String)>;
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 245 |     fn calculate_shape_factors(&self) -> Vec<f64>;
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `export_statistics_report` is never used
[INFO] [stdout]    --> src/scientific/analysis/cell_statistics.rs:271:8
[INFO] [stdout]     |
[INFO] [stdout] 271 | pub fn export_statistics_report(stats: &CellStatistics, path: &std::path::Path) -> std::io::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `timestamp` is never read
[INFO] [stdout]   --> src/scientific/analysis/cell_analysis.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct CellMeasurement {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] 11 |     pub timestamp: chrono::DateTime<Utc>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CellMeasurement` 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: methods `get_measurements`, `clear_measurements`, and `create_measurement_annotation` are never used
[INFO] [stdout]    --> src/scientific/analysis/cell_analysis.rs:165:12
[INFO] [stdout]     |
[INFO] [stdout]  75 | impl CellAnalyzer {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 165 |     pub fn get_measurements(&self) -> &Vec<CellMeasurement> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 169 |     pub fn clear_measurements(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |     pub fn create_measurement_annotation(&self, measurement: &CellMeasurement, roi: &ROIShape) -> Annotation {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `transformation_matrix` is never read
[INFO] [stdout]   --> src/scientific/calibration/spatial_calibration.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct SpatialCalibration {
[INFO] [stdout]    |            ------------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     pub transformation_matrix: Option<[[f32; 3]; 3]>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SpatialCalibration` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `pixel_to_real` and `real_to_pixel` are never used
[INFO] [stdout]   --> src/scientific/calibration/spatial_calibration.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | impl SpatialCalibration {
[INFO] [stdout]    | ----------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn pixel_to_real(&self, pixel_coord: (i32, i32)) -> (f32, f32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn real_to_pixel(&self, real_coord: (f32, f32)) -> (i32, i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `pseudo_color` and `opacity` are never read
[INFO] [stdout]   --> src/scientific/layers/channel.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct Channel {
[INFO] [stdout]    |            ------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 10 |     pub pseudo_color: (u8, u8, u8),
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 11 |     pub opacity: f32,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Channel` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Measurement` and `Text` are never constructed
[INFO] [stdout]   --> src/scientific/layers/annotation.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout]  5 | pub enum AnnotationType {
[INFO] [stdout]    |          -------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 14 |     Measurement {
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 18 |     Text {
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AnnotationType` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `image` is never read
[INFO] [stdout]   --> src/scientific/layers/annotation.rs:27:9
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct Annotation {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] 26 |     pub name: String,
[INFO] [stdout] 27 |     pub image: RgbImage,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Annotation` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/scientific/layers/metadata.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 29 | impl Calibration {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn new(
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `current_measurement_points`, `frame`, and `state` are never read
[INFO] [stdout]   --> src/scientific/state/scientific_state.rs:27:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct ScientificState {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub current_measurement_points: Vec<(i32, i32)>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     frame: Option<Rc<RefCell<Frame>>>,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 34 |     state: Option<Rc<RefCell<ImageState>>>,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/scientific/state/scientific_state.rs:130:12
[INFO] [stdout]     |
[INFO] [stdout]  45 | impl ScientificState {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn get_base_image(&self) -> Option<RgbImage> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn set_frame(&mut self, frame: Rc<RefCell<Frame>>) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn set_state(&mut self, state: Rc<RefCell<ImageState>>) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn get_frame(&self) -> Option<Rc<RefCell<Frame>>> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 151 |     pub fn get_state(&self) -> Option<Rc<RefCell<ImageState>>> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     pub fn update_current_roi(&mut self, points: Vec<(i32, i32)>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 162 |     pub fn clear_current_roi(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 220 |     pub fn get_active_roi_type(&self) -> ROIShape {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 231 |     pub fn add_point(&mut self, point: (i32, i32)) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     pub fn clear_points(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 247 |     pub fn set_show_overlay(&mut self, show: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 277 |     pub fn get_annotation_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 324 |     pub fn blend_channel(&self, composite: &mut Vec<u8>, channel: &Channel) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 426 |     pub fn set_measurement_tool(&mut self, tool: MeasurementTool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 461 |     fn draw_in_progress(&self, composite: &mut Vec<u8>, width: i32, height: i32, points: &[(i32, i32)], color: (u8, u8, u8)) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 645 |     pub fn add_measurement(&mut self, start: (i32, i32), end: (i32, i32)) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 665 |     pub fn calculate_roi_area(&self, points: &[(i32, i32)]) -> (f64, String) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 685 |     pub fn toggle_annotation_visibility(&mut self, index: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 692 |     pub fn get_visible_annotations(&self) -> Vec<&Annotation> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_measurements`, `analyze_roi`, `clear_measurements`, and `get_statistics` are never used
[INFO] [stdout]    --> src/scientific/tools/interactive/cell_analysis_tool.rs:31:12
[INFO] [stdout]     |
[INFO] [stdout]  19 | impl CellAnalysisTool {
[INFO] [stdout]     | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  31 |     pub fn get_measurements(&self) -> &[CellMeasurement] {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |     pub fn analyze_roi(
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 162 |     pub fn clear_measurements(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 166 |     pub fn get_statistics(&self) -> Option<CellStatistics> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_cell_statistics` and `get_measurements` are never used
[INFO] [stdout]    --> src/scientific/tools/interactive/cell_analysis_tool.rs:193:8
[INFO] [stdout]     |
[INFO] [stdout] 188 | pub trait CellAnalysisState {
[INFO] [stdout]     |           ----------------- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 193 |     fn get_cell_statistics(&self) -> Option<CellStatistics>;
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 194 |     fn get_measurements(&self) -> Option<Vec<CellMeasurement>>;
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `outline_color` and `line_width` are never read
[INFO] [stdout]    --> src/scientific/tools/interactive/roi_tool.rs:107:9
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub struct ROIProperties {
[INFO] [stdout]     |            ------------- fields in this struct
[INFO] [stdout] 107 |     pub outline_color: (u8, u8, u8),
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 108 |     pub line_width: i32,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ROIProperties` 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: fields `base_image` and `properties` are never read
[INFO] [stdout]    --> src/scientific/tools/interactive/roi_tool.rs:134:5
[INFO] [stdout]     |
[INFO] [stdout] 130 | pub struct InteractiveROIState {
[INFO] [stdout]     |            ------------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 134 |     base_image: Option<RgbImage>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 135 |     scaling: Option<ScalingInfo>,
[INFO] [stdout] 136 |     properties: ROIProperties,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `calculate_rectangle` and `show_roi_mode_dialog` are never used
[INFO] [stdout]    --> src/scientific/tools/interactive/roi_tool.rs:153:8
[INFO] [stdout]     |
[INFO] [stdout] 140 | impl InteractiveROIState {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 153 |     fn calculate_rectangle(&self, start: (i32, i32), current: (i32, i32)) -> (i32, i32, i32, i32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 160 |     pub fn show_roi_mode_dialog(on_select: impl Fn(ROIShape) + 'static) -> ShapeSelector {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MeasurementTool` is never constructed
[INFO] [stdout]   --> src/scientific/tools/interactive/measurement_tool.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct MeasurementTool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `create_measurement`, `calculate_distance`, `create_scale_bar`, and `handle_measurement` are never used
[INFO] [stdout]   --> src/scientific/tools/interactive/measurement_tool.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl MeasurementTool {
[INFO] [stdout]    | -------------------- associated items in this implementation
[INFO] [stdout] 23 |     pub fn new(calibration: SpatialCalibration, line_color: (u8, u8, u8), line_width: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn create_measurement(&self, points: Vec<(i32, i32)>, name: String, _image: RgbImage) -> Annotation {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn calculate_distance(&self, points: &[(i32, i32)]) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn create_scale_bar(&self, length: f32, position: (i32, i32), image: RgbImage) -> Annotation {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn handle_measurement(&self, state_ref: &mut ImageState, points: &[(i32, i32)]) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `start_interactive_measurement` is never used
[INFO] [stdout]   --> src/scientific/tools/interactive/measurement_tool.rs:95:8
[INFO] [stdout]    |
[INFO] [stdout] 95 | pub fn start_interactive_measurement(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>, tool: MeasurementTool) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IntensityStatistics` is never constructed
[INFO] [stdout]  --> src/scientific/tools/interactive/roi/measurements.rs:9:8
[INFO] [stdout]   |
[INFO] [stdout] 9 | struct IntensityStatistics {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MeasurementCalculator` is never constructed
[INFO] [stdout]   --> src/scientific/tools/interactive/roi/measurements.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct MeasurementCalculator {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/scientific/tools/interactive/roi/measurements.rs:22:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl MeasurementCalculator {
[INFO] [stdout]     | -------------------------- associated items in this implementation
[INFO] [stdout]  22 |     pub fn new(calibration: Option<SpatialCalibration>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  26 |     fn generate_ellipse_points(&self, width: i32, height: i32) -> Vec<(i32, i32)> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  49 |     fn calculate_ellipse_measurements(&self, width: i32, height: i32, image_data: &ImageData) -> ROIMeasurements {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  78 |     pub fn calculate_measurements(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  95 |     fn calculate_polygon_measurements(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 133 |     fn calculate_polygon_area(&self, points: &[(i32, i32)]) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     fn calculate_polygon_perimeter(&self, points: &[(i32, i32)]) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     fn calculate_centroid(&self, points: &[(i32, i32)]) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 181 |     fn calculate_solidity(&self, points: &[(i32, i32)], area: f64) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     fn calculate_shape_factors(&self, points: &[(i32, i32)]) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 212 |     fn calculate_rectangle_measurements(&self, width: i32, height: i32, image_data: &ImageData) -> ROIMeasurements {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 245 |     fn calculate_line_measurements(&self, points: &[(i32, i32)], image_data: &ImageData) -> ROIMeasurements {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 276 |     fn calculate_intensity_statistics(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 331 |     fn point_in_polygon(&self, point: (i32, i32), vertices: &[(i32, i32)]) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 352 |     fn calibrate_area(&self, area: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 360 |     fn calibrate_length(&self, length: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 368 |     fn get_units(&self) -> String {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ROIProperties` is never constructed
[INFO] [stdout]  --> src/scientific/tools/interactive/roi/properties.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct ROIProperties {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `set_visibility`, `set_selection`, `toggle_lock`, `update_style`, and `update_colors` are never used
[INFO] [stdout]   --> src/scientific/tools/interactive/roi/properties.rs:37:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | impl ROIProperties {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] 37 |     pub fn new(color: (u8, u8, u8), line_width: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn set_visibility(&mut self, visible: bool) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn set_selection(&mut self, selected: bool) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn toggle_lock(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn update_style(&mut self, line_style: LineStyle, line_width: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn update_colors(&mut self, outline: (u8, u8, u8), fill: Option<(u8, u8, u8)>) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ROIState` is never constructed
[INFO] [stdout]   --> src/scientific/tools/interactive/roi/properties.rs:73:12
[INFO] [stdout]    |
[INFO] [stdout] 73 | pub struct ROIState {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/scientific/tools/interactive/roi/properties.rs:84:12
[INFO] [stdout]     |
[INFO] [stdout]  83 | impl ROIState {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout]  84 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn set_frame(&mut self, frame: Rc<RefCell<Frame>>) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 100 |     pub fn get_frame(&self) -> Option<Rc<RefCell<Frame>>> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn get_active_tool_mut(&self) -> Option<Rc<RefCell<ROITool>>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub fn set_active_tool(&mut self, tool: ROITool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn start_drawing(&mut self, shape_type: ROIShape) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn add_point(&mut self, point: (i32, i32)) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn finish_drawing(&mut self) -> Option<ROIShape> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |     fn update_shape(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 166 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub fn is_active(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub fn lock(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 182 |     pub fn unlock(&mut self) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 186 |     pub fn set_properties(&mut self, properties: ROIProperties) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn get_measurements(&self) -> Option<ROIMeasurements> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 220 |     pub fn set_notes(&mut self, notes: Option<String>) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn toggle_measurements(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 230 |     pub fn get_bounding_box(&self) -> Option<(i32, i32, i32, i32)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_scale_bar` is never used
[INFO] [stdout]   --> src/scientific/ui/measurement_dialog.rs:15:4
[INFO] [stdout]    |
[INFO] [stdout] 15 | fn add_scale_bar(state: &mut ScientificState, length: f32, unit: String) {
[INFO] [stdout]    |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `show_measurement_dialog` is never used
[INFO] [stdout]   --> src/scientific/ui/measurement_dialog.rs:31:8
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub fn show_measurement_dialog(state: &Rc<RefCell<ImageState>>) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `show_roi_dialog` is never used
[INFO] [stdout]   --> src/scientific/ui/roi_dialog.rs:15:8
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub fn show_roi_dialog(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `show_batch_analysis_dialog` is never used
[INFO] [stdout]    --> src/scientific/ui/cell_analysis/dialog.rs:112:8
[INFO] [stdout]     |
[INFO] [stdout] 112 | pub fn show_batch_analysis_dialog(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_col_widths` is never used
[INFO] [stdout]   --> src/scientific/ui/cell_analysis/table.rs:88:8
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub fn set_col_widths(table: &mut Table, data: &[Vec<String>]) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `customize_table` is never used
[INFO] [stdout]    --> src/scientific/ui/cell_analysis/table.rs:108:8
[INFO] [stdout]     |
[INFO] [stdout] 108 | pub fn customize_table(table: &mut Table) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `statistics_table` and `auto_update` are never read
[INFO] [stdout]   --> src/scientific/ui/roi/batch_dialog.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub struct BatchDialog {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 39 |     statistics_table: TableRow,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     auto_update: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `BatchDialog` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `add_measurement`, `hide`, and `is_visible` are never used
[INFO] [stdout]    --> src/scientific/ui/roi/batch_dialog.rs:312:12
[INFO] [stdout]     |
[INFO] [stdout]  52 | impl BatchDialog {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 312 |     pub fn add_measurement(&mut self, measurement: ROIMeasurements) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 341 |     pub fn hide(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 345 |     pub fn is_visible(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PADDING` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/components/mod.rs:10:11
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub const PADDING: i32 = 5;
[INFO] [stdout]    |           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BUTTON_HEIGHT` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/components/mod.rs:11:11
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub const BUTTON_HEIGHT: i32 = 25;
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INPUT_HEIGHT` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/components/mod.rs:12:11
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub const INPUT_HEIGHT: i32 = 25;
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `HEADER_HEIGHT` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/components/mod.rs:14:11
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub const HEADER_HEIGHT: i32 = 30;
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRIMARY_COLOR` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/components/mod.rs:17:11
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub const PRIMARY_COLOR: (u8, u8, u8) = (0, 121, 194);    // Blue
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SECONDARY_COLOR` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/components/mod.rs:18:11
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub const SECONDARY_COLOR: (u8, u8, u8) = (88, 88, 88);   // Gray
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SUCCESS_COLOR` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/components/mod.rs:19:11
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub const SUCCESS_COLOR: (u8, u8, u8) = (40, 167, 69);    // Green
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WARNING_COLOR` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/components/mod.rs:20:11
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub const WARNING_COLOR: (u8, u8, u8) = (255, 193, 7);    // Yellow
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ERROR_COLOR` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/components/mod.rs:21:11
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub const ERROR_COLOR: (u8, u8, u8) = (220, 53, 69);      // Red
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TITLE_FONT_SIZE` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/components/mod.rs:26:11
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub const TITLE_FONT_SIZE: i32 = 16;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ColorPicker` is never constructed
[INFO] [stdout]   --> src/scientific/ui/roi/components/color_picker.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct ColorPicker {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/scientific/ui/roi/components/color_picker.rs:22:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl ColorPicker {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  22 |     pub fn new(x: i32, y: i32, w: i32, h: i32, label: &str, initial_color: (u8, u8, u8)) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     pub fn x(&self) -> i32 {
[INFO] [stdout]     |            ^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn y(&self) -> i32 {
[INFO] [stdout]     |            ^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn width(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn height(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub fn label(&self) -> String {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     fn setup_callbacks(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 179 |     pub fn get_color(&self) -> (u8, u8, u8) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     pub fn set_color(&mut self, color: (u8, u8, u8)) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LineStyleSelector` is never constructed
[INFO] [stdout]   --> src/scientific/ui/roi/components/line_style_selector.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct LineStyleSelector {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `setup_callbacks`, `get_style`, `get_width`, `set_style`, and `set_width` are never used
[INFO] [stdout]    --> src/scientific/ui/roi/components/line_style_selector.rs:22:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl LineStyleSelector {
[INFO] [stdout]     | ---------------------- associated items in this implementation
[INFO] [stdout]  22 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  84 |     fn setup_callbacks(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn get_style(&self) -> LineStyle {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fn get_width(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn set_style(&mut self, style: LineStyle) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 133 |     pub fn set_width(&mut self, width: i32) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `selected_row` is never read
[INFO] [stdout]   --> src/scientific/ui/roi/components/measurement_table.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub struct MeasurementTable {
[INFO] [stdout]    |            ---------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 33 |     selected_row: Option<i32>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MeasurementTable` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_selected_measurement`, `set_row_callback`, `clear`, `get_row_count`, `get_all_measurements`, and `export_csv` are never used
[INFO] [stdout]    --> src/scientific/ui/roi/components/measurement_table.rs:193:12
[INFO] [stdout]     |
[INFO] [stdout]  36 | impl MeasurementTable {
[INFO] [stdout]     | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 193 |     pub fn get_selected_measurement(&self) -> Option<ROIMeasurements> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub fn set_row_callback<F: Fn(i32) + 'static>(&mut self, callback: F) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 212 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     pub fn get_row_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 223 |     pub fn get_all_measurements(&self) -> Vec<ROIMeasurements> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 227 |     pub fn export_csv(&self, path: &std::path::Path) -> std::io::Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ExportFormat` is never used
[INFO] [stdout]   --> src/scientific/ui/roi/export_dialog.rs:17:10
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub enum ExportFormat {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExportOptions` is never constructed
[INFO] [stdout]   --> src/scientific/ui/roi/export_dialog.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct ExportOptions {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExportDialog` is never constructed
[INFO] [stdout]   --> src/scientific/ui/roi/export_dialog.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub struct ExportDialog {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/scientific/ui/roi/export_dialog.rs:70:12
[INFO] [stdout]     |
[INFO] [stdout]  69 | impl ExportDialog {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout]  70 |     pub fn new(parent: Rc<RefCell<Window>>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     fn setup_callbacks(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     fn update_options(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 238 |     fn validate_export(&self) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 246 |     fn perform_export(&self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 255 |     fn export_csv(&self) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     fn export_json(&self) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 263 |     fn export_excel(&self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 267 |     fn export_image_roi(&self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 271 |     pub fn show(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 275 |     pub fn hide(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 279 |     pub fn is_visible(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MeasurementDialog` is never constructed
[INFO] [stdout]   --> src/scientific/ui/roi/measurement_dialog.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct MeasurementDialog {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `setup_callbacks`, `export_measurements`, `show`, `hide`, and `is_visible` are never used
[INFO] [stdout]    --> src/scientific/ui/roi/measurement_dialog.rs:25:12
[INFO] [stdout]     |
[INFO] [stdout]  24 | impl MeasurementDialog {
[INFO] [stdout]     | ---------------------- associated items in this implementation
[INFO] [stdout]  25 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     fn setup_callbacks(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     fn export_measurements(measurements: &ROIMeasurements, path: &std::path::Path) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub fn show(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 122 |     pub fn hide(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn is_visible(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PropertiesDialog` is never constructed
[INFO] [stdout]   --> src/scientific/ui/roi/properties_dialog.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub struct PropertiesDialog {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `setup_callbacks`, `show`, `hide`, and `is_visible` are never used
[INFO] [stdout]    --> src/scientific/ui/roi/properties_dialog.rs:49:12
[INFO] [stdout]     |
[INFO] [stdout]  48 | impl PropertiesDialog {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout]  49 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     fn setup_callbacks(&self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn show(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub fn hide(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub fn is_visible(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `LineStyle` is never used
[INFO] [stdout]  --> src/scientific/types.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub enum LineStyle {
[INFO] [stdout]   |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `integrated_density`, `std_dev`, `aspect_ratio`, `roundness`, `solidity`, and `is_calibrated` are never read
[INFO] [stdout]   --> src/scientific/types.rs:76:9
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub struct ROIMeasurements {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub integrated_density: f64,  // Added to match usage
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 77 |     pub std_dev: f64,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 78 |     pub aspect_ratio: f64,      
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 79 |     pub roundness: f64,        
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 80 |     pub solidity: f64,         
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 81 |     pub shape_type: ROIShape,     // Added to match usage
[INFO] [stdout] 82 |     pub is_calibrated: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ROIMeasurements` 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: fields `active`, `unit`, `color`, and `line_width` are never read
[INFO] [stdout]   --> src/scientific/types.rs:87:9
[INFO] [stdout]    |
[INFO] [stdout] 86 | pub struct MeasurementTool {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 87 |     pub active: bool,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 88 |     pub unit: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 89 |     pub color: (u8, u8, u8),
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 90 |     pub line_width: i32,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/scientific/types.rs:94:12
[INFO] [stdout]    |
[INFO] [stdout] 93 | impl MeasurementTool {
[INFO] [stdout]    | -------------------- associated function in this implementation
[INFO] [stdout] 94 |     pub fn new(unit: String) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `draw_text_with_background`, `draw_line_with_endpoints`, `draw_measurement`, `draw_guide_text`, and `calculate_position` are never used
[INFO] [stdout]    --> src/scientific/rendering/frame_renderer.rs:79:12
[INFO] [stdout]     |
[INFO] [stdout]  15 | impl FrameRenderer {
[INFO] [stdout]     | ------------------ associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  79 |     pub fn draw_text_with_background(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn draw_line_with_endpoints(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn draw_measurement(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 160 |     pub fn draw_guide_text(text: &str, x: i32, y: i32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |     pub fn calculate_position(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: eliding a lifetime that's named elsewhere is confusing
[INFO] [stdout]   --> src/scientific/analysis/cell_statistics.rs:68:82
[INFO] [stdout]    |
[INFO] [stdout] 68 | ...etrics<'a>(&'a self, measurements: &'a [CellMeasurement]) -> Vec<(&str, &MetricStatistics, Box<dyn Iterator<Item = f64> + 'a>)> {
[INFO] [stdout]    |                --                      --                            ^^^^  ^^^^^^^^^^^^^^^^^ the same lifetime is elided here
[INFO] [stdout]    |                |                       |                             |
[INFO] [stdout]    |                |                       the lifetime is named here    the same lifetime is elided here
[INFO] [stdout]    |                the lifetime is named here
[INFO] [stdout]    |
[INFO] [stdout]    = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]    = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: consistently use `'a`
[INFO] [stdout]    |
[INFO] [stdout] 68 |     fn create_metrics<'a>(&'a self, measurements: &'a [CellMeasurement]) -> Vec<(&'a str, &'a MetricStatistics, Box<dyn Iterator<Item = f64> + 'a>)> {
[INFO] [stdout]    |                                                                                   ++       ++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 2.06s
[INFO] running `Command { std: "docker" "inspect" "5f4c418a1652318b4158f487215fe3c8147a44f46737ee8df1a59643baba8371", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "5f4c418a1652318b4158f487215fe3c8147a44f46737ee8df1a59643baba8371", kill_on_drop: false }`
[INFO] [stdout] 5f4c418a1652318b4158f487215fe3c8147a44f46737ee8df1a59643baba8371
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+1ef7943ee607160a564655b6596f83670ef95df5" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 3d506b38987acdab1df7fa9cdc2cd5c591b557a9b7f9cf31ff1bc358253a0dff
[INFO] running `Command { std: "docker" "start" "-a" "3d506b38987acdab1df7fa9cdc2cd5c591b557a9b7f9cf31ff1bc358253a0dff", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `crop_tool::CropSelection`
[INFO] [stderr]  --> src/menu/edit/crop/mod.rs:3:9
[INFO] [stderr]   |
[INFO] [stderr] 3 | pub use crop_tool::CropSelection;
[INFO] [stderr]   |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around `match` scrutinee expression
[INFO] [stderr]   --> src/menu/edit/filters/basic/hue.rs:47:31
[INFO] [stderr]    |
[INFO] [stderr] 47 |         let (r, g, b) = match (h as i32) {
[INFO] [stderr]    |                               ^        ^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]    |
[INFO] [stderr] 47 -         let (r, g, b) = match (h as i32) {
[INFO] [stderr] 47 +         let (r, g, b) = match h as i32  {
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around block return value
[INFO] [stderr]    --> src/menu/edit/filters/advanced/convolution.rs:197:21
[INFO] [stderr]     |
[INFO] [stderr] 197 |                     ((filtered as f32 * factor + orig as f32 * (1.0 - factor)) as u8)
[INFO] [stderr]     |                     ^                                                               ^
[INFO] [stderr]     |
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]     |
[INFO] [stderr] 197 -                     ((filtered as f32 * factor + orig as f32 * (1.0 - factor)) as u8)
[INFO] [stderr] 197 +                     (filtered as f32 * factor + orig as f32 * (1.0 - factor)) as u8
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around block return value
[INFO] [stderr]    --> src/menu/edit/filters/advanced/pixelate.rs:139:9
[INFO] [stderr]     |
[INFO] [stderr] 139 |         ((pixelated as f32 * factor + original as f32 * (1.0 - factor)) as u8)
[INFO] [stderr]     |         ^                                                                    ^
[INFO] [stderr]     |
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]     |
[INFO] [stderr] 139 -         ((pixelated as f32 * factor + original as f32 * (1.0 - factor)) as u8)
[INFO] [stderr] 139 +         (pixelated as f32 * factor + original as f32 * (1.0 - factor)) as u8
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `EdgeDetectionFilter` and `NoiseFilter`
[INFO] [stderr]   --> src/menu/edit/filters/handlers.rs:28:5
[INFO] [stderr]    |
[INFO] [stderr] 28 |     EdgeDetectionFilter,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 29 |     EdgeDetectionMethod,
[INFO] [stderr] 30 |     NoiseFilter,
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `start_interactive_pixelate`
[INFO] [stderr]   --> src/menu/edit/filters/handlers.rs:40:5
[INFO] [stderr]    |
[INFO] [stderr] 40 |     start_interactive_pixelate,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `handle_apply_motion_blur` and `handle_apply_posterize`
[INFO] [stderr]   --> src/menu/edit/filters/dialog.rs:44:5
[INFO] [stderr]    |
[INFO] [stderr] 44 |     handle_apply_posterize,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 45 |     handle_apply_motion_blur,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `super::ImageFilter`
[INFO] [stderr]   --> src/menu/edit/filters/pixelate_tool.rs:13:5
[INFO] [stderr]    |
[INFO] [stderr] 13 | use super::ImageFilter;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `ConvolutionType` and `EdgeDetectionMethod`
[INFO] [stderr]   --> src/menu/edit/filters/mod.rs:35:20
[INFO] [stderr]    |
[INFO] [stderr] 35 | pub use advanced::{ConvolutionType, EdgeDetectionMethod};  // Re-export from advanced module
[INFO] [stderr]    |                    ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around block return value
[INFO] [stderr]   --> src/menu/edit/layers/color_filter.rs:73:9
[INFO] [stderr]    |
[INFO] [stderr] 73 |         ((color as f32 * factor + original as f32 * (1.0 - factor)) as u8)
[INFO] [stderr]    |         ^                                                                ^
[INFO] [stderr]    |
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]    |
[INFO] [stderr] 73 -         ((color as f32 * factor + original as f32 * (1.0 - factor)) as u8)
[INFO] [stderr] 73 +         (color as f32 * factor + original as f32 * (1.0 - factor)) as u8
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `color_tool::start_interactive_color`
[INFO] [stderr]  --> src/menu/edit/layers/mod.rs:9:9
[INFO] [stderr]   |
[INFO] [stderr] 9 | pub use color_tool::start_interactive_color;
[INFO] [stderr]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `dialog::show_cell_analysis_dialog`
[INFO] [stderr]  --> src/menu/scientific/analysis/handlers.rs:8:13
[INFO] [stderr]   |
[INFO] [stderr] 8 |             dialog::show_cell_analysis_dialog,
[INFO] [stderr]   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `handle_batch_analysis`, `handle_cell_analysis`, `handle_export_analysis`, `handle_show_statistics`, and `handle_stop_analysis`
[INFO] [stderr]   --> src/menu/scientific/analysis/mod.rs:7:5
[INFO] [stderr]    |
[INFO] [stderr]  7 |     handle_cell_analysis,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]  8 |     handle_batch_analysis,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]  9 |     handle_show_statistics,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 10 |     handle_export_analysis,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 11 |     handle_stop_analysis,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `fltk::image::RgbImage`
[INFO] [stderr]  --> src/scientific/analysis/colocalization.rs:1:5
[INFO] [stderr]   |
[INFO] [stderr] 1 | use fltk::image::RgbImage;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::collections::HashMap`
[INFO] [stderr]  --> src/scientific/analysis/colocalization.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use std::collections::HashMap;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `MeasurementTool`
[INFO] [stderr]  --> src/scientific/analysis/cell_analysis.rs:3:23
[INFO] [stderr]   |
[INFO] [stderr] 3 |     types::{ROIShape, MeasurementTool},
[INFO] [stderr]   |                       ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `fltk::image::RgbImage`
[INFO] [stderr]  --> src/scientific/calibration/spatial_calibration.rs:2:5
[INFO] [stderr]   |
[INFO] [stderr] 2 | use fltk::image::RgbImage;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Metadata`
[INFO] [stderr]  --> src/scientific/state/scientific_state.rs:7:50
[INFO] [stderr]   |
[INFO] [stderr] 7 |     layers::{Channel, Annotation, AnnotationType,Metadata, Calibration},
[INFO] [stderr]   |                                                  ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Button` and `Pack`
[INFO] [stderr]  --> src/scientific/tools/interactive/roi_tool.rs:7:20
[INFO] [stderr]   |
[INFO] [stderr] 7 |     group::{Group, Pack},
[INFO] [stderr]   |                    ^^^^
[INFO] [stderr] 8 |     button::{RadioRoundButton, Button},
[INFO] [stderr]   |                                ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `AnnotationType` and `Annotation`
[INFO] [stderr]   --> src/scientific/tools/interactive/roi_tool.rs:15:14
[INFO] [stderr]    |
[INFO] [stderr] 15 |     layers::{Annotation, AnnotationType},
[INFO] [stderr]    |              ^^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around assigned value
[INFO] [stderr]    --> src/scientific/tools/interactive/roi_tool.rs:466:45
[INFO] [stderr]     |
[INFO] [stderr] 466 | ...                   let angle = (i as f64 * 2.0 * std::f64::consts::PI / num_points as f64);
[INFO] [stderr]     |                                   ^                                                         ^
[INFO] [stderr]     |
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]     |
[INFO] [stderr] 466 -                                 let angle = (i as f64 * 2.0 * std::f64::consts::PI / num_points as f64);
[INFO] [stderr] 466 +                                 let angle = i as f64 * 2.0 * std::f64::consts::PI / num_points as f64 ;
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Event`
[INFO] [stderr]  --> src/scientific/tools/interactive/metadata_tool.rs:2:13
[INFO] [stderr]   |
[INFO] [stderr] 2 |     enums::{Event, Color, Align},
[INFO] [stderr]   |             ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `measurement_tool::*`
[INFO] [stderr]   --> src/scientific/tools/interactive/mod.rs:16:9
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub use measurement_tool::*;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ScaleRenderer`
[INFO] [stderr]  --> src/scientific/tools/handlers/scale.rs:4:36
[INFO] [stderr]   |
[INFO] [stderr] 4 | use crate::scientific::rendering::{ScaleRenderer, FrameRenderer};
[INFO] [stderr]   |                                    ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `MeasurementTool`, `ROIShape`, and `ROITool`
[INFO] [stderr]  --> src/scientific/tools/mod.rs:5:23
[INFO] [stderr]   |
[INFO] [stderr] 5 | pub use interactive::{ROITool, ROIShape, MeasurementTool};
[INFO] [stderr]   |                       ^^^^^^^  ^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Align` and `Input`
[INFO] [stderr]  --> src/scientific/ui/channel_dialog.rs:6:25
[INFO] [stderr]   |
[INFO] [stderr] 6 |     input::{FloatInput, Input},
[INFO] [stderr]   |                         ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 9 |     enums::{Color, FrameType, Align},
[INFO] [stderr]   |                               ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `self`
[INFO] [stderr]   --> src/scientific/ui/measurement_dialog.rs:12:25
[INFO] [stderr]    |
[INFO] [stderr] 12 | use crate::scientific::{self, Annotation, AnnotationType};
[INFO] [stderr]    |                         ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `FloatInput`
[INFO] [stderr]  --> src/scientific/ui/scale_dialog.rs:4:20
[INFO] [stderr]   |
[INFO] [stderr] 4 |     input::{Input, FloatInput},
[INFO] [stderr]   |                    ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Color`
[INFO] [stderr]  --> src/scientific/ui/cell_analysis/dialog.rs:7:13
[INFO] [stderr]   |
[INFO] [stderr] 7 |     enums::{Color, FrameType},
[INFO] [stderr]   |             ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `CellStatistics` and `StatisticalAnalysis`
[INFO] [stderr]   --> src/scientific/ui/cell_analysis/dialog.rs:16:31
[INFO] [stderr]    |
[INFO] [stderr] 16 |             cell_statistics::{CellStatistics, StatisticalAnalysis}
[INFO] [stderr]    |                               ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Pack`
[INFO] [stderr]  --> src/scientific/ui/cell_analysis/statistics.rs:5:13
[INFO] [stderr]   |
[INFO] [stderr] 5 |     group::{Pack, Tabs, Group},
[INFO] [stderr]   |             ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `dialog::show_cell_analysis_dialog`
[INFO] [stderr]  --> src/scientific/ui/cell_analysis/mod.rs:6:9
[INFO] [stderr]   |
[INFO] [stderr] 6 | pub use dialog::show_cell_analysis_dialog;
[INFO] [stderr]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `statistics::show_statistics_dialog`
[INFO] [stderr]  --> src/scientific/ui/cell_analysis/mod.rs:7:9
[INFO] [stderr]   |
[INFO] [stderr] 7 | pub use statistics::show_statistics_dialog;
[INFO] [stderr]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `export_batch_measurements` and `export_measurement_data`
[INFO] [stderr]  --> src/scientific/ui/cell_analysis/mod.rs:8:18
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub use export::{export_measurement_data, export_batch_measurements};
[INFO] [stderr]   |                  ^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Font`
[INFO] [stderr]  --> src/scientific/ui/roi/batch_dialog.rs:9:20
[INFO] [stderr]   |
[INFO] [stderr] 9 |     enums::{Color, Font, FrameType, Align},
[INFO] [stderr]   |                    ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `collections::HashMap`
[INFO] [stderr]   --> src/scientific/ui/roi/batch_dialog.rs:12:34
[INFO] [stderr]    |
[INFO] [stderr] 12 | use std::{rc::Rc, cell::RefCell, collections::HashMap};
[INFO] [stderr]    |                                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tools::interactive::roi::measurements::MeasurementCalculator`
[INFO] [stderr]   --> src/scientific/ui/roi/batch_dialog.rs:15:5
[INFO] [stderr]    |
[INFO] [stderr] 15 |     tools::interactive::roi::measurements::MeasurementCalculator,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `FrameType`
[INFO] [stderr]   --> src/scientific/ui/roi/components/line_style_selector.rs:10:13
[INFO] [stderr]    |
[INFO] [stderr] 10 |     enums::{FrameType, Align},
[INFO] [stderr]    |             ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `measurement_table::MeasurementTable`
[INFO] [stderr]  --> src/scientific/ui/roi/components/mod.rs:7:9
[INFO] [stderr]   |
[INFO] [stderr] 7 | pub use measurement_table::MeasurementTable;  // Make public
[INFO] [stderr]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Color`
[INFO] [stderr]  --> src/scientific/ui/roi/export_dialog.rs:7:20
[INFO] [stderr]   |
[INFO] [stderr] 7 |     enums::{Align, Color, FrameType},
[INFO] [stderr]   |                    ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `ROIMeasurements`, `ROIShape`, and `tools::interactive::roi::measurements::MeasurementCalculator`
[INFO] [stderr]   --> src/scientific/ui/roi/export_dialog.rs:12:13
[INFO] [stderr]    |
[INFO] [stderr] 12 |     types::{ROIMeasurements, ROIShape},
[INFO] [stderr]    |             ^^^^^^^^^^^^^^^  ^^^^^^^^
[INFO] [stderr] 13 |     tools::interactive::roi::measurements::MeasurementCalculator,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tools::interactive::roi::measurements::MeasurementCalculator`
[INFO] [stderr]   --> src/scientific/ui/roi/measurement_dialog.rs:12:5
[INFO] [stderr]    |
[INFO] [stderr] 12 |     tools::interactive::roi::measurements::MeasurementCalculator,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `BatchDialog`
[INFO] [stderr]   --> src/scientific/ui/roi/mod.rs:11:24
[INFO] [stderr]    |
[INFO] [stderr] 11 | pub use batch_dialog::{BatchDialog, show_batch_analysis_dialog};
[INFO] [stderr]    |                        ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `batch_dialog::*`
[INFO] [stderr]   --> src/scientific/ui/roi/mod.rs:13:9
[INFO] [stderr]    |
[INFO] [stderr] 13 | pub use batch_dialog::*;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `export_dialog::*`
[INFO] [stderr]   --> src/scientific/ui/roi/mod.rs:14:9
[INFO] [stderr]    |
[INFO] [stderr] 14 | pub use export_dialog::*;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `measurement_dialog::*`
[INFO] [stderr]   --> src/scientific/ui/roi/mod.rs:15:9
[INFO] [stderr]    |
[INFO] [stderr] 15 | pub use measurement_dialog::*;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `properties_dialog::*`
[INFO] [stderr]   --> src/scientific/ui/roi/mod.rs:16:9
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub use properties_dialog::*;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `self::batch_dialog::BatchStatistics`
[INFO] [stderr]   --> src/scientific/ui/roi/mod.rs:18:9
[INFO] [stderr]    |
[INFO] [stderr] 18 | pub use self::batch_dialog::BatchStatistics;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `cell_analysis::*`
[INFO] [stderr]   --> src/scientific/ui/mod.rs:17:9
[INFO] [stderr]    |
[INFO] [stderr] 17 | pub use cell_analysis::*;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `roi::*`
[INFO] [stderr]   --> src/scientific/ui/mod.rs:18:9
[INFO] [stderr]    |
[INFO] [stderr] 18 | pub use roi::*;
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::scientific::rendering::frame_renderer::FrameRenderer`
[INFO] [stderr]  --> src/scientific/rendering/scale_renderer.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use crate::scientific::rendering::frame_renderer::FrameRenderer;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Metadata`
[INFO] [stderr]   --> src/scientific/mod.rs:12:55
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub use layers::{Channel, Annotation, AnnotationType, Metadata};
[INFO] [stderr]    |                                                       ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ColocalizationAnalysis`
[INFO] [stderr]   --> src/scientific/mod.rs:13:38
[INFO] [stderr]    |
[INFO] [stderr] 13 | pub use analysis::{IntensityProfile, ColocalizationAnalysis};
[INFO] [stderr]    |                                      ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `calibration::SpatialCalibration`
[INFO] [stderr]   --> src/scientific/mod.rs:14:9
[INFO] [stderr]    |
[INFO] [stderr] 14 | pub use calibration::SpatialCalibration;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `state::ScientificState`
[INFO] [stderr]   --> src/scientific/mod.rs:15:9
[INFO] [stderr]    |
[INFO] [stderr] 15 | pub use state::ScientificState;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `LegendPosition`, `MeasurementTool`, `ROIShape`, and `ROITool`
[INFO] [stderr]   --> src/scientific/mod.rs:16:17
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub use types::{LegendPosition, ROIShape, ROITool, MeasurementTool};
[INFO] [stderr]    |                 ^^^^^^^^^^^^^^  ^^^^^^^^  ^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `reporting::CalibrationReport`
[INFO] [stderr]   --> src/scientific/mod.rs:17:9
[INFO] [stderr]    |
[INFO] [stderr] 17 | pub use reporting::CalibrationReport;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `visualization::CellVisualizer`
[INFO] [stderr]   --> src/scientific/mod.rs:18:9
[INFO] [stderr]    |
[INFO] [stderr] 18 | pub use visualization::CellVisualizer;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Event`
[INFO] [stderr]   --> src/main.rs:12:23
[INFO] [stderr]    |
[INFO] [stderr] 12 |     enums::{Shortcut, Event, CallbackTrigger},
[INFO] [stderr]    |                       ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::scientific::tools::interactive::cell_analysis_tool::CellAnalysisState`
[INFO] [stderr]   --> src/main.rs:19:5
[INFO] [stderr]    |
[INFO] [stderr] 19 | use crate::scientific::tools::interactive::cell_analysis_tool::CellAnalysisState;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `prelude`
[INFO] [stderr]  --> src/menu/file/open.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 |     prelude::*,
[INFO] [stderr]   |     ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `prelude`
[INFO] [stderr]  --> src/scientific/tools/interactive/cell_analysis_tool.rs:1:29
[INFO] [stderr]   |
[INFO] [stderr] 1 | use fltk::{image::RgbImage, prelude::*, enums::Event};
[INFO] [stderr]   |                             ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/menu/edit/crop/crop_tool.rs:132:17
[INFO] [stderr]     |
[INFO] [stderr] 132 |     if let Some(mut fltk_image) = cropped_img {
[INFO] [stderr]     |                 ----^^^^^^^^^^
[INFO] [stderr]     |                 |
[INFO] [stderr]     |                 help: remove this `mut`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `now`
[INFO] [stderr]   --> src/menu/edit/watermark/templates/defaults.rs:15:13
[INFO] [stderr]    |
[INFO] [stderr] 15 |         let now = chrono::Utc::now();
[INFO] [stderr]    |             ^^^ help: if this is intentional, prefix it with an underscore: `_now`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `pack`
[INFO] [stderr]    --> src/menu/edit/layers/dialog.rs:103:5
[INFO] [stderr]     |
[INFO] [stderr] 103 |     pack: &mut Pack,
[INFO] [stderr]     |     ^^^^ help: if this is intentional, prefix it with an underscore: `_pack`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `pack`
[INFO] [stderr]    --> src/menu/edit/layers/dialog.rs:139:5
[INFO] [stderr]     |
[INFO] [stderr] 139 |     pack: &mut Pack,
[INFO] [stderr]     |     ^^^^ help: if this is intentional, prefix it with an underscore: `_pack`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `filter`
[INFO] [stderr]   --> src/menu/edit/layers/interactive_tool/mod.rs:40:9
[INFO] [stderr]    |
[INFO] [stderr] 40 |     let filter = ColorFilter::new(color);
[INFO] [stderr]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_filter`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `frame_clone`
[INFO] [stderr]   --> src/menu/edit/layers/color_tool.rs:57:13
[INFO] [stderr]    |
[INFO] [stderr] 57 |         let frame_clone = frame_clone.clone();
[INFO] [stderr]    |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_frame_clone`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `frame`
[INFO] [stderr]   --> src/menu/scientific/analysis/handlers.rs:78:31
[INFO] [stderr]    |
[INFO] [stderr] 78 | pub fn handle_show_statistics(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stderr]    |                               ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `frame`
[INFO] [stderr]   --> src/menu/scientific/analysis/handlers.rs:92:31
[INFO] [stderr]    |
[INFO] [stderr] 92 | pub fn handle_export_analysis(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stderr]    |                               ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `is_analyzing`
[INFO] [stderr]    --> src/menu/scientific/analysis/cell.rs:157:25
[INFO] [stderr]     |
[INFO] [stderr] 157 |                     let is_analyzing = state_ref.scientific_state.is_analyzing_cells();
[INFO] [stderr]     |                         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_is_analyzing`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `stats`
[INFO] [stderr]   --> src/scientific/analysis/cell_statistics.rs:89:31
[INFO] [stderr]    |
[INFO] [stderr] 89 |             for (metric_name, stats, values) in &metrics {
[INFO] [stderr]    |                               ^^^^^ help: if this is intentional, prefix it with an underscore: `_stats`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/scientific/analysis/cell_statistics.rs:224:15
[INFO] [stderr]     |
[INFO] [stderr] 224 | fn percentile(mut values: impl Iterator<Item = f64>, p: f64) -> f64 {
[INFO] [stderr]     |               ----^^^^^^
[INFO] [stderr]     |               |
[INFO] [stderr]     |               help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `unit`
[INFO] [stderr]    --> src/scientific/state/scientific_state.rs:449:54
[INFO] [stderr]     |
[INFO] [stderr] 449 |             AnnotationType::Scale { pixels_per_unit, unit } => {
[INFO] [stderr]     |                                                      ^^^^ help: try ignoring the field: `unit: _`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `pixels_per_unit`
[INFO] [stderr]    --> src/scientific/state/scientific_state.rs:491:103
[INFO] [stderr]     |
[INFO] [stderr] 491 |     fn draw_scale_bar(&self, composite: &mut Vec<u8>, width: i32, height: i32, points: &[(i32, i32)], pixels_per_unit: f32) {
[INFO] [stderr]     |                                                                                                       ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pixels_per_unit`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `length`
[INFO] [stderr]    --> src/scientific/state/scientific_state.rs:568:105
[INFO] [stderr]     |
[INFO] [stderr] 568 |     fn draw_measurement(&self, composite: &mut Vec<u8>, width: i32, height: i32, points: &[(i32, i32)], length: f32, unit: &str) {
[INFO] [stderr]     |                                                                                                         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_length`
[INFO] [stderr] 
[INFO] [stderr] warning: unreachable pattern
[INFO] [stderr]    --> src/scientific/tools/interactive/roi_tool.rs:422:17
[INFO] [stderr]     |
[INFO] [stderr] 422 |                 _ => {}
[INFO] [stderr]     |                 ^ no value can reach this
[INFO] [stderr]     |
[INFO] [stderr] note: multiple earlier patterns match some of the same values
[INFO] [stderr]    --> src/scientific/tools/interactive/roi_tool.rs:422:17
[INFO] [stderr]     |
[INFO] [stderr] 378 |                 ROIShape::Rectangle { .. } => {
[INFO] [stderr]     |                 -------------------------- matches some of the same values
[INFO] [stderr] ...
[INFO] [stderr] 395 |                 ROIShape::Ellipse { .. } => {
[INFO] [stderr]     |                 ------------------------ matches some of the same values
[INFO] [stderr] ...
[INFO] [stderr] 409 |                 ROIShape::Line { .. } => {
[INFO] [stderr]     |                 --------------------- matches some of the same values
[INFO] [stderr] ...
[INFO] [stderr] 417 |                 ROIShape::Polygon { .. } => {
[INFO] [stderr]     |                 ------------------------ matches some of the same values
[INFO] [stderr] ...
[INFO] [stderr] 422 |                 _ => {}
[INFO] [stderr]     |                 ^ collectively making this unreachable
[INFO] [stderr]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/scientific/tools/interactive/roi_tool.rs:235:19
[INFO] [stderr]     |
[INFO] [stderr] 235 |         if let Ok(mut state_ref) = state.try_borrow_mut() {
[INFO] [stderr]     |                   ----^^^^^^^^^
[INFO] [stderr]     |                   |
[INFO] [stderr]     |                   help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/scientific/tools/interactive/metadata_tool.rs:28:13
[INFO] [stderr]    |
[INFO] [stderr] 28 |         let mut window = Window::default()
[INFO] [stderr]    |             ----^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/scientific/tools/interactive/metadata_tool.rs:153:19
[INFO] [stderr]     |
[INFO] [stderr] 153 |         if let Ok(mut state_ref) = state_clone.try_borrow_mut() {
[INFO] [stderr]     |                   ----^^^^^^^^^
[INFO] [stderr]     |                   |
[INFO] [stderr]     |                   help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `state_ref`
[INFO] [stderr]    --> src/scientific/tools/interactive/metadata_tool.rs:153:19
[INFO] [stderr]     |
[INFO] [stderr] 153 |         if let Ok(mut state_ref) = state_clone.try_borrow_mut() {
[INFO] [stderr]     |                   ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_state_ref`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `new_metadata`
[INFO] [stderr]    --> src/scientific/tools/interactive/metadata_tool.rs:154:17
[INFO] [stderr]     |
[INFO] [stderr] 154 |             let new_metadata = editor.get_metadata();
[INFO] [stderr]     |                 ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_new_metadata`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `convex_hull_area`
[INFO] [stderr]    --> src/scientific/tools/interactive/roi/measurements.rs:110:14
[INFO] [stderr]     |
[INFO] [stderr] 110 |         let (convex_hull_area, solidity) = self.calculate_solidity(points, area);
[INFO] [stderr]     |              ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_convex_hull_area`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `points`
[INFO] [stderr]    --> src/scientific/tools/interactive/roi/measurements.rs:181:34
[INFO] [stderr]     |
[INFO] [stderr] 181 |     fn calculate_solidity(&self, points: &[(i32, i32)], area: f64) -> (f64, f64) {
[INFO] [stderr]     |                                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_points`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `channel_list`
[INFO] [stderr]   --> src/scientific/ui/channel_dialog.rs:29:9
[INFO] [stderr]    |
[INFO] [stderr] 29 |     let channel_list = create_channel_list(&mut pack, state.clone());
[INFO] [stderr]    |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_channel_list`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `vis_header`
[INFO] [stderr]   --> src/scientific/ui/channel_dialog.rs:63:9
[INFO] [stderr]    |
[INFO] [stderr] 63 |     let vis_header = Frame::new(0, 0, 25, 25, "");
[INFO] [stderr]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_vis_header`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `action_header`
[INFO] [stderr]   --> src/scientific/ui/channel_dialog.rs:70:9
[INFO] [stderr]    |
[INFO] [stderr] 70 |     let action_header = Frame::new(0, 0, 60, 25, "");
[INFO] [stderr]    |         ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_action_header`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/scientific/ui/channel_dialog.rs:109:13
[INFO] [stderr]     |
[INFO] [stderr] 109 |         let mut wavelength = Frame::new(0, 0, 100, 35, &*wavelength_text);
[INFO] [stderr]     |             ----^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `wavelength`
[INFO] [stderr]    --> src/scientific/ui/channel_dialog.rs:109:13
[INFO] [stderr]     |
[INFO] [stderr] 109 |         let mut wavelength = Frame::new(0, 0, 100, 35, &*wavelength_text);
[INFO] [stderr]     |             ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_wavelength`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `profile`
[INFO] [stderr]  --> src/scientific/ui/profile_dialog.rs:7:28
[INFO] [stderr]   |
[INFO] [stderr] 7 | pub fn show_profile_dialog(profile: &IntensityProfile) {
[INFO] [stderr]   |                            ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_profile`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `frame`
[INFO] [stderr]    --> src/scientific/ui/scale_dialog.rs:250:13
[INFO] [stderr]     |
[INFO] [stderr] 250 |         let frame = frame.clone();
[INFO] [stderr]     |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `frame`
[INFO] [stderr]    --> src/scientific/ui/cell_analysis/dialog.rs:113:5
[INFO] [stderr]     |
[INFO] [stderr] 113 |     frame: &Rc<RefCell<Frame>>,
[INFO] [stderr]     |     ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/scientific/ui/cell_analysis/statistics.rs:32:9
[INFO] [stderr]    |
[INFO] [stderr] 32 |     let mut tabs = Tabs::new(WINDOW_PADDING, WINDOW_PADDING, 780, 540, "");
[INFO] [stderr]    |         ----^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/scientific/ui/cell_analysis/statistics.rs:35:9
[INFO] [stderr]    |
[INFO] [stderr] 35 |     let mut summary_group = Group::new(WINDOW_PADDING, 35, 780, 515, "Summary");
[INFO] [stderr]    |         ----^^^^^^^^^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/scientific/ui/cell_analysis/statistics.rs:67:9
[INFO] [stderr]    |
[INFO] [stderr] 67 |     let mut correlations_group = Group::new(WINDOW_PADDING, 35, 780, 515, "Correlations");
[INFO] [stderr]    |         ----^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `measurement`
[INFO] [stderr]  --> src/scientific/ui/cell_analysis/export.rs:8:53
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub fn export_measurement_data(_state: &ImageState, measurement: &CellMeasurement) {
[INFO] [stderr]   |                                                     ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_measurement`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `measurements`
[INFO] [stderr]   --> src/scientific/ui/cell_analysis/export.rs:12:55
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub fn export_batch_measurements(_state: &ImageState, measurements: &[CellMeasurement]) {
[INFO] [stderr]    |                                                       ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_measurements`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/scientific/ui/roi/batch_dialog.rs:105:13
[INFO] [stderr]     |
[INFO] [stderr] 105 |         let mut scroll = Scroll::new(5, 25, 770, 270, "");
[INFO] [stderr]     |             ----^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/scientific/ui/roi/batch_dialog.rs:137:13
[INFO] [stderr]     |
[INFO] [stderr] 137 |         let mut auto_update = CheckButton::new(0, 0, 150, 30, "Auto Update");
[INFO] [stderr]     |             ----^^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `path`
[INFO] [stderr]    --> src/scientific/ui/roi/batch_dialog.rs:333:30
[INFO] [stderr]     |
[INFO] [stderr] 333 |     fn export_to_file(&self, path: &std::path::Path) {
[INFO] [stderr]     |                              ^^^^ help: if this is intentional, prefix it with an underscore: `_path`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `frame`
[INFO] [stderr]    --> src/scientific/ui/roi/batch_dialog.rs:350:5
[INFO] [stderr]     |
[INFO] [stderr] 350 |     frame: &Rc<RefCell<Frame>>,
[INFO] [stderr]     |     ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `state`
[INFO] [stderr]    --> src/scientific/ui/roi/batch_dialog.rs:351:5
[INFO] [stderr]     |
[INFO] [stderr] 351 |     state: &Rc<RefCell<ImageState>>,
[INFO] [stderr]     |     ^^^^^ help: if this is intentional, prefix it with an underscore: `_state`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `measurements`
[INFO] [stderr]    --> src/scientific/ui/roi/batch_dialog.rs:352:5
[INFO] [stderr]     |
[INFO] [stderr] 352 |     measurements: &Vec<CellMeasurement>
[INFO] [stderr]     |     ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_measurements`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/scientific/ui/roi/export_dialog.rs:93:13
[INFO] [stderr]    |
[INFO] [stderr] 93 |         let mut path_input = Input::new(0, 0, 300, 30, None);
[INFO] [stderr]    |             ----^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/scientific/ui/roi/export_dialog.rs:94:13
[INFO] [stderr]    |
[INFO] [stderr] 94 |         let mut browse_btn = Button::new(0, 0, 75, 30, Some("Browse"));
[INFO] [stderr]    |             ----^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/scientific/ui/roi/export_dialog.rs:105:13
[INFO] [stderr]     |
[INFO] [stderr] 105 |         let mut json_radio = RadioRoundButton::new(20, 35, 160, 25, Some("JSON (.json)"));
[INFO] [stderr]     |             ----^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/scientific/ui/roi/export_dialog.rs:106:13
[INFO] [stderr]     |
[INFO] [stderr] 106 |         let mut excel_radio = RadioRoundButton::new(20, 60, 160, 25, Some("Excel (.xlsx)"));
[INFO] [stderr]     |             ----^^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/scientific/ui/roi/export_dialog.rs:120:13
[INFO] [stderr]     |
[INFO] [stderr] 120 |         let mut measurements_check = CheckButton::new(20, 10, 340, 25, Some("Include Measurements"));
[INFO] [stderr]     |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/scientific/ui/roi/export_dialog.rs:121:13
[INFO] [stderr]     |
[INFO] [stderr] 121 |         let mut statistics_check = CheckButton::new(20, 35, 340, 25, Some("Include Statistics"));
[INFO] [stderr]     |             ----^^^^^^^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/scientific/ui/roi/export_dialog.rs:122:13
[INFO] [stderr]     |
[INFO] [stderr] 122 |         let mut images_check = CheckButton::new(20, 60, 340, 25, Some("Include Images"));
[INFO] [stderr]     |             ----^^^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/scientific/ui/roi/export_dialog.rs:123:13
[INFO] [stderr]     |
[INFO] [stderr] 123 |         let mut metadata_check = CheckButton::new(20, 85, 340, 25, Some("Include Metadata"));
[INFO] [stderr]     |             ----^^^^^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/scientific/ui/roi/export_dialog.rs:124:13
[INFO] [stderr]     |
[INFO] [stderr] 124 |         let mut batch_check = CheckButton::new(20, 110, 340, 25, Some("Batch Export"));
[INFO] [stderr]     |             ----^^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/scientific/ui/roi/export_dialog.rs:136:13
[INFO] [stderr]     |
[INFO] [stderr] 136 |         let mut export_btn = Button::new(0, 0, 185, 30, Some("Export"));
[INFO] [stderr]     |             ----^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/scientific/ui/roi/export_dialog.rs:137:13
[INFO] [stderr]     |
[INFO] [stderr] 137 |         let mut cancel_btn = Button::new(0, 0, 185, 30, Some("Cancel"));
[INFO] [stderr]     |             ----^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `image_radio`
[INFO] [stderr]    --> src/scientific/ui/roi/export_dialog.rs:171:13
[INFO] [stderr]     |
[INFO] [stderr] 171 |         let image_radio = self.image_radio.clone();
[INFO] [stderr]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_image_radio`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/scientific/ui/roi/measurement_dialog.rs:49:13
[INFO] [stderr]    |
[INFO] [stderr] 49 |         let mut scroll = Scroll::new(0, 0, 380, 380, "");
[INFO] [stderr]    |             ----^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/scientific/ui/roi/measurement_dialog.rs:66:13
[INFO] [stderr]    |
[INFO] [stderr] 66 |         let mut export_btn = Button::new(0, 0, 185, 25, "Export Data");
[INFO] [stderr]    |             ----^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/scientific/ui/roi/measurement_dialog.rs:67:13
[INFO] [stderr]    |
[INFO] [stderr] 67 |         let mut close_btn = Button::new(195, 0, 185, 25, "Close");
[INFO] [stderr]    |             ----^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/scientific/ui/roi/properties_dialog.rs:138:23
[INFO] [stderr]     |
[INFO] [stderr] 138 |             if let Ok(mut state_ref) = state.try_borrow_mut() {
[INFO] [stderr]     |                       ----^^^^^^^^^
[INFO] [stderr]     |                       |
[INFO] [stderr]     |                       help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `pixels_per_unit`
[INFO] [stderr]   --> src/scientific/rendering/scale_renderer.rs:16:9
[INFO] [stderr]    |
[INFO] [stderr] 16 |         pixels_per_unit: f32,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pixels_per_unit`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `unit`
[INFO] [stderr]   --> src/scientific/rendering/scale_renderer.rs:46:9
[INFO] [stderr]    |
[INFO] [stderr] 46 |         unit: &str,
[INFO] [stderr]    |         ^^^^ help: if this is intentional, prefix it with an underscore: `_unit`
[INFO] [stderr] 
[INFO] [stderr] warning: type `ShapeSelector` is more private than the item `InteractiveROIState::show_roi_mode_dialog`
[INFO] [stderr]    --> src/scientific/tools/interactive/roi_tool.rs:160:5
[INFO] [stderr]     |
[INFO] [stderr] 160 |     pub fn show_roi_mode_dialog(on_select: impl Fn(ROIShape) + 'static) -> ShapeSelector {
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ associated function `InteractiveROIState::show_roi_mode_dialog` is reachable at visibility `pub(crate)`
[INFO] [stderr]     |
[INFO] [stderr] note: but type `ShapeSelector` is only usable at visibility `pub(self)`
[INFO] [stderr]    --> src/scientific/tools/interactive/roi_tool.rs:28:1
[INFO] [stderr]     |
[INFO] [stderr]  28 | struct ShapeSelector {
[INFO] [stderr]     | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variants `InvalidPosition`, `InvalidOpacity`, `TextRenderingError`, and `BlendingError` are never constructed
[INFO] [stderr]   --> src/menu/edit/watermark/mod.rs:36:5
[INFO] [stderr]    |
[INFO] [stderr] 35 | pub enum WatermarkError {
[INFO] [stderr]    |          -------------- variants in this enum
[INFO] [stderr] 36 |     InvalidPosition(String),
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 37 |     InvalidOpacity(String),
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] 38 |     TextRenderingError(String),
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 39 |     ImageLoadError(String),
[INFO] [stderr] 40 |     BlendingError(String),
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `WatermarkError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: enum `WatermarkSource` is never used
[INFO] [stderr]   --> src/menu/edit/watermark/mod.rs:46:10
[INFO] [stderr]    |
[INFO] [stderr] 46 | pub enum WatermarkSource {
[INFO] [stderr]    |          ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `WatermarkTemplate` is never constructed
[INFO] [stderr]   --> src/menu/edit/watermark/mod.rs:80:12
[INFO] [stderr]    |
[INFO] [stderr] 80 | pub struct WatermarkTemplate {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `remove` is never used
[INFO] [stderr]    --> src/menu/edit/watermark/mod.rs:127:8
[INFO] [stderr]     |
[INFO] [stderr] 123 | pub trait Watermark {
[INFO] [stderr]     |           --------- method in this trait
[INFO] [stderr] ...
[INFO] [stderr] 127 |     fn remove(&self, image: &mut image::ImageBuffer<image::Rgba<u8>, Vec<u8>>, area: &WatermarkPosition) 
[INFO] [stderr]     |        ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `data` and `font` are never read
[INFO] [stderr]   --> src/menu/edit/watermark/fonts/mod.rs:11:5
[INFO] [stderr]    |
[INFO] [stderr] 10 | struct StaticFontData {
[INFO] [stderr]    |        -------------- fields in this struct
[INFO] [stderr] 11 |     data: Vec<u8>,
[INFO] [stderr]    |     ^^^^
[INFO] [stderr] 12 |     font: Arc<Font<'static>>,
[INFO] [stderr]    |     ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `get_font` and `remove_font` are never used
[INFO] [stderr]   --> src/menu/edit/watermark/fonts/mod.rs:61:12
[INFO] [stderr]    |
[INFO] [stderr] 36 | impl FontManager {
[INFO] [stderr]    | ---------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 61 |     pub fn get_font(&self, name: &str) -> Option<Arc<Font<'static>>> {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 73 |     pub fn remove_font(&mut self, name: &str) -> Result<(), WatermarkError> {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_add_watermark` is never used
[INFO] [stderr]    --> src/menu/edit/watermark/handlers.rs:117:8
[INFO] [stderr]     |
[INFO] [stderr] 117 | pub fn handle_add_watermark(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_position_valid` is never used
[INFO] [stderr]   --> src/menu/edit/watermark/position.rs:64:8
[INFO] [stderr]    |
[INFO] [stderr] 64 | pub fn is_position_valid(
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `save_template`, `load_template`, and `save_template_to_disk` are never used
[INFO] [stderr]    --> src/menu/edit/watermark/templates/mod.rs:48:12
[INFO] [stderr]     |
[INFO] [stderr]  17 | impl TemplateManager {
[INFO] [stderr]     | -------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  48 |     pub fn save_template(
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  59 |     pub fn load_template(&self, name: &str) 
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 101 |     fn save_template_to_disk(&self, name: &str) -> Result<(), WatermarkError> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `draw` is never used
[INFO] [stderr]   --> src/menu/edit/watermark/removal_tool.rs:94:12
[INFO] [stderr]    |
[INFO] [stderr] 23 | impl WatermarkRemovalTool {
[INFO] [stderr]    | ------------------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 94 |     pub fn draw(&self) {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `fltk_to_image_buffer` is never used
[INFO] [stderr]   --> src/menu/edit/filters/mod.rs:44:15
[INFO] [stderr]    |
[INFO] [stderr] 44 | pub(crate) fn fltk_to_image_buffer(fltk_image: &RgbImage) -> ImageBuffer<Rgba<u8>, Vec<u8>> {
[INFO] [stderr]    |               ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `image_buffer_to_fltk` is never used
[INFO] [stderr]   --> src/menu/edit/filters/mod.rs:67:15
[INFO] [stderr]    |
[INFO] [stderr] 67 | pub(crate) fn image_buffer_to_fltk(buffer: &ImageBuffer<Rgba<u8>, Vec<u8>>) -> Option<RgbImage> {
[INFO] [stderr]    |               ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `gaussian_kernel` is never used
[INFO] [stderr]    --> src/menu/edit/filters/advanced/edge_detection.rs:117:8
[INFO] [stderr]     |
[INFO] [stderr]  23 | impl EdgeDetectionFilter {
[INFO] [stderr]     | ------------------------ associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 117 |     fn gaussian_kernel(size: usize, sigma: f32) -> Vec<f32> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_apply_edge_detection` is never used
[INFO] [stderr]    --> src/menu/edit/filters/handlers.rs:241:8
[INFO] [stderr]     |
[INFO] [stderr] 241 | pub fn handle_apply_edge_detection(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_apply_canny_edge_detection` is never used
[INFO] [stderr]    --> src/menu/edit/filters/handlers.rs:250:8
[INFO] [stderr]     |
[INFO] [stderr] 250 | pub fn handle_apply_canny_edge_detection(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_apply_noise` is never used
[INFO] [stderr]    --> src/menu/edit/filters/handlers.rs:258:8
[INFO] [stderr]     |
[INFO] [stderr] 258 | pub fn handle_apply_noise(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_apply_vignette` is never used
[INFO] [stderr]    --> src/menu/edit/filters/handlers.rs:266:8
[INFO] [stderr]     |
[INFO] [stderr] 266 | pub fn handle_apply_vignette(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_apply_posterize` is never used
[INFO] [stderr]    --> src/menu/edit/filters/handlers.rs:288:8
[INFO] [stderr]     |
[INFO] [stderr] 288 | pub fn handle_apply_posterize(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_apply_pixelate` is never used
[INFO] [stderr]    --> src/menu/edit/filters/handlers.rs:310:8
[INFO] [stderr]     |
[INFO] [stderr] 310 | pub fn handle_apply_pixelate(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_apply_motion_blur` is never used
[INFO] [stderr]    --> src/menu/edit/filters/handlers.rs:334:8
[INFO] [stderr]     |
[INFO] [stderr] 334 | pub fn handle_apply_motion_blur(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `with_opacity` is never used
[INFO] [stderr]    --> src/menu/edit/layers/color_filter.rs:106:12
[INFO] [stderr]     |
[INFO] [stderr] 104 | impl ColorFilter {
[INFO] [stderr]     | ---------------- method in this implementation
[INFO] [stderr] 105 |     // this method exists to support opacity
[INFO] [stderr] 106 |     pub fn with_opacity(mut self, opacity: f32) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `start_interactive_layer` is never used
[INFO] [stderr]   --> src/menu/edit/layers/interactive_tool/mod.rs:16:8
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub fn start_interactive_layer(
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_cell_analysis` is never used
[INFO] [stderr]   --> src/menu/scientific/analysis/handlers.rs:21:8
[INFO] [stderr]    |
[INFO] [stderr] 21 | pub fn handle_cell_analysis(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_batch_analysis` is never used
[INFO] [stderr]   --> src/menu/scientific/analysis/handlers.rs:59:8
[INFO] [stderr]    |
[INFO] [stderr] 59 | pub fn handle_batch_analysis(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_show_statistics` is never used
[INFO] [stderr]   --> src/menu/scientific/analysis/handlers.rs:78:8
[INFO] [stderr]    |
[INFO] [stderr] 78 | pub fn handle_show_statistics(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_export_analysis` is never used
[INFO] [stderr]   --> src/menu/scientific/analysis/handlers.rs:92:8
[INFO] [stderr]    |
[INFO] [stderr] 92 | pub fn handle_export_analysis(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_stop_analysis` is never used
[INFO] [stderr]    --> src/menu/scientific/analysis/handlers.rs:106:8
[INFO] [stderr]     |
[INFO] [stderr] 106 | pub fn handle_stop_analysis(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `get_watermark_options`, `get_scientific_state`, and `get_scientific_state_mut` are never used
[INFO] [stderr]   --> src/state/mod.rs:55:11
[INFO] [stderr]    |
[INFO] [stderr] 41 | impl ImageState {
[INFO] [stderr]    | --------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 55 |    pub fn get_watermark_options(&self) -> WatermarkOptions {
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 59 |    pub fn get_scientific_state(&self) -> &ScientificState {
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 63 |    pub fn get_scientific_state_mut(&mut self) -> &mut ScientificState {
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `current_filter` is never read
[INFO] [stderr]   --> src/state/filter_state.rs:28:5
[INFO] [stderr]    |
[INFO] [stderr] 26 | pub struct FilterState {
[INFO] [stderr]    |            ----------- field in this struct
[INFO] [stderr] 27 |     is_preview_active: bool,
[INFO] [stderr] 28 |     current_filter: Option<String>,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `FilterState` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `get_current_filter` and `set_current_filter` are never used
[INFO] [stderr]   --> src/state/filter_state.rs:92:12
[INFO] [stderr]    |
[INFO] [stderr] 31 | impl FilterState {
[INFO] [stderr]    | ---------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 92 |     pub fn get_current_filter(&self) -> Option<String> {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 96 |     pub fn set_current_filter(&mut self, filter: Option<String>) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `message` is never read
[INFO] [stderr]   --> src/state/watermark_state.rs:16:9
[INFO] [stderr]    |
[INFO] [stderr] 15 | pub struct WatermarkError {
[INFO] [stderr]    |            -------------- field in this struct
[INFO] [stderr] 16 |     pub message: String,
[INFO] [stderr]    |         ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `WatermarkError` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `name` and `options` are never read
[INFO] [stderr]   --> src/state/watermark_state.rs:29:9
[INFO] [stderr]    |
[INFO] [stderr] 28 | pub struct WatermarkTemplate {
[INFO] [stderr]    |            ----------------- fields in this struct
[INFO] [stderr] 29 |     pub name: String,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr] 30 |     pub options: WatermarkOptions,
[INFO] [stderr]    |         ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `WatermarkTemplate` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `list_templates` is never used
[INFO] [stderr]   --> src/state/watermark_state.rs:41:12
[INFO] [stderr]    |
[INFO] [stderr] 36 | impl TemplateManager {
[INFO] [stderr]    | -------------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 41 |     pub fn list_templates(&self) -> Vec<String> {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `template_manager` and `current_template` are never read
[INFO] [stderr]   --> src/state/watermark_state.rs:54:5
[INFO] [stderr]    |
[INFO] [stderr] 53 | pub struct WatermarkState {
[INFO] [stderr]    |            -------------- fields in this struct
[INFO] [stderr] 54 |     template_manager: Arc<Mutex<TemplateManager>>,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^
[INFO] [stderr] 55 |     current_template: Option<WatermarkTemplate>,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `WatermarkState` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `clear_watermark`, `get_current_watermark_type`, `get_current_template`, and `list_templates` are never used
[INFO] [stderr]    --> src/state/watermark_state.rs:221:12
[INFO] [stderr]     |
[INFO] [stderr]  61 | impl WatermarkState {
[INFO] [stderr]     | ------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 221 |     pub fn clear_watermark(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 228 |     pub fn get_current_watermark_type(&self) -> Option<&'static str> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 280 |     pub fn get_current_template(&self) -> Option<WatermarkTemplate> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 292 |     pub fn list_templates(&self) -> Result<Vec<String>, WatermarkError> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `image` is never read
[INFO] [stderr]  --> src/state/layer_state.rs:8:9
[INFO] [stderr]   |
[INFO] [stderr] 6 | pub struct Layer {
[INFO] [stderr]   |            ----- field in this struct
[INFO] [stderr] 7 |     pub name: String,
[INFO] [stderr] 8 |     pub image: RgbImage,
[INFO] [stderr]   |         ^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `Layer` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `get_active_layer` and `set_active_layer` are never used
[INFO] [stderr]    --> src/state/layer_state.rs:244:12
[INFO] [stderr]     |
[INFO] [stderr]  33 | impl LayerState {
[INFO] [stderr]     | --------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 244 |     pub fn get_active_layer(&self) -> Option<usize> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 248 |     pub fn set_active_layer(&mut self, index: usize) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `TemplateExport` is never constructed
[INFO] [stderr]   --> src/utils/template_utils.rs:15:12
[INFO] [stderr]    |
[INFO] [stderr] 15 | pub struct TemplateExport {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `export_template` is never used
[INFO] [stderr]   --> src/utils/template_utils.rs:20:8
[INFO] [stderr]    |
[INFO] [stderr] 20 | pub fn export_template(template: &WatermarkTemplate, export_dir: &Path) -> Result<(), WatermarkError> {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `import_template` is never used
[INFO] [stderr]   --> src/utils/template_utils.rs:49:8
[INFO] [stderr]    |
[INFO] [stderr] 49 | pub fn import_template<P: AsRef<Path>>(template_path: P) -> Result<TemplateExport, WatermarkError> {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `validate_template` is never used
[INFO] [stderr]   --> src/utils/template_utils.rs:77:8
[INFO] [stderr]    |
[INFO] [stderr] 77 | pub fn validate_template(template: &WatermarkTemplate) -> Result<(), WatermarkError> {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ImageData` is never constructed
[INFO] [stderr]  --> src/utils/image_data.rs:5:12
[INFO] [stderr]   |
[INFO] [stderr] 5 | pub struct ImageData {
[INFO] [stderr]   |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `get_intensity`, `get_image`, `width`, and `height` are never used
[INFO] [stderr]   --> src/utils/image_data.rs:10:12
[INFO] [stderr]    |
[INFO] [stderr]  9 | impl ImageData {
[INFO] [stderr]    | -------------- associated items in this implementation
[INFO] [stderr] 10 |     pub fn new(image: RgbImage) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 14 |     pub fn get_intensity(&self, x: i32, y: i32) -> u8 {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 30 |     pub fn get_image(&self) -> &RgbImage {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 34 |     pub fn width(&self) -> i32 {
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 38 |     pub fn height(&self) -> i32 {
[INFO] [stderr]    |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `channels` is never read
[INFO] [stderr]  --> src/scientific/analysis/intensity_profile.rs:7:9
[INFO] [stderr]   |
[INFO] [stderr] 4 | pub struct IntensityProfile {
[INFO] [stderr]   |            ---------------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 7 |     pub channels: Vec<usize>,
[INFO] [stderr]   |         ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ColocalizationAnalysis` is never constructed
[INFO] [stderr]  --> src/scientific/analysis/colocalization.rs:7:12
[INFO] [stderr]   |
[INFO] [stderr] 7 | pub struct ColocalizationAnalysis {
[INFO] [stderr]   |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated functions `analyze`, `get_intensity_vectors`, `calculate_pearson`, `calculate_overlap`, `calculate_manders`, and `calculate_icq` are never used
[INFO] [stderr]   --> src/scientific/analysis/colocalization.rs:15:12
[INFO] [stderr]    |
[INFO] [stderr] 14 | impl ColocalizationAnalysis {
[INFO] [stderr]    | --------------------------- associated functions in this implementation
[INFO] [stderr] 15 |     pub fn analyze(channel1: &Channel, channel2: &Channel) -> Self {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 26 |     fn get_intensity_vectors(channel1: &Channel, channel2: &Channel) -> (Vec<f32>, Vec<f32>) {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 42 |     fn calculate_pearson(x: &[f32], y: &[f32]) -> f32 {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 61 |     fn calculate_overlap(x: &[f32], y: &[f32]) -> f32 {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 76 |     fn calculate_manders(x: &[f32], y: &[f32]) -> (f32, f32) {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 93 |     fn calculate_icq(x: &[f32], y: &[f32]) -> f32 {
[INFO] [stderr]    |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `create_metrics` and `detect_outliers` are never used
[INFO] [stderr]   --> src/scientific/analysis/cell_statistics.rs:68:8
[INFO] [stderr]    |
[INFO] [stderr] 37 | impl CellStatistics {
[INFO] [stderr]    | ------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 68 |     fn create_metrics<'a>(&'a self, measurements: &'a [CellMeasurement]) -> Vec<(&str, &MetricStatistics, Box<dyn Iterator<Item = f64> + ...
[INFO] [stderr]    |        ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 77 |     pub fn detect_outliers(&self, measurements: &[CellMeasurement]) -> Vec<(usize, String)> {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `percentile` is never used
[INFO] [stderr]    --> src/scientific/analysis/cell_statistics.rs:224:4
[INFO] [stderr]     |
[INFO] [stderr] 224 | fn percentile(mut values: impl Iterator<Item = f64>, p: f64) -> f64 {
[INFO] [stderr]     |    ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `detect_outliers` and `calculate_shape_factors` are never used
[INFO] [stderr]    --> src/scientific/analysis/cell_statistics.rs:244:8
[INFO] [stderr]     |
[INFO] [stderr] 242 | pub trait StatisticalAnalysis {
[INFO] [stderr]     |           ------------------- methods in this trait
[INFO] [stderr] 243 |     fn analyze(&self) -> CellStatistics;
[INFO] [stderr] 244 |     fn detect_outliers(&self) -> Vec<(usize, String)>;
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 245 |     fn calculate_shape_factors(&self) -> Vec<f64>;
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `export_statistics_report` is never used
[INFO] [stderr]    --> src/scientific/analysis/cell_statistics.rs:271:8
[INFO] [stderr]     |
[INFO] [stderr] 271 | pub fn export_statistics_report(stats: &CellStatistics, path: &std::path::Path) -> std::io::Result<()> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `timestamp` is never read
[INFO] [stderr]   --> src/scientific/analysis/cell_analysis.rs:11:9
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub struct CellMeasurement {
[INFO] [stderr]    |            --------------- field in this struct
[INFO] [stderr] 11 |     pub timestamp: chrono::DateTime<Utc>,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `CellMeasurement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `get_measurements`, `clear_measurements`, and `create_measurement_annotation` are never used
[INFO] [stderr]    --> src/scientific/analysis/cell_analysis.rs:165:12
[INFO] [stderr]     |
[INFO] [stderr]  75 | impl CellAnalyzer {
[INFO] [stderr]     | ----------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 165 |     pub fn get_measurements(&self) -> &Vec<CellMeasurement> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 169 |     pub fn clear_measurements(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 173 |     pub fn create_measurement_annotation(&self, measurement: &CellMeasurement, roi: &ROIShape) -> Annotation {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `transformation_matrix` is never read
[INFO] [stderr]   --> src/scientific/calibration/spatial_calibration.rs:15:9
[INFO] [stderr]    |
[INFO] [stderr] 11 | pub struct SpatialCalibration {
[INFO] [stderr]    |            ------------------ field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 15 |     pub transformation_matrix: Option<[[f32; 3]; 3]>,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `SpatialCalibration` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `pixel_to_real` and `real_to_pixel` are never used
[INFO] [stderr]   --> src/scientific/calibration/spatial_calibration.rs:63:12
[INFO] [stderr]    |
[INFO] [stderr] 18 | impl SpatialCalibration {
[INFO] [stderr]    | ----------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 63 |     pub fn pixel_to_real(&self, pixel_coord: (i32, i32)) -> (f32, f32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 74 |     pub fn real_to_pixel(&self, real_coord: (f32, f32)) -> (i32, i32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `pseudo_color` and `opacity` are never read
[INFO] [stderr]   --> src/scientific/layers/channel.rs:10:9
[INFO] [stderr]    |
[INFO] [stderr]  6 | pub struct Channel {
[INFO] [stderr]    |            ------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 10 |     pub pseudo_color: (u8, u8, u8),
[INFO] [stderr]    |         ^^^^^^^^^^^^
[INFO] [stderr] 11 |     pub opacity: f32,
[INFO] [stderr]    |         ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Channel` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: variants `Measurement` and `Text` are never constructed
[INFO] [stderr]   --> src/scientific/layers/annotation.rs:14:5
[INFO] [stderr]    |
[INFO] [stderr]  5 | pub enum AnnotationType {
[INFO] [stderr]    |          -------------- variants in this enum
[INFO] [stderr] ...
[INFO] [stderr] 14 |     Measurement {
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 18 |     Text {
[INFO] [stderr]    |     ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `AnnotationType` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `image` is never read
[INFO] [stderr]   --> src/scientific/layers/annotation.rs:27:9
[INFO] [stderr]    |
[INFO] [stderr] 25 | pub struct Annotation {
[INFO] [stderr]    |            ---------- field in this struct
[INFO] [stderr] 26 |     pub name: String,
[INFO] [stderr] 27 |     pub image: RgbImage,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Annotation` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `new` is never used
[INFO] [stderr]   --> src/scientific/layers/metadata.rs:49:12
[INFO] [stderr]    |
[INFO] [stderr] 29 | impl Calibration {
[INFO] [stderr]    | ---------------- associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 49 |     pub fn new(
[INFO] [stderr]    |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `current_measurement_points`, `frame`, and `state` are never read
[INFO] [stderr]   --> src/scientific/state/scientific_state.rs:27:9
[INFO] [stderr]    |
[INFO] [stderr] 18 | pub struct ScientificState {
[INFO] [stderr]    |            --------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 27 |     pub current_measurement_points: Vec<(i32, i32)>,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 33 |     frame: Option<Rc<RefCell<Frame>>>,
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr] 34 |     state: Option<Rc<RefCell<ImageState>>>,
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]    --> src/scientific/state/scientific_state.rs:130:12
[INFO] [stderr]     |
[INFO] [stderr]  45 | impl ScientificState {
[INFO] [stderr]     | -------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 130 |     pub fn get_base_image(&self) -> Option<RgbImage> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 139 |     pub fn set_frame(&mut self, frame: Rc<RefCell<Frame>>) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 143 |     pub fn set_state(&mut self, state: Rc<RefCell<ImageState>>) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 147 |     pub fn get_frame(&self) -> Option<Rc<RefCell<Frame>>> {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 151 |     pub fn get_state(&self) -> Option<Rc<RefCell<ImageState>>> {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 155 |     pub fn update_current_roi(&mut self, points: Vec<(i32, i32)>) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 162 |     pub fn clear_current_roi(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 220 |     pub fn get_active_roi_type(&self) -> ROIShape {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 231 |     pub fn add_point(&mut self, point: (i32, i32)) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 241 |     pub fn clear_points(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 247 |     pub fn set_show_overlay(&mut self, show: bool) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 277 |     pub fn get_annotation_count(&self) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 324 |     pub fn blend_channel(&self, composite: &mut Vec<u8>, channel: &Channel) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 426 |     pub fn set_measurement_tool(&mut self, tool: MeasurementTool) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 461 |     fn draw_in_progress(&self, composite: &mut Vec<u8>, width: i32, height: i32, points: &[(i32, i32)], color: (u8, u8, u8)) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 645 |     pub fn add_measurement(&mut self, start: (i32, i32), end: (i32, i32)) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 665 |     pub fn calculate_roi_area(&self, points: &[(i32, i32)]) -> (f64, String) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 685 |     pub fn toggle_annotation_visibility(&mut self, index: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 692 |     pub fn get_visible_annotations(&self) -> Vec<&Annotation> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `get_measurements`, `analyze_roi`, `clear_measurements`, and `get_statistics` are never used
[INFO] [stderr]    --> src/scientific/tools/interactive/cell_analysis_tool.rs:31:12
[INFO] [stderr]     |
[INFO] [stderr]  19 | impl CellAnalysisTool {
[INFO] [stderr]     | --------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  31 |     pub fn get_measurements(&self) -> &[CellMeasurement] {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 137 |     pub fn analyze_roi(
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 162 |     pub fn clear_measurements(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 166 |     pub fn get_statistics(&self) -> Option<CellStatistics> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `get_cell_statistics` and `get_measurements` are never used
[INFO] [stderr]    --> src/scientific/tools/interactive/cell_analysis_tool.rs:193:8
[INFO] [stderr]     |
[INFO] [stderr] 188 | pub trait CellAnalysisState {
[INFO] [stderr]     |           ----------------- methods in this trait
[INFO] [stderr] ...
[INFO] [stderr] 193 |     fn get_cell_statistics(&self) -> Option<CellStatistics>;
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 194 |     fn get_measurements(&self) -> Option<Vec<CellMeasurement>>;
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `outline_color` and `line_width` are never read
[INFO] [stderr]    --> src/scientific/tools/interactive/roi_tool.rs:107:9
[INFO] [stderr]     |
[INFO] [stderr] 106 | pub struct ROIProperties {
[INFO] [stderr]     |            ------------- fields in this struct
[INFO] [stderr] 107 |     pub outline_color: (u8, u8, u8),
[INFO] [stderr]     |         ^^^^^^^^^^^^^
[INFO] [stderr] 108 |     pub line_width: i32,
[INFO] [stderr]     |         ^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `ROIProperties` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `base_image` and `properties` are never read
[INFO] [stderr]    --> src/scientific/tools/interactive/roi_tool.rs:134:5
[INFO] [stderr]     |
[INFO] [stderr] 130 | pub struct InteractiveROIState {
[INFO] [stderr]     |            ------------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 134 |     base_image: Option<RgbImage>,
[INFO] [stderr]     |     ^^^^^^^^^^
[INFO] [stderr] 135 |     scaling: Option<ScalingInfo>,
[INFO] [stderr] 136 |     properties: ROIProperties,
[INFO] [stderr]     |     ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `calculate_rectangle` and `show_roi_mode_dialog` are never used
[INFO] [stderr]    --> src/scientific/tools/interactive/roi_tool.rs:153:8
[INFO] [stderr]     |
[INFO] [stderr] 140 | impl InteractiveROIState {
[INFO] [stderr]     | ------------------------ associated items in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 153 |     fn calculate_rectangle(&self, start: (i32, i32), current: (i32, i32)) -> (i32, i32, i32, i32) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 160 |     pub fn show_roi_mode_dialog(on_select: impl Fn(ROIShape) + 'static) -> ShapeSelector {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `MeasurementTool` is never constructed
[INFO] [stderr]   --> src/scientific/tools/interactive/measurement_tool.rs:16:12
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub struct MeasurementTool {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `create_measurement`, `calculate_distance`, `create_scale_bar`, and `handle_measurement` are never used
[INFO] [stderr]   --> src/scientific/tools/interactive/measurement_tool.rs:23:12
[INFO] [stderr]    |
[INFO] [stderr] 22 | impl MeasurementTool {
[INFO] [stderr]    | -------------------- associated items in this implementation
[INFO] [stderr] 23 |     pub fn new(calibration: SpatialCalibration, line_color: (u8, u8, u8), line_width: i32) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 31 |     pub fn create_measurement(&self, points: Vec<(i32, i32)>, name: String, _image: RgbImage) -> Annotation {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 46 |     pub fn calculate_distance(&self, points: &[(i32, i32)]) -> f32 {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 63 |     pub fn create_scale_bar(&self, length: f32, position: (i32, i32), image: RgbImage) -> Annotation {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 81 |     pub fn handle_measurement(&self, state_ref: &mut ImageState, points: &[(i32, i32)]) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `start_interactive_measurement` is never used
[INFO] [stderr]   --> src/scientific/tools/interactive/measurement_tool.rs:95:8
[INFO] [stderr]    |
[INFO] [stderr] 95 | pub fn start_interactive_measurement(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>, tool: MeasurementTool) {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `IntensityStatistics` is never constructed
[INFO] [stderr]  --> src/scientific/tools/interactive/roi/measurements.rs:9:8
[INFO] [stderr]   |
[INFO] [stderr] 9 | struct IntensityStatistics {
[INFO] [stderr]   |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `MeasurementCalculator` is never constructed
[INFO] [stderr]   --> src/scientific/tools/interactive/roi/measurements.rs:17:12
[INFO] [stderr]    |
[INFO] [stderr] 17 | pub struct MeasurementCalculator {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/scientific/tools/interactive/roi/measurements.rs:22:12
[INFO] [stderr]     |
[INFO] [stderr]  21 | impl MeasurementCalculator {
[INFO] [stderr]     | -------------------------- associated items in this implementation
[INFO] [stderr]  22 |     pub fn new(calibration: Option<SpatialCalibration>) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  26 |     fn generate_ellipse_points(&self, width: i32, height: i32) -> Vec<(i32, i32)> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  49 |     fn calculate_ellipse_measurements(&self, width: i32, height: i32, image_data: &ImageData) -> ROIMeasurements {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  78 |     pub fn calculate_measurements(
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  95 |     fn calculate_polygon_measurements(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 133 |     fn calculate_polygon_area(&self, points: &[(i32, i32)]) -> f64 {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 148 |     fn calculate_polygon_perimeter(&self, points: &[(i32, i32)]) -> f64 {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 164 |     fn calculate_centroid(&self, points: &[(i32, i32)]) -> (f64, f64) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 181 |     fn calculate_solidity(&self, points: &[(i32, i32)], area: f64) -> (f64, f64) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 189 |     fn calculate_shape_factors(&self, points: &[(i32, i32)]) -> (f64, f64) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 212 |     fn calculate_rectangle_measurements(&self, width: i32, height: i32, image_data: &ImageData) -> ROIMeasurements {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 245 |     fn calculate_line_measurements(&self, points: &[(i32, i32)], image_data: &ImageData) -> ROIMeasurements {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 276 |     fn calculate_intensity_statistics(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 331 |     fn point_in_polygon(&self, point: (i32, i32), vertices: &[(i32, i32)]) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 352 |     fn calibrate_area(&self, area: f64) -> f64 {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 360 |     fn calibrate_length(&self, length: f64) -> f64 {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 368 |     fn get_units(&self) -> String {
[INFO] [stderr]     |        ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ROIProperties` is never constructed
[INFO] [stderr]  --> src/scientific/tools/interactive/roi/properties.rs:8:12
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub struct ROIProperties {
[INFO] [stderr]   |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `set_visibility`, `set_selection`, `toggle_lock`, `update_style`, and `update_colors` are never used
[INFO] [stderr]   --> src/scientific/tools/interactive/roi/properties.rs:37:12
[INFO] [stderr]    |
[INFO] [stderr] 36 | impl ROIProperties {
[INFO] [stderr]    | ------------------ associated items in this implementation
[INFO] [stderr] 37 |     pub fn new(color: (u8, u8, u8), line_width: i32) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 45 |     pub fn set_visibility(&mut self, visible: bool) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 49 |     pub fn set_selection(&mut self, selected: bool) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 53 |     pub fn toggle_lock(&mut self) {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 57 |     pub fn update_style(&mut self, line_style: LineStyle, line_width: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 64 |     pub fn update_colors(&mut self, outline: (u8, u8, u8), fill: Option<(u8, u8, u8)>) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ROIState` is never constructed
[INFO] [stderr]   --> src/scientific/tools/interactive/roi/properties.rs:73:12
[INFO] [stderr]    |
[INFO] [stderr] 73 | pub struct ROIState {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/scientific/tools/interactive/roi/properties.rs:84:12
[INFO] [stderr]     |
[INFO] [stderr]  83 | impl ROIState {
[INFO] [stderr]     | ------------- associated items in this implementation
[INFO] [stderr]  84 |     pub fn new() -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  96 |     pub fn set_frame(&mut self, frame: Rc<RefCell<Frame>>) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 100 |     pub fn get_frame(&self) -> Option<Rc<RefCell<Frame>>> {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 104 |     pub fn get_active_tool_mut(&self) -> Option<Rc<RefCell<ROITool>>> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 108 |     pub fn set_active_tool(&mut self, tool: ROITool) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 112 |     pub fn start_drawing(&mut self, shape_type: ROIShape) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 120 |     pub fn add_point(&mut self, point: (i32, i32)) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 127 |     pub fn finish_drawing(&mut self) -> Option<ROIShape> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 137 |     fn update_shape(&mut self) {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 166 |     pub fn clear(&mut self) {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 174 |     pub fn is_active(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 178 |     pub fn lock(&mut self) {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 182 |     pub fn unlock(&mut self) {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 186 |     pub fn set_properties(&mut self, properties: ROIProperties) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 192 |     pub fn get_measurements(&self) -> Option<ROIMeasurements> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 220 |     pub fn set_notes(&mut self, notes: Option<String>) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 226 |     pub fn toggle_measurements(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 230 |     pub fn get_bounding_box(&self) -> Option<(i32, i32, i32, i32)> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `add_scale_bar` is never used
[INFO] [stderr]   --> src/scientific/ui/measurement_dialog.rs:15:4
[INFO] [stderr]    |
[INFO] [stderr] 15 | fn add_scale_bar(state: &mut ScientificState, length: f32, unit: String) {
[INFO] [stderr]    |    ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `show_measurement_dialog` is never used
[INFO] [stderr]   --> src/scientific/ui/measurement_dialog.rs:31:8
[INFO] [stderr]    |
[INFO] [stderr] 31 | pub fn show_measurement_dialog(state: &Rc<RefCell<ImageState>>) -> bool {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `show_roi_dialog` is never used
[INFO] [stderr]   --> src/scientific/ui/roi_dialog.rs:15:8
[INFO] [stderr]    |
[INFO] [stderr] 15 | pub fn show_roi_dialog(frame: &Rc<RefCell<Frame>>, state: &Rc<RefCell<ImageState>>) -> bool {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `show_batch_analysis_dialog` is never used
[INFO] [stderr]    --> src/scientific/ui/cell_analysis/dialog.rs:112:8
[INFO] [stderr]     |
[INFO] [stderr] 112 | pub fn show_batch_analysis_dialog(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `set_col_widths` is never used
[INFO] [stderr]   --> src/scientific/ui/cell_analysis/table.rs:88:8
[INFO] [stderr]    |
[INFO] [stderr] 88 | pub fn set_col_widths(table: &mut Table, data: &[Vec<String>]) {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `customize_table` is never used
[INFO] [stderr]    --> src/scientific/ui/cell_analysis/table.rs:108:8
[INFO] [stderr]     |
[INFO] [stderr] 108 | pub fn customize_table(table: &mut Table) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `statistics_table` and `auto_update` are never read
[INFO] [stderr]   --> src/scientific/ui/roi/batch_dialog.rs:39:5
[INFO] [stderr]    |
[INFO] [stderr] 36 | pub struct BatchDialog {
[INFO] [stderr]    |            ----------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 39 |     statistics_table: TableRow,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 45 |     auto_update: bool,
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `BatchDialog` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `add_measurement`, `hide`, and `is_visible` are never used
[INFO] [stderr]    --> src/scientific/ui/roi/batch_dialog.rs:312:12
[INFO] [stderr]     |
[INFO] [stderr]  52 | impl BatchDialog {
[INFO] [stderr]     | ---------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 312 |     pub fn add_measurement(&mut self, measurement: ROIMeasurements) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 341 |     pub fn hide(&mut self) {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 345 |     pub fn is_visible(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `PADDING` is never used
[INFO] [stderr]   --> src/scientific/ui/roi/components/mod.rs:10:11
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub const PADDING: i32 = 5;
[INFO] [stderr]    |           ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `BUTTON_HEIGHT` is never used
[INFO] [stderr]   --> src/scientific/ui/roi/components/mod.rs:11:11
[INFO] [stderr]    |
[INFO] [stderr] 11 | pub const BUTTON_HEIGHT: i32 = 25;
[INFO] [stderr]    |           ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `INPUT_HEIGHT` is never used
[INFO] [stderr]   --> src/scientific/ui/roi/components/mod.rs:12:11
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub const INPUT_HEIGHT: i32 = 25;
[INFO] [stderr]    |           ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `HEADER_HEIGHT` is never used
[INFO] [stderr]   --> src/scientific/ui/roi/components/mod.rs:14:11
[INFO] [stderr]    |
[INFO] [stderr] 14 | pub const HEADER_HEIGHT: i32 = 30;
[INFO] [stderr]    |           ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `PRIMARY_COLOR` is never used
[INFO] [stderr]   --> src/scientific/ui/roi/components/mod.rs:17:11
[INFO] [stderr]    |
[INFO] [stderr] 17 | pub const PRIMARY_COLOR: (u8, u8, u8) = (0, 121, 194);    // Blue
[INFO] [stderr]    |           ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `SECONDARY_COLOR` is never used
[INFO] [stderr]   --> src/scientific/ui/roi/components/mod.rs:18:11
[INFO] [stderr]    |
[INFO] [stderr] 18 | pub const SECONDARY_COLOR: (u8, u8, u8) = (88, 88, 88);   // Gray
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `SUCCESS_COLOR` is never used
[INFO] [stderr]   --> src/scientific/ui/roi/components/mod.rs:19:11
[INFO] [stderr]    |
[INFO] [stderr] 19 | pub const SUCCESS_COLOR: (u8, u8, u8) = (40, 167, 69);    // Green
[INFO] [stderr]    |           ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `WARNING_COLOR` is never used
[INFO] [stderr]   --> src/scientific/ui/roi/components/mod.rs:20:11
[INFO] [stderr]    |
[INFO] [stderr] 20 | pub const WARNING_COLOR: (u8, u8, u8) = (255, 193, 7);    // Yellow
[INFO] [stderr]    |           ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `ERROR_COLOR` is never used
[INFO] [stderr]   --> src/scientific/ui/roi/components/mod.rs:21:11
[INFO] [stderr]    |
[INFO] [stderr] 21 | pub const ERROR_COLOR: (u8, u8, u8) = (220, 53, 69);      // Red
[INFO] [stderr]    |           ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `TITLE_FONT_SIZE` is never used
[INFO] [stderr]   --> src/scientific/ui/roi/components/mod.rs:26:11
[INFO] [stderr]    |
[INFO] [stderr] 26 | pub const TITLE_FONT_SIZE: i32 = 16;
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ColorPicker` is never constructed
[INFO] [stderr]   --> src/scientific/ui/roi/components/color_picker.rs:11:12
[INFO] [stderr]    |
[INFO] [stderr] 11 | pub struct ColorPicker {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/scientific/ui/roi/components/color_picker.rs:22:12
[INFO] [stderr]     |
[INFO] [stderr]  21 | impl ColorPicker {
[INFO] [stderr]     | ---------------- associated items in this implementation
[INFO] [stderr]  22 |     pub fn new(x: i32, y: i32, w: i32, h: i32, label: &str, initial_color: (u8, u8, u8)) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  93 |     pub fn x(&self) -> i32 {
[INFO] [stderr]     |            ^
[INFO] [stderr] ...
[INFO] [stderr]  97 |     pub fn y(&self) -> i32 {
[INFO] [stderr]     |            ^
[INFO] [stderr] ...
[INFO] [stderr] 101 |     pub fn width(&self) -> i32 {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 105 |     pub fn height(&self) -> i32 {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 109 |     pub fn label(&self) -> String {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 113 |     fn setup_callbacks(&mut self) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 179 |     pub fn get_color(&self) -> (u8, u8, u8) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 183 |     pub fn set_color(&mut self, color: (u8, u8, u8)) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `LineStyleSelector` is never constructed
[INFO] [stderr]   --> src/scientific/ui/roi/components/line_style_selector.rs:13:12
[INFO] [stderr]    |
[INFO] [stderr] 13 | pub struct LineStyleSelector {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `setup_callbacks`, `get_style`, `get_width`, `set_style`, and `set_width` are never used
[INFO] [stderr]    --> src/scientific/ui/roi/components/line_style_selector.rs:22:12
[INFO] [stderr]     |
[INFO] [stderr]  21 | impl LineStyleSelector {
[INFO] [stderr]     | ---------------------- associated items in this implementation
[INFO] [stderr]  22 |     pub fn new(
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  84 |     fn setup_callbacks(&mut self) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 112 |     pub fn get_style(&self) -> LineStyle {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 116 |     pub fn get_width(&self) -> i32 {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 120 |     pub fn set_style(&mut self, style: LineStyle) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 133 |     pub fn set_width(&mut self, width: i32) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `selected_row` is never read
[INFO] [stderr]   --> src/scientific/ui/roi/components/measurement_table.rs:33:5
[INFO] [stderr]    |
[INFO] [stderr] 28 | pub struct MeasurementTable {
[INFO] [stderr]    |            ---------------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 33 |     selected_row: Option<i32>,
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `MeasurementTable` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `get_selected_measurement`, `set_row_callback`, `clear`, `get_row_count`, `get_all_measurements`, and `export_csv` are never used
[INFO] [stderr]    --> src/scientific/ui/roi/components/measurement_table.rs:193:12
[INFO] [stderr]     |
[INFO] [stderr]  36 | impl MeasurementTable {
[INFO] [stderr]     | --------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 193 |     pub fn get_selected_measurement(&self) -> Option<ROIMeasurements> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 203 |     pub fn set_row_callback<F: Fn(i32) + 'static>(&mut self, callback: F) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 212 |     pub fn clear(&mut self) {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 219 |     pub fn get_row_count(&self) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 223 |     pub fn get_all_measurements(&self) -> Vec<ROIMeasurements> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 227 |     pub fn export_csv(&self, path: &std::path::Path) -> std::io::Result<()> {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `ExportFormat` is never used
[INFO] [stderr]   --> src/scientific/ui/roi/export_dialog.rs:17:10
[INFO] [stderr]    |
[INFO] [stderr] 17 | pub enum ExportFormat {
[INFO] [stderr]    |          ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ExportOptions` is never constructed
[INFO] [stderr]   --> src/scientific/ui/roi/export_dialog.rs:25:12
[INFO] [stderr]    |
[INFO] [stderr] 25 | pub struct ExportOptions {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ExportDialog` is never constructed
[INFO] [stderr]   --> src/scientific/ui/roi/export_dialog.rs:49:12
[INFO] [stderr]    |
[INFO] [stderr] 49 | pub struct ExportDialog {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/scientific/ui/roi/export_dialog.rs:70:12
[INFO] [stderr]     |
[INFO] [stderr]  69 | impl ExportDialog {
[INFO] [stderr]     | ----------------- associated items in this implementation
[INFO] [stderr]  70 |     pub fn new(parent: Rc<RefCell<Window>>) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 168 |     fn setup_callbacks(&mut self) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 214 |     fn update_options(&mut self) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 238 |     fn validate_export(&self) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 246 |     fn perform_export(&self) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 255 |     fn export_csv(&self) {
[INFO] [stderr]     |        ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 259 |     fn export_json(&self) {
[INFO] [stderr]     |        ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 263 |     fn export_excel(&self) {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 267 |     fn export_image_roi(&self) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 271 |     pub fn show(&mut self) {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 275 |     pub fn hide(&mut self) {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 279 |     pub fn is_visible(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `MeasurementDialog` is never constructed
[INFO] [stderr]   --> src/scientific/ui/roi/measurement_dialog.rs:16:12
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub struct MeasurementDialog {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `setup_callbacks`, `export_measurements`, `show`, `hide`, and `is_visible` are never used
[INFO] [stderr]    --> src/scientific/ui/roi/measurement_dialog.rs:25:12
[INFO] [stderr]     |
[INFO] [stderr]  24 | impl MeasurementDialog {
[INFO] [stderr]     | ---------------------- associated items in this implementation
[INFO] [stderr]  25 |     pub fn new(
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  85 |     fn setup_callbacks(&mut self) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 103 |     fn export_measurements(measurements: &ROIMeasurements, path: &std::path::Path) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 118 |     pub fn show(&mut self) {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 122 |     pub fn hide(&mut self) {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 126 |     pub fn is_visible(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `PropertiesDialog` is never constructed
[INFO] [stderr]   --> src/scientific/ui/roi/properties_dialog.rs:34:12
[INFO] [stderr]    |
[INFO] [stderr] 34 | pub struct PropertiesDialog {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `setup_callbacks`, `show`, `hide`, and `is_visible` are never used
[INFO] [stderr]    --> src/scientific/ui/roi/properties_dialog.rs:49:12
[INFO] [stderr]     |
[INFO] [stderr]  48 | impl PropertiesDialog {
[INFO] [stderr]     | --------------------- associated items in this implementation
[INFO] [stderr]  49 |     pub fn new(
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 130 |     fn setup_callbacks(&self) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 163 |     pub fn show(&mut self) {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 168 |     pub fn hide(&mut self) {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 172 |     pub fn is_visible(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `LineStyle` is never used
[INFO] [stderr]  --> src/scientific/types.rs:9:10
[INFO] [stderr]   |
[INFO] [stderr] 9 | pub enum LineStyle {
[INFO] [stderr]   |          ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `integrated_density`, `std_dev`, `aspect_ratio`, `roundness`, `solidity`, and `is_calibrated` are never read
[INFO] [stderr]   --> src/scientific/types.rs:76:9
[INFO] [stderr]    |
[INFO] [stderr] 68 | pub struct ROIMeasurements {
[INFO] [stderr]    |            --------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 76 |     pub integrated_density: f64,  // Added to match usage
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 77 |     pub std_dev: f64,
[INFO] [stderr]    |         ^^^^^^^
[INFO] [stderr] 78 |     pub aspect_ratio: f64,      
[INFO] [stderr]    |         ^^^^^^^^^^^^
[INFO] [stderr] 79 |     pub roundness: f64,        
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr] 80 |     pub solidity: f64,         
[INFO] [stderr]    |         ^^^^^^^^
[INFO] [stderr] 81 |     pub shape_type: ROIShape,     // Added to match usage
[INFO] [stderr] 82 |     pub is_calibrated: bool,
[INFO] [stderr]    |         ^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `ROIMeasurements` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `active`, `unit`, `color`, and `line_width` are never read
[INFO] [stderr]   --> src/scientific/types.rs:87:9
[INFO] [stderr]    |
[INFO] [stderr] 86 | pub struct MeasurementTool {
[INFO] [stderr]    |            --------------- fields in this struct
[INFO] [stderr] 87 |     pub active: bool,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr] 88 |     pub unit: String,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr] 89 |     pub color: (u8, u8, u8),
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr] 90 |     pub line_width: i32,
[INFO] [stderr]    |         ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `new` is never used
[INFO] [stderr]   --> src/scientific/types.rs:94:12
[INFO] [stderr]    |
[INFO] [stderr] 93 | impl MeasurementTool {
[INFO] [stderr]    | -------------------- associated function in this implementation
[INFO] [stderr] 94 |     pub fn new(unit: String) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated functions `draw_text_with_background`, `draw_line_with_endpoints`, `draw_measurement`, `draw_guide_text`, and `calculate_position` are never used
[INFO] [stderr]    --> src/scientific/rendering/frame_renderer.rs:79:12
[INFO] [stderr]     |
[INFO] [stderr]  15 | impl FrameRenderer {
[INFO] [stderr]     | ------------------ associated functions in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  79 |     pub fn draw_text_with_background(
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 114 |     pub fn draw_line_with_endpoints(
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 132 |     pub fn draw_measurement(
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 160 |     pub fn draw_guide_text(text: &str, x: i32, y: i32) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 173 |     pub fn calculate_position(
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: eliding a lifetime that's named elsewhere is confusing
[INFO] [stderr]   --> src/scientific/analysis/cell_statistics.rs:68:82
[INFO] [stderr]    |
[INFO] [stderr] 68 | ...etrics<'a>(&'a self, measurements: &'a [CellMeasurement]) -> Vec<(&str, &MetricStatistics, Box<dyn Iterator<Item = f64> + 'a>)> {
[INFO] [stderr]    |                --                      --                            ^^^^  ^^^^^^^^^^^^^^^^^ the same lifetime is elided here
[INFO] [stderr]    |                |                       |                             |
[INFO] [stderr]    |                |                       the lifetime is named here    the same lifetime is elided here
[INFO] [stderr]    |                the lifetime is named here
[INFO] [stderr]    |
[INFO] [stderr]    = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stderr]    = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stderr] help: consistently use `'a`
[INFO] [stderr]    |
[INFO] [stderr] 68 |     fn create_metrics<'a>(&'a self, measurements: &'a [CellMeasurement]) -> Vec<(&'a str, &'a MetricStatistics, Box<dyn Iterator<Item = f64> + 'a>)> {
[INFO] [stderr]    |                                                                                   ++       ++
[INFO] [stderr] 
[INFO] [stderr] warning: `youtube_image-viewer` (bin "youtube_image-viewer" test) generated 235 warnings (run `cargo fix --bin "youtube_image-viewer" -p youtube_image-viewer --tests` to apply 119 suggestions)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.24s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/youtube_image_viewer-1b230a2599e83c29)
[INFO] [stdout] 
[INFO] [stdout] running 12 tests
[INFO] [stdout] test menu::edit::watermark::fonts::tests::test_default_font_available ... ok
[INFO] [stdout] test menu::edit::watermark::fonts::tests::test_font_manager_creation ... ok
[INFO] [stdout] test menu::edit::watermark::image_watermark::tests::test_create_image_watermark ... ok
[INFO] [stdout] test menu::edit::watermark::fonts::tests::test_list_fonts ... ok
[INFO] [stdout] test menu::edit::watermark::position::tests::test_calculate_position_bottom_right ... ok
[INFO] [stdout] test menu::edit::watermark::position::tests::test_calculate_position_center ... ok
[INFO] [stdout] test menu::edit::watermark::fonts::tests::test_add_font ... ok
[INFO] [stdout] test menu::edit::watermark::position::tests::test_calculate_position_top_left ... ok
[INFO] [stdout] test menu::edit::watermark::templates::tests::test_list_templates ... ok
[INFO] [stdout] test menu::edit::watermark::templates::tests::test_template_manager_creation ... ok
[INFO] [stdout] test menu::edit::watermark::text_watermark::tests::test_text_watermark_creation ... ok
[INFO] [stdout] test menu::edit::watermark::image_watermark::tests::test_resize_watermark ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "3d506b38987acdab1df7fa9cdc2cd5c591b557a9b7f9cf31ff1bc358253a0dff", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "3d506b38987acdab1df7fa9cdc2cd5c591b557a9b7f9cf31ff1bc358253a0dff", kill_on_drop: false }`
[INFO] [stdout] 3d506b38987acdab1df7fa9cdc2cd5c591b557a9b7f9cf31ff1bc358253a0dff
