code: def _validate_bounds(self, proposal):
      trait = proposal["trait"]
      new = proposal["value"]
      if trait.name == "min" and new > self.max:
          raise TraitError("setting min > max")
      if trait.name == "max" and new < self.min:
          raise TraitError("setting max < min")
      if trait.name == "min":
          self.value = (
              max(new, self.value[0]),
              max(new, self.value[1]),
          )
      if trait.name == "max":
          self.value = (
              min(new, self.value[0]),
              min(new, self.value[1]),
          )
      return new
  
imports: from traitlets import Instance, Unicode, CFloat, Bool, CaselessStrEnum, Tuple, TraitError, validate, default
  from .widget_description import DescriptionWidget
  from .trait_types import InstanceDict, NumberFormat
  from .valuewidget import ValueWidget
  from .widget import register, widget_serialization
  from .widget_core import CoreWidget
  from .widget_int import ProgressStyle, SliderStyle
label_desc: Use image node_id 2 for calling the _BoundedFloatRange obj's underlying member method code with example usage: obj._validate_bounds(proposal) and returns: new