def update_info()

in robogym/utils/multi_goal_tracker.py [0:0]


    def update_info(self, info: dict, goal_info: dict) -> dict:
        goal_type = goal_info.get("goal", {}).get("goal_type", "generic")

        unreachable_state_persists = (
            self._consecutive_steps_with_goal_unreachable
            >= self.max_steps_goal_unreachable
        )

        # Extract this here since self.reset_goal() changes the counter. This wrapper is crazy.
        info["consecutive_steps_with_success"] = self._consecutive_steps_with_success
        info["sub_goal_is_successful"] = self._sub_goal_is_successful
        info["sub_goal_type"] = goal_type
        info["steps_since_last_goal"] = self._steps_since_last_goal

        info["trial_success"] = self._trial_success
        info["goals_so_far"] = self._goals_so_far
        info["successes_so_far"] = self._successes_so_far
        info["successes_so_far_by_goal_type"] = self._successes_so_far_by_goal_type
        info["steps_by_goal_type"] = self._steps_by_goal_type
        info["env_crash"] = self._env_crash
        info["goal_terminally_unreachable"] = unreachable_state_persists

        info["steps_per_success"] = self._steps_per_success(
            self._steps, self._steps_since_last_goal, self._successes_so_far
        )
        info["steps_per_success_by_goal_type"] = {
            goal: self._steps_per_success(
                self._steps_by_goal_type[goal],
                int(goal_type == goal) * self._steps_since_last_goal,
                self._successes_so_far_by_goal_type[goal],
            )
            for goal in self._steps_by_goal_type
        }

        return info