from collections import defaultdict from itertools import product def run(load,read,check): r=load('C286_DATA.json')['target_register'];S={z['center'] for z in r};P=load('C450_DATA.json')['pivots'];ctx=['gear','Cainan','Terah60','full430'];triplets=[];typed500=[];typedminus1=[] def find(trad,role,rail,settings): got=[(i,z) for i,z in enumerate(r) if z['tradition']==trad and z['role']==role and z.get('rail')==rail and tuple(z[k] for k in ctx)==settings] assert len(got)==1 return got[0] for settings in product(range(1,4),range(2),range(2),range(2)): sd=find('MT','Shem death',None,settings);fs=find('MT','Flood start',None,settings);fc=find('MT','Flood close',None,settings);sb=find('SP','Shem birth','primary',settings);nb=find('SP','Noah birth','primary',settings);nc=find('SP','Noah birth','companion',settings) A=[sd[1]['center'],sb[1]['center']];C=[fs[1]['center'],nb[1]['center']];B=[fc[1]['center'],nc[1]['center']] check('triplet_'+str(settings),C==[x+500 for x in A] and B==[x-1 for x in C] and all(p[1]-p[0]==1250 for p in [A,B,C])) triplets.append({'context':dict(zip(ctx,settings)),'A_pair':A,'C_pair':C,'B_pair':B,'SP_record_pairs':{'A':[sd[0],sb[0]],'C':[fs[0],nb[0]],'B':[fc[0],nc[0]]}}) for trad,rail in [('SP','primary'),('LXX',None)]: a=find(trad,'Shem birth',rail,settings);b=find(trad,'Noah birth',rail,settings);check('typed500_'+trad+'_'+str(settings),b[1]['center']-a[1]['center']==500);typed500.append({'input_records':[sd[0],a[0]],'output_records':[fs[0],b[0]],'tradition_preserved':trad}) typedminus1.append({'input_records':[fs[0],nb[0]],'output_records':[fc[0],nc[0]],'lower_mechanism':'Flood start to close','upper_mechanism':'SP Noah primary to companion'}) translated=[] for h in load('C470_DATA.json')['admitted_expansions']: for d in [499,500]: inp=[x+d for x in h['input_pair']];out=[x+d for x in h['output_pair']];anchor=h['second_pivot']+d translated.append({'original_input':h['input_pair'],'original_output':h['output_pair'],'translation':d,'translated_input':inp,'translated_output':out,'required_translated_pivot':anchor,'input_membership':[x in S for x in inp],'output_membership':[x in S for x in out],'pivot_sourced':anchor in S,'pivot_in_fixed_menu':anchor in P,'complete_source_comparison':all(x in S for x in inp+out+[anchor])}) return {'step':'C473','context_triplets':triplets,'typed_plus500_maps':typed500,'typed_minus1_maps':typedminus1,'translated_E_tests':translated,'counts':{'matched_context_triplets':len(triplets),'typed_A_to_C_maps':len(typed500),'typed_SP_C_to_B_maps':len(typedminus1),'translated_E_tests':len(translated),'complete_translated_E_comparisons':sum(x['complete_source_comparison'] for x in translated)},'limits':'These are source correspondences, not new operators in the fixed E/reflection menu. A LXX Noah primary record does not acquire a LXX companion.'}