Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Document Unitful.jl compatibility #796

Open
asinghvi17 opened this issue Oct 11, 2024 · 3 comments
Open

Document Unitful.jl compatibility #796

asinghvi17 opened this issue Oct 11, 2024 · 3 comments
Labels
documentation Improvements or additions to documentation

Comments

@asinghvi17
Copy link
Collaborator

asinghvi17 commented Oct 11, 2024

This is super low priority, I just tried it out on a lark.

julia> using Rasters, RasterDataSources, ArchGDAL, Unitful
julia> masked_precip = Raster(WorldClim{Climate}, :prec; month = 6)
julia> Quantity.(masked_precip, u"mm")
ERROR: DimensionError: -32768 and 32767 mm are not dimensionally compatible.
Stacktrace:
 [1] _le
   @ ~/.julia/packages/Unitful/GYzMo/src/quantities.jl:243 [inlined]
 [2] <=(x::Quantity{Int16, NoDims, Unitful.FreeUnits{…}}, y::Quantity{Int16, 𝐋, Unitful.FreeUnits{…}})
   @ Unitful ~/.julia/packages/Unitful/GYzMo/src/quantities.jl:233
 [3] <=(x::Int16, y::Quantity{Int16, 𝐋, Unitful.FreeUnits{(mm,), 𝐋, nothing}})
   @ Unitful ~/.julia/packages/Unitful/GYzMo/src/quantities.jl:235
 [4] _fix_missingval(::Type{Quantity{Int16, 𝐋, Unitful.FreeUnits{(mm,), 𝐋, nothing}}}, missingval::Int16)
   @ Rasters ~/.julia/dev/Rasters/src/array.jl:355
 [5] rebuild(A::Raster{…}, data::Matrix{…}, dims::Tuple{…}, refdims::Tuple{}, name::Symbol, metadata::Metadata{…}, missingval::Int16)
   @ Rasters ~/.julia/dev/Rasters/src/array.jl:85
 [6] rebuild
   @ ~/.julia/dev/DimensionalData/src/array/array.jl:85 [inlined]
 [7] copy(bc::Base.Broadcast.Broadcasted{DimensionalData.DimensionalStyle{…}, Tuple{…}, Type{…}, Tuple{…}})
   @ DimensionalData ~/.julia/dev/DimensionalData/src/array/broadcast.jl:47
 [8] materialize(bc::Base.Broadcast.Broadcasted{DimensionalData.DimensionalStyle{…}, Nothing, Type{…}, Tuple{…}})
   @ Base.Broadcast ./broadcast.jl:903
 [9] top-level scope
   @ REPL[130]:1
Some type information was truncated. Use `show(err)` to see complete types.
@rafaqz
Copy link
Owner

rafaqz commented Oct 11, 2024

I use Rasters of units all the time. Its just your missingval

Use replace_missing first (except that broadcast fails on missing anyway)

Or @d macro you can set new missingval as a keyword

@rafaqz
Copy link
Owner

rafaqz commented Oct 11, 2024

This works fine:

julia> Raster([1.0, 2.0, missing], (X(),), missingval=missing) .* u"mm"
╭─────────────────────────────────────────────────────────────────────────────────╮
│ 3-element Raster{Union{Missing, Quantity{Float64, 𝐋, Unitful.FreeUnits{(mm,), 𝐋, 
nothing}}},1} │
├─────────────────────────────────────────────────────────────────────────── dims ┤
   X
├───────────────────────────────────────────────────────────────────────── raster ┤
  extent: Extent(X = (1, 3),)
  missingval: missing
└─────────────────────────────────────────────────────────────────────────────────┘
 1.0 mm
 2.0 mm
       missing

Or to use some other missingval this works:

julia> @d Raster([1.0, 2.0, 0.0], (X(),), missingval=0.0) .* u"mm" missingval=0.0u"
mm"
╭────────────────────────────────────────────────────────────────────────────────╮
│ 3-element Raster{Quantity{Float64, 𝐋, Unitful.FreeUnits{(mm,), 𝐋, nothing}},1} │
├────────────────────────────────────────────────────────────────────────── dims ┤
   X
├──────────────────────────────────────────────────────────────────────── raster ┤
  extent: Extent(X = (1, 3),)
  missingval: 0.0 mm
└────────────────────────────────────────────────────────────────────────────────┘
 1.0 mm
 2.0 mm
 0.0 mm

@rafaqz rafaqz closed this as completed Oct 11, 2024
@rafaqz
Copy link
Owner

rafaqz commented Oct 11, 2024

Hmm maybe we should document the units/missingval interaction a bit better. It wont be as important when missing is the default but still kinda needed

@rafaqz rafaqz reopened this Oct 11, 2024
@rafaqz rafaqz changed the title Unitful.jl compatibility Document Unitful.jl compatibility Oct 11, 2024
@rafaqz rafaqz added the documentation Improvements or additions to documentation label Oct 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

2 participants