code: def available_actions(self, obs):
      
      available_actions = set()
      hide_specific_actions = self._agent_interface_format.hide_specific_actions
      for i, func in six.iteritems(actions.FUNCTIONS_AVAILABLE):
        if func.avail_fn(obs):
          available_actions.add(i)
      for a in obs.abilities:
        if a.ability_id not in actions.ABILITY_IDS:
          logging.warning("Unknown ability %s seen as available.", a.ability_id)
          continue
        for func in actions.ABILITY_IDS[a.ability_id]:
          if func.function_type in actions.POINT_REQUIRED_FUNCS[a.requires_point]:
            if func.general_id == 0 or not hide_specific_actions:
              available_actions.add(func.id)
            if func.general_id != 0:  # Always offer generic actions.
              for general_func in actions.ABILITY_IDS[func.general_id]:
                if general_func.function_type is func.function_type:
                  # Only the right type. Don't want to expose the general action
                  # to minimap if only the screen version is available.
                  available_actions.add(general_func.id)
                  break
      return list(available_actions)
docs: Return the list of available action ids.