in src/python/phyre/eval_task_complexity.py [0:0]
def _update_done_stats(self, task_id, action_tier):
"""Update a set of "done" tasks after new data for task_id and action_tier."""
key = (task_id, action_tier)
status_counts = self._state['stats_per_task_tier'][key]['status_counts']
valid_attempts = sum(
status_counts.values()) - status_counts[INVALID_INPUT]
if valid_attempts < self.min_valid_attempts:
return
flags = compute_flags(action_tier, status_counts)
if not ({Flags.GOOD, Flags.BAD} & flags):
return
if not ({Flags.GOOD_STABLE, Flags.BAD_STABLE} & flags):
return
num_solved = status_counts[UNSTABLY_SOLVED] + status_counts[
STABLY_SOLVED]
if Flags.GOOD in flags and num_solved < MIN_SOLUTIONS:
return
if (Flags.GOOD_STABLE in flags and
status_counts[STABLY_SOLVED] < MIN_SOLUTIONS):
return
self._state['done_task_tier'].add(key)
logging.info('Done simulation for %s. Stats: %s. Flags: %s', key,
status_counts, flags)
# If reject_ball_solvable, add task ids for ball solved task to
# done_task_tiers_reasons.
solved_by_ball = (action_tier == 'ball' and Flags.GOOD_STABLE in flags)
if self.reject_ball_solvable and solved_by_ball:
for tier in phyre.action_mappers.ACTION_MAPPERS:
tier_key = (task_id, tier)
if tier_key in self._state['done_task_tier']:
continue
logging.info(
'Removing %s. Solved by ball and reject_ball_solvable is'
' True', tier_key)
self._state['done_task_tier'].add(tier_key)