Source code for ewokscore.graph.multigraph
import networkx
from ..utils import dict_merge
[docs]
def flatten_multigraph(graph: networkx.DiGraph) -> networkx.DiGraph:
"""The attributes of links between the same two nodes are merged."""
if not graph.is_multigraph():
return graph
newgraph = networkx.DiGraph(**graph.graph)
edgeattrs = dict()
for edge, attrs in graph.edges.items():
key = edge[:2]
mergedattrs = edgeattrs.setdefault(key, dict())
# mergedattrs["links"] and attrs["links"]
# could be two sequences that need to be concatenated
dict_merge(mergedattrs, attrs, contatenate_sequences=True)
for name, attrs in graph.nodes.items():
newgraph.add_node(name, **attrs)
for (source_id, target_id), mergedattrs in edgeattrs.items():
newgraph.add_edge(source_id, target_id, **mergedattrs)
return newgraph