from fractions import Fraction as Q from itertools import product def run(load,check): pairs=load('C286_DATA.json')['source_pairs'];records={} for r in pairs: for role,c,i,v in [('Shem',r['Shem_Cainan'],r['Shem_index'],r['S']),('Flood',r['Flood_Cainan'],r['Flood_index'],r['F'])]:records[(role,c,i)]={'mode':'cumulative','tradition':'LXX','role':role,'Cainan':c,'annual_index':i,'coordinate':v,'regular_Gear':None} reg=list(records.values());check('32 frozen cumulative members',len(reg)==32) rows=[] for i in range(6): S=records['Shem',1,i+2];P=records['Shem',0,i+2];q=records['Flood',0,i] x=Q(S['coordinate'])+Q(25,23)*(P['coordinate']-S['coordinate']);y=x+Q(300,299)*(q['coordinate']-P['coordinate']) mx=[r for r in reg if r['coordinate']==x];my=[r for r in reg if r['coordinate']==y] check('joined cumulative geometry '+str(i),(P['coordinate']-S['coordinate'],q['coordinate']-P['coordinate'])==(460,598) and x-P['coordinate']==40 and y-q['coordinate']==42 and y-S['coordinate']==1100) check('no source internal or terminal '+str(i),not mx and not my) nearest_x=min(abs(Q(r['coordinate'])-x) for r in reg);nearest_y=min(abs(Q(r['coordinate'])-y) for r in reg) # Include the already permitted quarter components as a separate finite membership test. phase=[] for u in [-Q(1,4),Q(1,4)]: xp=x+u;yp=y+u;xp_hits=[r for r in reg for v in [-Q(1,4),Q(1,4)] if r['coordinate']+v==xp];yp_hits=[r for r in reg for v in [-Q(1,4),Q(1,4)] if r['coordinate']+v==yp] check('phase cannot supply source '+str(i)+str(u),not xp_hits and not yp_hits);phase.append({'offset':str(u),'internal_matches':xp_hits,'terminal_matches':yp_hits}) rows.append({'i':i,'S_ON':S,'P_OFF':P,'q_OFF':q,'generated_internal':str(x),'generated_terminal':str(y),'internal_matches':mx,'terminal_matches':my,'nearest_internal_distance':str(nearest_x),'nearest_terminal_distance':str(nearest_y),'phase_controls':phase,'C287_complete':i in [2,3,4,5]}) gaps=[b['coordinate']-a['coordinate'] for a in reg for b in reg if b['coordinate']>=a['coordinate']] check('no500 or1100 interval anywhere in32 member menu',500 not in gaps and 1100 not in gaps) for r in load('C351_DATA.json')['rows']: check('retained458600 repair '+str(r['i']),all(any(x==r[k] for x in reg) for k in ['S_ON','P_OFF','q_OFF','P_repaired_OFF','q_repaired_OFF']) and r['outer_preserving_parts']==[458,600]) return {'step':'C364','register':reg,'rows':rows,'counts':{'cumulative_members':32,'joined_candidates':6,'admitted_internal':0,'admitted_terminal':0,'phase_trials':12,'complete_C287_candidates':4},'no_500_or_1100_interval_in_register':True,'C351_retained':True,'interpretation':'The joined regular map has no source-qualified counterpart in this declared cumulative register. Required+40/+42 coordinates are diagnostics only. Existing458+600=1058 source repairs remain valid; Cainan stays460.'}