from collections import defaultdict,Counter from itertools import product def run(load,read,check): r=load('C286_DATA.json')['target_register'];ix=defaultdict(list) for i,z in enumerate(r):ix[z['center']].append(i) X=sorted(ix);C=[3188,3190,3248,3250];trials=[];paths=[];groups=[] for a,b in product(C,repeat=2): good=[];endonly=[] for x in X: m=2*a-x;y=2*b-m check(f'affine_{a}_{b}_{x}',y==x+2*(b-a)) row={'first_center':a,'second_center':b,'input':x,'intermediate':m,'output':y,'shift':y-x,'input_indices':ix[x],'intermediate_indices':ix.get(m,[]),'output_indices':ix.get(y,[]),'complete':m in ix and y in ix} trials.append(row) if row['complete']:paths.append(row);good.append(x) elif y in ix:endonly.append(x) groups.append({'first_center':a,'second_center':b,'shift':2*(b-a),'complete_inputs':good,'complete_count':len(good),'endpoint_only_inputs':endonly,'endpoint_only_count':len(endonly)}) check('trials',len(trials)==5968) return {'step':'C445','register_coordinates':X,'centers':C,'all_trials':trials,'complete_paths':paths,'ordered_pair_summary':groups,'counts':{'trials':len(trials),'complete':len(paths),'nonidentity_complete':sum(p['shift']!=0 for p in paths),'by_shift':dict(sorted(Counter(p['shift'] for p in paths).items()))},'limits':'Every label remains a source-register index; coordinate paths do not identify events or contexts.'}