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.
docstr: :param num_bins_per_dimension: The number of bins to use for each dimension of the target action space.
                                 The bins will be spread out uniformly over this space
  :param force_int_bins: force the bins to represent only integer actions. for example, if the action space is in
                         the range 0-10 and there are 5 bins, then the bins will be placed at 0, 2, 5, 7, 10,
                         instead of 0, 2.5, 5, 7.5, 10.
code: def __init__(
      self,
      num_bins_per_dimension: Union[int, List[int]],
      force_int_bins=False,
  ):
      """
      :param num_bins_per_dimension: The number of bins to use for each dimension of the target action space.
                                     The bins will be spread out uniformly over this space
      :param force_int_bins: force the bins to represent only integer actions. for example, if the action space is in
                             the range 0-10 and there are 5 bins, then the bins will be placed at 0, 2, 5, 7, 10,
                             instead of 0, 2.5, 5, 7.5, 10.
      """
      # we allow specifying either a single number for all dimensions, or a single number per dimension in the target
      # action space
      self.num_bins_per_dimension = num_bins_per_dimension
      self.force_int_bins = force_int_bins
      super().__init__()
  
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 1 to create a new BoxDiscretization object from inherited base classes: PartialDiscreteActionSpaceMap with example: obj = BoxDiscretization(num_bins_per_dimension, force_int_bins)