Bug introduced in 8.0 and fixed in 12.2.
How can I remove EdgeWeight
s from a Graph
without affecting any other properties of the graph?
Let's construct a graph with weights:
g = RandomGraph[{10, 20}, EdgeWeight -> ConstantArray[1, 20]]
Based on the documentation I would expect the following to return Automatic
(the same thing it returns for a graph that has no edge weights):
PropertyValue[RemoveProperty[g, EdgeWeight], EdgeWeight]
(* ==> {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} *)
However, it returns the weights that were originally set.
The following seems to work, but it removes other properties as well
PropertyValue[RemoveProperty[g], EdgeWeight]
(* ==> Automatic *)
Extracting the edges and vertices, then re-building the graph will discard other properties as well. Graph
objects are atomic, and they don't have a Mathematica-expression form, so trying to modify them at the expression level is not a possibility either.
How can one then remove EdgeWeight
s from a Graph
without modifying any other properties of the Graph
?
Update: It turns out WeightedGraphQ@RemoveProperty[g]
still returns True
. So even though the weight values are removed, the system still considers the graph to be weighted.
FindShortestPath
. I think these types of crashes/problems would be less likely to occur ifGraph
weren't designed this way. There are several problems which I think are related to theGraph
data structure becoming corrupted internally. $\endgroup$