skill
EDA Skillpack
Public Made by Adomby adom
All skills for all EDA capabilities across the Adom ecosystem.
main
from component_search import *
import sys
plans=json.load(open(sys.argv[1]));load(plans);out=[]
for p in plans:
if p.get('stage')=='kelvin' or p['net'] not in ['+VBAT','GND_OUT','/DRV_SHA','/DRV_SHB','/DRV_SHC']:
out.append(p);continue
a=masks(p['net'],1.0);narrow=[];wide=[]
for path in p['paths']:
z=path[0].get('layer','F.Cu') if isinstance(path[0],dict) else 'F.Cu'
pos=lambda v:(v['x'],v['y']) if isinstance(v,dict) else v
for u,v in zip(path,path[1:]):
aa,bb=pos(u),pos(v);newz=v.get('layer',z) if isinstance(v,dict) else z
if aa!=bb:
length=math.dist(aa,bb);num=max(2,math.ceil(length/.025)+1)
ok=length>=.6
for t in np.linspace(0,1,num):
x=aa[0]+(bb[0]-aa[0])*t;y=aa[1]+(bb[1]-aa[1])*t;i,j=ij(x,y)
if a[1 if z=='B.Cu' else 0,j,i]:ok=False;break
(wide if ok else narrow).append([dict(x=aa[0],y=aa[1],layer=z),list(bb)])
if z!=newz:narrow.append([dict(x=bb[0],y=bb[1],layer=z),dict(x=bb[0],y=bb[1],layer=newz)]);z=newz
for width,paths in [(.5,narrow),(1.,wide)]:
for i in range(0,len(paths),128):out.append(dict(net=p['net'],width=width,paths=paths[i:i+128]))
Path("live-routes.json").write_text(json.dumps(out,indent=2));print("commits",len(out),"wide paths",sum(len(p["paths"]) for p in out if p["width"]==1))