Skip to content

Can't save a YAXArray with Variable axes as netcdf #3

@felixcremer

Description

@felixcremer

When I try to save the following YAXArray

julia> imfextinds
YAXArray with the following dimensions
FrequencyStats      Axis with 6 elements: FirstLocalMax FirstLocalMin FirstZeroCrossing SecondLocMax SecondLocMin SecondZeroCross 
Y                   Axis with 5820 Elements from 561609.15 to 736179.15
X                   Axis with 7500 Elements from 9.48724066e6 to 9.26227066e6
Total size: 999.07 MB

this fails with the following error:

julia> savecube(imfextinds,"data/cubes/s1cube_jurua_vh_smallchunks_imfs_4_local_extinds_4_newesdl.nc", backend=:netcdf)
┌ Warning: There are still cache misses
└ @ YAXArrays.DAT ~/.julia/dev/YAXArrays/src/DAT/DAT.jl:697
ERROR: ArgumentError: array must be non-empty
Stacktrace:
  [1] popfirst!
    @ ./array.jl:1288 [inlined]
  [2] jl2nc(t::DataType)
    @ NetCDF ~/.julia/packages/NetCDF/0sRUL/src/NetCDF.jl:90
  [3] getNCType(t::DataType)
    @ NetCDF ~/.julia/packages/NetCDF/0sRUL/src/NetCDF.jl:100
  [4] NcVar(name::String, dimin::Vector{NcDim}; atts::Dict{String, Any}, t::DataType, compress::Int64, chunksize::Tuple{Int64})
    @ NetCDF ~/.julia/packages/NetCDF/0sRUL/src/NetCDF.jl:255
  [5] nccreate(::String, ::String, ::String, ::Vararg{Any, N} where N; atts::Dict{String, Any}, gatts::Dict{Any, Any}, compress::Int64, t::DataType, mode::UInt16, chunksize::Tuple{Int64})
    @ NetCDF ~/.julia/packages/NetCDF/0sRUL/src/NetCDF.jl:1208
  [6] #add_var#75
    @ ~/.julia/packages/YAXArrayBase/OgYsV/src/datasets/netcdf.jl:50 [inlined]
  [7] add_var
    @ ~/.julia/packages/YAXArrayBase/OgYsV/src/datasets/netcdf.jl:49 [inlined]
  [8] #add_var#2
    @ ~/.julia/packages/YAXArrayBase/OgYsV/src/datasets/datasetinterface.jl:46 [inlined]
  [9] add_var
    @ ~/.julia/packages/YAXArrayBase/OgYsV/src/datasets/datasetinterface.jl:46 [inlined]
 [10] arrayfromaxis(p::YAXArrayBase.NetCDFDataset, ax::CategoricalAxis{Zarr.MaxLengthStrings.MaxLengthString{17, UInt8}, :FrequencyStats, Vector{Zarr.MaxLengthStrings.MaxLengthString{17, UInt8}}}, offs::Int64)
    @ YAXArrays.Datasets ~/.julia/dev/YAXArrays/src/DatasetAPI/Datasets.jl:319
 [11] (::YAXArrays.Datasets.var"#60#69"{YAXArrayBase.NetCDFDataset})(ax::CategoricalAxis{Zarr.MaxLengthStrings.MaxLengthString{17, UInt8}, :FrequencyStats, Vector{Zarr.MaxLengthStrings.MaxLengthString{17, UInt8}}}, co::Int64)
    @ YAXArrays.Datasets ~/.julia/dev/YAXArrays/src/DatasetAPI/Datasets.jl:253
 [12] foreach(::Function, ::Vector{CubeAxis}, ::Tuple{Int64, Int64, Int64})
    @ Base ./abstractarray.jl:2129
 [13] createdataset(DS::Type, axlist::Vector{CubeAxis}; path::String, persist::Nothing, T::Type, chunksize::Tuple{Int64, Int64, Int64}, chunkoffset::Tuple{Int64, Int64, Int64}, overwrite::Bool, properties::Dict{String, Any}, datasetaxis::String, kwargs::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ YAXArrays.Datasets ~/.julia/dev/YAXArrays/src/DatasetAPI/Datasets.jl:252
 [14] generateOutCube(::Type{YAXArrayBase.NetCDFDataset}, eltype::Type, oc::YAXArrays.DAT.OutputCube, loopcachesize::Vector{Int64}, co::Tuple{Int64, Int64, Int64}; kwargs::Base.Iterators.Pairs{Symbol, String, Tuple{Symbol}, NamedTuple{(:path,), Tuple{String}}})
    @ YAXArrays.DAT ~/.julia/dev/YAXArrays/src/DAT/DAT.jl:515
 [15] generateOutCube(oc::YAXArrays.DAT.OutputCube, ispar::Base.RefValue{Bool}, max_cache::Float64, loopcachesize::Vector{Int64}, co::Tuple{Int64, Int64, Int64})
    @ YAXArrays.DAT ~/.julia/dev/YAXArrays/src/DAT/DAT.jl:539
 [16] (::YAXArrays.DAT.var"#106#107"{YAXArrays.DAT.DATConfig{1, 1}, Tuple{Int64}})(c::YAXArrays.DAT.OutputCube)
    @ YAXArrays.DAT ~/.julia/dev/YAXArrays/src/DAT/DAT.jl:534
 [17] foreach(f::YAXArrays.DAT.var"#106#107"{YAXArrays.DAT.DATConfig{1, 1}, Tuple{Int64}}, itr::Tuple{YAXArrays.DAT.OutputCube})
    @ Base ./abstractarray.jl:2128
 [18] generateOutCubes(dc::YAXArrays.DAT.DATConfig{1, 1})
    @ YAXArrays.DAT ~/.julia/dev/YAXArrays/src/DAT/DAT.jl:532
 [19] mapCube(::YAXArrays.DAT.var"#cop#260", ::Tuple{YAXArray{Union{Missing, Float32}, 3, Zarr.ZArray{Union{Missing, Float32}, 3, Zarr.BloscCompressor, Zarr.DirectoryStore}, Vector{CubeAxis}}}; max_cache::Float64, indims::InDims, outdims::OutDims, inplace::Bool, ispar::Bool, debug::Bool, include_loopvars::Bool, showprog::Bool, nthreads::Vector{Int64}, loopchunksize::Dict{Any, Any}, kwargs::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ YAXArrays.DAT ~/.julia/dev/YAXArrays/src/DAT/DAT.jl:276
 [20] #mapCube#34
    @ ~/.julia/dev/YAXArrays/src/DAT/DAT.jl:178 [inlined]
 [21] savecube(c::YAXArray{Union{Missing, Float32}, 3, Zarr.ZArray{Union{Missing, Float32}, 3, Zarr.BloscCompressor, Zarr.DirectoryStore}, Vector{CubeAxis}}, name::String; chunksize::Dict{Any, Any}, max_cache::Float64, backend::Symbol, backendargs::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ YAXArrays.DAT ~/.julia/dev/YAXArrays/src/DAT/CubeIO.jl:38
 [22] top-level scope
    @ REPL[16]:1

but when I use subsetcube to separate one of the variables I can save it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions