from itertools import product from collections import Counter def run(load,check): reg=load('C286_DATA.json')['target_register'];up=[i for i,r in enumerate(reg) if r['role']=='Flood start'];lo=[i for i,r in enumerate(reg) if r['role']=='Noah death'];trials=[];hits=[];patterns=Counter() for i,j in product(up,lo): a,z=reg[i],reg[j];terms={'role_difference':350,'tradition_baseline':650*(int(a['tradition']!='MT')-int(z['tradition']!='MT')),'Cainan':130*(a['Cainan']-z['Cainan']),'Terah':60*(a['Terah60']-z['Terah60']),'sojourn':215*(a['full430']-z['full430']),'Gear':2*(a['gear']-z['gear']),'lower_person_companion':int(z.get('rail')=='companion')};v=sum(terms.values());check('source equation '+str((i,j)),v==a['center']-z['center']);row={'upper_record_index':i,'lower_record_index':j,'difference':v,'two_K':v==1058};trials.append(row) if v==1058: hits.append({**row,'upper':a,'lower':z,'terms':terms});patterns[tuple(terms.values())]+=1 check('unfiltered census recovers C424', {(h['upper_record_index'],h['lower_record_index']) for h in hits}=={tuple(x['seed_record_indices']) for x in load('PREVIOUS_DATA.json')['cases']}) check('one forced source-difference pattern',patterns==Counter({(350,650,0,60,0,-2,0):16})) return {'step':'C425','all_pair_trials':trials,'hits':hits,'source_term_patterns':[{'terms':list(k),'labelled_cases':v} for k,v in patterns.items()],'equation':'1058 = 350 +650 +60 −2 =350 +708. Cainan and sojourn differences vanish; upper Gear is one below lower Gear; upper Terah60 ON and lower OFF.','counts':{'Flood_start_records':len(up),'Noah_death_records':len(lo),'unfiltered_labelled_trials':len(trials),'two_K_labelled_hits':len(hits),'distinct_source_term_patterns':len(patterns)},'interpretation':'Both SP and LXX have650 as the CainanOFF-normalized baseline relative to MT; their labels and native/theoretical Cainan statuses remain distinct. Shared Cainan and sojourn settings and the two adjacent-Gear positions explain the repeated cases. The350 role difference is source duration, not another fitted parameter.'}