from itertools import product def run(load,check): cum=load('C365_DATA.json')['cumulative_register'];by={} for i,r in enumerate(cum):by.setdefault(r['coordinate'],[]).append(i) ps=load('PREVIOUS_DATA.json')['five_station_comparison'];u,l=[x['stations'] for x in ps];pairs=[{'station':r,'upper':u[r],'lower':l[r]} for r in u];cs=[(i,j) for i,s in enumerate(cum) for j,f in enumerate(cum) if s['role']=='Shem' and f['role']=='Flood' and f['coordinate']-s['coordinate']==1058];joins=[];requirements=[] for p in pairs: rs=p['lower']-8993;rf=p['upper']-8993;requirements.append({**p,'required_cumulative_Shem':rs,'required_cumulative_Flood':rf,'Shem_source_indices':[i for i in by.get(rs,[]) if cum[i]['role']=='Shem'],'Flood_source_indices':[i for i in by.get(rf,[]) if cum[i]['role']=='Flood']}) for i,j in cs: s,f=cum[i]['coordinate'],cum[j]['coordinate'];g=[p['lower']-s,p['upper']-f];check('equal joined cross-spans '+str((p['station'],i,j)),g[0]==g[1]);joins.append({'pair':p,'cumulative_record_indices':[i,j],'cross_spans':g,'both_17K':g==[8993,8993]}) axes=[] for r in load('C287_DATA.json')['rows']: if r['i'] in [3,5]:axes.append({'original_i':r['i'],'C':r['Noah_required']+r['S']}) images=[] for a,p,side in product(axes,pairs,['upper','lower']): v=a['C']-p[side];images.append({'original_i':a['original_i'],'C':a['C'],'station':p['station'],'side':side,'input':p[side],'image':v,'cumulative_source_indices':by.get(v,[])}) check('only established exchange constants',[a['C'] for a in axes]==[-2639,-2635]) check('five established2K station pairs',len(pairs)==5 and all(p['upper']-p['lower']==1058 for p in pairs)) return {'step':'C419','station_pairs':pairs,'cumulative_2K_pairs':[{'Shem':cum[i],'Flood':cum[j],'indices':[i,j]} for i,j in cs],'join_trials':joins,'required_17K_sources':requirements,'fixed_exchange_images':images,'counts':{'regular_station_pairs':len(pairs),'cumulative_Shem_Flood_2K_pairs':len(cs),'joined_trials':len(joins),'two_17K_joins':sum(x['both_17K'] for x in joins),'fixed_exchange_slots':len(images),'sourced_fixed_exchange_images':sum(bool(x['cumulative_source_indices']) for x in images)},'interpretation':'Fixed source membership and fixed17K were tested. Required missing coordinates are diagnostics only and are not inserted. The two corner-exchange constants are inherited from originali3/i5; neither is promoted to a global axis. No new Mirror fit is searched.'}