import sys, os, importlib.util here = os.path.dirname(os.path.abspath(__file__)) sp = importlib.util.spec_from_file_location('p3lib', os.path.join(here, 'p3lib.py')); L = importlib.util.module_from_spec(sp); sp.loader.exec_module(L) def read(path): fields = None for line in open(path, errors='replace'): line = line.rstrip('\n') if line.startswith('#fields'): fields = line.split('\t')[1:]; continue if line.startswith('#') or not line: continue yield dict(zip(fields, line.split('\t'))) for path in sys.argv[1:]: pairs = [(r['id.orig_h'], r['query']) for r in read(path) if r.get('query') not in (None, '-', '')] g = L.groups_from(pairs); f = L.features(g) top = sorted(f.items(), key=lambda kv: -kv[1]['U'])[:6] print(f"== {path}: queries={len(pairs)} groups={len(f)}") for k, v in top: print(f" {k} U={v['U']} H={v['H']:.2f} JSD={v['JSD']:.3f} meanlen={v['L']:.1f} maxlabel={v['maxlab']}") hj = sorted(f.items(), key=lambda kv: -kv[1]['JSD'])[:3] for k, v in hj: print(f" topJSD {k} U={v['U']} H={v['H']:.2f} JSD={v['JSD']:.3f} meanlen={v['L']:.1f}")