Open
Description
Description of bug
Passing an array of Unitful.jl
doesn't work with yen_k_shortest_paths
.
It's because no method is defined to accept weights of AbstractMatrix{<:Number}
,
since now only AbstractMatrix{<:Real}
is accepted.
How to reproduce
julia> using Graphs, Unitful
julia> g = SimpleGraph(5)
julia> ws = [v1 == v2 ? 0.0u"km" : (v1+v2)*1.0u"km" for v1 in vertices(g), v2 in vertices(g)]
julia> yen_k_shortest_paths(g, 1, 2, ws)
ERROR: MethodError: no method matching yen_k_shortest_paths(::SimpleGraph{Int64}, ::Int64, ::Int64, ::Matrix{Qu
antity{Float64, 𝐋, Unitful.FreeUnits{(km,), 𝐋, nothing}}})
Closest candidates are:
yen_k_shortest_paths(::AbstractGraph, ::U, ::U) where U<:Integer
@ Graphs ~/.julia/packages/Graphs/FXxqo/src/shortestpaths/yen.jl:26
yen_k_shortest_paths(::AbstractGraph, ::U, ::U, ::AbstractMatrix{T}) where {U<:Integer, T<:Real}
@ Graphs ~/.julia/packages/Graphs/FXxqo/src/shortestpaths/yen.jl:26
yen_k_shortest_paths(::AbstractGraph, ::U, ::U, ::AbstractMatrix{T}, ::Int64; maxdist) where {U<:Integer, T<:
Real}
@ Graphs ~/.julia/packages/Graphs/FXxqo/src/shortestpaths/yen.jl:26
Stacktrace:
[1] top-level scope
@ REPL[10]:1
Expected behavior
Unitful.jl should work.
Actual behavior
Throws a Method not found error.
Version information
julia> versioninfo()
Julia Version 1.9.4
Commit 8e5136fa297 (2023-11-14 08:46 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: Linux (x86_64-linux-gnu)
CPU: 12 × 12th Gen Intel(R) Core(TM) i5-1235U
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-14.0.6 (ORCJIT, alderlake)
Threads: 1 on 12 virtual cores
(anissue) pkg> st
Status `~/code/julia/anissue/Project.toml`
[86223c79] Graphs v1.9.0
[1986cc42] Unitful v1.19.0
Solution
I guess we could just substitute all <:Real
to <:Number
.
Any obvious problems if we do so and is there a reason it's a Real
in the first place ?