mirror of
https://github.com/Aider-AI/aider.git
synced 2025-05-29 08:44:59 +00:00
use networkx exclusively to maintain the graph structure
This commit is contained in:
parent
b88dc7828c
commit
c46e8daa32
1 changed files with 11 additions and 23 deletions
|
@ -312,31 +312,20 @@ def call_map():
|
||||||
|
|
||||||
idents = set(defines.keys()).intersection(set(references.keys()))
|
idents = set(defines.keys()).intersection(set(references.keys()))
|
||||||
|
|
||||||
dot = graphviz.Digraph(graph_attr={"ratio": ".5"})
|
G = nx.MultiDiGraph()
|
||||||
|
|
||||||
labels = defaultdict(list)
|
|
||||||
edges = defaultdict(float)
|
|
||||||
for ident in idents:
|
for ident in idents:
|
||||||
defs = defines[ident]
|
definers = defines[ident]
|
||||||
num_defs = len(defs)
|
num_defs = len(definers)
|
||||||
if num_defs > 3:
|
if num_defs > 3:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
for referencer, num_refs in Counter(references[ident]).items():
|
for referencer, num_refs in Counter(references[ident]).items():
|
||||||
for definer in defines[ident]:
|
for definer in definers:
|
||||||
if referencer == definer:
|
if referencer == definer:
|
||||||
continue
|
continue
|
||||||
# tuple(sorted([referencer, definer]))
|
weight = num_refs / num_defs
|
||||||
name = referencer, definer
|
G.add_edge(referencer, definer, weight=num_refs, label=ident)
|
||||||
edges[name] += num_refs
|
|
||||||
labels[name].append((num_refs, ident))
|
|
||||||
|
|
||||||
G = nx.DiGraph()
|
|
||||||
|
|
||||||
for edge, weight in edges.items():
|
|
||||||
refs, defs = edge
|
|
||||||
G.add_edge(refs, defs, weight=weight)
|
|
||||||
G.add_edge(defs, refs, weight=weight)
|
|
||||||
|
|
||||||
# personalization = dict()
|
# personalization = dict()
|
||||||
# personalization["utils.py"] = 1.0
|
# personalization["utils.py"] = 1.0
|
||||||
|
@ -364,6 +353,8 @@ def call_map():
|
||||||
G.remove_nodes_from(list(nx.isolates(G)))
|
G.remove_nodes_from(list(nx.isolates(G)))
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
dot = graphviz.Digraph(graph_attr={"ratio": ".5"})
|
||||||
|
|
||||||
max_rank = max(ranked.values())
|
max_rank = max(ranked.values())
|
||||||
min_rank = min(ranked.values())
|
min_rank = min(ranked.values())
|
||||||
for fname in G.nodes():
|
for fname in G.nodes():
|
||||||
|
@ -377,19 +368,16 @@ def call_map():
|
||||||
fname, penwidth=str(pen), width=str(size), height=str(size), fontsize=str(fontsize)
|
fname, penwidth=str(pen), width=str(size), height=str(size), fontsize=str(fontsize)
|
||||||
)
|
)
|
||||||
|
|
||||||
max_w = max(edges.values())
|
|
||||||
for refs, defs, data in G.edges(data=True):
|
for refs, defs, data in G.edges(data=True):
|
||||||
weight = data["weight"]
|
weight = data["weight"]
|
||||||
|
label = data["label"]
|
||||||
|
|
||||||
r = random.randint(0, 128)
|
r = random.randint(0, 128)
|
||||||
g = random.randint(0, 128)
|
g = random.randint(0, 128)
|
||||||
b = random.randint(0, 128)
|
b = random.randint(0, 128)
|
||||||
color = f"#{r:02x}{g:02x}{b:02x}80"
|
color = f"#{r:02x}{g:02x}{b:02x}80"
|
||||||
weight = weight * 10 / max_w
|
weight = weight * 2
|
||||||
label = labels[(refs, defs)]
|
dot.edge(refs, defs, penwidth=str(weight), color=color, fontcolor=color, label=label)
|
||||||
label = sorted(label, reverse=True)
|
|
||||||
label = " ".join(ident for cnt, ident in label[:5])
|
|
||||||
dot.edge(refs, defs, penwidth=str(weight), color=color, label=label, fontcolor=color)
|
|
||||||
|
|
||||||
top_rank = sorted([(rank, node) for (node, rank) in ranked.items()], reverse=True)
|
top_rank = sorted([(rank, node) for (node, rank) in ranked.items()], reverse=True)
|
||||||
# Print the PageRank of each node
|
# Print the PageRank of each node
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue