28 __all__ = [
"RangeField"]
 
   30 from .config 
import Field, _typeStr
 
   31 from .callStack 
import getStackFrame
 
   35     """A configuration field (`lsst.pex.config.Field` subclass) that requires 
   36     the value to be in a specific numeric range. 
   41         A description of the field. 
   42     dtype : {`int`-type, `float`-type} 
   43         The field's data type: either the `int` or `float` type. 
   44     default : `int` or `float`, optional 
   45         Default value for the field. 
   46     optional : `bool`, optional 
   47         When `False`, `lsst.pex.config.Config.validate` will fail if the 
   48         field's value is `None`. 
   49     min : int, float, or `None`, optional 
   50         Minimum value accepted in the range. If `None`, the range has no 
   51         lower bound (equivalent to negative infinity). 
   52     max : `int`, `float`, or None, optional 
   53         Maximum value accepted in the range. If `None`, the range has no 
   54         upper bound (equivalent to positive infinity). 
   55     inclusiveMin : `bool`, optional 
   56         If `True` (default), the ``min`` value is included in the allowed 
   58     inclusiveMax : `bool`, optional 
   59         If `True` (default), the ``max`` value is included in the allowed 
   61     deprecated : None or `str`, optional 
   62         A description of why this Field is deprecated, including removal date. 
   63         If not None, the string is appended to the docstring for this Field. 
   78     supportedTypes = 
set((int, float))
 
   79     """The set of data types allowed by `RangeField` instances (`set` 
   80     containing `int` and `float` types). 
   83     def __init__(self, doc, dtype, default=None, optional=False,
 
   84                  min=None, max=None, inclusiveMin=True, inclusiveMax=False,
 
   87             raise ValueError(
"Unsupported RangeField dtype %s" % (_typeStr(dtype)))
 
   89         if min 
is None and max 
is None:
 
   90             raise ValueError(
"min and max cannot both be None")
 
   92         if min 
is not None and max 
is not None:
 
   94                 raise ValueError(
"min = %s > %s = max" % (min, max))
 
   95             elif min == max 
and not (inclusiveMin 
and inclusiveMax):
 
   96                 raise ValueError(
"min = max = %s and min and max not both inclusive" % (min,))
 
   99         """Minimum value accepted in the range. If `None`, the range has no 
  100         lower bound (equivalent to negative infinity). 
  104         """Maximum value accepted in the range. If `None`, the range has no 
  105         upper bound (equivalent to positive infinity). 
  109             self.
maxCheck = 
lambda x, y: 
True if y 
is None else x <= y
 
  111             self.
maxCheck = 
lambda x, y: 
True if y 
is None else x < y
 
  113             self.
minCheck = 
lambda x, y: 
True if y 
is None else x >= y
 
  115             self.
minCheck = 
lambda x, y: 
True if y 
is None else x > y
 
  116         self.
_setup(doc, dtype=dtype, default=default, check=
None, optional=optional, source=source,
 
  117                     deprecated=deprecated)
 
  119             ((
"[" if inclusiveMin 
else "("),
 
  120              (
"-inf" if self.
min is None else self.
min),
 
  121              (
"inf" if self.
max is None else self.
max),
 
  122              (
"]" if inclusiveMax 
else ")"))
 
  123         """String representation of the field's allowed range (`str`). 
  128     def _validateValue(self, value):
 
  129         Field._validateValue(self, value)
 
  132             msg = 
"%s is outside of valid range %s" % (value, self.
rangeString)
 
  133             raise ValueError(msg)