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

Cannot add edge with Num type weights (from Symbolics)

Open kockahonza opened this issue 1 year ago • 2 comments

Hi, so I'm trying to use the package for a graph with terms from Symbolics.jl as the weights. I'm pretty sure everything should work just fine except when I try to add a new edge via add_edge! which checks if the weight is zero and which does not work for these terms. For a MWE:

using Symbolics, SimpleWeightedGraphs, Graphs
g = SimpleWeightedDiGraph{Int,Num}(2)
add_edge!(g, 1, 2, 2.0) # works
@variables x
add_edge!(g, 1, 2, x) # does not work

This also seems like it could very well apply to other types, the problem here is the == operator does not do the same thing for Num. A simple fix may be to add this check in a try block and maybe print a warning that the check could not be done? Though such a warning should be toggleable to avoid excessive printing.

kockahonza avatar Oct 11 '24 12:10 kockahonza

Symbolic.jl types require you to use isequal instead of ==. The isequal function should do the right thing for normal numeric types so we should use that to avoid this issue, rather than anything fancier. It's annoying that == builds equations terms for symbolic types, because it forces any Julia code that could get a symbolic type to use isequal, but it lets them write really clean looking equations in regular Julia syntax.

jpfairbanks avatar Oct 11 '24 12:10 jpfairbanks

Hi, yes after getting more experience with Symbolics this is absolutely an annoying problem on their side more than here (pops up all the time for me). That said I have been using simply weighted graphs with Num edge types quite successfully over the past couple of months with just a simple fix/improvement. I have just created a pull request, it replaces the comparison to zero using == with a call to iszero which seems like an uncontroversial improvement. This is done when using add_edge! just to print a warning that adding edges of weight 0 does nothing. The pull request is here #50 and hopefully it gets approved.

kockahonza avatar Dec 09 '24 16:12 kockahonza