DimensionalData.jl icon indicating copy to clipboard operation
DimensionalData.jl copied to clipboard

Dimensions.lookup fails if the lookup is `Colon`

Open sethaxen opened this issue 2 years ago • 3 comments

Cases like this fail. I think though that they should work?

julia> Dimensions.lookup(X())
ERROR: MethodError: no method matching lookup(::X{Colon})

Closest candidates are:
  lookup(::Union{Val{<:DimensionalData.Dimensions.Dimension}, Type{<:DimensionalData.Dimensions.Dimension}})
   @ DimensionalData ~/.julia/packages/DimensionalData/6v7CY/src/Dimensions/dimension.jl:175
  lookup(::DimensionalData.Dimensions.AnonDim)
   @ DimensionalData ~/.julia/packages/DimensionalData/6v7CY/src/Dimensions/dimension.jl:351
  lookup(::DimensionalData.Dimensions.Dimension{<:AbstractArray})
   @ DimensionalData ~/.julia/packages/DimensionalData/6v7CY/src/Dimensions/dimension.jl:174
  ...

Stacktrace:
 [1] top-level scope
   @ REPL[70]:1

julia> Dimensions.lookup(Dim{:foo}())
ERROR: MethodError: no method matching lookup(::Dim{:foo, Colon})

Closest candidates are:
  lookup(::Union{Val{<:DimensionalData.Dimensions.Dimension}, Type{<:DimensionalData.Dimensions.Dimension}})
   @ DimensionalData ~/.julia/packages/DimensionalData/6v7CY/src/Dimensions/dimension.jl:175
  lookup(::DimensionalData.Dimensions.AnonDim)
   @ DimensionalData ~/.julia/packages/DimensionalData/6v7CY/src/Dimensions/dimension.jl:351
  lookup(::DimensionalData.Dimensions.Dimension{<:AbstractArray})
   @ DimensionalData ~/.julia/packages/DimensionalData/6v7CY/src/Dimensions/dimension.jl:174
  ...

Stacktrace:
 [1] top-level scope
   @ REPL[71]:1

sethaxen avatar Feb 17 '23 21:02 sethaxen

Yeah, it's on Dim{<:AbstractArray}.

For better or worse. The reason was because dims are used for so many things it's a potential footgun having lookup return contents. So it will only ever return something indexable, usually a Lookup.

val gives you the contents of the Dimension whatever it is. So does Base.parent.

Clearly this all happened in various phases as changes were made (with no PR reviews), and I was never totally happy with it. But that's how it works...

rafaqz avatar Feb 17 '23 22:02 rafaqz

What threw me off is that val(Dim{:foo}()) works but lookup(Dim{:foo}()) doesn't while val(Dim{:foo}) doesn't work while lookup(Dim{:foo}) does.

sethaxen avatar Feb 17 '23 23:02 sethaxen

I think that lookup on Dim{:foo} should be lookup_type

rafaqz avatar Feb 01 '24 19:02 rafaqz