in src/python/phyre/eval_task_complexity.py [0:0]
def maybe_load_evaluation(template_id, mode=LoadingMode.FULL):
"""Loads evaluation file if up-to-date."""
task_path = str(phyre.settings.TASK_SCRIPTS_DIR / f'task{template_id}.py')
if not os.path.exists(task_path):
logging.warning('Rogue eval file for %s', template_id)
return None
if does_evaluation_need_update(task_path):
return None
with open(get_evaluation_meta_path(task_path)) as stream:
eval_data = json.load(stream)
eval_data.update(joblib.load(get_evaluation_path(task_path)))
if mode == LoadingMode.FULL:
solution_power = joblib.load(
phyre.compute_solution_power.get_solution_power_path(task_path))
else:
solution_power = None
if mode == LoadingMode.FULL:
needed_stats = STATS
elif mode == LoadingMode.FIRST_SOLUTION_ONLY:
needed_stats = ('solutions',)
else:
raise ValueError('Unknown loading mode: %s' % mode)
final_eval_data = {
stat: {tier: {} for tier in phyre.action_mappers.ACTION_MAPPERS
} for stat in STATS
}
for task, per_task_stats in eval_data['eval_stats'].items():
for tier, per_tier_stats in per_task_stats.items():
for stat_name, value in _clean_stats(per_tier_stats, tier).items():
final_eval_data[stat_name][tier][task] = value
if solution_power is not None:
for tier in phyre.action_mappers.ACTION_MAPPERS:
final_eval_data['solution_power'][tier][
'task_ids'] = solution_power['task_ids']
final_eval_data['solution_power'][tier][
'actions_on_tasks'] = solution_power[f'{tier}_actions_on_tasks']
final_eval_data = {k: final_eval_data[k] for k in needed_stats}
if mode == LoadingMode.FIRST_SOLUTION_ONLY:
for per_task_solution_list in final_eval_data['solutions'].values():
for solution_list in per_task_solution_list.values():
solution_list[:] = solution_list[:1]
return final_eval_data