class_docstr: Discretizes a continuous action space into a discrete action space, allowing the usage of
  agents such as DQN for continuous environments such as MuJoCo. Given the number of bins to discretize into, the
  original continuous action space is uniformly separated into the given number of bins, each mapped to a discrete
  action index. Each discrete action is mapped to a single N dimensional action in the BoxActionSpace action space.
  For example, if the original actions space is between -1 and 1 and 5 bins were selected, the new action
  space will consist of 5 actions mapped to -1, -0.5, 0, 0.5 and 1.
code: def get_unfiltered_action_space(
      self, output_action_space: BoxActionSpace
  ) -> DiscreteActionSpace:
      if isinstance(self.num_bins_per_dimension, int):
          self.num_bins_per_dimension = (
              np.ones(output_action_space.shape).astype(int)
              * self.num_bins_per_dimension
          )
  
      bins = []
      for i in range(len(output_action_space.low)):
          dim_bins = np.linspace(
              output_action_space.low[i],
              output_action_space.high[i],
              self.num_bins_per_dimension[i],
          )
          if self.force_int_bins:
              dim_bins = dim_bins.astype(int)
          bins.append(dim_bins)
      self.target_actions = [
          list(action) for action in list(product(*bins))
      ]
  
      return super().get_unfiltered_action_space(output_action_space)
  
file_path: coach/rl_coach/filters/action/box_discretization.py
imports: from itertools import product
  from typing import Union, List
  import numpy
  from rl_coach.filters.action.partial_discrete_action_space_map import PartialDiscreteActionSpaceMap
  from rl_coach.spaces import BoxActionSpace, DiscreteActionSpace
label_desc: Use image node_id 3 for calling the BoxDiscretization obj's underlying member method code with example usage: obj.get_unfiltered_action_space(output_action_space) and returns: super