"""LT1 · 31 · cotejo impl1 (DuckDB) frente a impl2 (pandas) (DEFINICIONES_PREVIAS §6).""" import json, math V1 = json.load(open('/w/interno/impl1_celdas.json')); V2 = json.load(open('/w/interno/impl2_celdas.json')) E1 = {f"{r['norma']}|{r['serie']}|{r['grupo']}": r for r in json.load(open('/w/salidas/20_eventos.json')) if 'POSTERIOR' not in r.get('nota', '')} E2 = json.load(open('/w/salidas/30_impl2.json')) out = {'celdas': {}, 'puntuales': {}} tot = ig = 0 for k in V2: for arm in V2[k]: a1, a2 = V1[k][arm], V2[k][arm] orgs = set(a1) | set(a2); dif = 0 for o in orgs: tot += 1 if o in a1 and o in a2 and all(abs(x - y) < 1e-6 for x, y in zip(a1[o][0] + a1[o][1], a2[o][0] + a2[o][1])): ig += 1 else: dif += 1 out['celdas'][f'{k}|{arm}'] = dict(organos_impl1=len(a1), organos_impl2=len(a2), organos_con_diferencias=dif) for k, r2 in E2.items(): r1 = E1[k]; K1 = r1['K'] def ok(a, b): return abs(a - b) <= 0.005 or abs(a - b) <= 0.005 * abs(a) out['puntuales'][k] = dict(delta_impl1=r1['delta'], delta_impl2=r2['delta'], K_impl1=K1, K_impl2=r2['K'], n_T=(r1['n_org_T'], r2['n_T']), coincide=ok(r1['delta'], r2['delta']) and ok(K1, r2['K']) and r1['n_org_T'] == r2['n_T']) out['organo_ventana_iguales'] = f'{ig}/{tot}'; out['pct'] = 100 * ig / tot out['veredicto'] = 'PASA' if ig / tot >= 0.995 and all(v['coincide'] for v in out['puntuales'].values()) else 'NO PASA' json.dump(out, open('/w/salidas/31_cotejo_impl2.json', 'w'), indent=1, ensure_ascii=False) print(json.dumps(out, indent=1, ensure_ascii=False))