import json
import platform
from pathlib import Path
import networkx as nx
import numpy as np
def make_graph(name, n, edges):
g = nx.DiGraph()
g.add_nodes_from(range(n))
g.add_edges_from(edges)
bc = nx.betweenness_centrality(g, normalized=True, endpoints=False)
scores = [bc[i] for i in range(n)]
return {
"name": name,
"n": n,
"edges": [[int(u), int(v)] for (u, v) in edges],
"expected": {"betweenness": scores},
}
cases = []
cases.append(make_graph("path_5", 5, [(0, 1), (1, 2), (2, 3), (3, 4)]))
cases.append(
make_graph(
"diamond_6",
6,
[(0, 1), (0, 2), (1, 3), (2, 3), (3, 4), (4, 5)],
)
)
rng = np.random.default_rng(20260702)
n = 15
p = 0.25
dag_edges = []
for u in range(n):
for v in range(u + 1, n):
if rng.random() < p:
dag_edges.append((u, v))
cases.append(make_graph("random_dag_15", n, dag_edges))
fixture = {
"provenance": {
"generator": "gen_graphops_betweenness.py",
"library": "networkx",
"networkx_version": nx.__version__,
"numpy_version": np.__version__,
"python": platform.python_version(),
"seed": 20260702,
"note": "networkx betweenness_centrality(normalized=True, endpoints=False) on DiGraphs; exact rational, f64 floor.",
},
"cases": cases,
}
out = Path(__file__).parent / "graphops_betweenness.json"
out.write_text(json.dumps(fixture, indent=2) + "\n")
for c in cases:
scores = c["expected"]["betweenness"]
print(
f"{c['name']:16s} n={c['n']:2d} edges={len(c['edges']):3d} "
f"betweenness={[f'{v:.5f}' for v in scores]}"
)
print(f"wrote {out}")