lifetime issues with `axis_iter`
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 25/100
Direzione di ricerca
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.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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
- Lingua principale
- Rust
- Stelle
- 4.3k
- Fork
- 391
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di rust-ndarray/ndarray
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
rust-ndarray/ndarray#1612 · 1 commento ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
rust-ndarray/ndarray#1617 · 1 commento ·
-
Stack overflow in `triu` Apertabug good first issue
Difficoltà 3/5 1-2 giorni Idoneità per principianti 68/100
rust-ndarray/ndarray#1615 · 1 commento ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
rust-ndarray/ndarray#1610 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 72/100
rust-ndarray/ndarray#1609 ·
Tutte le issue di rust-ndarray/ndarray
Issue simili
-
risk:low runtime status:in-progress type:test
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
zeroclaw-labs/zeroclaw#11023 ·
-
good first issue refactor
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
EricSpencer00/Resilient#4835 · 1 commento ·
-
agent:ready documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
cesarferreira/stax#890 ·
-
bug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100