class_docstr: Accept numeric values that are contained within a given interval.
  
  Args:
      interval_type (numeric property):
          numeric types for the range, e.g. ``Int``, ``Float``
  
      start (number) :
          A minimum allowable value for the range. Values less than
          ``start`` will result in validation errors.
  
      end (number) :
          A maximum allowable value for the range. Values greater than
          ``end`` will result in validation errors.
  
  Example:
  
      .. code-block:: python
  
          >>> class RangeModel(HasProps):
          ...     prop = Range(Float, 10, 20)
          ...
  
          >>> m = RangeModel()
  
          >>> m.prop = 10
  
          >>> m.prop = 20
  
          >>> m.prop = 15
  
          >>> m.prop = 2     # ValueError !!
  
          >>> m.prop = 22    # ValueError !!
  
          >>> m.prop = "foo" # ValueError !!
code: def validate(self, value: Any, detail: bool = True) -> None:
      super().validate(value, detail)
  
      if not (
          self.type_param.is_valid(value)
          and value >= self.start
          and value <= self.end
      ):
          msg = (
              ""
              if not detail
              else f"expected a value of type {self.type_param} in range [{self.start}, {self.end}], got {value!r}"
          )
          raise ValueError(msg)
  
imports: from __future__ import annotations
  import logging
  from typing import Any, TypeVar, Union
  from ...util.deprecation import deprecated
  from .bases import Init, Property, SingleParameterizedProperty, TypeOrInst
  from .primitive import Float, Int
  from .singletons import Intrinsic, Undefined
label_desc: Use image node_id 3 for calling the Interval obj's underlying member method code with example usage: obj.validate(value, detail) without return types