from itertools import combinations from fractions import Fraction def run(load,read,check): d=load('C450_DATA.json');lattices=[];kpairs=[] for h in d['pivots']: aa=sorted([a for a in d['arrows'] if a['pivot']==h],key=lambda a:a['input']);points=[] for a in aa: u=Fraction(a['input']-h,23);check(f'unit_{h}_{a["input"]}',u.denominator==1 and a['output']==h+25*u);points.append({'input':a['input'],'output':a['output'],'unit':int(u)}) for a,b in combinations(points,2): if (b['input']-a['input'])%529==0:kpairs.append({'pivot':h,'inputs':[a['input'],b['input']],'outputs':[a['output'],b['output']],'unit_difference':b['unit']-a['unit']}) lattices.append({'pivot':h,'points':points}) first=[p for p in kpairs if p['pivot']==3620];check('two seed rows',len(first)==2) a,b=first;input_delta=[y-x for x,y in zip(a['inputs'],b['inputs'])];output_delta=[y-x for x,y in zip(a['outputs'],b['outputs'])] check('translated rectangle',input_delta==[253,253] and output_delta==[275,275]);check('translation expansion',253*25==275*23) equations=[{'route':'MTNoah death to MTShem death','terms':[-150,130,60,215,-2],'value':253},{'route':'SP/LXX-OFF Flood start to Shem birth','terms':[100,215,-60,-2],'value':253},{'route':'common output translation','terms':[215,60],'value':275}] for e in equations:check(e['route'],sum(e['terms'])==e['value']) return {'step':'C459','pivot_lattices':lattices,'K_input_pair_images':kpairs,'rectangle':{'input_rows':[p['inputs'] for p in first],'output_rows':[p['outputs'] for p in first],'input_row_separation':253,'output_row_separation':275,'input_unit_dimensions':[46,11],'output_unit_dimensions':[46,11]},'source_translation_equations':equations,'counts':{'pivot_lattices':len(lattices),'K_pair_images':len(kpairs),'pivots_supporting_K_pairs':len({p['pivot'] for p in kpairs})}}