from collections import defaultdict from fractions import Fraction from math import prod def run(load,read,check): r=load('C286_DATA.json')['target_register'];ix=defaultdict(list) for i,z in enumerate(r):ix[z['center']].append(i) P=load('C450_DATA.json')['pivots'];rows=[];bases={'Noah birth':2841,'Noah death':1891,'Shem birth':2341,'Shem death':1741,'Flood start':2241,'Flood close':2240} for hit in load('PREVIOUS_DATA.json')['admitted_expansions']: inp=hit['input_pair'];out=hit['output_pair'];h=hit['second_pivot'];needed=sorted(set(inp+out+[h]));sources=[] for x in needed: zz=[] for i in ix[x]: z=r[i];terms=[bases[z['role']],650*(z['tradition']!='MT'),130*z['Cainan'],60*z['Terah60'],215*z['full430'],2*(z['gear']-1),-int(z.get('rail')=='companion')] check(f'source_{h}_{x}_{i}',sum(terms)==x);zz.append({'index':i,'record':z,'terms':terms}) sources.append({'coordinate':x,'records':zz}) coherent=[] for i in ix[out[0]]: for j in ix[out[1]]: a,b=r[i],r[j] if a['tradition']=='MT' and a['role']=='Shem death' and b['tradition'] in ['SP','LXX'] and b['role']=='Shem birth' and b.get('rail') in [None,'primary'] and all(a[k]==b[k] for k in ['gear','Cainan','Terah60','full430']):coherent.append([i,j]) check(f'coherent_output_{h}',len(coherent)==2 and out[1]-out[0]==600+650) ancestry=[] for p in P: y=[Fraction(23*x+2*p,25) for x in inp];integer=all(z.denominator==1 for z in y) check(f'inverse_mod25_{h}_{p}',integer==(inp[0]%25==p%25)) ancestry.append({'first_pivot':p,'input_residue_mod25':inp[0]%25,'pivot_residue_mod25':p%25,'integer':integer,'predecessor_pair':list(map(str,y)),'missing_integer_coordinates':[int(z) for z in y if z.denominator==1 and int(z) not in ix],'complete':integer and all(int(z) in ix for z in y)}) rows.append({'input_pair':inp,'output_pair':out,'pivot':h,'endpoint_changes':[y-x for x,y in zip(inp,out)],'source_cards':sources,'coherent_output_label_pairs':coherent,'full_distinct_coordinate_label_assignments':prod(len(ix[x]) for x in needed),'inverse_ancestry':ancestry}) equations=[{'case':'1955/3105','input_terms':[350,650,215,-60,-4,-1],'lower_change_terms':[-150],'upper_change_terms':[101,4,60,-215]},{'case':'2020/3170','input_terms':[500,650],'lower_change_terms':[-60,-4],'upper_change_terms':[100,-60,-4]},{'case':'2148/3298','input_terms':[500,650],'lower_change_terms':[-130,2],'upper_change_terms':[100,-130,2]}] for e,row in zip(equations,rows):check('role_equation_'+e['case'],sum(e['input_terms'])==1150 and [sum(e['lower_change_terms']),sum(e['upper_change_terms'])]==row['endpoint_changes']) return {'step':'C471','expansion_profiles':rows,'role_equations':equations,'common_output_gap':'600+650=1250 with matched MT Shem-death and SP-primary/LXX Shem-birth context.','counts':{'expansions':len(rows),'coherent_output_label_pairs':sum(len(x['coherent_output_label_pairs']) for x in rows),'complete_2K_ancestries':sum(a['complete'] for x in rows for a in x['inverse_ancestry'])}}