import sys;sys.path.insert(0,'/opt/crew/work/analyst2/it25')
from base import *
import re,statistics as S
nm={r[0]:r[1] for r in sqlite3.connect('/opt/crew/work/analyst2/it24/names.db').execute('select * from names')}
info={}
for o in O:
    sw=o['sw']
    if len(sw)<2: continue
    p0=price(sw[0]); pk=max(price(r) for r in sw)/p0
    t=tok.get(o['p']); n=nm.get(t)
    info[o['p']]=dict(t0=o['t0'],pk=pk,name=n,o=o,pt=o['pt'])
STOP=set('the of and coin token inu ai on in a to for my'.split())
def words(n): return {w for w in re.findall(r'[a-z0-9]+',(n or'').lower()) if len(w)>=3 and w not in STOP}
print('pools',len(info),'named',sum(1 for v in info.values() if v['name']))
byf={r['p']:r for r in rows}
span=(min(v['t0'] for v in info.values()),max(v['t0'] for v in info.values()))
print('days',(span[1]-span[0])/86400)
for TH in (5,10,20):
    run=[(v['t0'],words(v['name']),p) for p,v in info.items() if v['pk']>=TH and v['name']]
    print('runner thresh',TH,'n runners',len(run))
    for kind in ('word','any'):
        beta=[];other=[]
        for p,r in byf.items():
            v=info.get(p)
            if not v or not v['name']: continue
            w=words(v['name']);t=v['t0']
            hit=any(p!=q and 0<t-rt<=86400 and (kind=='any' or (w&rw)) for rt,rw,q in run)
            (beta if hit else other).append(r)
        for fam_ in ('A1','H3000u'):
            b=[r for r in beta if r['f']==fam_];c=[r for r in other if r['f']==fam_]
            f=lambda L:(len(L),round(S.mean([r['y'] for r in L]),2) if L else None,round(sum(r['y']==0 for r in L)/len(L),2) if L else None,round(sum(info[r['p']]['pk']>=3 for r in L)/len(L),2) if L else None)
            print(' ',kind,fam_,'beta(n,mean,zero,pk3)',f(b),'rest',f(c))
