JuliaDataCubes / JuliaDataCubes/YAXArrays.jl
replace! of a YAXArray gives StackOverflow Error
Nobody has claimed this yet.
- Dominant language
- Julia
- Stars
- 132
- Forks
- 25
- PR merge metrics
- No merged PRs in 30d
Description
When I try to do replace! on a YAXArray I get the errror below.
I am not entirely sure, whether this should be working but at least it should not give an StackOverflowError.
I have not yet further investigated, whether it is the specific setup of my dataset or whether this also happens on other YAXArrays.
julia> replace!(gfw2018, 0=> NaN)
ERROR: StackOverflowError:
Stacktrace:
[1] approx_chunksize(g::DiskArrays.GridChunks{2})
@ DiskArrays ~/.julia/packages/DiskArrays/4dn4s/src/chunks.jl:196
[2] _writeblock!(::DiskArrays.BroadcastDiskArray{Float32, 2, Base.Broadcast.Broadcasted{DiskArrays.ChunkStyle{2}, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, var"#11#12", Tuple{YAXArrayBase.GDALBand{UInt8}}}}, ::Matrix{Float64}, ::UnitRange{Int64}, ::Vararg{UnitRange{Int64}})
@ DiskArrays ~/.julia/packages/DiskArrays/4dn4s/src/batchgetindex.jl:187
[3] writeblock!(::DiskArrays.BroadcastDiskArray{Float32, 2, Base.Broadcast.Broadcasted{DiskArrays.ChunkStyle{2}, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, var"#11#12", Tuple{YAXArrayBase.GDALBand{UInt8}}}}, ::Matrix{Float64}, ::UnitRange{Int64}, ::UnitRange{Int64})
@ DiskArrays ~/.julia/packages/DiskArrays/4dn4s/src/batchgetindex.jl:213
[4] _writeblock!(::DiskArrays.BroadcastDiskArray{Float32, 2, Base.Broadcast.Broadcasted{DiskArrays.ChunkStyle{2}, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, var"#11#12", Tuple{YAXArrayBase.GDALBand{UInt8}}}}, ::Matrix{Float64}, ::UnitRange{Int64}, ::Vararg{UnitRange{Int64}})
@ DiskArrays ~/.julia/packages/DiskArrays/4dn4s/src/batchgetindex.jl:199
--- the last 2 lines are repeated 3703 more times ---
[7411] writeblock!(::DiskArrays.BroadcastDiskArray{Float32, 2, Base.Broadcast.Broadcasted{DiskArrays.ChunkStyle{2}, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, var"#11#12", Tuple{YAXArrayBase.GDALBand{UInt8}}}}, ::Matrix{Float64}, ::UnitRange{Int64}, ::UnitRange{Int64})
@ DiskArrays ~/.julia/packages/DiskArrays/4dn4s/src/batchgetindex.jl:213
[7412] writeblock!(::DiskArrays.SubDiskArray{Float32, 2}, ::Matrix{Float64}, ::UnitRange{Int64}, ::UnitRange{Int64})
@ DiskArrays ~/.julia/packages/DiskArrays/4dn4s/src/subarray.jl:25
[7413] setindex_disk!(::DiskArrays.SubDiskArray{Float32, 2}, ::Matrix{Float64}, ::UnitRange{Int64}, ::Vararg{UnitRange{Int64}})
@ DiskArrays ~/.julia/packages/DiskArrays/4dn4s/src/diskarray.jl:57
[7414] setindex!
@ ~/.julia/packages/DiskArrays/4dn4s/src/diskarray.jl:219 [inlined]
[7415] (::DiskArrays.var"#91#98"{DiskArrays.SubDiskArray{Float32, 2}, Base.Broadcast.Broadcasted{Nothing, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, Base.Broadcast.var"#12#14"{Base.Broadcast.var"#18#20"{Base.Broadcast.var"#11#13", Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#19"}, Base.Broadcast.var"#25#26"{Base.Broadcast.var"#27#28"}, Base.Broadcast.var"#21#22"{Base.Broadcast.var"#23#24"}, var"#11#12"}, Base.var"#new#383"{Tuple{Pair{Int64, Float64}}}}, Tuple{Matrix{UInt8}}}})(c::Tuple{UnitRange{Int64}, UnitRange{Int64}})
@ DiskArrays ~/.julia/packages/DiskArrays/4dn4s/src/broadcast.jl:138
[7416] foreach(f::DiskArrays.var"#91#98"{DiskArrays.SubDiskArray{Float32, 2}, Base.Broadcast.Broadcasted{Nothing, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, Base.Broadcast.var"#12#14"{Base.Broadcast.var"#18#20"{Base.Broadcast.var"#11#13", Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#19"}, Base.Broadcast.var"#25#26"{Base.Broadcast.var"#27#28"}, Base.Broadcast.var"#21#22"{Base.Broadcast.var"#23#24"}, var"#11#12"}, Base.var"#new#383"{Tuple{Pair{Int64, Float64}}}}, Tuple{Matrix{UInt8}}}}, itr::DiskArrays.GridChunks{2})
@ Base ./abstractarray.jl:3073
[7417] copyto!(dest::DiskArrays.SubDiskArray{Float32, 2}, bc::Base.Broadcast.Broadcasted{Nothing, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, Base.Broadcast.var"#12#14"{Base.Broadcast.var"#18#20"{Base.Broadcast.var"#11#13", Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#19"}, Base.Broadcast.var"#25#26"{Base.Broadcast.var"#27#28"}, Base.Broadcast.var"#21#22"{Base.Broadcast.var"#23#24"}, var"#11#12"}, Base.var"#new#383"{Tuple{Pair{Int64, Float64}}}}, Tuple{Matrix{UInt8}}})
@ DiskArrays ~/.julia/packages/DiskArrays/4dn4s/src/broadcast.jl:136
[7418] copyto!
@ ./broadcast.jl:926 [inlined]
[7419] materialize!
@ ./broadcast.jl:884 [inlined]
[7420] materialize!
@ ./broadcast.jl:881 [inlined]
[7421] (::DiskArrays.var"#59#61"{DiskArrays.BroadcastDiskArray{Float32, 2, Base.Broadcast.Broadcasted{DiskArrays.ChunkStyle{2}, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, var"#11#12", Tuple{YAXArrayBase.GDALBand{UInt8}}}}, Base.Broadcast.Broadcasted{DiskArrays.ChunkStyle{2}, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, Base.Broadcast.var"#12#14"{Base.Broadcast.var"#18#20"{Base.Broadcast.var"#11#13", Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#19"}, Base.Broadcast.var"#25#26"{Base.Broadcast.var"#27#28"}, Base.Broadcast.var"#21#22"{Base.Broadcast.var"#23#24"}, var"#11#12"}, Base.var"#new#383"{Tuple{Pair{Int64, Float64}}}}, Tuple{YAXArrayBase.GDALBand{UInt8}}}})(cnow::Tuple{UnitRange{Int64}, UnitRange{Int64}})
@ DiskArrays ~/.julia/packages/DiskArrays/4dn4s/src/broadcast.jl:42
[7422] foreach(f::DiskArrays.var"#59#61"{DiskArrays.BroadcastDiskArray{Float32, 2, Base.Broadcast.Broadcasted{DiskArrays.ChunkStyle{2}, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, var"#11#12", Tuple{YAXArrayBase.GDALBand{UInt8}}}}, Base.Broadcast.Broadcasted{DiskArrays.ChunkStyle{2}, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, Base.Broadcast.var"#12#14"{Base.Broadcast.var"#18#20"{Base.Broadcast.var"#11#13", Base.Broadcast.var"#15#16"{Base.Broadcast.var"#17#19"}, Base.Broadcast.var"#25#26"{Base.Broadcast.var"#27#28"}, Base.Broadcast.var"#21#22"{Base.Broadcast.var"#23#24"}, var"#11#12"}, Base.var"#new#383"{Tuple{Pair{Int64, Float64}}}}, Tuple{YAXArrayBase.GDALBand{UInt8}}}}, itr::DiskArrays.GridChunks{2})
@ Base ./abstractarray.jl:3073
[7423] copyto!(dest::DiskArrays.BroadcastDiskArray{Float32, 2, Base.Broadcast.Broadcasted{DiskArrays.ChunkStyle{2}, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, var"#11#12", Tuple{YAXArrayBase.GDALBand{UInt8}}}}, bc::Base.Broadcast.Broadcasted{DiskArrays.ChunkStyle{2}, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, Base.var"#new#383"{Tuple{Pair{Int64, Float64}}}, Tuple{Base.Broadcast.Broadcasted{DiskArrays.ChunkStyle{2}, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, var"#11#12", Tuple{YAXArrayBase.GDALBand{UInt8}}}}})
@ DiskArrays ~/.julia/packages/DiskArrays/4dn4s/src/broadcast.jl:38
[7424] materialize!
@ ./broadcast.jl:884 [inlined]
[7425] materialize!
@ ./broadcast.jl:881 [inlined]
[7426] broadcast!
@ ./broadcast.jl:850 [inlined]
[7427] _replace!
@ ~/.julia/packages/DiskArrays/4dn4s/src/array.jl:73 [inlined]
[7428] _replace!
@ ~/.julia/packages/DiskArrays/4dn4s/src/array.jl:34 [inlined]
[7429] _replace!
@ ~/.julia/packages/DimensionalData/pS9IE/src/array/methods.jl:348 [inlined]
[7430] replace_pairs!
@ ./set.jl:616 [inlined]
[7431] replace!(A::YAXArray{Float32, 2, DiskArrays.BroadcastDiskArray{Float32, 2, Base.Broadcast.Broadcasted{DiskArrays.ChunkStyle{2}, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, var"#11#12", Tuple{YAXArrayBase.GDALBand{UInt8}}}}, Tuple{X{DimensionalData.Dimensions.LookupArrays.Sampled{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, DimensionalData.Dimensions.LookupArrays.ForwardOrdered, DimensionalData.Dimensions.LookupArrays.Regular{Float64}, DimensionalData.Dimensions.LookupArrays.Points, DimensionalData.Dimensions.LookupArrays.NoMetadata}}, Y{DimensionalData.Dimensions.LookupArrays.Sampled{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, DimensionalData.Dimensions.LookupArrays.ReverseOrdered, DimensionalData.Dimensions.LookupArrays.Regular{Float64}, DimensionalData.Dimensions.LookupArrays.Points, DimensionalData.Dimensions.LookupArrays.NoMetadata}}}}, old_new::Pair{Int64, Float64}; count::Int64)
@ Base ./set.jl:606
[7432] replace!(A::YAXArray{Float32, 2, DiskArrays.BroadcastDiskArray{Float32, 2, Base.Broadcast.Broadcasted{DiskArrays.ChunkStyle{2}, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, var"#11#12", Tuple{YAXArrayBase.GDALBand{UInt8}}}}, Tuple{X{DimensionalData.Dimensions.LookupArrays.Sampled{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, DimensionalData.Dimensions.LookupArrays.ForwardOrdered, DimensionalData.Dimensions.LookupArrays.Regular{Float64}, DimensionalData.Dimensions.LookupArrays.Points, DimensionalData.Dimensions.LookupArrays.NoMetadata}}, Y{DimensionalData.Dimensions.LookupArrays.Sampled{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, DimensionalData.Dimensions.LookupArrays.ReverseOrdered, DimensionalData.Dimensions.LookupArrays.Regular{Float64}, DimensionalData.Dimensions.LookupArrays.Points, DimensionalData.Dimensions.LookupArrays.NoMetadata}}}}, old_new::Pair{Int64, Float64})
@ Base ./set.jl:606
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce replace!(gfw2018, 0 => NaN) on a YAXArray and begin with the repeated stack frames in DiskArrays/src/array.jl, batchgetindex.jl, and broadcast.jl. Check whether the reported write path can complete without recursion, and confirm that the operation no longer raises StackOverflowError.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- julia
- Domain
- data
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100