from pathlib import Path
import pandas as pd,numpy as np,json
R=Path(__file__).resolve().parent
d=pd.read_parquet(R/'observations.parquet');assert len(d)==480
parts=[]
for i,(name,a) in enumerate(d.groupby('share_bin',sort=True)):
    target=16 if name=='<=10%' else 8
    x=a.sort_values('appid').sample(n=min(target,len(a)),random_state=76070+i).copy();x['profile_selection_pool_n']=len(a);parts.append(x)
p=pd.concat(parts).sort_values(['share_bin','appid']);p.to_parquet(R/'profile_sample.parquet',index=False)
p[['appid','name','share_bin','english_count','total','english_support','profile_selection_pool_n']].to_csv(R/'profile_sample.csv',index=False)
langs=['all','english','schinese','tchinese','russian','japanese','koreana','brazilian','spanish','latam','german','french']
spec={'selection':'16 uniformly sampled within <=10% English share, eight each within 10-50% and >50%; or all if fewer. Diagnostic profiles, not language-market prevalence estimates.','n':len(p),'languages':langs,'planned_max_summary_calls_before_cache':len(p)*len(langs),'seed_base':76070,'residual':'All other languages retained as an explicit remainder; do not normalize measured languages to sum to 100%.'}
(R/'profile_spec.json').write_text(json.dumps(spec,indent=2));print(json.dumps(spec,indent=2))
