"""Fjern kurver som ingen markør-rute bruger, og omnummerér nye noder fortløbende.""" import sys, json, re, collections sys.path.insert(0, __file__.rsplit("/", 1)[0]) import adfix from adsmooth import read, write from adroutes import transit, dijkstra src, dst, n0 = sys.argv[1], sys.argv[2], int(sys.argv[3]) logs = sys.argv[4:] doc = read(src); N = doc["N"] mks = [m for m in adfix.markers(doc) if m in N] T = transit(N); used = collections.Counter() for st in mks: best, pre = dijkstra(N, T, st) for tg in mks: if tg != st and tg in best: for x in adfix.node_path(best, pre, tg): if x > n0: used[x] += 1 drop = set() for lp in logs: for p in json.load(open(lp))["plans"]: inner = p["nodes"][1:-1] if inner and not any(used[x] for x in inner): drop.update(inner) for i in drop: del N[i] for n in N.values(): n["out"] = [o for o in n["out"] if o not in drop] n["inc"] = [o for o in n["inc"] if o not in drop] old_new = sorted(i for i in N if i > n0) remap = {o: n0 + 1 + k for k, o in enumerate(old_new)} f = lambda i: remap.get(i, i) doc["N"] = {f(i): dict(n, out=[f(o) for o in n["out"]], inc=[f(o) for o in n["inc"]]) for i, n in N.items()} write(doc, dst) print(f"fjernet {len(drop)} ubrugte kurvenoder; noder nu {len(doc['N'])} (nye: {len(doc['N']) - n0})")