class_docstr: An output filter is a module that filters the output from an agent to the environment.
class_docstr_tok: ["An","output","filter","is","a","module","that","filters","the","output","from","an","agent","to","the","environment","."]
docstr: A wrapper around _reverse_filter which first copies the action_info so that we don't change the original one
  This function should not be updated!
  :param action_info: the input action_info
  :return: the filtered action_info
code: def reverse_filter(self, action_info: ActionInfo) -> ActionInfo:
      """
      A wrapper around _reverse_filter which first copies the action_info so that we don't change the original one
      This function should not be updated!
      :param action_info: the input action_info
      :return: the filtered action_info
      """
      if self.i_am_a_reference_filter:
          raise Exception(
              "The filter being used is a reference filter. It is not to be used directly. "
              "Instead get a duplicate from it by calling __call__."
          )
      filtered_action_info = copy.deepcopy(action_info)
      filtered_action = filtered_action_info.action
      for filter in self.action_filters.values():
          filter.validate_output_action(filtered_action)
          filtered_action = filter.reverse_filter(filtered_action)
  
      filtered_action_info.action = filtered_action
  
      return filtered_action_info
  
imports: import copy
  import os
  from collections import OrderedDict
  from copy import deepcopy
  from typing import Dict, Union, List
  from rl_coach.core_types import EnvResponse, ActionInfo, Transition
  from rl_coach.spaces import ActionSpace, RewardSpace, ObservationSpace
  from rl_coach.utils import force_list
label_desc: Use image node_id 6 for calling the OutputFilter obj's underlying member method code with example usage: obj.reverse_filter(action_info) and returns: filtered_action_info