import json,sys
from pathlib import Path
sys.path.insert(0,str(Path(__file__).resolve().parent))
from analyze import analyze
r=analyze(json.loads(Path(__file__).with_name('trials.json').read_text()));out={}
for kind in ['intent_class_final_v1','intent_class_reversal_v1']:
 aggregate={};ties=[]
 for run,labels in r[kind]['per_run'].items():
  for label,rows in labels.items():
   keys=[(x['win_percentage'],x['bradley_terry_score']) if kind.endswith('final_v1') else (x['effective_score'],x['robust_wins']) for x in rows]
   for i,x in enumerate(rows):
    positions=[j+1 for j,k in enumerate(keys) if k==keys[i]];mid=sum(positions)/len(positions);aggregate.setdefault(label,{}).setdefault(x['name'],[]).append(mid)
   if len(set(keys))<len(keys):ties.append({'run':run,'intent':label,'groups':[[rows[j]['name'] for j,k in enumerate(keys) if k==key] for key in dict.fromkeys(keys) if keys.count(key)>1]})
 out[kind]={'midrank_leaders':{label:[n for n,v in scores.items() if sum(v)/len(v)==min(sum(w)/len(w) for w in scores.values())] for label,scores in aggregate.items()},'tied_run_intents':ties,'scope':'Sensitivity calculation using tied primary numeric ranking keys with average ranks instead of alphabetical ordinal positions. This is an editorial reanalysis of retained outcomes, not new model runs.'}
print(json.dumps(out,indent=2))
