code: def crop_to_bounds(self,val):
          
          # Currently, values outside the bounds are silently cropped to
          # be inside the bounds; it may be appropriate to add a warning
          # in such cases.
          if _is_number(val):
              if self.bounds is None:
                  return val
              vmin, vmax = self.bounds
              if vmin is not None:
                  if val < vmin:
                      return  vmin
  
              if vmax is not None:
                  if val > vmax:
                      return vmax
  
          elif self.allow_None and val is None:
              return val
  
          else:
              # non-numeric value sent in: reverts to default value
              return  self.default
  
          return val
docs: Return the given value cropped to be within the hard bounds
          for this parameter.
  
          If a numeric value is passed in, check it is within the hard
          bounds. If it is larger than the high bound, return the high
          bound. If it's smaller, return the low bound. In either case, the
          returned value could be None.  If a non-numeric value is passed
          in, set to be the default value (which could be None).  In no
          case is an exception raised; all values are accepted.