def load_evaluation_data()

in src/python/phyre/viz_server/handler.py [0:0]


    def load_evaluation_data(self, task_id_pattern):
        known_task_ids = frozenset(self.task_cache)

        tasks_in_templates = collections.Counter(
            [task_id.split(':')[0] for task_id in known_task_ids])

        all_data = {}
        solved_in_template = collections.defaultdict(collections.Counter)
        for template_stats in self.eval_stats.values():
            for tier, tier_data in template_stats['flags'].items():
                for task_id, flags in tier_data.items():
                    if task_id not in known_task_ids:
                        continue
                    if Flags.GOOD_STABLE in flags:
                        solved_in_template[task_id.split(':')[0]][tier] += 1
                    if task_id not in all_data:
                        all_data[task_id] = eval_stats_to_thrift(
                            template_stats, task_id)

        for template_id, counts in solved_in_template.items():
            num_tasks = sum(
                task_id.startswith(template_id) for task_id in known_task_ids)

            def to_percent(x):
                return int(x * 100 / num_tasks)

            all_data[template_id + ':'] = task_if.EvalData(
                percent_ball=to_percent(counts['ball']),
                percent_two_balls=to_percent(counts['two_balls']),
                percent_ramp=to_percent(counts['ramp']),
                num_tasks=tasks_in_templates[template_id],
            )
        if task_id_pattern:
            all_data = {
                k: v
                for k, v in all_data.items()
                if k.startswith(task_id_pattern)
            }
        else:
            all_data = {k: v for k, v in all_data.items() if k.endswith(':')}
        return all_data