lifetime issues with `axis_iter`
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 25/100
Línea de trabajo
Start with src/lib.rs around lines 66-85 and the axis_iter_mut(...).reduce(scan) call, then compare it with the manual loop and the ArrayViewMutD/Zip closure. Reproduce the reported compiler error and determine whether this lifetime pattern is supported; done means a documented explanation or a confirmed actionable fix.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Hello, that's me again. I apologize for my likely dump questions.
I'm in a situation where I want to process an array slice by slice, where each slice is computed in term of the previous. And my issue is that I cannot achieve this using .reduce instead of a for-loop.
This works:
// iterate slices
let mut it = array.axis_iter_mut(Axis(i));
let mut last = it.next().unwrap();
for mut current in it {
// compute 'current' slice in term of the previous 'last' slice
Zip::from(last).and(&mut current)
.for_each(|l, c| {
*c = /* some expression in term of `l` */;
});
last = current;
}
But the following doesn't work, though it should be more idiomatic:
// compute 'current' slice in term of the previous 'last' slice
let scan = |last: ArrayViewMutD<T>, mut current: ArrayViewMutD<T>| {
Zip::from(last).and(&mut current)
.for_each(|l, c| {
*c = /* some expression in term of `l` */;
});
current
};
// iterate slices
array.axis_iter_mut(Axis(i)).reduce(scan);
compiler output is
error[E0495]: cannot infer an appropriate lifetime for autoref due to conflicting requirements
--> src/lib.rs:85:10
|
85 | array.axis_iter_mut(Axis(i)).reduce(scan);
| ^^^^^^^^^^^^^
|
note: first, the lifetime cannot outlive the anonymous lifetime defined on the function body at 66:15...
--> src/lib.rs:66:15
|
66 | mut array: ArrayViewMutD<T>,
| ^^^^^^^^^^^^^^^^
note: ...so that the type `ArrayBase<ViewRepr<&mut T>, ndarray::Dim<IxDynImpl>>` is not borrowed for too long
--> src/lib.rs:85:4
|
85 | array.axis_iter_mut(Axis(i)).reduce(scan);
| ^^^^^
note: but, the lifetime must be valid for the anonymous lifetime #2 defined on the body at 76:16...
--> src/lib.rs:76:16
|
76 | let scan = |last: ArrayViewMutD<T>, mut current: ArrayViewMutD<T>| {
| _________________________^
77 | | let incr = ramp[i];
78 | | Zip::from(last).and(&mut current)
79 | | // .into_par_iter()
... |
83 | | current
84 | | };
| |_____________^
note: ...so that the types are compatible
--> src/lib.rs:85:33
|
85 | array.axis_iter_mut(Axis(i)).reduce(scan);
| ^^^^^^
= note: expected `ArrayBase<ViewRepr<&mut T>, _>`
found `ArrayBase<ViewRepr<&mut T>, _>`
I suspect this comes from the fact axis_iter doesn't provide elements with lifetime 'a (same as the original array) but instead provide an anonymous lifetime '_ ?
Not a big issue in my program since I found the first code sample to avoid my issue, but I'm curious :)
Thanks in advance
- Lenguaje dominante
- Rust
- Estrellas
- 4.3k
- Forks
- 391
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de rust-ndarray/ndarray
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
rust-ndarray/ndarray#1612 · 1 comentario ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
rust-ndarray/ndarray#1617 · 1 comentario ·
-
Stack overflow in `triu` Abiertobug good first issue
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
rust-ndarray/ndarray#1615 · 1 comentario ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
rust-ndarray/ndarray#1610 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 72/100
rust-ndarray/ndarray#1609 ·
Todos los issues de rust-ndarray/ndarray
Issues similares
-
risk:low runtime status:in-progress type:test
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
zeroclaw-labs/zeroclaw#11023 ·
-
good first issue refactor
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
EricSpencer00/Resilient#4835 · 1 comentario ·
-
agent:ready documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
cesarferreira/stax#890 ·
-
bug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100