Bug introduced in 8.0 and fixed in 12.2.
How can I remove EdgeWeights 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 EdgeWeights 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 ifGraphweren't designed this way. There are several problems which I think are related to theGraphdata structure becoming corrupted internally. – Szabolcs May 16 '12 at 10:48