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

spy(dd) not working because of ambiguity

Open felixcremer opened this issue 1 year ago • 3 comments

The spy plot is not working for a DimensionalArray because of some ambiguity in the convert_arguments pipeline.

julia> dd = DimArray(rand(6,5), (X(1:6), Y(4:8)))
╭─────────────────────────╮
│ 6×5 DimArray{Float64,2} │
├─────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────────── dims ┐
  ↓ X Sampled{Int64} 1:6 ForwardOrdered Regular Points,
  → Y Sampled{Int64} 4:8 ForwardOrdered Regular Points
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
 ↓ →  4          5         6           7         8
 1    0.0787359  0.382833  0.374837    0.514333  0.936026
 2    0.385325   0.301244  0.264966    0.70313   0.819278
 3    0.0483895  0.986391  0.923494    0.35545   0.969923
 4    0.552739   0.21211   0.00512503  0.650018  0.973412
 5    0.679107   0.204973  0.942496    0.950757  0.129172
 6    0.182793   0.158313  0.683587    0.104264  0.964841

julia> spy(dd)
ERROR: MethodError: convert_arguments(::Type{Plot{Makie.spy}}, ::DimMatrix{Float64, Tuple{X{DimensionalData.Dimensions.Lookups.Sampled{Int64, UnitRange{Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Int64}, DimensionalData.Dimensions.Lookups.Points, DimensionalData.Dimensions.Lookups.NoMetadata}}, Y{DimensionalData.Dimensions.Lookups.Sampled{Int64, UnitRange{Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Int64}, DimensionalData.Dimensions.Lookups.Points, DimensionalData.Dimensions.Lookups.NoMetadata}}}, Tuple{}, Matrix{Float64}, DimensionalData.NoName, DimensionalData.Dimensions.Lookups.NoMetadata}) is ambiguous.

Candidates:
  convert_arguments(::Type{<:Plot{Makie.spy}}, matrix::AbstractMatrix{T}) where T
    @ Makie ~/.julia/packages/Makie/8h0bl/src/basic_recipes/spy.jl:66
  convert_arguments(t::Type{<:AbstractPlot}, A::AbstractDimMatrix)
    @ DimensionalDataMakie ~/.julia/packages/DimensionalData/VxDQB/ext/DimensionalDataMakie.jl:374

Possible fix, define
  convert_arguments(::Type{<:Plot{Makie.spy}}, ::AbstractDimMatrix{T}) where T

Stacktrace:
 [1] _surface2(A::DimMatrix{…}, plotfunc::Function, attributes::@Kwargs{}, replacements::Tuple{})
   @ DimensionalDataMakie ~/.julia/packages/DimensionalData/VxDQB/ext/DimensionalDataMakie.jl:185
 [2] #spy#75
   @ ~/.julia/packages/DimensionalData/VxDQB/ext/DimensionalDataMakie.jl:140 [inlined]
 [3] spy(A::DimMatrix{…})
   @ DimensionalDataMakie ~/.julia/packages/DimensionalData/VxDQB/ext/DimensionalDataMakie.jl:136
 [4] top-level scope
   @ REPL[60]:1
Some type information was truncated. Use `show(err)` to see complete types.

felixcremer avatar Sep 12 '24 12:09 felixcremer

Maybe solve by #795 ?

rafaqz avatar Sep 12 '24 13:09 rafaqz

Still a problem

ERROR: MethodError: convert_arguments(::NoConversion, ::DimMatrix{Float64, Tuple{X{DimensionalData.Dimensions.Lookups.Sampled{Int64, UnitRange{Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Int64}, DimensionalData.Dimensions.Lookups.Points, DimensionalData.Dimensions.Lookups.NoMetadata}}, Y{DimensionalData.Dimensions.Lookups.Sampled{Int64, UnitRange{Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Int64}, DimensionalData.Dimensions.Lookups.Points, DimensionalData.Dimensions.Lookups.NoMetadata}}}, Tuple{}, Matrix{Float64}, DimensionalData.NoName, DimensionalData.Dimensions.Lookups.NoMetadata}) is ambiguous.

Candidates:
  convert_arguments(::NoConversion, args...; kw...)
    @ MakieCore ~/.julia/dev/Makie/MakieCore/src/conversion.jl:107
  convert_arguments(t::ConversionTrait, A::AbstractDimArray{<:Any, N}) where N
    @ DimensionalDataMakie ~/.julia/dev/DimensionalData/ext/DimensionalDataMakie.jl:459

Possible fix, define
  convert_arguments(::NoConversion, ::AbstractDimArray{<:Any, N}) where N

but I'll pass a fix up

asinghvi17 avatar Sep 12 '24 16:09 asinghvi17

semi works now, but the axis ticks are still wrong. Don't have time to bugfix that at the moment but it can probably go in some other later PR...

asinghvi17 avatar Sep 12 '24 17:09 asinghvi17