cleap up edge logic

This commit is contained in:
Paul Gauthier 2023-05-26 18:37:59 -07:00
parent 9e40898226
commit f46feda846

View file

@ -4,7 +4,7 @@ import sys
import subprocess import subprocess
import tiktoken import tiktoken
import tempfile import tempfile
from collections import defaultdict from collections import defaultdict, Counter
from aider import prompts, utils from aider import prompts, utils
from aider.dump import dump from aider.dump import dump
@ -241,9 +241,6 @@ def call_map():
# dump("ref", fname, ident) # dump("ref", fname, ident)
references[ident].append(show_fname) references[ident].append(show_fname)
for ident, fname in defines.items():
dump(fname, ident)
idents = set(defines.keys()).intersection(set(references.keys())) idents = set(defines.keys()).intersection(set(references.keys()))
dot = graphviz.Graph() dot = graphviz.Graph()
@ -253,20 +250,22 @@ def call_map():
for ident in idents: for ident in idents:
defs = defines[ident] defs = defines[ident]
num_defs = len(defs) num_defs = len(defs)
if num_defs > 1: # if num_defs > 1:
continue # continue
for refs in references[ident]: for referencer, num_refs in Counter(references[ident]).items():
for defs in defines[ident]: dump(referencer, ident, num_refs)
if refs == defs: for definer in defines[ident]:
if referencer == definer:
continue continue
name = tuple(sorted([refs, defs])) # tuple(sorted([referencer, definer]))
edges[name] += 1 / num_defs name = referencer, definer
edges[name] += num_refs / num_defs
labels[name].append(ident) labels[name].append(ident)
import networkx as nx import networkx as nx
G = nx.Graph() G = nx.DiGraph()
for edge, weight in edges.items(): for edge, weight in edges.items():
refs, defs = edge refs, defs = edge
@ -280,9 +279,7 @@ def call_map():
] ]
G.remove_edges_from(edges_to_remove) G.remove_edges_from(edges_to_remove)
# Remove isolated nodes (nodes with no edges) # Remove isolated nodes (nodes with no edges)
dump(G.nodes())
G.remove_nodes_from(list(nx.isolates(G))) G.remove_nodes_from(list(nx.isolates(G)))
dump(G.nodes())
max_rank = max(ranked.values()) max_rank = max(ranked.values())
min_rank = min(ranked.values()) min_rank = min(ranked.values())