lifetime issues with `axis_iter`
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 25/100
Direção de pesquisa
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.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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
- Linguagem predominante
- Rust
- Estrelas
- 4.3k
- Forks
- 391
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Guia de contribuição
Nenhum guia de contribuição indexado para este repositório
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de rust-ndarray/ndarray
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
rust-ndarray/ndarray#1612 · 1 comentário ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 48/100
rust-ndarray/ndarray#1617 · 1 comentário ·
-
Stack overflow in `triu` Abertabug good first issue
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 68/100
rust-ndarray/ndarray#1615 · 1 comentário ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 48/100
rust-ndarray/ndarray#1610 ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 72/100
rust-ndarray/ndarray#1609 ·
Todas as issues de rust-ndarray/ndarray
Issues semelhantes
-
Replayed reasoning items send "content": null, which the Responses API schema does not permit Abertabug CLI custom-model
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
rust-bitcoin/rust-bitcoin#6930 · 1 comentário ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
fulcrumgenomics/ferro-hgvs#2251 ·
-
A-allocators A-docs C-enhancement T-libs
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100