[INFO] fetching crate lumen-core 0.6.1...
[INFO] checking lumen-core-0.6.1 against a5689b034ad287112f709693384a37f1377eb9cc for pr-129249-3
[INFO] extracting crate lumen-core 0.6.1 into /workspace/builds/worker-1-tc2/source
[INFO] started tweaking crates.io crate lumen-core 0.6.1
[INFO] finished tweaking crates.io crate lumen-core 0.6.1
[INFO] tweaked toml for crates.io crate lumen-core 0.6.1 written to /workspace/builds/worker-1-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate lumen-core 0.6.1 on toolchain a5689b034ad287112f709693384a37f1377eb9cc
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+a5689b034ad287112f709693384a37f1377eb9cc" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate lumen-core 0.6.1 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" "+a5689b034ad287112f709693384a37f1377eb9cc" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 9a839751c3c5e35b3c49b56d77b7f65fbd1505741e4d579ffa6305f22b4699ff
[INFO] running `Command { std: "docker" "start" "9a839751c3c5e35b3c49b56d77b7f65fbd1505741e4d579ffa6305f22b4699ff", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "9a839751c3c5e35b3c49b56d77b7f65fbd1505741e4d579ffa6305f22b4699ff", 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" "9a839751c3c5e35b3c49b56d77b7f65fbd1505741e4d579ffa6305f22b4699ff" "/opt/rustwide/cargo-home/bin/cargo" "+a5689b034ad287112f709693384a37f1377eb9cc" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "9a839751c3c5e35b3c49b56d77b7f65fbd1505741e4d579ffa6305f22b4699ff", 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" "9a839751c3c5e35b3c49b56d77b7f65fbd1505741e4d579ffa6305f22b4699ff" "/opt/rustwide/cargo-home/bin/cargo" "+a5689b034ad287112f709693384a37f1377eb9cc" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling unicode-ident v1.0.18
[INFO] [stderr]    Compiling libc v0.2.175
[INFO] [stderr]    Compiling libm v0.2.15
[INFO] [stderr]    Compiling zerocopy v0.8.26
[INFO] [stderr]    Compiling rayon-core v1.13.0
[INFO] [stderr]     Checking bitflags v2.9.3
[INFO] [stderr]     Checking reborrow v0.5.5
[INFO] [stderr]    Compiling dyn-stack-macros v0.1.3
[INFO] [stderr]     Checking either v1.15.0
[INFO] [stderr]    Compiling proc-macro2 v1.0.103
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling pulp v0.22.2
[INFO] [stderr]     Checking pulp-wasm-simd-flag v0.1.0
[INFO] [stderr]    Compiling seq-macro v0.3.6
[INFO] [stderr]     Checking once_cell v1.21.3
[INFO] [stderr]     Checking crossbeam-deque v0.8.6
[INFO] [stderr]    Compiling toml_edit v0.23.10+spec-1.0.0
[INFO] [stderr]    Compiling thiserror v2.0.16
[INFO] [stderr]     Checking raw-cpuid v11.6.0
[INFO] [stderr]    Compiling quote v1.0.42
[INFO] [stderr]    Compiling syn v2.0.111
[INFO] [stderr]     Checking rayon v1.11.0
[INFO] [stderr]    Compiling proc-macro-crate v3.4.0
[INFO] [stderr]     Checking getrandom v0.3.3
[INFO] [stderr]     Checking num_cpus v1.17.0
[INFO] [stderr]     Checking rand_core v0.9.3
[INFO] [stderr]     Checking approx v0.5.1
[INFO] [stderr]    Compiling zerocopy-derive v0.8.26
[INFO] [stderr]    Compiling bytemuck_derive v1.10.2
[INFO] [stderr]    Compiling thiserror-impl v2.0.16
[INFO] [stderr]    Compiling thiserrorctx-impl v2.0.0
[INFO] [stderr]     Checking thiserrorctx v2.0.0
[INFO] [stderr]     Checking bytemuck v1.25.0
[INFO] [stderr]     Checking num-complex v0.4.6
[INFO] [stderr]     Checking dyn-stack v0.13.2
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking rand_chacha v0.9.0
[INFO] [stderr]     Checking rand v0.9.2
[INFO] [stderr]     Checking rand_distr v0.5.1
[INFO] [stderr]     Checking half v2.7.1
[INFO] [stderr]     Checking gemm-common v0.19.0
[INFO] [stderr]     Checking gemm-f32 v0.19.0
[INFO] [stderr]     Checking gemm-c64 v0.19.0
[INFO] [stderr]     Checking gemm-f64 v0.19.0
[INFO] [stderr]     Checking gemm-c32 v0.19.0
[INFO] [stderr]     Checking gemm-f16 v0.19.0
[INFO] [stderr]     Checking gemm v0.19.0
[INFO] [stderr]     Checking lumen-core v0.6.1 (/opt/rustwide/workdir)
[INFO] [stdout] warning: use of deprecated constant `std::f32::MAX`: replaced by the `MAX` associated constant on `f32`
[INFO] [stdout]   --> src/dtype/f32.rs:30:34
[INFO] [stdout]    |
[INFO] [stdout] 30 |     const MAX_VALUE: Self = f32::MAX;
[INFO] [stdout]    |                                  ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f32::MIN`: replaced by the `MIN` associated constant on `f32`
[INFO] [stdout]   --> src/dtype/f32.rs:31:34
[INFO] [stdout]    |
[INFO] [stdout] 31 |     const MIN_VALUE: Self = f32::MIN;
[INFO] [stdout]    |                                  ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f32::MAX`: replaced by the `MAX` associated constant on `f32`
[INFO] [stdout]   --> src/dtype/f32.rs:30:34
[INFO] [stdout]    |
[INFO] [stdout] 30 |     const MAX_VALUE: Self = f32::MAX;
[INFO] [stdout]    |                                  ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f32::MIN`: replaced by the `MIN` associated constant on `f32`
[INFO] [stdout]   --> src/dtype/f32.rs:31:34
[INFO] [stdout]    |
[INFO] [stdout] 31 |     const MIN_VALUE: Self = f32::MIN;
[INFO] [stdout]    |                                  ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ReduceVar` is never constructed
[INFO] [stdout]    --> src/ops/reduce.rs:328:12
[INFO] [stdout]     |
[INFO] [stdout] 328 | pub struct ReduceVar;
[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 `ReduceProduct` is never constructed
[INFO] [stdout]    --> src/ops/reduce.rs:350:12
[INFO] [stdout]     |
[INFO] [stdout] 350 | pub struct ReduceProduct;
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]   --> src/base/layout.rs:79:24
[INFO] [stdout]    |
[INFO] [stdout] 79 |               return Err(Error::NarrowInvalidArgs {
[INFO] [stdout]    |  ________________________^
[INFO] [stdout] 80 | |                 shape: self.shape.clone(),
[INFO] [stdout] 81 | |                 dim, start, len: 0,
[INFO] [stdout] 82 | |                 msg: "step cannot be 0",
[INFO] [stdout] 83 | |             }.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: `#[deny(self_type_conversion)]` on by default
[INFO] [stdout] help: consider removing the conversion call
[INFO] [stdout]    |
[INFO] [stdout] 83 -             }.into());
[INFO] [stdout] 83 +             });
[INFO] [stdout]    |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]    |
[INFO] [stdout] 79 ~             return Err(<error::Error as Into<_>>::into(Error::NarrowInvalidArgs {
[INFO] [stdout] 80 |                 shape: self.shape.clone(),
[INFO] [stdout] 81 |                 dim, start, len: 0,
[INFO] [stdout] 82 |                 msg: "step cannot be 0",
[INFO] [stdout] 83 ~             }));
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]   --> src/base/layout.rs:87:28
[INFO] [stdout]    |
[INFO] [stdout] 87 |                   return Err(Error::NarrowInvalidArgs {
[INFO] [stdout]    |  ____________________________^
[INFO] [stdout] 88 | |                 shape: self.shape.clone(),
[INFO] [stdout] 89 | |                 dim, start, len: end.saturating_sub(start), 
[INFO] [stdout] 90 | |                 msg: "index out of range",
[INFO] [stdout] 91 | |             }.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] help: consider removing the conversion call
[INFO] [stdout]    |
[INFO] [stdout] 91 -             }.into());
[INFO] [stdout] 91 +             });
[INFO] [stdout]    |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]    |
[INFO] [stdout] 87 ~                 return Err(<error::Error as Into<_>>::into(Error::NarrowInvalidArgs {
[INFO] [stdout] 88 |                 shape: self.shape.clone(),
[INFO] [stdout] 89 |                 dim, start, len: end.saturating_sub(start), 
[INFO] [stdout] 90 |                 msg: "index out of range",
[INFO] [stdout] 91 ~             }));
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/base/storage.rs:183:24
[INFO] [stdout]     |
[INFO] [stdout] 183 |             return Err(Error::RequiresContiguous { op: "index-add" }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 183 -             return Err(Error::RequiresContiguous { op: "index-add" }.into());
[INFO] [stdout] 183 +             return Err(Error::RequiresContiguous { op: "index-add" });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 183 -             return Err(Error::RequiresContiguous { op: "index-add" }.into());
[INFO] [stdout] 183 +             return Err(<error::Error as Into<_>>::into(Error::RequiresContiguous { op: "index-add" }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/base/storage.rs:239:32
[INFO] [stdout]     |
[INFO] [stdout] 239 |                       return Err(Error::InvalidIndex {
[INFO] [stdout]     |  ________________________________^
[INFO] [stdout] 240 | |                         index: idx,
[INFO] [stdout] 241 | |                         size: src_dim_size,
[INFO] [stdout] 242 | |                         op: "index-add",
[INFO] [stdout] 243 | |                     }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 243 -                     }.into());
[INFO] [stdout] 243 +                     });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 239 ~                     return Err(<error::Error as Into<_>>::into(Error::InvalidIndex {
[INFO] [stdout] 240 |                         index: idx,
[INFO] [stdout] 241 |                         size: src_dim_size,
[INFO] [stdout] 242 |                         op: "index-add",
[INFO] [stdout] 243 ~                     }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/base/storage.rs:285:24
[INFO] [stdout]     |
[INFO] [stdout] 285 |             return Err(Error::RequiresContiguous { op: "gather" }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 285 -             return Err(Error::RequiresContiguous { op: "gather" }.into());
[INFO] [stdout] 285 +             return Err(Error::RequiresContiguous { op: "gather" });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 285 -             return Err(Error::RequiresContiguous { op: "gather" }.into());
[INFO] [stdout] 285 +             return Err(<error::Error as Into<_>>::into(Error::RequiresContiguous { op: "gather" }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/base/storage.rs:293:25
[INFO] [stdout]     |
[INFO] [stdout] 293 |                return Err(Error::ShapeMismatchBinaryOp { 
[INFO] [stdout]     |  _________________________^
[INFO] [stdout] 294 | |                 lhs: src_layout.shape().clone(), 
[INFO] [stdout] 295 | |                 rhs: ids_layout.shape().clone(),
[INFO] [stdout] 296 | |                 op: "gather" 
[INFO] [stdout] 297 | |              }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 297 -              }.into());
[INFO] [stdout] 297 +              });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 293 ~              return Err(<error::Error as Into<_>>::into(Error::ShapeMismatchBinaryOp { 
[INFO] [stdout] 294 |                 lhs: src_layout.shape().clone(), 
[INFO] [stdout] 295 |                 rhs: ids_layout.shape().clone(),
[INFO] [stdout] 296 |                 op: "gather" 
[INFO] [stdout] 297 ~              }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/base/storage.rs:339:36
[INFO] [stdout]     |
[INFO] [stdout] 339 |                           return Err(Error::InvalidIndex {
[INFO] [stdout]     |  ____________________________________^
[INFO] [stdout] 340 | |                             index: idx,
[INFO] [stdout] 341 | |                             size: src_dim_size,
[INFO] [stdout] 342 | |                             op: "gather",
[INFO] [stdout] 343 | |                         }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 343 -                         }.into());
[INFO] [stdout] 343 +                         });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 339 ~                         return Err(<error::Error as Into<_>>::into(Error::InvalidIndex {
[INFO] [stdout] 340 |                             index: idx,
[INFO] [stdout] 341 |                             size: src_dim_size,
[INFO] [stdout] 342 |                             op: "gather",
[INFO] [stdout] 343 ~                         }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/base/storage.rs:370:24
[INFO] [stdout]     |
[INFO] [stdout] 370 |             return Err(Error::RequiresContiguous { op: "scatter-add" }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 370 -             return Err(Error::RequiresContiguous { op: "scatter-add" }.into());
[INFO] [stdout] 370 +             return Err(Error::RequiresContiguous { op: "scatter-add" });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 370 -             return Err(Error::RequiresContiguous { op: "scatter-add" }.into());
[INFO] [stdout] 370 +             return Err(<error::Error as Into<_>>::into(Error::RequiresContiguous { op: "scatter-add" }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/base/storage.rs:402:25
[INFO] [stdout]     |
[INFO] [stdout] 402 |                return Err(Error::ShapeMismatchBinaryOp { 
[INFO] [stdout]     |  _________________________^
[INFO] [stdout] 403 | |                 lhs: dst_layout.shape().clone(), 
[INFO] [stdout] 404 | |                 rhs: ids_layout.shape().clone(),
[INFO] [stdout] 405 | |                 op: "scatter-add" 
[INFO] [stdout] 406 | |              }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 406 -              }.into());
[INFO] [stdout] 406 +              });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 402 ~              return Err(<error::Error as Into<_>>::into(Error::ShapeMismatchBinaryOp { 
[INFO] [stdout] 403 |                 lhs: dst_layout.shape().clone(), 
[INFO] [stdout] 404 |                 rhs: ids_layout.shape().clone(),
[INFO] [stdout] 405 |                 op: "scatter-add" 
[INFO] [stdout] 406 ~              }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/base/storage.rs:439:36
[INFO] [stdout]     |
[INFO] [stdout] 439 |                           return Err(Error::InvalidIndex {
[INFO] [stdout]     |  ____________________________________^
[INFO] [stdout] 440 | |                             index: idx,
[INFO] [stdout] 441 | |                             size: dst_dim_size,
[INFO] [stdout] 442 | |                             op: "scatter-add",
[INFO] [stdout] 443 | |                         }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 443 -                         }.into());
[INFO] [stdout] 443 +                         });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 439 ~                         return Err(<error::Error as Into<_>>::into(Error::InvalidIndex {
[INFO] [stdout] 440 |                             index: idx,
[INFO] [stdout] 441 |                             size: dst_dim_size,
[INFO] [stdout] 442 |                             op: "scatter-add",
[INFO] [stdout] 443 ~                         }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/ops/indexer.rs:150:25
[INFO] [stdout]     |
[INFO] [stdout] 150 |                return Err(Error::ShapeMismatchBinaryOp { 
[INFO] [stdout]     |  _________________________^
[INFO] [stdout] 151 | |                  op: "index-add", 
[INFO] [stdout] 152 | |                  lhs: self.shape().clone(), 
[INFO] [stdout] 153 | |                  rhs: source.shape().clone() 
[INFO] [stdout] 154 | |              }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 154 -              }.into());
[INFO] [stdout] 154 +              });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 150 ~              return Err(<error::Error as Into<_>>::into(Error::ShapeMismatchBinaryOp { 
[INFO] [stdout] 151 |                  op: "index-add", 
[INFO] [stdout] 152 |                  lhs: self.shape().clone(), 
[INFO] [stdout] 153 |                  rhs: source.shape().clone() 
[INFO] [stdout] 154 ~              }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/ops/indexer.rs:161:32
[INFO] [stdout]     |
[INFO] [stdout] 161 | ...rr(Error::ShapeMismatchBinaryOp { op: "index-add (dim mismatch)", lhs: self.shape().clone(), rhs: source.shape().clone() }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 161 -                     return Err(Error::ShapeMismatchBinaryOp { op: "index-add (dim mismatch)", lhs: self.shape().clone(), rhs: source.shape().clone() }.into());
[INFO] [stdout] 161 +                     return Err(Error::ShapeMismatchBinaryOp { op: "index-add (dim mismatch)", lhs: self.shape().clone(), rhs: source.shape().clone() });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 161 -                     return Err(Error::ShapeMismatchBinaryOp { op: "index-add (dim mismatch)", lhs: self.shape().clone(), rhs: source.shape().clone() }.into());
[INFO] [stdout] 161 +                     return Err(<error::Error as Into<_>>::into(Error::ShapeMismatchBinaryOp { op: "index-add (dim mismatch)", lhs: self.shape().clone(), rhs: source.shape().clone() }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/ops/indexer.rs:164:28
[INFO] [stdout]     |
[INFO] [stdout] 164 | ...   return Err(Error::ShapeMismatchBinaryOp { op: "index-add", lhs: self.shape().clone(), rhs: source.shape().clone() }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 164 -                 return Err(Error::ShapeMismatchBinaryOp { op: "index-add", lhs: self.shape().clone(), rhs: source.shape().clone() }.into());
[INFO] [stdout] 164 +                 return Err(Error::ShapeMismatchBinaryOp { op: "index-add", lhs: self.shape().clone(), rhs: source.shape().clone() });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 164 -                 return Err(Error::ShapeMismatchBinaryOp { op: "index-add", lhs: self.shape().clone(), rhs: source.shape().clone() }.into());
[INFO] [stdout] 164 +                 return Err(<error::Error as Into<_>>::into(Error::ShapeMismatchBinaryOp { op: "index-add", lhs: self.shape().clone(), rhs: source.shape().clone() }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/base/layout.rs:198:28
[INFO] [stdout]     |
[INFO] [stdout] 198 |     pub fn storage_indices(&self) -> StorageIndices {
[INFO] [stdout]     |                            ^^^^^     ^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]     = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 198 |     pub fn storage_indices(&self) -> StorageIndices<'_> {
[INFO] [stdout]     |                                                    ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/base/tensor.rs:155:28
[INFO] [stdout]     |
[INFO] [stdout] 155 |     pub fn storage_indices(&self) -> StorageIndices {
[INFO] [stdout]     |                            ^^^^^     ^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 155 |     pub fn storage_indices(&self) -> StorageIndices<'_> {
[INFO] [stdout]     |                                                    ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]   --> src/ops/iter.rs:20:17
[INFO] [stdout]    |
[INFO] [stdout] 20 |     pub fn iter(&self) -> crate::Result<TensorIter<T>> {
[INFO] [stdout]    |                 ^^^^^                   ^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]    |                 |
[INFO] [stdout]    |                 the lifetime is elided here
[INFO] [stdout]    |
[INFO] [stdout]    = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]    |
[INFO] [stdout] 20 |     pub fn iter(&self) -> crate::Result<TensorIter<'_, T>> {
[INFO] [stdout]    |                                                    +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `lumen-core` (lib) due to 13 previous errors; 7 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] warning: struct `ReduceVar` is never constructed
[INFO] [stdout]    --> src/ops/reduce.rs:328:12
[INFO] [stdout]     |
[INFO] [stdout] 328 | pub struct ReduceVar;
[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 `ReduceProduct` is never constructed
[INFO] [stdout]    --> src/ops/reduce.rs:350:12
[INFO] [stdout]     |
[INFO] [stdout] 350 | pub struct ReduceProduct;
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]   --> src/base/layout.rs:79:24
[INFO] [stdout]    |
[INFO] [stdout] 79 |               return Err(Error::NarrowInvalidArgs {
[INFO] [stdout]    |  ________________________^
[INFO] [stdout] 80 | |                 shape: self.shape.clone(),
[INFO] [stdout] 81 | |                 dim, start, len: 0,
[INFO] [stdout] 82 | |                 msg: "step cannot be 0",
[INFO] [stdout] 83 | |             }.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: `#[deny(self_type_conversion)]` on by default
[INFO] [stdout] help: consider removing the conversion call
[INFO] [stdout]    |
[INFO] [stdout] 83 -             }.into());
[INFO] [stdout] 83 +             });
[INFO] [stdout]    |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]    |
[INFO] [stdout] 79 ~             return Err(<error::Error as Into<_>>::into(Error::NarrowInvalidArgs {
[INFO] [stdout] 80 |                 shape: self.shape.clone(),
[INFO] [stdout] 81 |                 dim, start, len: 0,
[INFO] [stdout] 82 |                 msg: "step cannot be 0",
[INFO] [stdout] 83 ~             }));
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]   --> src/base/layout.rs:87:28
[INFO] [stdout]    |
[INFO] [stdout] 87 |                   return Err(Error::NarrowInvalidArgs {
[INFO] [stdout]    |  ____________________________^
[INFO] [stdout] 88 | |                 shape: self.shape.clone(),
[INFO] [stdout] 89 | |                 dim, start, len: end.saturating_sub(start), 
[INFO] [stdout] 90 | |                 msg: "index out of range",
[INFO] [stdout] 91 | |             }.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] help: consider removing the conversion call
[INFO] [stdout]    |
[INFO] [stdout] 91 -             }.into());
[INFO] [stdout] 91 +             });
[INFO] [stdout]    |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]    |
[INFO] [stdout] 87 ~                 return Err(<error::Error as Into<_>>::into(Error::NarrowInvalidArgs {
[INFO] [stdout] 88 |                 shape: self.shape.clone(),
[INFO] [stdout] 89 |                 dim, start, len: end.saturating_sub(start), 
[INFO] [stdout] 90 |                 msg: "index out of range",
[INFO] [stdout] 91 ~             }));
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/base/storage.rs:183:24
[INFO] [stdout]     |
[INFO] [stdout] 183 |             return Err(Error::RequiresContiguous { op: "index-add" }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 183 -             return Err(Error::RequiresContiguous { op: "index-add" }.into());
[INFO] [stdout] 183 +             return Err(Error::RequiresContiguous { op: "index-add" });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 183 -             return Err(Error::RequiresContiguous { op: "index-add" }.into());
[INFO] [stdout] 183 +             return Err(<error::Error as Into<_>>::into(Error::RequiresContiguous { op: "index-add" }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/base/storage.rs:239:32
[INFO] [stdout]     |
[INFO] [stdout] 239 |                       return Err(Error::InvalidIndex {
[INFO] [stdout]     |  ________________________________^
[INFO] [stdout] 240 | |                         index: idx,
[INFO] [stdout] 241 | |                         size: src_dim_size,
[INFO] [stdout] 242 | |                         op: "index-add",
[INFO] [stdout] 243 | |                     }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 243 -                     }.into());
[INFO] [stdout] 243 +                     });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 239 ~                     return Err(<error::Error as Into<_>>::into(Error::InvalidIndex {
[INFO] [stdout] 240 |                         index: idx,
[INFO] [stdout] 241 |                         size: src_dim_size,
[INFO] [stdout] 242 |                         op: "index-add",
[INFO] [stdout] 243 ~                     }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/base/storage.rs:285:24
[INFO] [stdout]     |
[INFO] [stdout] 285 |             return Err(Error::RequiresContiguous { op: "gather" }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 285 -             return Err(Error::RequiresContiguous { op: "gather" }.into());
[INFO] [stdout] 285 +             return Err(Error::RequiresContiguous { op: "gather" });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 285 -             return Err(Error::RequiresContiguous { op: "gather" }.into());
[INFO] [stdout] 285 +             return Err(<error::Error as Into<_>>::into(Error::RequiresContiguous { op: "gather" }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/base/storage.rs:293:25
[INFO] [stdout]     |
[INFO] [stdout] 293 |                return Err(Error::ShapeMismatchBinaryOp { 
[INFO] [stdout]     |  _________________________^
[INFO] [stdout] 294 | |                 lhs: src_layout.shape().clone(), 
[INFO] [stdout] 295 | |                 rhs: ids_layout.shape().clone(),
[INFO] [stdout] 296 | |                 op: "gather" 
[INFO] [stdout] 297 | |              }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 297 -              }.into());
[INFO] [stdout] 297 +              });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 293 ~              return Err(<error::Error as Into<_>>::into(Error::ShapeMismatchBinaryOp { 
[INFO] [stdout] 294 |                 lhs: src_layout.shape().clone(), 
[INFO] [stdout] 295 |                 rhs: ids_layout.shape().clone(),
[INFO] [stdout] 296 |                 op: "gather" 
[INFO] [stdout] 297 ~              }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/base/storage.rs:339:36
[INFO] [stdout]     |
[INFO] [stdout] 339 |                           return Err(Error::InvalidIndex {
[INFO] [stdout]     |  ____________________________________^
[INFO] [stdout] 340 | |                             index: idx,
[INFO] [stdout] 341 | |                             size: src_dim_size,
[INFO] [stdout] 342 | |                             op: "gather",
[INFO] [stdout] 343 | |                         }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 343 -                         }.into());
[INFO] [stdout] 343 +                         });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 339 ~                         return Err(<error::Error as Into<_>>::into(Error::InvalidIndex {
[INFO] [stdout] 340 |                             index: idx,
[INFO] [stdout] 341 |                             size: src_dim_size,
[INFO] [stdout] 342 |                             op: "gather",
[INFO] [stdout] 343 ~                         }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/base/storage.rs:370:24
[INFO] [stdout]     |
[INFO] [stdout] 370 |             return Err(Error::RequiresContiguous { op: "scatter-add" }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 370 -             return Err(Error::RequiresContiguous { op: "scatter-add" }.into());
[INFO] [stdout] 370 +             return Err(Error::RequiresContiguous { op: "scatter-add" });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 370 -             return Err(Error::RequiresContiguous { op: "scatter-add" }.into());
[INFO] [stdout] 370 +             return Err(<error::Error as Into<_>>::into(Error::RequiresContiguous { op: "scatter-add" }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/base/storage.rs:402:25
[INFO] [stdout]     |
[INFO] [stdout] 402 |                return Err(Error::ShapeMismatchBinaryOp { 
[INFO] [stdout]     |  _________________________^
[INFO] [stdout] 403 | |                 lhs: dst_layout.shape().clone(), 
[INFO] [stdout] 404 | |                 rhs: ids_layout.shape().clone(),
[INFO] [stdout] 405 | |                 op: "scatter-add" 
[INFO] [stdout] 406 | |              }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 406 -              }.into());
[INFO] [stdout] 406 +              });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 402 ~              return Err(<error::Error as Into<_>>::into(Error::ShapeMismatchBinaryOp { 
[INFO] [stdout] 403 |                 lhs: dst_layout.shape().clone(), 
[INFO] [stdout] 404 |                 rhs: ids_layout.shape().clone(),
[INFO] [stdout] 405 |                 op: "scatter-add" 
[INFO] [stdout] 406 ~              }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/base/storage.rs:439:36
[INFO] [stdout]     |
[INFO] [stdout] 439 |                           return Err(Error::InvalidIndex {
[INFO] [stdout]     |  ____________________________________^
[INFO] [stdout] 440 | |                             index: idx,
[INFO] [stdout] 441 | |                             size: dst_dim_size,
[INFO] [stdout] 442 | |                             op: "scatter-add",
[INFO] [stdout] 443 | |                         }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 443 -                         }.into());
[INFO] [stdout] 443 +                         });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 439 ~                         return Err(<error::Error as Into<_>>::into(Error::InvalidIndex {
[INFO] [stdout] 440 |                             index: idx,
[INFO] [stdout] 441 |                             size: dst_dim_size,
[INFO] [stdout] 442 |                             op: "scatter-add",
[INFO] [stdout] 443 ~                         }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/ops/indexer.rs:150:25
[INFO] [stdout]     |
[INFO] [stdout] 150 |                return Err(Error::ShapeMismatchBinaryOp { 
[INFO] [stdout]     |  _________________________^
[INFO] [stdout] 151 | |                  op: "index-add", 
[INFO] [stdout] 152 | |                  lhs: self.shape().clone(), 
[INFO] [stdout] 153 | |                  rhs: source.shape().clone() 
[INFO] [stdout] 154 | |              }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 154 -              }.into());
[INFO] [stdout] 154 +              });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 150 ~              return Err(<error::Error as Into<_>>::into(Error::ShapeMismatchBinaryOp { 
[INFO] [stdout] 151 |                  op: "index-add", 
[INFO] [stdout] 152 |                  lhs: self.shape().clone(), 
[INFO] [stdout] 153 |                  rhs: source.shape().clone() 
[INFO] [stdout] 154 ~              }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/ops/indexer.rs:161:32
[INFO] [stdout]     |
[INFO] [stdout] 161 | ...rr(Error::ShapeMismatchBinaryOp { op: "index-add (dim mismatch)", lhs: self.shape().clone(), rhs: source.shape().clone() }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 161 -                     return Err(Error::ShapeMismatchBinaryOp { op: "index-add (dim mismatch)", lhs: self.shape().clone(), rhs: source.shape().clone() }.into());
[INFO] [stdout] 161 +                     return Err(Error::ShapeMismatchBinaryOp { op: "index-add (dim mismatch)", lhs: self.shape().clone(), rhs: source.shape().clone() });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 161 -                     return Err(Error::ShapeMismatchBinaryOp { op: "index-add (dim mismatch)", lhs: self.shape().clone(), rhs: source.shape().clone() }.into());
[INFO] [stdout] 161 +                     return Err(<error::Error as Into<_>>::into(Error::ShapeMismatchBinaryOp { op: "index-add (dim mismatch)", lhs: self.shape().clone(), rhs: source.shape().clone() }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `error::Error`
[INFO] [stdout]    --> src/ops/indexer.rs:164:28
[INFO] [stdout]     |
[INFO] [stdout] 164 | ...   return Err(Error::ShapeMismatchBinaryOp { op: "index-add", lhs: self.shape().clone(), rhs: source.shape().clone() }.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] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 164 -                 return Err(Error::ShapeMismatchBinaryOp { op: "index-add", lhs: self.shape().clone(), rhs: source.shape().clone() }.into());
[INFO] [stdout] 164 +                 return Err(Error::ShapeMismatchBinaryOp { op: "index-add", lhs: self.shape().clone(), rhs: source.shape().clone() });
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 164 -                 return Err(Error::ShapeMismatchBinaryOp { op: "index-add", lhs: self.shape().clone(), rhs: source.shape().clone() }.into());
[INFO] [stdout] 164 +                 return Err(<error::Error as Into<_>>::into(Error::ShapeMismatchBinaryOp { op: "index-add", lhs: self.shape().clone(), rhs: source.shape().clone() }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/base/layout.rs:198:28
[INFO] [stdout]     |
[INFO] [stdout] 198 |     pub fn storage_indices(&self) -> StorageIndices {
[INFO] [stdout]     |                            ^^^^^     ^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]     = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 198 |     pub fn storage_indices(&self) -> StorageIndices<'_> {
[INFO] [stdout]     |                                                    ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/base/tensor.rs:155:28
[INFO] [stdout]     |
[INFO] [stdout] 155 |     pub fn storage_indices(&self) -> StorageIndices {
[INFO] [stdout]     |                            ^^^^^     ^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 155 |     pub fn storage_indices(&self) -> StorageIndices<'_> {
[INFO] [stdout]     |                                                    ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]   --> src/ops/iter.rs:20:17
[INFO] [stdout]    |
[INFO] [stdout] 20 |     pub fn iter(&self) -> crate::Result<TensorIter<T>> {
[INFO] [stdout]    |                 ^^^^^                   ^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]    |                 |
[INFO] [stdout]    |                 the lifetime is elided here
[INFO] [stdout]    |
[INFO] [stdout]    = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]    |
[INFO] [stdout] 20 |     pub fn iter(&self) -> crate::Result<TensorIter<'_, T>> {
[INFO] [stdout]    |                                                    +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `lumen-core` (lib test) due to 13 previous errors; 7 warnings emitted
[INFO] [stderr] warning: unused dependency `thiserrorctx`
[INFO] [stderr]   --> Cargo.toml:35:15
[INFO] [stderr]    |
[INFO] [stderr] 35 | [dependencies.thiserrorctx]
[INFO] [stderr]    |               ^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::unused_dependencies` is set to `warn` by default
[INFO] [stderr] help: consider removing the dependency on `thiserrorctx`
[INFO] [stderr] warning: `lumen-core` (manifest) generated 1 warning
[INFO] running `Command { std: "docker" "inspect" "9a839751c3c5e35b3c49b56d77b7f65fbd1505741e4d579ffa6305f22b4699ff", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "9a839751c3c5e35b3c49b56d77b7f65fbd1505741e4d579ffa6305f22b4699ff", kill_on_drop: false }`
[INFO] [stdout] 9a839751c3c5e35b3c49b56d77b7f65fbd1505741e4d579ffa6305f22b4699ff
