from itertools import permutations,product from collections import defaultdict 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) C=[3188,3190,3248,3250];orders=[];complete=[] for cs in permutations(C): s,t=1,0 for c in cs:s,t=-s,2*c-t rows=[] for x in sorted(ix): path=[x] for c in cs:path.append(2*c-path[-1]) if all(y in ix for y in path): row={'centers':list(cs),'coordinates':path,'record_indices':[ix[y] for y in path],'return':path[-1]==x};rows.append(row);complete.append(row) check('affine_'+str(cs)+'_'+str(x),path[-1]==s*x+t) orders.append({'centers':list(cs),'slope':s,'intercept':t,'identity':s==1 and t==0,'complete_count':len(rows),'complete_inputs':[x['coordinates'][0] for x in rows]}) cycle=load('PREVIOUS_DATA.json')['simple_cycles'][0]['vertices'][:-1] assignments=list(product(*(ix[x] for x in cycle)));same=[] keys=['tradition','gear','Cainan','Terah60','full430','rail'] for aa in assignments: if len({tuple(r[i].get(k) for k in keys) for i in aa})==1:same.append(aa) return {'step':'C449','orders':orders,'complete_words':complete,'cycle_sources':[{'coordinate':x,'records':[{'index':i,**r[i]} for i in ix[x]]} for x in cycle],'cycle_record_assignments':[list(a) for a in assignments],'same_context_assignments':[list(a) for a in same],'counts':{'trials':24*len(ix),'identity_orders':sum(x['identity'] for x in orders),'complete_words':len(complete),'complete_returns':sum(x['return'] for x in complete),'cycle_label_assignments':len(assignments),'same_context_assignments':len(same)}}