from fractions import Fraction as Q def run(load,check): prior=load('PREVIOUS_DATA.json');reg=prior['menus']['regular'];cum=prior['menus']['cumulative'];coords={p['coordinate'] for p in cum};rows=[] def spdeath(ids):return next(reg[k] for k in ids if reg[k]['tradition']=='SP' and reg[k]['role']=='Noah death' and reg[k]['Cainan']==reg[k]['Terah60']==reg[k]['full430']==1) def birth(d):return next(p for p in reg if p['tradition']=='SP' and p['role']=='Noah birth' and p['gear']==d['gear'] and p['rail']==d['rail'] and p['Cainan']==p['Terah60']==p['full430']==1) for r in prior['rows']: if r['field']!='regular':continue e=next(p for p in r['edges'] if p['operator']=='J' and p['signed_input_gap']==299);i=r['i'];d0=spdeath(e['source_record_indices']);d1=spdeath(e['target_record_indices']);b0=birth(d0);b1=birth(d1);A=r['J_pivot'];B=r['P_pivot'];C=next(x for x in load('C375_DATA.json')['rows'] if x['i']==i)['corner_sum_diagnostic'];x=d0['center'];y=d1['center'] check('one restored SP death family '+str(i),y-x==1 and b1['center']-b0['center']==1 and b0['center']-x==b1['center']-y==950) check('death J conversion '+str(i),A+Q(300,299)*(x-A)==y) image=A+Q(300,299)*(b0['center']-A) check('whole biography J obstruction '+str(i),image-b1['center']==Q(950,299) and image-y==Q(300,299)*950 and image!=b1['center']) check('whole biography translation '+str(i),b0['center']+1==b1['center'] and x+1==y) check('same P pivot cannot share edge '+str(i),x-B==-161 and B+Q(70,69)*(x-B)-y==-Q(10,3)) reflected=[C-x,C-y,C-b0['center'],C-b1['center']] check('no cumulative source counterpart '+str(i),all(v not in coords for v in reflected)) rows.append({'i':i,'MT_Flood_pivot':A,'SP_Flood_pivot':B,'source_death':d0,'target_death':d1,'source_birth':b0,'target_birth':b1,'source_coordinate_aliases':[reg[k] for k in e['source_record_indices']],'target_coordinate_aliases':[reg[k] for k in e['target_record_indices']],'J_birth_image':str(image),'birth_image_minus_source_target':str(image-b1['center']),'translation_preserves950':True,'P_image_minus_death_target':'-10/3','exchanged_cumulative_coordinates':reflected,'exchanged_coordinates_admitted':False}) check('four-edge sequence',[(r['source_death']['center'],r['target_death']['center']) for r in rows]==[(2946,2947),(2947,2948),(2948,2949),(2949,2950)]) check('same context across all source records',all(p['Cainan']==p['Terah60']==p['full430']==1 for r in rows for p in [r['source_death'],r['target_death'],r['source_birth'],r['target_birth']])) return {'step':'C377','rows':rows,'counts':{'J_only_death_edges':4,'source950_translation_lifts':4,'fixed_pivot_J_biography_lifts':0,'admitted_cumulative_reflections':0},'ancestry':'Restored SP CainanON/Terah60/full430 Noah family. Primary and SP-local companion members alternate, with Gear changes only at Noah/Flood. LXX death and endpoint Flood aliases remain distinct and do not create LXX person companions.','main_result':'The additional299→300 edges are coherent one-year SP Noah-death comparisons at changing MT Flood pivots. Translation by1 also carries their950-year birth/death pairs; the anchored J map does not. The existing P pivot and the cumulative source menu provide no corresponding extension.'}