22 from .config
import Field, _typeStr
23 from .callStack
import getStackFrame
26 __all__ = [
"RangeField"]
30 """A configuration field (`lsst.pex.config.Field` subclass) that requires 31 the value to be in a specific numeric range. 36 A description of the field. 37 dtype : {`int`-type, `float`-type} 38 The field's data type: either the `int` or `float` type. 39 default : `int` or `float`, optional 40 Default value for the field. 41 optional : `bool`, optional 42 When `False`, `lsst.pex.config.Config.validate` will fail if the 43 field's value is `None`. 44 min : int, float, or `None`, optional 45 Minimum value accepted in the range. If `None`, the range has no 46 lower bound (equivalent to negative infinity). 47 max : `int`, `float`, or None, optional 48 Maximum value accepted in the range. If `None`, the range has no 49 upper bound (equivalent to positive infinity). 50 inclusiveMin : `bool`, optional 51 If `True` (default), the ``min`` value is included in the allowed 53 inclusiveMax : `bool`, optional 54 If `True` (default), the ``max`` value is included in the allowed 56 deprecated : None or `str`, optional 57 A description of why this Field is deprecated, including removal date. 58 If not None, the string is appended to the docstring for this Field. 73 supportedTypes = set((int, float))
74 """The set of data types allowed by `RangeField` instances (`set` 75 containing `int` and `float` types). 78 def __init__(self, doc, dtype, default=None, optional=False,
79 min=None, max=None, inclusiveMin=True, inclusiveMax=False,
82 raise ValueError(
"Unsupported RangeField dtype %s" % (_typeStr(dtype)))
84 if min
is None and max
is None:
85 raise ValueError(
"min and max cannot both be None")
87 if min
is not None and max
is not None:
89 raise ValueError(
"min = %s > %s = max" % (min, max))
90 elif min == max
and not (inclusiveMin
and inclusiveMax):
91 raise ValueError(
"min = max = %s and min and max not both inclusive" % (min,))
94 """Minimum value accepted in the range. If `None`, the range has no 95 lower bound (equivalent to negative infinity). 99 """Maximum value accepted in the range. If `None`, the range has no 100 upper bound (equivalent to positive infinity). 104 self.
maxCheck =
lambda x, y:
True if y
is None else x <= y
106 self.
maxCheck =
lambda x, y:
True if y
is None else x < y
108 self.
minCheck =
lambda x, y:
True if y
is None else x >= y
110 self.
minCheck =
lambda x, y:
True if y
is None else x > y
111 self.
_setup(doc, dtype=dtype, default=default, check=
None, optional=optional, source=source,
112 deprecated=deprecated)
114 ((
"[" if inclusiveMin
else "("),
115 (
"-inf" if self.
min is None else self.
min),
116 (
"inf" if self.
max is None else self.
max),
117 (
"]" if inclusiveMax
else ")"))
118 """String representation of the field's allowed range (`str`). 123 def _validateValue(self, value):
124 Field._validateValue(self, value)
127 msg =
"%s is outside of valid range %s" % (value, self.
rangeString)
128 raise ValueError(msg)
def getStackFrame(relative=0)
def __init__(self, doc, dtype, default=None, optional=False, min=None, max=None, inclusiveMin=True, inclusiveMax=False, deprecated=None)
def _setup(self, doc, dtype, default, check, optional, source, deprecated)