[INFO] fetching crate rustorch 0.6.29...
[INFO] checking rustorch-0.6.29 against try#21cad1f647cfd05a566220f933edd88a53e50bcf for pr-129249-1
[INFO] extracting crate rustorch 0.6.29 into /workspace/builds/worker-0-tc2/source
[INFO] removed /workspace/builds/worker-0-tc2/source/.cargo/config.toml
[INFO] started tweaking crates.io crate rustorch 0.6.29
[INFO] removed 0 missing examples
[INFO] removed 0 missing tests
[INFO] finished tweaking crates.io crate rustorch 0.6.29
[INFO] tweaked toml for crates.io crate rustorch 0.6.29 written to /workspace/builds/worker-0-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate rustorch 0.6.29 on toolchain 21cad1f647cfd05a566220f933edd88a53e50bcf
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+21cad1f647cfd05a566220f933edd88a53e50bcf" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate rustorch 0.6.29 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" "+21cad1f647cfd05a566220f933edd88a53e50bcf" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,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" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3e793bdf10248eb2ddbd6b0faebed8155c11b4589982e2893733958d93e8d540" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 3af777592854d2737e66a2db100afe7d5621fa8f8cefb078608bd1215dfbeb9a
[INFO] running `Command { std: "docker" "start" "3af777592854d2737e66a2db100afe7d5621fa8f8cefb078608bd1215dfbeb9a", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "3af777592854d2737e66a2db100afe7d5621fa8f8cefb078608bd1215dfbeb9a" "/opt/rustwide/cargo-home/bin/cargo" "+21cad1f647cfd05a566220f933edd88a53e50bcf" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "3af777592854d2737e66a2db100afe7d5621fa8f8cefb078608bd1215dfbeb9a", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-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" "-w" "/opt/rustwide/workdir" "--user" "0:0" "3af777592854d2737e66a2db100afe7d5621fa8f8cefb078608bd1215dfbeb9a" "/opt/rustwide/cargo-home/bin/cargo" "+21cad1f647cfd05a566220f933edd88a53e50bcf" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]     Checking cfg-if v1.0.3
[INFO] [stderr]    Compiling libc v0.2.175
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling wasm-bindgen-shared v0.2.101
[INFO] [stderr]    Compiling zerocopy v0.8.27
[INFO] [stderr]    Compiling log v0.4.28
[INFO] [stderr]    Compiling proc-macro2 v1.0.101
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling matrixmultiply v0.3.10
[INFO] [stderr]    Compiling bumpalo v3.19.0
[INFO] [stderr]    Compiling serde_json v1.0.143
[INFO] [stderr]     Checking half v2.6.0
[INFO] [stderr]     Checking regex-syntax v0.8.6
[INFO] [stderr]     Checking rayon v1.11.0
[INFO] [stderr]    Compiling anyhow v1.0.99
[INFO] [stderr]    Compiling wasm-bindgen v0.2.101
[INFO] [stderr]     Checking hashbrown v0.15.5
[INFO] [stderr]    Compiling rustorch v0.6.29 (/opt/rustwide/workdir)
[INFO] [stderr]     Checking crc32fast v1.5.0
[INFO] [stderr]    Compiling rustix v1.0.8
[INFO] [stderr]     Checking clap_lex v0.7.5
[INFO] [stderr]     Checking anstyle v1.0.11
[INFO] [stderr]     Checking itertools v0.10.5
[INFO] [stderr]     Checking linux-raw-sys v0.9.4
[INFO] [stderr]     Checking ciborium-ll v0.2.2
[INFO] [stderr]     Checking bitflags v2.9.4
[INFO] [stderr]    Compiling quote v1.0.40
[INFO] [stderr]     Checking indexmap v2.11.4
[INFO] [stderr]     Checking clap_builder v4.5.47
[INFO] [stderr]    Compiling syn v2.0.106
[INFO] [stderr]     Checking getrandom v0.2.16
[INFO] [stderr]     Checking parking_lot_core v0.9.11
[INFO] [stderr]     Checking hostname v0.4.1
[INFO] [stderr]     Checking num_cpus v1.17.0
[INFO] [stderr]     Checking getrandom v0.3.3
[INFO] [stderr]     Checking is-terminal v0.4.16
[INFO] [stderr]     Checking num-complex v0.4.6
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]     Checking approx v0.5.1
[INFO] [stderr]     Checking plotters v0.3.7
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking parking_lot v0.12.4
[INFO] [stderr]     Checking regex-automata v0.4.10
[INFO] [stderr]     Checking criterion-plot v0.5.0
[INFO] [stderr]     Checking ndarray v0.16.1
[INFO] [stderr]     Checking clap v4.5.47
[INFO] [stderr]     Checking tempfile v3.21.0
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking rand_distr v0.4.3
[INFO] [stderr]     Checking regex v1.11.2
[INFO] [stderr]    Compiling wasm-bindgen-backend v0.2.101
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling rustorch-macros v0.6.29
[INFO] [stderr]    Compiling wasm-bindgen-test-macro v0.3.51
[INFO] [stderr]    Compiling wasm-bindgen-macro-support v0.2.101
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]     Checking ndarray-rand v0.15.0
[INFO] [stderr]    Compiling wasm-bindgen-macro v0.2.101
[INFO] [stderr]     Checking js-sys v0.3.78
[INFO] [stderr]     Checking serde_yaml v0.9.34+deprecated
[INFO] [stderr]     Checking bincode v1.3.3
[INFO] [stderr]     Checking chrono v0.4.41
[INFO] [stderr]     Checking ciborium v0.2.2
[INFO] [stderr]     Checking tinytemplate v1.2.1
[INFO] [stderr]     Checking criterion v0.5.1
[INFO] [stderr]     Checking wasm-bindgen-futures v0.4.51
[INFO] [stderr]     Checking wasm-bindgen-test v0.3.51
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/tensor/gpu_parallel.rs:614:44
[INFO] [stdout]     |
[INFO] [stdout] 614 |             self.matmul(other).map_err(|e| e.into())
[INFO] [stdout]     |                                            ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout]     = note: `#[deny(self_type_conversion)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/tensor/gpu_parallel.rs:624:13
[INFO] [stdout]     |
[INFO] [stdout] 624 |           Err(crate::error::RusTorchError::tensor_op(
[INFO] [stdout]     |  _____________^
[INFO] [stdout] 625 | |             "GPU reduce not available without CUDA".to_string(),
[INFO] [stdout] 626 | |         )
[INFO] [stdout] 627 | |         .into())
[INFO] [stdout]     | |_______________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/tensor/gpu_parallel.rs:694:17
[INFO] [stdout]     |
[INFO] [stdout] 694 |               Err(crate::error::RusTorchError::tensor_op(
[INFO] [stdout]     |  _________________^
[INFO] [stdout] 695 | |                 "No GPU acceleration available (enable metal, coreml, or mac-hybrid features)"
[INFO] [stdout] 696 | |                     .to_string(),
[INFO] [stdout] 697 | |             )
[INFO] [stdout] 698 | |             .into())
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]   --> src/vision/transforms.rs:84:60
[INFO] [stdout]    |
[INFO] [stdout] 84 |         Image::new(resized_data, image.format).map_err(|e| e.into())
[INFO] [stdout]    |                                                            ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]    = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:110:24
[INFO] [stdout]     |
[INFO] [stdout] 110 |               return Err(RusTorchError::InvalidTransformParams(format!(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 111 | |                 "Crop size ({}, {}) larger than image size ({}, {})",
[INFO] [stdout] 112 | |                 crop_height, crop_width, image.height, image.width
[INFO] [stdout] 113 | |             ))
[INFO] [stdout] 114 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:131:60
[INFO] [stdout]     |
[INFO] [stdout] 131 |         Image::new(cropped_data, image.format).map_err(|e| e.into())
[INFO] [stdout]     |                                                            ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:181:24
[INFO] [stdout]     |
[INFO] [stdout] 181 |               return Err(RusTorchError::InvalidTransformParams(format!(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 182 | |                 "Crop size ({}, {}) larger than image size ({}, {})",
[INFO] [stdout] 183 | |                 crop_height, crop_width, working_image.height, working_image.width
[INFO] [stdout] 184 | |             ))
[INFO] [stdout] 185 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:202:60
[INFO] [stdout]     |
[INFO] [stdout] 202 |         Image::new(cropped_data, image.format).map_err(|e| e.into())
[INFO] [stdout]     |                                                            ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:297:24
[INFO] [stdout]     |
[INFO] [stdout] 297 |               return Err(RusTorchError::InvalidTransformParams(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 298 | |                 "Mean and std must have same length".to_string(),
[INFO] [stdout] 299 | |             )
[INFO] [stdout] 300 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:327:24
[INFO] [stdout]     |
[INFO] [stdout] 327 |               return Err(RusTorchError::InvalidTransformParams(format!(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 328 | |                 "Mean length {} doesn't match image channels {}",
[INFO] [stdout] 329 | |                 self.mean.len(),
[INFO] [stdout] 330 | |                 image.channels
[INFO] [stdout] 331 | |             ))
[INFO] [stdout] 332 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:377:50
[INFO] [stdout]     |
[INFO] [stdout] 377 |         image.to_format(self.format).map_err(|e| e.into())
[INFO] [stdout]     |                                                  ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]   --> src/vision/utils.rs:55:59
[INFO] [stdout]    |
[INFO] [stdout] 55 |     Image::new(grid_tensor, images[0].format).map_err(|e| e.into())
[INFO] [stdout]    |                                                           ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]    = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/utils.rs:96:24
[INFO] [stdout]     |
[INFO] [stdout]  96 |               return Err(RusTorchError::InvalidImageShape(format!(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout]  97 | |                 "Expected 2D or 3D tensor, got {:?}",
[INFO] [stdout]  98 | |                 shape
[INFO] [stdout]  99 | |             ))
[INFO] [stdout] 100 | |             .into())
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/utils.rs:104:52
[INFO] [stdout]     |
[INFO] [stdout] 104 |     Image::new(tensor.clone(), format).map_err(|e| e.into())
[INFO] [stdout]     |                                                    ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/utils.rs:124:20
[INFO] [stdout]     |
[INFO] [stdout] 124 |           return Err(RusTorchError::InvalidTransformParams(
[INFO] [stdout]     |  ____________________^
[INFO] [stdout] 125 | |             "Mean and std must have same length".to_string(),
[INFO] [stdout] 126 | |         )
[INFO] [stdout] 127 | |         .into());
[INFO] [stdout]     | |_______________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/utils.rs:146:20
[INFO] [stdout]     |
[INFO] [stdout] 146 |           return Err(RusTorchError::InvalidTransformParams(
[INFO] [stdout]     |  ____________________^
[INFO] [stdout] 147 | |             "Mean and std must have same length".to_string(),
[INFO] [stdout] 148 | |         )
[INFO] [stdout] 149 | |         .into());
[INFO] [stdout]     | |_______________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/visualization/plotting.rs:278:24
[INFO] [stdout]     |
[INFO] [stdout] 278 |               return Err(RusTorchError::InvalidDataFormat(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 279 | |                 "X and Y data must have the same non-zero length".to_string(),
[INFO] [stdout] 280 | |             )
[INFO] [stdout] 281 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/visualization/plotting.rs:347:28
[INFO] [stdout]     |
[INFO] [stdout] 347 |                   return Err(RusTorchError::InvalidDataFormat(format!(
[INFO] [stdout]     |  ____________________________^
[INFO] [stdout] 348 | |                     "Metric '{}' has no values",
[INFO] [stdout] 349 | |                     metric_name
[INFO] [stdout] 350 | |                 ))
[INFO] [stdout] 351 | |                 .into());
[INFO] [stdout]     | |_______________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/visualization/plotting.rs:355:17
[INFO] [stdout]     |
[INFO] [stdout] 355 |               Err(RusTorchError::InvalidDataFormat(format!(
[INFO] [stdout]     |  _________________^
[INFO] [stdout] 356 | |                 "Metric '{}' not found in training history",
[INFO] [stdout] 357 | |                 metric_name
[INFO] [stdout] 358 | |             ))
[INFO] [stdout] 359 | |             .into())
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/visualization/plotting.rs:373:24
[INFO] [stdout]     |
[INFO] [stdout] 373 |               return Err(RusTorchError::InvalidDataFormat(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 374 | |                 "Training history contains no data".to_string(),
[INFO] [stdout] 375 | |             )
[INFO] [stdout] 376 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/visualization/plotting.rs:392:24
[INFO] [stdout]     |
[INFO] [stdout] 392 |               return Err(RusTorchError::ConfigError(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 393 | |                 "Cannot plot empty training history".to_string(),
[INFO] [stdout] 394 | |             )
[INFO] [stdout] 395 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `rustorch` (lib) due to 21 previous errors
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] error: useless conversion to the same type: `std::option::Option<u64>`
[INFO] [stdout]    --> src/distributed/data_parallel.rs:526:72
[INFO] [stdout]     |
[INFO] [stdout] 526 |         let loader = DistributedDataLoader::new(data, labels, 2, true, Some(42).into());
[INFO] [stdout]     |                                                                        ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::option::Option<u64> as Into<std::option::Option<u64>>::into(val) to avoid triggering this lint
[INFO] [stdout]     = note: `#[deny(self_type_conversion)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/tensor/gpu_parallel.rs:614:44
[INFO] [stdout]     |
[INFO] [stdout] 614 |             self.matmul(other).map_err(|e| e.into())
[INFO] [stdout]     |                                            ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/tensor/gpu_parallel.rs:624:13
[INFO] [stdout]     |
[INFO] [stdout] 624 |           Err(crate::error::RusTorchError::tensor_op(
[INFO] [stdout]     |  _____________^
[INFO] [stdout] 625 | |             "GPU reduce not available without CUDA".to_string(),
[INFO] [stdout] 626 | |         )
[INFO] [stdout] 627 | |         .into())
[INFO] [stdout]     | |_______________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/tensor/gpu_parallel.rs:694:17
[INFO] [stdout]     |
[INFO] [stdout] 694 |               Err(crate::error::RusTorchError::tensor_op(
[INFO] [stdout]     |  _________________^
[INFO] [stdout] 695 | |                 "No GPU acceleration available (enable metal, coreml, or mac-hybrid features)"
[INFO] [stdout] 696 | |                     .to_string(),
[INFO] [stdout] 697 | |             )
[INFO] [stdout] 698 | |             .into())
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]   --> src/vision/transforms.rs:84:60
[INFO] [stdout]    |
[INFO] [stdout] 84 |         Image::new(resized_data, image.format).map_err(|e| e.into())
[INFO] [stdout]    |                                                            ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]    = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:110:24
[INFO] [stdout]     |
[INFO] [stdout] 110 |               return Err(RusTorchError::InvalidTransformParams(format!(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 111 | |                 "Crop size ({}, {}) larger than image size ({}, {})",
[INFO] [stdout] 112 | |                 crop_height, crop_width, image.height, image.width
[INFO] [stdout] 113 | |             ))
[INFO] [stdout] 114 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:131:60
[INFO] [stdout]     |
[INFO] [stdout] 131 |         Image::new(cropped_data, image.format).map_err(|e| e.into())
[INFO] [stdout]     |                                                            ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:181:24
[INFO] [stdout]     |
[INFO] [stdout] 181 |               return Err(RusTorchError::InvalidTransformParams(format!(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 182 | |                 "Crop size ({}, {}) larger than image size ({}, {})",
[INFO] [stdout] 183 | |                 crop_height, crop_width, working_image.height, working_image.width
[INFO] [stdout] 184 | |             ))
[INFO] [stdout] 185 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:202:60
[INFO] [stdout]     |
[INFO] [stdout] 202 |         Image::new(cropped_data, image.format).map_err(|e| e.into())
[INFO] [stdout]     |                                                            ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:297:24
[INFO] [stdout]     |
[INFO] [stdout] 297 |               return Err(RusTorchError::InvalidTransformParams(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 298 | |                 "Mean and std must have same length".to_string(),
[INFO] [stdout] 299 | |             )
[INFO] [stdout] 300 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:327:24
[INFO] [stdout]     |
[INFO] [stdout] 327 |               return Err(RusTorchError::InvalidTransformParams(format!(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 328 | |                 "Mean length {} doesn't match image channels {}",
[INFO] [stdout] 329 | |                 self.mean.len(),
[INFO] [stdout] 330 | |                 image.channels
[INFO] [stdout] 331 | |             ))
[INFO] [stdout] 332 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:377:50
[INFO] [stdout]     |
[INFO] [stdout] 377 |         image.to_format(self.format).map_err(|e| e.into())
[INFO] [stdout]     |                                                  ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]   --> src/vision/utils.rs:55:59
[INFO] [stdout]    |
[INFO] [stdout] 55 |     Image::new(grid_tensor, images[0].format).map_err(|e| e.into())
[INFO] [stdout]    |                                                           ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]    = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/utils.rs:96:24
[INFO] [stdout]     |
[INFO] [stdout]  96 |               return Err(RusTorchError::InvalidImageShape(format!(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout]  97 | |                 "Expected 2D or 3D tensor, got {:?}",
[INFO] [stdout]  98 | |                 shape
[INFO] [stdout]  99 | |             ))
[INFO] [stdout] 100 | |             .into())
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/utils.rs:104:52
[INFO] [stdout]     |
[INFO] [stdout] 104 |     Image::new(tensor.clone(), format).map_err(|e| e.into())
[INFO] [stdout]     |                                                    ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/utils.rs:124:20
[INFO] [stdout]     |
[INFO] [stdout] 124 |           return Err(RusTorchError::InvalidTransformParams(
[INFO] [stdout]     |  ____________________^
[INFO] [stdout] 125 | |             "Mean and std must have same length".to_string(),
[INFO] [stdout] 126 | |         )
[INFO] [stdout] 127 | |         .into());
[INFO] [stdout]     | |_______________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/utils.rs:146:20
[INFO] [stdout]     |
[INFO] [stdout] 146 |           return Err(RusTorchError::InvalidTransformParams(
[INFO] [stdout]     |  ____________________^
[INFO] [stdout] 147 | |             "Mean and std must have same length".to_string(),
[INFO] [stdout] 148 | |         )
[INFO] [stdout] 149 | |         .into());
[INFO] [stdout]     | |_______________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/visualization/plotting.rs:278:24
[INFO] [stdout]     |
[INFO] [stdout] 278 |               return Err(RusTorchError::InvalidDataFormat(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 279 | |                 "X and Y data must have the same non-zero length".to_string(),
[INFO] [stdout] 280 | |             )
[INFO] [stdout] 281 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/visualization/plotting.rs:347:28
[INFO] [stdout]     |
[INFO] [stdout] 347 |                   return Err(RusTorchError::InvalidDataFormat(format!(
[INFO] [stdout]     |  ____________________________^
[INFO] [stdout] 348 | |                     "Metric '{}' has no values",
[INFO] [stdout] 349 | |                     metric_name
[INFO] [stdout] 350 | |                 ))
[INFO] [stdout] 351 | |                 .into());
[INFO] [stdout]     | |_______________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/visualization/plotting.rs:355:17
[INFO] [stdout]     |
[INFO] [stdout] 355 |               Err(RusTorchError::InvalidDataFormat(format!(
[INFO] [stdout]     |  _________________^
[INFO] [stdout] 356 | |                 "Metric '{}' not found in training history",
[INFO] [stdout] 357 | |                 metric_name
[INFO] [stdout] 358 | |             ))
[INFO] [stdout] 359 | |             .into())
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/visualization/plotting.rs:373:24
[INFO] [stdout]     |
[INFO] [stdout] 373 |               return Err(RusTorchError::InvalidDataFormat(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 374 | |                 "Training history contains no data".to_string(),
[INFO] [stdout] 375 | |             )
[INFO] [stdout] 376 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/visualization/plotting.rs:392:24
[INFO] [stdout]     |
[INFO] [stdout] 392 |               return Err(RusTorchError::ConfigError(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 393 | |                 "Cannot plot empty training history".to_string(),
[INFO] [stdout] 394 | |             )
[INFO] [stdout] 395 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `rustorch` (lib test) due to 22 previous errors
[INFO] running `Command { std: "docker" "inspect" "3af777592854d2737e66a2db100afe7d5621fa8f8cefb078608bd1215dfbeb9a", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "3af777592854d2737e66a2db100afe7d5621fa8f8cefb078608bd1215dfbeb9a", kill_on_drop: false }`
[INFO] [stdout] 3af777592854d2737e66a2db100afe7d5621fa8f8cefb078608bd1215dfbeb9a
