StackOverflowError: infinite call loop between LazyArrays and ArrayLayouts
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
Direzione di ricerca
Riproduci l’esempio e ispeziona LazyArrays/src/linalg/mul.jl insieme a ArrayLayouts/src/mul.jl e ArrayLayouts/src/ArrayLayouts.jl, dove lo stack trace entra nel percorso di materializzazione ricorsiva. Determina perché questa moltiplicazione annidata continua a fare dispatch tra i due pacchetti; il lavoro è completato quando Matrix(A) viene materializzato senza uno StackOverflowError per l’espressione riportata.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
julia> A = zeros(1,1) * BandedMatrix(0=>Zeros(∞))[1:1,1:1] * zeros(1,1)
(1×1 Array{Float64,2}) * (1×1 BandedMatrix{Float64} with bandwidths (0, 0) with data (1×0 view(::Array{Float64,2}, 1:1, 1:0) with eltype Float64) * (0×1 view(::LazyArrays.ApplyArray{Float64,2,typeof(vcat),Tuple{Zeros{Float64,2,Tuple{Base.OneTo{Int64},InfiniteArrays.OneToInf{Int64}}}}}, 1:0, 1:1) with eltype Float64)) * (1×1 Array{Float64,2}):
0.0
julia> Matrix(A)
ERROR: StackOverflowError:
Stacktrace:
[1] simplify at C:\Users\pty\.julia\packages\LazyArrays\6zNYO\src\linalg\mul.jl:290 [inlined]
[2] simplify(::ArrayLayouts.Mul{LazyArrays.ApplyLayout{typeof(*)},ArrayLayouts.DenseColumnMajor,LazyArrays.ApplyArray{Float64,2,typeof(*),Tuple{Array{Float64,2},BandedMatrix{Float64,LazyArrays.ApplyArray{Float64,2,typeof(*),Tuple{SubArray{Float64,2,Array{Float64,2},Tuple{UnitRange{Int64},UnitRange{Int64}},false},SubArray{Float64,2,LazyArrays.ApplyArray{Float64,2,typeof(vcat),Tuple{Zeros{Float64,2,Tuple{Base.OneTo{Int64},InfiniteArrays.OneToInf{Int64}}}}},Tuple{UnitRange{Int64},UnitRange{Int64}},false}}},Base.OneTo{Int64}}}},Array{Float64,2}}) at C:\Users\pty\.julia\packages\LazyArrays\6zNYO\src\linalg\mul.jl:300
[3] copy at C:\Users\pty\.julia\packages\LazyArrays\6zNYO\src\linalg\mul.jl:305 [inlined]
[4] materialize at C:\Users\pty\.julia\packages\ArrayLayouts\ATRic\src\mul.jl:105 [inlined]
[5] mul at C:\Users\pty\.julia\packages\ArrayLayouts\ATRic\src\mul.jl:106 [inlined]
[6] * at C:\Users\pty\.julia\packages\ArrayLayouts\ATRic\src\mul.jl:170 [inlined]
[7] * at .\operators.jl:538 [inlined]
[8] _default_materialize at C:\Users\pty\.julia\packages\LazyArrays\6zNYO\src\lazyapplying.jl:86 [inlined]
[9] copy at C:\Users\pty\.julia\packages\LazyArrays\6zNYO\src\lazyapplying.jl:89 [inlined]
[10] materialize at C:\Users\pty\.julia\packages\LazyArrays\6zNYO\src\lazyapplying.jl:81 [inlined]
[11] copyto! at C:\Users\pty\.julia\packages\LazyArrays\6zNYO\src\lazyapplying.jl:92 [inlined]
[12] _copyto! at C:\Users\pty\.julia\packages\LazyArrays\6zNYO\src\lazyapplying.jl:334 [inlined]
[13] _copyto!(::Array{Float64,2}, ::LazyArrays.ApplyArray{Float64,2,typeof(*),Tuple{Array{Float64,2},BandedMatrix{Float64,LazyArrays.ApplyArray{Float64,2,typeof(*),Tuple{SubArray{Float64,2,Array{Float64,2},Tuple{UnitRange{Int64},UnitRange{Int64}},false},SubArray{Float64,2,LazyArrays.ApplyArray{Float64,2,typeof(vcat),Tuple{Zeros{Float64,2,Tuple{Base.OneTo{Int64},InfiniteArrays.OneToInf{Int64}}}}},Tuple{UnitRange{Int64},UnitRange{Int64}},false}}},Base.OneTo{Int64}},Array{Float64,2}}}) at C:\Users\pty\.julia\packages\ArrayLayouts\ATRic\src\ArrayLayouts.jl:169
[14] copyto!(::Array{Float64,2}, ::LazyArrays.ApplyArray{Float64,2,typeof(*),Tuple{Array{Float64,2},BandedMatrix{Float64,LazyArrays.ApplyArray{Float64,2,typeof(*),Tuple{SubArray{Float64,2,Array{Float64,2},Tuple{UnitRange{Int64},UnitRange{Int64}},false},SubArray{Float64,2,LazyArrays.ApplyArray{Float64,2,typeof(vcat),Tuple{Zeros{Float64,2,Tuple{Base.OneTo{Int64},InfiniteArrays.OneToInf{Int64}}}}},Tuple{UnitRange{Int64},UnitRange{Int64}},false}}},Base.OneTo{Int64}},Array{Float64,2}}}) at C:\Users\pty\.julia\packages\ArrayLayouts\ATRic\src\ArrayLayouts.jl:171
... (the last 4 lines are repeated 21758 more times)
[87047] copyto! at C:\Users\pty\.julia\packages\LazyArrays\6zNYO\src\lazyapplying.jl:92 [inlined]
[87048] _copyto! at C:\Users\pty\.julia\packages\LazyArrays\6zNYO\src\lazyapplying.jl:334 [inlined]
[87049] _copyto!(::Array{Float64,2}, ::LazyArrays.ApplyArray{Float64,2,typeof(*),Tuple{Array{Float64,2},BandedMatrix{Float64,LazyArrays.ApplyArray{Float64,2,typeof(*),Tuple{SubArray{Float64,2,Array{Float64,2},Tuple{UnitRange{Int64},UnitRange{Int64}},false},SubArray{Float64,2,LazyArrays.ApplyArray{Float64,2,typeof(vcat),Tuple{Zeros{Float64,2,Tuple{Base.OneTo{Int64},InfiniteArrays.OneToInf{Int64}}}}},Tuple{UnitRange{Int64},UnitRange{Int64}},false}}},Base.OneTo{Int64}},Array{Float64,2}}}) at C:\Users\pty\.julia\packages\ArrayLayouts\ATRic\src\ArrayLayouts.jl:169
[87050] copyto! at C:\Users\pty\.julia\packages\ArrayLayouts\ATRic\src\ArrayLayouts.jl:171 [inlined]
[87051] copyto_axcheck! at .\abstractarray.jl:946 [inlined]
[87052] Array{Float64,2}(::LazyArrays.ApplyArray{Float64,2,typeof(*),Tuple{Array{Float64,2},BandedMatrix{Float64,LazyArrays.ApplyArray{Float64,2,typeof(*),Tuple{SubArray{Float64,2,Array{Float64,2},Tuple{UnitRange{Int64},UnitRange{Int64}},false},SubArray{Float64,2,LazyArrays.ApplyArray{Float64,2,typeof(vcat),Tuple{Zeros{Float64,2,Tuple{Base.OneTo{Int64},InfiniteArrays.OneToInf{Int64}}}}},Tuple{UnitRange{Int64},UnitRange{Int64}},false}}},Base.OneTo{Int64}},Array{Float64,2}}}) at .\array.jl:562
[87053] Array{T,2} where T(::LazyArrays.ApplyArray{Float64,2,typeof(*),Tuple{Array{Float64,2},BandedMatrix{Float64,LazyArrays.ApplyArray{Float64,2,typeof(*),Tuple{SubArray{Float64,2,Array{Float64,2},Tuple{UnitRange{Int64},UnitRange{Int64}},false},SubArray{Float64,2,LazyArrays.ApplyArray{Float64,2,typeof(vcat),Tuple{Zeros{Float64,2,Tuple{Base.OneTo{Int64},InfiniteArrays.OneToInf{Int64}}}}},Tuple{UnitRange{Int64},UnitRange{Int64}},false}}},Base.OneTo{Int64}},Array{Float64,2}}}) at .\boot.jl:428
In the above example, the error won't happen with one of the following modifications:
- Delete
zeros(1,1), the first or the last or both. - Change
BandedMatrix(0=>Zeros(∞))[1:1,1:1]to `BandedMatrix(0=>Zeros(∞)[1:1]).
- Lingua principale
- Julia
- Stelle
- 57
- Fork
- 10
- Merge medio
- 1g 9h
- PR unite (30g)
- 11
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
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 JuliaLinearAlgebra/ArrayLayouts.jl
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
JuliaLinearAlgebra/ArrayLayouts.jl#277 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 38/100
JuliaLinearAlgebra/ArrayLayouts.jl#253 · 5 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 48/100
JuliaLinearAlgebra/ArrayLayouts.jl#243 ·
I maintainer di solito rispondono entro 1 giorno
-
Add RectDiagonalLayoutAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 15/100
JuliaLinearAlgebra/ArrayLayouts.jl#185 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 35/100
JuliaLinearAlgebra/ArrayLayouts.jl#157 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di JuliaLinearAlgebra/ArrayLayouts.jl
Issue simili
-
mul! with a Symmetric or Hermitian factor throws for a matrix view whose columns are not contiguousAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
JuliaLang/LinearAlgebra.jl#1829 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
MagneticResonanceImaging/MRIReco.jl#320 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
rfordatascience/tidytuesday#1098 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
ClapeyronThermo/Clapeyron.jl#662 · 2 commenti ·
-
ci system:windows test
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno