JuliaDataCubes / YAXArrays.jl

Yet Another XArray-like Julia package
https://juliadatacubes.github.io/YAXArrays.jl/
Other
99 stars 16 forks source link

replace! of a YAXArray gives StackOverflow Error #290

Open felixcremer opened 1 year ago

felixcremer commented 1 year ago

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