          for :attr:`var`
      min_max: tuple (`int`, `int`)
          The (``min``, ``max``) values that this slider accepts
      """
      if d_type == float:
          var.set(round(float(value), round_to))
      else:
          steps = range(min_max[0], min_max[1] + round_to, round_to)
          value = min(steps, key=lambda x: abs(x - int(float(value))))
          var.set(value)
 
</s> remove     round_to: int
        If :attr:`dtype` is :class:`float` then this is the decimal place rounding for :attr:`var`.
        If :attr:`dtype` is :class:`int` then this is the number of steps between each increment
        for :attr:`var`
 </s> add     round_to: int or list
        If :attr:`d_type` is :class:`float` then this is the decimal place rounding for
        :attr:`var`. If :attr:`d_type` is :class:`int` then this is the number of steps between
        each increment for :attr:`var`. If a list is provided, then this must be a list of
        discreet values that are of the correct :attr:`d_type`. </s> remove             print_fn = lambda x: logger.verbose("%s", x)  # print to logger
 </s> add             # print to logger
            print_fn = lambda x: logger.verbose("%s", x)  # noqa </s> remove         min_max:   [partial] For <class 'int'> and <class 'float'> datatypes this is required
 </s> add         min_max:   [partial] For <class 'int'> and <class 'float'> data types this is required </s> remove         rounding:  [partial] For <class 'int'> and <class 'float'> datatypes this is
 </s> add         rounding:  [partial] For <class 'int'> and <class 'float'> data types this is
    if isinstance(round_to, list):
        # Lock to nearest item
        var.set(min(round_to, key=lambda x: abs(x-float(value))))
    elif d_type == float:
          for :attr:`var`
      min_max: tuple (`int`, `int`)
          The (``min``, ``max``) values that this slider accepts
      """
    if isinstance(round_to, list):
        # Lock to nearest item
        var.set(min(round_to, key=lambda x: abs(x-float(value))))
    elif d_type == float:
          var.set(round(float(value), round_to))
      else:
          steps = range(min_max[0], min_max[1] + round_to, round_to)
          value = min(steps, key=lambda x: abs(x - int(float(value))))
          var.set(value)
keep keep keep keep replace keep keep keep keep keep
 Training updates:
  - Expose optimizer epsilon param
  - Add NaN protection
GUI - slider - add support for discreet values 
lib/gui/control_helper.py