from pathlib import Path
import sys,re,json,shutil
R=Path(__file__).resolve().parent;sys.path.insert(0,str(R.parent/'parity_metadata_closure_A22'));from prepare_candidates import forms
P=R/'board/led_driver.kicad_pcb';shutil.copy2(P,R/'before_spacing_repair.kicad_pcb');s=P.read_text();count=0
changes={'/LED_OE_N':{('x',80.9017):81.05,('y',50.9627):51.10},'/LED_K28':{('x',54.8017):54.75,('y',48.8217):48.75},'/LED_K13':{('y',57.1208):57.10},'/LED_K38':{('x',38.8502):38.8,('y',51.1076):51.15,('y',51.91):51.87,('y',54.3967):54.44},'/LED_RESET_N':{('x',71.1267):71.1867,('x',72.1196):72.1796,('y',55.3148):55.4648}}
for st,en,t in reversed(list(forms(s,'segment'))):
 net=re.search(r'\(net "([^"]+)"',t)[1]
 if net not in changes:continue
 def sub(m):
  global count
  x,y=float(m[2]),float(m[3]);xx=changes[net].get(('x',x),x);yy=changes[net].get(('y',y),y)
  if (xx,yy)!=(x,y):count+=1
  return '(%s %.6f %.6f)'%(m[1],xx,yy)
 t=re.sub(r'\((start|end) ([\d.-]+) ([\d.-]+)\)',sub,t);s=s[:st]+t+s[en:]
P.write_text(s);(R/'spacing_repair_log.json').write_text(json.dumps({'endpoint_edits':count,'native_drc_required':True},indent=2));print('Edited',count)
