File size: 790 Bytes
b7556e4 7c64f21 b7556e4 7c64f21 7808af5 7c64f21 b7556e4 7c64f21 08a3e96 7c64f21 08a3e96 7c64f21 08a3e96 7c64f21 08a3e96 b7556e4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# mcp/graph_metrics.py
from typing import List, Dict, Tuple
import networkx as nx
def _edge_endpoints(e: Dict) -> Tuple[str,str] | None:
src = e.get("source") or e.get("from")
dst = e.get("target") or e.get("to")
return (src,dst) if src and dst else None
def build_nx(nodes: List[Dict], edges: List[Dict]) -> nx.Graph:
G = nx.Graph()
for n in nodes:
nid = n.get("id")
if nid:
G.add_node(nid, label=n.get("label", nid))
for e in edges:
pts = _edge_endpoints(e)
if pts:
G.add_edge(*pts)
return G
def get_top_hubs(G: nx.Graph, k: int = 5):
dc = nx.degree_centrality(G)
return sorted(dc.items(), key=lambda x: x[1], reverse=True)[:k]
def get_density(G: nx.Graph) -> float:
return nx.density(G)
|