def maybe_load_evaluation()

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