[INFO] cloning repository https://github.com/raphlinus/fast-stroke
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/raphlinus/fast-stroke" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fraphlinus%2Ffast-stroke", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fraphlinus%2Ffast-stroke'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] cc24eaf5efe674139fa07b45cd034e687bbb5cac
[INFO] checking raphlinus/fast-stroke against try#7b3da9103634dffd4f4365cfd8642427c781d99f+rustflags=-Dinherent-method-on-receiver for 152214-denied
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fraphlinus%2Ffast-stroke" "/workspace/builds/worker-6-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/raphlinus/fast-stroke
[INFO] finished tweaking git repo https://github.com/raphlinus/fast-stroke
[INFO] tweaked toml for git repo https://github.com/raphlinus/fast-stroke written to /workspace/builds/worker-6-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/raphlinus/fast-stroke on toolchain 7b3da9103634dffd4f4365cfd8642427c781d99f
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+7b3da9103634dffd4f4365cfd8642427c781d99f" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/raphlinus/fast-stroke 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" "+7b3da9103634dffd4f4365cfd8642427c781d99f" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Updating git repository `https://github.com/linebender/xilem`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[ERROR] error running command: no output for 300 seconds
[INFO] checking raphlinus/fast-stroke against try#7b3da9103634dffd4f4365cfd8642427c781d99f+rustflags=-Dinherent-method-on-receiver for 152214-denied
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fraphlinus%2Ffast-stroke" "/workspace/builds/worker-6-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/raphlinus/fast-stroke
[INFO] finished tweaking git repo https://github.com/raphlinus/fast-stroke
[INFO] tweaked toml for git repo https://github.com/raphlinus/fast-stroke written to /workspace/builds/worker-6-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/raphlinus/fast-stroke on toolchain 7b3da9103634dffd4f4365cfd8642427c781d99f
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+7b3da9103634dffd4f4365cfd8642427c781d99f" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/raphlinus/fast-stroke 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" "+7b3da9103634dffd4f4365cfd8642427c781d99f" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded peniko v0.2.0
[INFO] [stderr]   Downloaded tracing-web v0.1.3
[INFO] [stderr]   Downloaded kurbo v0.11.1
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:61361fe0aef631f17e9d025a70c5a647956f8c671dd02950a60ad3f5cc5526d7" "/opt/rustwide/cargo-home/bin/cargo" "+7b3da9103634dffd4f4365cfd8642427c781d99f" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 3cf828dbaffcf106c4653bdb76c8b2a1d35a78f5b4d47353d56aa8680b5919fb
[INFO] running `Command { std: "docker" "start" "-a" "3cf828dbaffcf106c4653bdb76c8b2a1d35a78f5b4d47353d56aa8680b5919fb", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "3cf828dbaffcf106c4653bdb76c8b2a1d35a78f5b4d47353d56aa8680b5919fb", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "3cf828dbaffcf106c4653bdb76c8b2a1d35a78f5b4d47353d56aa8680b5919fb", kill_on_drop: false }`
[INFO] [stdout] 3cf828dbaffcf106c4653bdb76c8b2a1d35a78f5b4d47353d56aa8680b5919fb
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid -Dinherent-method-on-receiver" "-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:61361fe0aef631f17e9d025a70c5a647956f8c671dd02950a60ad3f5cc5526d7" "/opt/rustwide/cargo-home/bin/cargo" "+7b3da9103634dffd4f4365cfd8642427c781d99f" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] a29931b1bf2cedc3d70a6eb8bd0352935038c8e664487f61ee450f31fd0a8054
[INFO] running `Command { std: "docker" "start" "-a" "a29931b1bf2cedc3d70a6eb8bd0352935038c8e664487f61ee450f31fd0a8054", kill_on_drop: false }`
[INFO] [stderr]    Compiling wasm-bindgen-shared v0.2.99
[INFO] [stderr]    Compiling bumpalo v3.16.0
[INFO] [stderr]     Checking smallvec v1.13.2
[INFO] [stderr]    Compiling wasm-bindgen v0.2.99
[INFO] [stderr]    Compiling libc v0.2.155
[INFO] [stderr]     Checking tracing-core v0.1.33
[INFO] [stderr]     Checking arrayvec v0.7.6
[INFO] [stderr]    Compiling quote v1.0.37
[INFO] [stderr]     Checking log v0.4.22
[INFO] [stderr]     Checking thread_local v1.1.8
[INFO] [stderr]    Compiling syn v2.0.90
[INFO] [stderr]     Checking kurbo v0.11.1
[INFO] [stderr]     Checking tracing-log v0.2.0
[INFO] [stderr]     Checking tracing-subscriber v0.3.19
[INFO] [stderr]     Checking peniko v0.2.0
[INFO] [stderr]     Checking getrandom v0.2.15
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking fast-stroke v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]    Compiling wasm-bindgen-backend v0.2.99
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling tracing-attributes v0.1.28
[INFO] [stderr]    Compiling wasm-bindgen-macro-support v0.2.99
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]     Checking tracing v0.1.41
[INFO] [stderr]     Checking xilem_core v0.1.0 (https://github.com/linebender/xilem?rev=806ee4d#806ee4d1)
[INFO] [stderr]    Compiling wasm-bindgen-macro v0.2.99
[INFO] [stderr]     Checking js-sys v0.3.76
[INFO] [stderr]     Checking console_error_panic_hook v0.1.7
[INFO] [stderr]     Checking futures-executor v0.3.31
[INFO] [stderr]     Checking futures v0.3.31
[INFO] [stderr]     Checking web-sys v0.3.76
[INFO] [stderr]     Checking wasm-bindgen-futures v0.4.49
[INFO] [stderr]     Checking tracing-web v0.1.3
[INFO] [stderr]     Checking xilem_web v0.1.0 (https://github.com/linebender/xilem?rev=806ee4d#806ee4d1)
[INFO] [stderr]     Checking interactive v0.1.0 (/opt/rustwide/workdir/interactive)
[INFO] [stdout] warning: unused import: `Shape`
[INFO] [stdout]  --> interactive/src/offset.rs:9:69
[INFO] [stdout]   |
[INFO] [stdout] 9 |     BezPath, CubicBez, ParamCurve, ParamCurveDeriv, Point, QuadBez, Shape, Vec2,
[INFO] [stdout]   |                                                                     ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Shape`
[INFO] [stdout]  --> interactive/src/offset.rs:9:69
[INFO] [stdout]   |
[INFO] [stdout] 9 |     BezPath, CubicBez, ParamCurve, ParamCurveDeriv, Point, QuadBez, Shape, Vec2,
[INFO] [stdout]   |                                                                     ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `z`
[INFO] [stdout]    --> interactive/src/midpoint.rs:357:25
[INFO] [stdout]     |
[INFO] [stdout] 357 |                     let z = q_approx.cross(dpdu);
[INFO] [stdout]     |                         ^ help: if this is intentional, prefix it with an underscore: `_z`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> interactive/src/offset.rs:410:13
[INFO] [stdout]     |
[INFO] [stdout] 410 |         let mut t = 0.0;
[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: `t`
[INFO] [stdout]    --> interactive/src/offset.rs:410:13
[INFO] [stdout]     |
[INFO] [stdout] 410 |         let mut t = 0.0;
[INFO] [stdout]     |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_t`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `err` is never read
[INFO] [stdout]    --> interactive/src/perturb.rs:533:19
[INFO] [stdout]     |
[INFO] [stdout] 533 |     let mut err = mid_err;
[INFO] [stdout]     |                   ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err_min`
[INFO] [stdout]    --> interactive/src/perturb.rs:783:9
[INFO] [stdout]     |
[INFO] [stdout] 783 |     let err_min =
[INFO] [stdout]     |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_err_min`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err_max`
[INFO] [stdout]    --> interactive/src/perturb.rs:785:9
[INFO] [stdout]     |
[INFO] [stdout] 785 |     let err_max = a * a * (aa_n + aa_t)
[INFO] [stdout]     |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_err_max`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `n` is never read
[INFO] [stdout]    --> interactive/src/perturb.rs:885:17
[INFO] [stdout]     |
[INFO] [stdout] 885 |     let mut n = nm;
[INFO] [stdout]     |                 ^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err_min`
[INFO] [stdout]     --> interactive/src/perturb.rs:1078:13
[INFO] [stdout]      |
[INFO] [stdout] 1078 |         let err_min = err_min / self.d.powi(2);
[INFO] [stdout]      |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_err_min`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err_max`
[INFO] [stdout]     --> interactive/src/perturb.rs:1085:13
[INFO] [stdout]      |
[INFO] [stdout] 1085 |         let err_max = err_max / self.d.powi(2);
[INFO] [stdout]      |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_err_max`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path_arc`
[INFO] [stdout]   --> interactive/src/main.rs:97:9
[INFO] [stdout]    |
[INFO] [stdout] 97 |     let path_arc = c_arc.to_path(0.0);
[INFO] [stdout]    |         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_path_arc`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err_arc`
[INFO] [stdout]   --> interactive/src/main.rs:98:9
[INFO] [stdout]    |
[INFO] [stdout] 98 |     let err_arc = perturb::plot_scaled(&perturb::error_by_rays(c, d, c_arc), err_scale);
[INFO] [stdout]    |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_err_arc`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path_arc_lse`
[INFO] [stdout]    --> interactive/src/main.rs:105:9
[INFO] [stdout]     |
[INFO] [stdout] 105 |     let path_arc_lse = c_arc_lse.to_path(0.0);
[INFO] [stdout]     |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_path_arc_lse`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err_arc_lse_refined`
[INFO] [stdout]    --> interactive/src/main.rs:106:9
[INFO] [stdout]     |
[INFO] [stdout] 106 |     let err_arc_lse_refined =
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_err_arc_lse_refined`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `t`
[INFO] [stdout]    --> interactive/src/main.rs:111:16
[INFO] [stdout]     |
[INFO] [stdout] 111 |     let (a, b, t) = perturb::arc_onept(c, d);
[INFO] [stdout]     |                ^ help: if this is intentional, prefix it with an underscore: `_t`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path_ao`
[INFO] [stdout]    --> interactive/src/main.rs:114:9
[INFO] [stdout]     |
[INFO] [stdout] 114 |     let path_ao = c_ao.to_path(0.0);
[INFO] [stdout]     |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_path_ao`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err_ao`
[INFO] [stdout]    --> interactive/src/main.rs:115:9
[INFO] [stdout]     |
[INFO] [stdout] 115 |     let err_ao = perturb::plot_scaled(&perturb::error_by_rays(c, d, c_ao), err_scale);
[INFO] [stdout]     |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_err_ao`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path_onept3`
[INFO] [stdout]    --> interactive/src/main.rs:129:9
[INFO] [stdout]     |
[INFO] [stdout] 129 |     let path_onept3 = c_onept3.to_path(0.0);
[INFO] [stdout]     |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_path_onept3`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err_onept3`
[INFO] [stdout]    --> interactive/src/main.rs:130:9
[INFO] [stdout]     |
[INFO] [stdout] 130 |     let err_onept3 = perturb::plot_scaled(&perturb::error_by_rays(c, d, c_onept3), err_scale);
[INFO] [stdout]     |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_err_onept3`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `derr_plot`
[INFO] [stdout]    --> interactive/src/main.rs:132:9
[INFO] [stdout]     |
[INFO] [stdout] 132 |     let derr_plot = perturb::plot(&perturb::onept_err_plot(c, d));
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_derr_plot`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path_midpoint_g1`
[INFO] [stdout]    --> interactive/src/main.rs:167:9
[INFO] [stdout]     |
[INFO] [stdout] 167 |     let path_midpoint_g1 = c_midpoint_g1.to_path(0.0);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_path_midpoint_g1`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `midpt_line`
[INFO] [stdout]    --> interactive/src/main.rs:175:9
[INFO] [stdout]     |
[INFO] [stdout] 175 |     let midpt_line = Line::new(
[INFO] [stdout]     |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_midpt_line`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SCALE` is never used
[INFO] [stdout]    --> interactive/src/main.rs:124:11
[INFO] [stdout]     |
[INFO] [stdout] 124 |     const SCALE: f64 = 1e-6;
[INFO] [stdout]     |           ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CuspAnalysis` is never constructed
[INFO] [stdout]  --> interactive/src/cusp.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct CuspAnalysis {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VelMinimum` is never constructed
[INFO] [stdout]   --> interactive/src/cusp.rs:16:8
[INFO] [stdout]    |
[INFO] [stdout] 16 | struct VelMinimum {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `get_cusp` are never used
[INFO] [stdout]   --> interactive/src/cusp.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl CuspAnalysis {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 23 |     /// Do cusp analysis based on hodograph of cubic Bezier.
[INFO] [stdout] 24 |     pub fn new(q: QuadBez) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn get_cusp(&self, range: Range<f64>) -> Option<(f64, Vec2)> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CUSP_EPSILON` is never used
[INFO] [stdout]  --> interactive/src/evolute.rs:8:7
[INFO] [stdout]   |
[INFO] [stdout] 8 | const CUSP_EPSILON: f64 = 1e-12;
[INFO] [stdout]   |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_DEPTH` is never used
[INFO] [stdout]   --> interactive/src/evolute.rs:10:7
[INFO] [stdout]    |
[INFO] [stdout] 10 | const MAX_DEPTH: usize = 8;
[INFO] [stdout]    |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `N_LSE` is never used
[INFO] [stdout]   --> interactive/src/evolute.rs:12:7
[INFO] [stdout]    |
[INFO] [stdout] 12 | const N_LSE: usize = 8;
[INFO] [stdout]    |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BLEND` is never used
[INFO] [stdout]   --> interactive/src/evolute.rs:14:7
[INFO] [stdout]    |
[INFO] [stdout] 14 | const BLEND: f64 = 1e-2;
[INFO] [stdout]    |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `c` and `tolerance` are never read
[INFO] [stdout]   --> interactive/src/evolute.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | struct CubicEvolute {
[INFO] [stdout]    |        ------------ fields in this struct
[INFO] [stdout] 17 |     c: CubicBez,
[INFO] [stdout]    |     ^
[INFO] [stdout] ...
[INFO] [stdout] 22 |     tolerance: f64,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> interactive/src/evolute.rs:26:8
[INFO] [stdout]     |
[INFO] [stdout]  25 | impl CubicEvolute {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout]  26 |     fn new(c: CubicBez, tolerance: f64) -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout]  49 |     fn radius(&self, t: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  55 |     fn radius_deriv(&self, t: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  61 |     fn eval(&self, t: f64) -> Point {
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  66 |     fn apply(&self, rec: &EvoluteRec, a: f64, b: f64) -> CubicBez {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  72 |     fn evolute_rec(&self, rec: &EvoluteRec, path: &mut BezPath) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     fn subdivide(
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 161 |     fn eval_err(&self, rec: &EvoluteRec, c_approx: CubicBez, ts: &mut [f64; N_LSE]) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 184 |     fn refine_least_squares(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `evolute_hacky_approx` is never used
[INFO] [stdout]    --> interactive/src/evolute.rs:226:8
[INFO] [stdout]     |
[INFO] [stdout] 226 | pub fn evolute_hacky_approx(c: CubicBez) -> BezPath {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `evolute_approx_cubic` is never used
[INFO] [stdout]    --> interactive/src/evolute.rs:247:8
[INFO] [stdout]     |
[INFO] [stdout] 247 | pub fn evolute_approx_cubic(c: CubicBez) -> CubicBez {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EvoluteRec` is never constructed
[INFO] [stdout]    --> interactive/src/evolute.rs:260:8
[INFO] [stdout]     |
[INFO] [stdout] 260 | struct EvoluteRec {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `evolute_approx` is never used
[INFO] [stdout]    --> interactive/src/evolute.rs:273:8
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub fn evolute_approx(c: CubicBez, tolerance: f64) -> BezPath {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `turn` is never used
[INFO] [stdout]    --> interactive/src/evolute.rs:301:4
[INFO] [stdout]     |
[INFO] [stdout] 301 | fn turn(v: Vec2) -> Vec2 {
[INFO] [stdout]     |    ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `N` is never used
[INFO] [stdout]   --> interactive/src/kbound.rs:48:7
[INFO] [stdout]    |
[INFO] [stdout] 48 | const N: usize = 1;
[INFO] [stdout]    |       ^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `kbound_refined` is never used
[INFO] [stdout]   --> interactive/src/kbound.rs:51:8
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub fn kbound_refined(c: CubicBez) -> (f64, f64) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `q_min_max_refined` is never used
[INFO] [stdout]   --> interactive/src/kbound.rs:84:4
[INFO] [stdout]    |
[INFO] [stdout] 84 | fn q_min_max_refined(c0: f64, c1: f64, c2: f64) -> ([f64; N], [f64; N]) {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `N_LSE` is never used
[INFO] [stdout]   --> interactive/src/offset.rs:14:7
[INFO] [stdout]    |
[INFO] [stdout] 14 | const N_LSE: usize = 8;
[INFO] [stdout]    |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BLEND` is never used
[INFO] [stdout]   --> interactive/src/offset.rs:16:7
[INFO] [stdout]    |
[INFO] [stdout] 16 | const BLEND: f64 = 1e-2;
[INFO] [stdout]    |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CubicOffset` is never constructed
[INFO] [stdout]   --> interactive/src/offset.rs:19:8
[INFO] [stdout]    |
[INFO] [stdout] 19 | struct CubicOffset {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OffsetRec` is never constructed
[INFO] [stdout]   --> interactive/src/offset.rs:39:8
[INFO] [stdout]    |
[INFO] [stdout] 39 | struct OffsetRec {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ErrEval` is never constructed
[INFO] [stdout]   --> interactive/src/offset.rs:53:8
[INFO] [stdout]    |
[INFO] [stdout] 53 | struct ErrEval {
[INFO] [stdout]    |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SubdivisionPoint` is never constructed
[INFO] [stdout]   --> interactive/src/offset.rs:60:8
[INFO] [stdout]    |
[INFO] [stdout] 60 | struct SubdivisionPoint {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CUSP_EPSILON` is never used
[INFO] [stdout]   --> interactive/src/offset.rs:69:7
[INFO] [stdout]    |
[INFO] [stdout] 69 | const CUSP_EPSILON: f64 = 1e-12;
[INFO] [stdout]    |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_DEPTH` is never used
[INFO] [stdout]   --> interactive/src/offset.rs:74:7
[INFO] [stdout]    |
[INFO] [stdout] 74 | const MAX_DEPTH: usize = 8;
[INFO] [stdout]    |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `offset_cubic` is never used
[INFO] [stdout]   --> interactive/src/offset.rs:76:8
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub fn offset_cubic(c: CubicBez, d: f64, tolerance: f64) -> BezPath {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> interactive/src/offset.rs:90:8
[INFO] [stdout]     |
[INFO] [stdout]  88 | impl CubicOffset {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  89 |     /// Create a new curve from Bézier segment and offset.
[INFO] [stdout]  90 |     fn new(c: CubicBez, d: f64, tolerance: f64) -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     fn cusp_sign(&self, t: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     fn cusp_and_utan(&self, tan: Point, y: f64) -> (f64, Vec2) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     fn offset_rec(&self, rec: &OffsetRec, result: &mut BezPath) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 200 |     fn subdivide(
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     fn apply(&self, rec: &OffsetRec, a: f64, b: f64) -> CubicBez {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 258 |     fn least_squares(&self, rec: &OffsetRec) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 307 |     fn draw_arc(&self, rec: &OffsetRec) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     fn one_point(&self, rec: &OffsetRec) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 333 |     fn eval_err(&self, rec: &OffsetRec, c_approx: CubicBez, ts: &mut [f64; N_LSE]) -> ErrEval {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 380 |     fn refine_least_squares(&self, rec: &OffsetRec, a: f64, b: f64, err: &ErrEval) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 409 |     fn find_subdivision_point(&self, rec: &OffsetRec) -> SubdivisionPoint {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 454 |     fn subdivide_for_tangent(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> interactive/src/offset.rs:496:8
[INFO] [stdout]     |
[INFO] [stdout] 495 | impl OffsetRec {
[INFO] [stdout]     | -------------- associated function in this implementation
[INFO] [stdout] 496 |     fn new(
[INFO] [stdout]     |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `turn` is never used
[INFO] [stdout]    --> interactive/src/offset.rs:534:4
[INFO] [stdout]     |
[INFO] [stdout] 534 | fn turn(v: Vec2) -> Vec2 {
[INFO] [stdout]     |    ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `mk_a_weights` is never used
[INFO] [stdout]    --> interactive/src/offset.rs:538:10
[INFO] [stdout]     |
[INFO] [stdout] 538 | const fn mk_a_weights(rev: bool) -> [f64; N_LSE] {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `A_WEIGHTS` is never used
[INFO] [stdout]    --> interactive/src/offset.rs:551:7
[INFO] [stdout]     |
[INFO] [stdout] 551 | const A_WEIGHTS: [f64; N_LSE] = mk_a_weights(false);
[INFO] [stdout]     |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `B_WEIGHTS` is never used
[INFO] [stdout]    --> interactive/src/offset.rs:552:7
[INFO] [stdout]     |
[INFO] [stdout] 552 | const B_WEIGHTS: [f64; N_LSE] = mk_a_weights(true);
[INFO] [stdout]     |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> interactive/src/perturb.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct CurveOffset {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 20 |     b01xb12: f64,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 21 |     b01xb23: f64,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 22 |     b12xb23: f64,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 23 |     n0xb01: f64,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 24 |     n1xb01: f64,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 25 |     n0xb12: f64,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 26 |     n1xb12: f64,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 27 |     n0xb23: f64,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 28 |     n1xb23: f64,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `T1_FOR_OFFSET` is never used
[INFO] [stdout]   --> interactive/src/perturb.rs:31:7
[INFO] [stdout]    |
[INFO] [stdout] 31 | const T1_FOR_OFFSET: f64 = 0.2;
[INFO] [stdout]    |       ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `OFFSET_TS` is never used
[INFO] [stdout]   --> interactive/src/perturb.rs:32:7
[INFO] [stdout]    |
[INFO] [stdout] 32 | const OFFSET_TS: [f64; 3] = [T1_FOR_OFFSET, 0.5, 1. - T1_FOR_OFFSET];
[INFO] [stdout]    |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OffsetSolution` is never constructed
[INFO] [stdout]   --> interactive/src/perturb.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub struct OffsetSolution {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `coefs_at`, `error_at`, `deriv_error_at`, and `newton_step_t` are never used
[INFO] [stdout]    --> interactive/src/perturb.rs:90:8
[INFO] [stdout]     |
[INFO] [stdout]  56 | impl CurveOffset {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  90 |     fn coefs_at(&self, t: f64) -> (f64, f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     fn error_at(&self, t: f64, a: f64, b: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     fn deriv_error_at(&self, t: f64, a: f64, b: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     fn newton_step_t(&self, a: f64, b: f64, d: f64, t: f64, ta: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `two_point_approx` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:167:8
[INFO] [stdout]     |
[INFO] [stdout] 167 | pub fn two_point_approx(c: CubicBez) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PLOT_TRANSLATE` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:181:7
[INFO] [stdout]     |
[INFO] [stdout] 181 | const PLOT_TRANSLATE: Vec2 = Vec2::new(100., 200.);
[INFO] [stdout]     |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PLOT_SCALE` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:182:7
[INFO] [stdout]     |
[INFO] [stdout] 182 | const PLOT_SCALE: Affine = Affine::scale(500.0);
[INFO] [stdout]     |       ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `plot_error` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:184:8
[INFO] [stdout]     |
[INFO] [stdout] 184 | pub fn plot_error(c: CubicBez, a: f64, b: f64) -> BezPath {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `spline_error` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:204:8
[INFO] [stdout]     |
[INFO] [stdout] 204 | pub fn spline_error(c: CubicBez, a: f64, b: f64) -> BezPath {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `est_err_bounds` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:231:8
[INFO] [stdout]     |
[INFO] [stdout] 231 | pub fn est_err_bounds(c: CubicBez, a: f64, b: f64) -> [f64; 3] {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `scaling_test` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:298:8
[INFO] [stdout]     |
[INFO] [stdout] 298 | pub fn scaling_test(c: CubicBez, d: f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `linear_minmax` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:320:8
[INFO] [stdout]     |
[INFO] [stdout] 320 | pub fn linear_minmax(c: CubicBez) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `one_point` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:347:8
[INFO] [stdout]     |
[INFO] [stdout] 347 | pub fn one_point(c: CubicBez) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `refine_one_point` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:387:8
[INFO] [stdout]     |
[INFO] [stdout] 387 | pub fn refine_one_point(c: CubicBez, d: f64, t: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TRY_ITP` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:476:7
[INFO] [stdout]     |
[INFO] [stdout] 476 | const TRY_ITP: bool = true;
[INFO] [stdout]     |       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `brute_midpoint` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:606:8
[INFO] [stdout]     |
[INFO] [stdout] 606 | pub fn brute_midpoint(c: CubicBez, d: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `brute_one_point` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:643:8
[INFO] [stdout]     |
[INFO] [stdout] 643 | pub fn brute_one_point(c: CubicBez, d: f64, t: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `linear_center` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:663:8
[INFO] [stdout]     |
[INFO] [stdout] 663 | pub fn linear_center(c: CubicBez) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `refine` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:682:8
[INFO] [stdout]     |
[INFO] [stdout] 682 | pub fn refine(c: CubicBez, a: f64, b: f64, d: f64) {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `est_err_refined` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:697:8
[INFO] [stdout]     |
[INFO] [stdout] 697 | pub fn est_err_refined(c: CubicBez, a: f64, b: f64, d: f64) -> [f64; 3] {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `least_squares` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:722:8
[INFO] [stdout]     |
[INFO] [stdout] 722 | pub fn least_squares(c: CubicBez) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `arc_onept_linear` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:810:8
[INFO] [stdout]     |
[INFO] [stdout] 810 | pub fn arc_onept_linear(c: CubicBez) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `arc_onept_quadratic` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:836:8
[INFO] [stdout]     |
[INFO] [stdout] 836 | pub fn arc_onept_quadratic(c: CubicBez, d: f64) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_a_b`, `apply`, `refine_ts`, and `refine_minmax` are never used
[INFO] [stdout]    --> interactive/src/perturb.rs:920:12
[INFO] [stdout]     |
[INFO] [stdout] 919 | impl OffsetSolution {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 920 |     pub fn from_a_b(a: f64, b: f64, d: f64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 925 |     pub fn apply(&self, co: &CurveOffset) -> CubicBez {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 936 |     pub fn refine_ts(&mut self, co: &CurveOffset) -> [f64; 3] {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 956 |     pub fn refine_minmax(&mut self, co: &CurveOffset) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `eval_err` is never used
[INFO] [stdout]     --> interactive/src/perturb.rs:1092:12
[INFO] [stdout]      |
[INFO] [stdout]  989 | impl OffsetSolutionLse {
[INFO] [stdout]      | ---------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 1092 |     pub fn eval_err(&mut self, co: &CurveOffset) -> f64 {
[INFO] [stdout]      |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `z`
[INFO] [stdout]    --> interactive/src/midpoint.rs:357:25
[INFO] [stdout]     |
[INFO] [stdout] 357 |                     let z = q_approx.cross(dpdu);
[INFO] [stdout]     |                         ^ help: if this is intentional, prefix it with an underscore: `_z`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> interactive/src/offset.rs:410:13
[INFO] [stdout]     |
[INFO] [stdout] 410 |         let mut t = 0.0;
[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: `t`
[INFO] [stdout]    --> interactive/src/offset.rs:410:13
[INFO] [stdout]     |
[INFO] [stdout] 410 |         let mut t = 0.0;
[INFO] [stdout]     |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_t`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `err` is never read
[INFO] [stdout]    --> interactive/src/perturb.rs:533:19
[INFO] [stdout]     |
[INFO] [stdout] 533 |     let mut err = mid_err;
[INFO] [stdout]     |                   ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err_min`
[INFO] [stdout]    --> interactive/src/perturb.rs:783:9
[INFO] [stdout]     |
[INFO] [stdout] 783 |     let err_min =
[INFO] [stdout]     |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_err_min`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err_max`
[INFO] [stdout]    --> interactive/src/perturb.rs:785:9
[INFO] [stdout]     |
[INFO] [stdout] 785 |     let err_max = a * a * (aa_n + aa_t)
[INFO] [stdout]     |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_err_max`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `n` is never read
[INFO] [stdout]    --> interactive/src/perturb.rs:885:17
[INFO] [stdout]     |
[INFO] [stdout] 885 |     let mut n = nm;
[INFO] [stdout]     |                 ^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err_min`
[INFO] [stdout]     --> interactive/src/perturb.rs:1078:13
[INFO] [stdout]      |
[INFO] [stdout] 1078 |         let err_min = err_min / self.d.powi(2);
[INFO] [stdout]      |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_err_min`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err_max`
[INFO] [stdout]     --> interactive/src/perturb.rs:1085:13
[INFO] [stdout]      |
[INFO] [stdout] 1085 |         let err_max = err_max / self.d.powi(2);
[INFO] [stdout]      |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_err_max`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path_arc`
[INFO] [stdout]   --> interactive/src/main.rs:97:9
[INFO] [stdout]    |
[INFO] [stdout] 97 |     let path_arc = c_arc.to_path(0.0);
[INFO] [stdout]    |         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_path_arc`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err_arc`
[INFO] [stdout]   --> interactive/src/main.rs:98:9
[INFO] [stdout]    |
[INFO] [stdout] 98 |     let err_arc = perturb::plot_scaled(&perturb::error_by_rays(c, d, c_arc), err_scale);
[INFO] [stdout]    |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_err_arc`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path_arc_lse`
[INFO] [stdout]    --> interactive/src/main.rs:105:9
[INFO] [stdout]     |
[INFO] [stdout] 105 |     let path_arc_lse = c_arc_lse.to_path(0.0);
[INFO] [stdout]     |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_path_arc_lse`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err_arc_lse_refined`
[INFO] [stdout]    --> interactive/src/main.rs:106:9
[INFO] [stdout]     |
[INFO] [stdout] 106 |     let err_arc_lse_refined =
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_err_arc_lse_refined`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `t`
[INFO] [stdout]    --> interactive/src/main.rs:111:16
[INFO] [stdout]     |
[INFO] [stdout] 111 |     let (a, b, t) = perturb::arc_onept(c, d);
[INFO] [stdout]     |                ^ help: if this is intentional, prefix it with an underscore: `_t`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path_ao`
[INFO] [stdout]    --> interactive/src/main.rs:114:9
[INFO] [stdout]     |
[INFO] [stdout] 114 |     let path_ao = c_ao.to_path(0.0);
[INFO] [stdout]     |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_path_ao`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err_ao`
[INFO] [stdout]    --> interactive/src/main.rs:115:9
[INFO] [stdout]     |
[INFO] [stdout] 115 |     let err_ao = perturb::plot_scaled(&perturb::error_by_rays(c, d, c_ao), err_scale);
[INFO] [stdout]     |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_err_ao`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path_onept3`
[INFO] [stdout]    --> interactive/src/main.rs:129:9
[INFO] [stdout]     |
[INFO] [stdout] 129 |     let path_onept3 = c_onept3.to_path(0.0);
[INFO] [stdout]     |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_path_onept3`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err_onept3`
[INFO] [stdout]    --> interactive/src/main.rs:130:9
[INFO] [stdout]     |
[INFO] [stdout] 130 |     let err_onept3 = perturb::plot_scaled(&perturb::error_by_rays(c, d, c_onept3), err_scale);
[INFO] [stdout]     |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_err_onept3`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `derr_plot`
[INFO] [stdout]    --> interactive/src/main.rs:132:9
[INFO] [stdout]     |
[INFO] [stdout] 132 |     let derr_plot = perturb::plot(&perturb::onept_err_plot(c, d));
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_derr_plot`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path_midpoint_g1`
[INFO] [stdout]    --> interactive/src/main.rs:167:9
[INFO] [stdout]     |
[INFO] [stdout] 167 |     let path_midpoint_g1 = c_midpoint_g1.to_path(0.0);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_path_midpoint_g1`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `midpt_line`
[INFO] [stdout]    --> interactive/src/main.rs:175:9
[INFO] [stdout]     |
[INFO] [stdout] 175 |     let midpt_line = Line::new(
[INFO] [stdout]     |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_midpt_line`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SCALE` is never used
[INFO] [stdout]    --> interactive/src/main.rs:124:11
[INFO] [stdout]     |
[INFO] [stdout] 124 |     const SCALE: f64 = 1e-6;
[INFO] [stdout]     |           ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CuspAnalysis` is never constructed
[INFO] [stdout]  --> interactive/src/cusp.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct CuspAnalysis {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VelMinimum` is never constructed
[INFO] [stdout]   --> interactive/src/cusp.rs:16:8
[INFO] [stdout]    |
[INFO] [stdout] 16 | struct VelMinimum {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `get_cusp` are never used
[INFO] [stdout]   --> interactive/src/cusp.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl CuspAnalysis {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 23 |     /// Do cusp analysis based on hodograph of cubic Bezier.
[INFO] [stdout] 24 |     pub fn new(q: QuadBez) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn get_cusp(&self, range: Range<f64>) -> Option<(f64, Vec2)> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CUSP_EPSILON` is never used
[INFO] [stdout]  --> interactive/src/evolute.rs:8:7
[INFO] [stdout]   |
[INFO] [stdout] 8 | const CUSP_EPSILON: f64 = 1e-12;
[INFO] [stdout]   |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_DEPTH` is never used
[INFO] [stdout]   --> interactive/src/evolute.rs:10:7
[INFO] [stdout]    |
[INFO] [stdout] 10 | const MAX_DEPTH: usize = 8;
[INFO] [stdout]    |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `N_LSE` is never used
[INFO] [stdout]   --> interactive/src/evolute.rs:12:7
[INFO] [stdout]    |
[INFO] [stdout] 12 | const N_LSE: usize = 8;
[INFO] [stdout]    |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BLEND` is never used
[INFO] [stdout]   --> interactive/src/evolute.rs:14:7
[INFO] [stdout]    |
[INFO] [stdout] 14 | const BLEND: f64 = 1e-2;
[INFO] [stdout]    |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `c` and `tolerance` are never read
[INFO] [stdout]   --> interactive/src/evolute.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | struct CubicEvolute {
[INFO] [stdout]    |        ------------ fields in this struct
[INFO] [stdout] 17 |     c: CubicBez,
[INFO] [stdout]    |     ^
[INFO] [stdout] ...
[INFO] [stdout] 22 |     tolerance: f64,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> interactive/src/evolute.rs:26:8
[INFO] [stdout]     |
[INFO] [stdout]  25 | impl CubicEvolute {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout]  26 |     fn new(c: CubicBez, tolerance: f64) -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout]  49 |     fn radius(&self, t: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  55 |     fn radius_deriv(&self, t: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  61 |     fn eval(&self, t: f64) -> Point {
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  66 |     fn apply(&self, rec: &EvoluteRec, a: f64, b: f64) -> CubicBez {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  72 |     fn evolute_rec(&self, rec: &EvoluteRec, path: &mut BezPath) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     fn subdivide(
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 161 |     fn eval_err(&self, rec: &EvoluteRec, c_approx: CubicBez, ts: &mut [f64; N_LSE]) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 184 |     fn refine_least_squares(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `evolute_hacky_approx` is never used
[INFO] [stdout]    --> interactive/src/evolute.rs:226:8
[INFO] [stdout]     |
[INFO] [stdout] 226 | pub fn evolute_hacky_approx(c: CubicBez) -> BezPath {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `evolute_approx_cubic` is never used
[INFO] [stdout]    --> interactive/src/evolute.rs:247:8
[INFO] [stdout]     |
[INFO] [stdout] 247 | pub fn evolute_approx_cubic(c: CubicBez) -> CubicBez {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EvoluteRec` is never constructed
[INFO] [stdout]    --> interactive/src/evolute.rs:260:8
[INFO] [stdout]     |
[INFO] [stdout] 260 | struct EvoluteRec {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `evolute_approx` is never used
[INFO] [stdout]    --> interactive/src/evolute.rs:273:8
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub fn evolute_approx(c: CubicBez, tolerance: f64) -> BezPath {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `turn` is never used
[INFO] [stdout]    --> interactive/src/evolute.rs:301:4
[INFO] [stdout]     |
[INFO] [stdout] 301 | fn turn(v: Vec2) -> Vec2 {
[INFO] [stdout]     |    ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `N` is never used
[INFO] [stdout]   --> interactive/src/kbound.rs:48:7
[INFO] [stdout]    |
[INFO] [stdout] 48 | const N: usize = 1;
[INFO] [stdout]    |       ^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `kbound_refined` is never used
[INFO] [stdout]   --> interactive/src/kbound.rs:51:8
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub fn kbound_refined(c: CubicBez) -> (f64, f64) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `q_min_max_refined` is never used
[INFO] [stdout]   --> interactive/src/kbound.rs:84:4
[INFO] [stdout]    |
[INFO] [stdout] 84 | fn q_min_max_refined(c0: f64, c1: f64, c2: f64) -> ([f64; N], [f64; N]) {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `N_LSE` is never used
[INFO] [stdout]   --> interactive/src/offset.rs:14:7
[INFO] [stdout]    |
[INFO] [stdout] 14 | const N_LSE: usize = 8;
[INFO] [stdout]    |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BLEND` is never used
[INFO] [stdout]   --> interactive/src/offset.rs:16:7
[INFO] [stdout]    |
[INFO] [stdout] 16 | const BLEND: f64 = 1e-2;
[INFO] [stdout]    |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CubicOffset` is never constructed
[INFO] [stdout]   --> interactive/src/offset.rs:19:8
[INFO] [stdout]    |
[INFO] [stdout] 19 | struct CubicOffset {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OffsetRec` is never constructed
[INFO] [stdout]   --> interactive/src/offset.rs:39:8
[INFO] [stdout]    |
[INFO] [stdout] 39 | struct OffsetRec {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ErrEval` is never constructed
[INFO] [stdout]   --> interactive/src/offset.rs:53:8
[INFO] [stdout]    |
[INFO] [stdout] 53 | struct ErrEval {
[INFO] [stdout]    |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SubdivisionPoint` is never constructed
[INFO] [stdout]   --> interactive/src/offset.rs:60:8
[INFO] [stdout]    |
[INFO] [stdout] 60 | struct SubdivisionPoint {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CUSP_EPSILON` is never used
[INFO] [stdout]   --> interactive/src/offset.rs:69:7
[INFO] [stdout]    |
[INFO] [stdout] 69 | const CUSP_EPSILON: f64 = 1e-12;
[INFO] [stdout]    |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_DEPTH` is never used
[INFO] [stdout]   --> interactive/src/offset.rs:74:7
[INFO] [stdout]    |
[INFO] [stdout] 74 | const MAX_DEPTH: usize = 8;
[INFO] [stdout]    |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `offset_cubic` is never used
[INFO] [stdout]   --> interactive/src/offset.rs:76:8
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub fn offset_cubic(c: CubicBez, d: f64, tolerance: f64) -> BezPath {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> interactive/src/offset.rs:90:8
[INFO] [stdout]     |
[INFO] [stdout]  88 | impl CubicOffset {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  89 |     /// Create a new curve from Bézier segment and offset.
[INFO] [stdout]  90 |     fn new(c: CubicBez, d: f64, tolerance: f64) -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     fn cusp_sign(&self, t: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     fn cusp_and_utan(&self, tan: Point, y: f64) -> (f64, Vec2) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     fn offset_rec(&self, rec: &OffsetRec, result: &mut BezPath) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 200 |     fn subdivide(
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     fn apply(&self, rec: &OffsetRec, a: f64, b: f64) -> CubicBez {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 258 |     fn least_squares(&self, rec: &OffsetRec) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 307 |     fn draw_arc(&self, rec: &OffsetRec) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     fn one_point(&self, rec: &OffsetRec) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 333 |     fn eval_err(&self, rec: &OffsetRec, c_approx: CubicBez, ts: &mut [f64; N_LSE]) -> ErrEval {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 380 |     fn refine_least_squares(&self, rec: &OffsetRec, a: f64, b: f64, err: &ErrEval) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 409 |     fn find_subdivision_point(&self, rec: &OffsetRec) -> SubdivisionPoint {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 454 |     fn subdivide_for_tangent(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> interactive/src/offset.rs:496:8
[INFO] [stdout]     |
[INFO] [stdout] 495 | impl OffsetRec {
[INFO] [stdout]     | -------------- associated function in this implementation
[INFO] [stdout] 496 |     fn new(
[INFO] [stdout]     |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `turn` is never used
[INFO] [stdout]    --> interactive/src/offset.rs:534:4
[INFO] [stdout]     |
[INFO] [stdout] 534 | fn turn(v: Vec2) -> Vec2 {
[INFO] [stdout]     |    ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `mk_a_weights` is never used
[INFO] [stdout]    --> interactive/src/offset.rs:538:10
[INFO] [stdout]     |
[INFO] [stdout] 538 | const fn mk_a_weights(rev: bool) -> [f64; N_LSE] {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `A_WEIGHTS` is never used
[INFO] [stdout]    --> interactive/src/offset.rs:551:7
[INFO] [stdout]     |
[INFO] [stdout] 551 | const A_WEIGHTS: [f64; N_LSE] = mk_a_weights(false);
[INFO] [stdout]     |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `B_WEIGHTS` is never used
[INFO] [stdout]    --> interactive/src/offset.rs:552:7
[INFO] [stdout]     |
[INFO] [stdout] 552 | const B_WEIGHTS: [f64; N_LSE] = mk_a_weights(true);
[INFO] [stdout]     |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> interactive/src/perturb.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct CurveOffset {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 20 |     b01xb12: f64,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 21 |     b01xb23: f64,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 22 |     b12xb23: f64,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 23 |     n0xb01: f64,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 24 |     n1xb01: f64,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 25 |     n0xb12: f64,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 26 |     n1xb12: f64,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 27 |     n0xb23: f64,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 28 |     n1xb23: f64,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `T1_FOR_OFFSET` is never used
[INFO] [stdout]   --> interactive/src/perturb.rs:31:7
[INFO] [stdout]    |
[INFO] [stdout] 31 | const T1_FOR_OFFSET: f64 = 0.2;
[INFO] [stdout]    |       ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `OFFSET_TS` is never used
[INFO] [stdout]   --> interactive/src/perturb.rs:32:7
[INFO] [stdout]    |
[INFO] [stdout] 32 | const OFFSET_TS: [f64; 3] = [T1_FOR_OFFSET, 0.5, 1. - T1_FOR_OFFSET];
[INFO] [stdout]    |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OffsetSolution` is never constructed
[INFO] [stdout]   --> interactive/src/perturb.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub struct OffsetSolution {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `coefs_at`, `error_at`, `deriv_error_at`, and `newton_step_t` are never used
[INFO] [stdout]    --> interactive/src/perturb.rs:90:8
[INFO] [stdout]     |
[INFO] [stdout]  56 | impl CurveOffset {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  90 |     fn coefs_at(&self, t: f64) -> (f64, f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     fn error_at(&self, t: f64, a: f64, b: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     fn deriv_error_at(&self, t: f64, a: f64, b: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     fn newton_step_t(&self, a: f64, b: f64, d: f64, t: f64, ta: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `two_point_approx` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:167:8
[INFO] [stdout]     |
[INFO] [stdout] 167 | pub fn two_point_approx(c: CubicBez) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PLOT_TRANSLATE` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:181:7
[INFO] [stdout]     |
[INFO] [stdout] 181 | const PLOT_TRANSLATE: Vec2 = Vec2::new(100., 200.);
[INFO] [stdout]     |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PLOT_SCALE` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:182:7
[INFO] [stdout]     |
[INFO] [stdout] 182 | const PLOT_SCALE: Affine = Affine::scale(500.0);
[INFO] [stdout]     |       ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `plot_error` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:184:8
[INFO] [stdout]     |
[INFO] [stdout] 184 | pub fn plot_error(c: CubicBez, a: f64, b: f64) -> BezPath {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `spline_error` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:204:8
[INFO] [stdout]     |
[INFO] [stdout] 204 | pub fn spline_error(c: CubicBez, a: f64, b: f64) -> BezPath {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `est_err_bounds` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:231:8
[INFO] [stdout]     |
[INFO] [stdout] 231 | pub fn est_err_bounds(c: CubicBez, a: f64, b: f64) -> [f64; 3] {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `scaling_test` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:298:8
[INFO] [stdout]     |
[INFO] [stdout] 298 | pub fn scaling_test(c: CubicBez, d: f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `linear_minmax` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:320:8
[INFO] [stdout]     |
[INFO] [stdout] 320 | pub fn linear_minmax(c: CubicBez) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `one_point` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:347:8
[INFO] [stdout]     |
[INFO] [stdout] 347 | pub fn one_point(c: CubicBez) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `refine_one_point` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:387:8
[INFO] [stdout]     |
[INFO] [stdout] 387 | pub fn refine_one_point(c: CubicBez, d: f64, t: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TRY_ITP` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:476:7
[INFO] [stdout]     |
[INFO] [stdout] 476 | const TRY_ITP: bool = true;
[INFO] [stdout]     |       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `brute_midpoint` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:606:8
[INFO] [stdout]     |
[INFO] [stdout] 606 | pub fn brute_midpoint(c: CubicBez, d: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `brute_one_point` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:643:8
[INFO] [stdout]     |
[INFO] [stdout] 643 | pub fn brute_one_point(c: CubicBez, d: f64, t: f64) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `linear_center` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:663:8
[INFO] [stdout]     |
[INFO] [stdout] 663 | pub fn linear_center(c: CubicBez) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `refine` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:682:8
[INFO] [stdout]     |
[INFO] [stdout] 682 | pub fn refine(c: CubicBez, a: f64, b: f64, d: f64) {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `est_err_refined` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:697:8
[INFO] [stdout]     |
[INFO] [stdout] 697 | pub fn est_err_refined(c: CubicBez, a: f64, b: f64, d: f64) -> [f64; 3] {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `least_squares` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:722:8
[INFO] [stdout]     |
[INFO] [stdout] 722 | pub fn least_squares(c: CubicBez) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `arc_onept_linear` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:810:8
[INFO] [stdout]     |
[INFO] [stdout] 810 | pub fn arc_onept_linear(c: CubicBez) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `arc_onept_quadratic` is never used
[INFO] [stdout]    --> interactive/src/perturb.rs:836:8
[INFO] [stdout]     |
[INFO] [stdout] 836 | pub fn arc_onept_quadratic(c: CubicBez, d: f64) -> (f64, f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_a_b`, `apply`, `refine_ts`, and `refine_minmax` are never used
[INFO] [stdout]    --> interactive/src/perturb.rs:920:12
[INFO] [stdout]     |
[INFO] [stdout] 919 | impl OffsetSolution {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 920 |     pub fn from_a_b(a: f64, b: f64, d: f64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 925 |     pub fn apply(&self, co: &CurveOffset) -> CubicBez {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 936 |     pub fn refine_ts(&mut self, co: &CurveOffset) -> [f64; 3] {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 956 |     pub fn refine_minmax(&mut self, co: &CurveOffset) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `eval_err` is never used
[INFO] [stdout]     --> interactive/src/perturb.rs:1092:12
[INFO] [stdout]      |
[INFO] [stdout]  989 | impl OffsetSolutionLse {
[INFO] [stdout]      | ---------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 1092 |     pub fn eval_err(&mut self, co: &CurveOffset) -> f64 {
[INFO] [stdout]      |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 30.86s
[INFO] running `Command { std: "docker" "inspect" "a29931b1bf2cedc3d70a6eb8bd0352935038c8e664487f61ee450f31fd0a8054", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "a29931b1bf2cedc3d70a6eb8bd0352935038c8e664487f61ee450f31fd0a8054", kill_on_drop: false }`
[INFO] [stdout] a29931b1bf2cedc3d70a6eb8bd0352935038c8e664487f61ee450f31fd0a8054
