import fitz, math, sys from trace import nets doc=fitz.open('Xiaomi_Mi_8_Schematic.pdf') def analyze(pgno, probes, radius=25): page=doc[pgno-1] segs,dsu,key,comp=nets(page) words=page.get_text('words') pts=[] for a,b in segs: pts.append((a,key(a))); pts.append((b,key(b))) for name,(px,py) in probes.items(): # nearest endpoint best=None for (p,k) in pts: dd=math.dist(p,(px,py)) if best is None or dd15: print(f'{name:8s} -> no wire (d={best[0]:.1f})'); continue root=dsu.find(best[2]) cpts=comp[root] labels=[] for x0,y0,x1,y1,t,*_ in words: cx,cy=(x0+x1)/2,(y0+y1)/2 dmin=min(math.dist((cx,cy),q) for q in cpts) if dmin<=radius: labels.append((round(dmin,1),t)) labels.sort() # keep informative tokens keep=[t for d,t in labels if len(t)>2 and not t.replace('.','').isdigit()] print(f'{name:8s} d={best[0]:.1f} comp_pts={len(cpts)} -> {keep[:14]}')