-
# Imports
from basepair.imports import *
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
hv.extension('bokeh')
import wandb
api = wandb.Api()
runs = api.runs("avsec/basepair")
runs = [r for r in runs if r.state =='finished']
tasks = ['Oct4', 'Sox2', 'Nanog', 'Klf4']
from basepair.utils import unflatten
def average_profile(pe):
tasks = list(pe)
binsizes = list(pe[tasks[0]])
return {binsize: mean([pe[task][binsize]['auprc'] for task in tasks])
for binsize in binsizes}
def average_counts(pe):
tasks = list(pe)
metrics = list(pe[tasks[0]])
return {metric: mean([pe[task][metric] for task in tasks])
for metric in metrics}
def prefix_dict(d, prefix):
return {prefix + k:v for k,v in d.items()}
runs = api.runs("avsec/basepair")
runs = [r for r in runs if r.state =='finished']
# swap avg and profile
for r in runs:
e = unflatten(dict(r.summary), separator='/')
if 'eval' not in e:
continue
for dataset in e['eval']:
if 'avg' in e['eval'][dataset]:
continue
if 'counts' in e['eval'][dataset]:
add_dict = prefix_dict(e['eval'][dataset]['counts']['avg'], f'eval/{dataset}/avg/counts/')
r.summary.update(add_dict)
if 'profile' in e['eval'][dataset]:
add_dict = prefix_dict(e['eval'][dataset]['profile']['avg'], f'eval/{dataset}/avg/profile/')
r.summary.update(add_dict)
# swap avg and profile
for r in runs:
e = unflatten(dict(r.summary), separator='/')
if 'eval' not in e:
continue
for dataset in e['eval']:
try:
if 'profile' in e['eval'][dataset]:
add_dict = {f"eval/{dataset}/avg/profile/binsize=1/auprc": e['eval'][dataset]['profile']['avg']['binsize=1']}
# add_dict = prefix_dict(e['eval'][dataset]['profile']['avg'], f'eval/{dataset}/avg/profile/')
r.summary.update(add_dict)
except:
pass
for r in runs:
e = unflatten(dict(r.summary), separator='/')
for dataset in e['eval']:
if 'avg' in e['eval'][dataset]['counts']:
continue
if 'counts' in e['eval'][dataset]:
add_dict = average_counts(e['eval'][dataset]['counts'])
add_dict = prefix_dict(add_dict, f'eval/{dataset}/counts/avg/')
r.summary.update(add_dict)
if 'profile' in e['eval'][dataset]:
add_dict = average_profile(e['eval'][dataset]['profile'])
add_dict = prefix_dict(add_dict, f'eval/{dataset}/profile/avg/')
r.summary.update(add_dict)
average_counts(e['eval']['train-peaks']['counts'])
average_profile(e['eval']['train-peaks']['profile'])
e = unflatten(dict(runs[0].summary), separator='/')
runs[0].summary
'eval/train-peaks/profile/Oct4/binsize=10/n_positives'
runs