LSSTApplications  17.0+11,17.0+35,17.0+60,17.0+61,17.0+63,17.0+7,17.0-1-g377950a+35,17.0.1-1-g114240f+2,17.0.1-1-g4d4fbc4+30,17.0.1-1-g55520dc+55,17.0.1-1-g5f4ed7e+59,17.0.1-1-g6dd7d69+22,17.0.1-1-g8de6c91+11,17.0.1-1-gb9095d2+7,17.0.1-1-ge9fec5e+5,17.0.1-1-gf4e0155+63,17.0.1-1-gfc65f5f+56,17.0.1-1-gfc6fb1f+20,17.0.1-10-g87f9f3f+9,17.0.1-12-g112a4bc+3,17.0.1-17-gab9750a3+5,17.0.1-17-gdae4c4a+16,17.0.1-19-g3a24bb2+2,17.0.1-2-g26618f5+35,17.0.1-2-g54f2ebc+9,17.0.1-2-gf403422+1,17.0.1-21-g52a398f+5,17.0.1-26-gd98a1d13,17.0.1-3-g7e86b59+45,17.0.1-3-gb5ca14a,17.0.1-3-gd08d533+46,17.0.1-31-gb0791f330,17.0.1-4-g59d126d+10,17.0.1-5-g3877d06+2,17.0.1-7-g35889ee+7,17.0.1-7-gc7c8782+20,17.0.1-7-gcb7da53+5,17.0.1-9-gc4bbfb2+10,w.2019.24
LSSTDataManagementBasePackage
Public Member Functions | Public Attributes | Static Public Attributes | List of all members
lsst.pex.config.configurableField.ConfigurableField Class Reference
Inheritance diagram for lsst.pex.config.configurableField.ConfigurableField:
lsst.pex.config.config.Field

Public Member Functions

def validateTarget (self, target, ConfigClass)
 
def __init__ (self, doc, target, ConfigClass=None, default=None, check=None)
 
def __get__ (self, instance, owner=None, at=None, label="default")
 
def __set__ (self, instance, value, at=None, label="assignment")
 
def rename (self, instance)
 
def save (self, outfile, instance)
 
def freeze (self, instance)
 
def toDict (self, instance)
 
def validate (self, instance)
 
def __deepcopy__ (self, memo)
 
def __delete__ (self, instance, at=None, label='deletion')
 

Public Attributes

 target
 
 ConfigClass
 
 dtype
 
 doc
 
 default
 
 check
 
 optional
 
 source
 

Static Public Attributes

 supportedTypes = set((str, bool, float, int, complex))
 

Detailed Description

A configuration field (`~lsst.pex.config.Field` subclass) that can be
can be retargeted towards a different configurable (often a
`lsst.pipe.base.Task` subclass).

The ``ConfigurableField`` is often used to configure subtasks, which are
tasks (`~lsst.pipe.base.Task`) called by a parent task.

Parameters
----------
doc : `str`
    A description of the configuration field.
target : configurable class
    The configurable target. Configurables have a ``ConfigClass``
    attribute. Within the task framework, configurables are
    `lsst.pipe.base.Task` subclasses)
ConfigClass : `lsst.pex.config.Config`-type, optional
    The subclass of `lsst.pex.config.Config` expected as the configuration
    class of the ``target``. If ``ConfigClass`` is unset then
    ``target.ConfigClass`` is used.
default : ``ConfigClass``-type, optional
    The default configuration class. Normally this parameter is not set,
    and defaults to ``ConfigClass`` (or ``target.ConfigClass``).
check : callable, optional
    Callable that takes the field's value (the ``target``) as its only
    positional argument, and returns `True` if the ``target`` is valid (and
    `False` otherwise).

See also
--------
ChoiceField
ConfigChoiceField
ConfigDictField
ConfigField
DictField
Field
ListField
RangeField
RegistryField

Notes
-----
You can use the `ConfigurableInstance.apply` method to construct a
fully-configured configurable.

Definition at line 162 of file configurableField.py.

Constructor & Destructor Documentation

◆ __init__()

def lsst.pex.config.configurableField.ConfigurableField.__init__ (   self,
  doc,
  target,
  ConfigClass = None,
  default = None,
  check = None 
)

Definition at line 250 of file configurableField.py.

250  def __init__(self, doc, target, ConfigClass=None, default=None, check=None):
251  ConfigClass = self.validateTarget(target, ConfigClass)
252 
253  if default is None:
254  default = ConfigClass
255  if default != ConfigClass and type(default) != ConfigClass:
256  raise TypeError("'default' is of incorrect type %s. Expected %s" %
257  (_typeStr(default), _typeStr(ConfigClass)))
258 
259  source = getStackFrame()
260  self._setup(doc=doc, dtype=ConfigurableInstance, default=default,
261  check=check, optional=False, source=source)
262  self.target = target
263  self.ConfigClass = ConfigClass
264 
def getStackFrame(relative=0)
Definition: callStack.py:52
table::Key< int > type
Definition: Detector.cc:167
def __init__(self, minimum, dataRange, Q)

Member Function Documentation

◆ __deepcopy__()

def lsst.pex.config.configurableField.ConfigurableField.__deepcopy__ (   self,
  memo 
)
Customize deep-copying, because we always want a reference to the
original typemap.

WARNING: this must be overridden by subclasses if they change the
constructor signature!

Definition at line 343 of file configurableField.py.

343  def __deepcopy__(self, memo):
344  """Customize deep-copying, because we always want a reference to the
345  original typemap.
346 
347  WARNING: this must be overridden by subclasses if they change the
348  constructor signature!
349  """
350  return type(self)(doc=self.doc, target=self.target, ConfigClass=self.ConfigClass,
351  default=copy.deepcopy(self.default))
352 
table::Key< int > type
Definition: Detector.cc:167

◆ __delete__()

def lsst.pex.config.config.Field.__delete__ (   self,
  instance,
  at = None,
  label = 'deletion' 
)
inherited
Delete an attribute from a `lsst.pex.config.Config` instance.

Parameters
----------
instance : `lsst.pex.config.Config`
    The config instance that contains this field.
at : `list` of `lsst.pex.config.callStack.StackFrame`
    The call stack (created by
    `lsst.pex.config.callStack.getCallStack`).
label : `str`, optional
    Event label for the history.

Notes
-----
This is invoked by the owning `~lsst.pex.config.Config` object and
should not be called directly.

Definition at line 551 of file config.py.

551  def __delete__(self, instance, at=None, label='deletion'):
552  """Delete an attribute from a `lsst.pex.config.Config` instance.
553 
554  Parameters
555  ----------
556  instance : `lsst.pex.config.Config`
557  The config instance that contains this field.
558  at : `list` of `lsst.pex.config.callStack.StackFrame`
559  The call stack (created by
560  `lsst.pex.config.callStack.getCallStack`).
561  label : `str`, optional
562  Event label for the history.
563 
564  Notes
565  -----
566  This is invoked by the owning `~lsst.pex.config.Config` object and
567  should not be called directly.
568  """
569  if at is None:
570  at = getCallStack()
571  self.__set__(instance, None, at=at, label=label)
572 
def getCallStack(skip=0)
Definition: callStack.py:169

◆ __get__()

def lsst.pex.config.configurableField.ConfigurableField.__get__ (   self,
  instance,
  owner = None,
  at = None,
  label = "default" 
)

Definition at line 274 of file configurableField.py.

274  def __get__(self, instance, owner=None, at=None, label="default"):
275  if instance is None or not isinstance(instance, Config):
276  return self
277  else:
278  return self.__getOrMake(instance, at=at, label=label)
279 

◆ __set__()

def lsst.pex.config.configurableField.ConfigurableField.__set__ (   self,
  instance,
  value,
  at = None,
  label = "assignment" 
)

Definition at line 280 of file configurableField.py.

280  def __set__(self, instance, value, at=None, label="assignment"):
281  if instance._frozen:
282  raise FieldValidationError(self, instance, "Cannot modify a frozen Config")
283  if at is None:
284  at = getCallStack()
285  oldValue = self.__getOrMake(instance, at=at)
286 
287  if isinstance(value, ConfigurableInstance):
288  oldValue.retarget(value.target, value.ConfigClass, at, label)
289  oldValue.update(__at=at, __label=label, **value._storage)
290  elif type(value) == oldValue._ConfigClass:
291  oldValue.update(__at=at, __label=label, **value._storage)
292  elif value == oldValue.ConfigClass:
293  value = oldValue.ConfigClass()
294  oldValue.update(__at=at, __label=label, **value._storage)
295  else:
296  msg = "Value %s is of incorrect type %s. Expected %s" % \
297  (value, _typeStr(value), _typeStr(oldValue.ConfigClass))
298  raise FieldValidationError(self, instance, msg)
299 
def getCallStack(skip=0)
Definition: callStack.py:169
table::Key< int > type
Definition: Detector.cc:167

◆ freeze()

def lsst.pex.config.configurableField.ConfigurableField.freeze (   self,
  instance 
)

Definition at line 327 of file configurableField.py.

327  def freeze(self, instance):
328  value = self.__getOrMake(instance)
329  value.freeze()
330 

◆ rename()

def lsst.pex.config.configurableField.ConfigurableField.rename (   self,
  instance 
)

Definition at line 300 of file configurableField.py.

300  def rename(self, instance):
301  fullname = _joinNamePath(instance._name, self.name)
302  value = self.__getOrMake(instance)
303  value._rename(fullname)
304 

◆ save()

def lsst.pex.config.configurableField.ConfigurableField.save (   self,
  outfile,
  instance 
)

Definition at line 312 of file configurableField.py.

312  def save(self, outfile, instance):
313  fullname = _joinNamePath(instance._name, self.name)
314  value = self.__getOrMake(instance)
315  target = value.target
316 
317  if target != self.target:
318  # not targeting the field-default target.
319  # save target information
320  ConfigClass = value.ConfigClass
321  outfile.write(u"{}.retarget(target={}, ConfigClass={})\n\n".format(fullname,
322  _typeStr(target),
323  _typeStr(ConfigClass)))
324  # save field values
325  value._save(outfile)
326 
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition: history.py:168

◆ toDict()

def lsst.pex.config.configurableField.ConfigurableField.toDict (   self,
  instance 
)

Definition at line 331 of file configurableField.py.

331  def toDict(self, instance):
332  value = self.__get__(instance)
333  return value.toDict()
334 

◆ validate()

def lsst.pex.config.configurableField.ConfigurableField.validate (   self,
  instance 
)

Definition at line 335 of file configurableField.py.

335  def validate(self, instance):
336  value = self.__get__(instance)
337  value.validate()
338 
339  if self.check is not None and not self.check(value):
340  msg = "%s is not a valid value" % str(value)
341  raise FieldValidationError(self, instance, msg)
342 

◆ validateTarget()

def lsst.pex.config.configurableField.ConfigurableField.validateTarget (   self,
  target,
  ConfigClass 
)
Validate the target and configuration class.

Parameters
----------
target
    The configurable being verified.
ConfigClass : `lsst.pex.config.Config`-type or `None`
    The configuration class associated with the ``target``. This can
    be `None` if ``target`` has a ``ConfigClass`` attribute.

Raises
------
AttributeError
    Raised if ``ConfigClass`` is `None` and ``target`` does not have a
    ``ConfigClass`` attribute.
TypeError
    Raised if ``ConfigClass`` is not a `~lsst.pex.config.Config`
    subclass.
ValueError
    Raised if:

    - ``target`` is not callable (callables have a ``__call__``
      method).
    - ``target`` is not startically defined (does not have
      ``__module__`` or ``__name__`` attributes).

Definition at line 208 of file configurableField.py.

208  def validateTarget(self, target, ConfigClass):
209  """Validate the target and configuration class.
210 
211  Parameters
212  ----------
213  target
214  The configurable being verified.
215  ConfigClass : `lsst.pex.config.Config`-type or `None`
216  The configuration class associated with the ``target``. This can
217  be `None` if ``target`` has a ``ConfigClass`` attribute.
218 
219  Raises
220  ------
221  AttributeError
222  Raised if ``ConfigClass`` is `None` and ``target`` does not have a
223  ``ConfigClass`` attribute.
224  TypeError
225  Raised if ``ConfigClass`` is not a `~lsst.pex.config.Config`
226  subclass.
227  ValueError
228  Raised if:
229 
230  - ``target`` is not callable (callables have a ``__call__``
231  method).
232  - ``target`` is not startically defined (does not have
233  ``__module__`` or ``__name__`` attributes).
234  """
235  if ConfigClass is None:
236  try:
237  ConfigClass = target.ConfigClass
238  except Exception:
239  raise AttributeError("'target' must define attribute 'ConfigClass'")
240  if not issubclass(ConfigClass, Config):
241  raise TypeError("'ConfigClass' is of incorrect type %s."
242  "'ConfigClass' must be a subclass of Config" % _typeStr(ConfigClass))
243  if not hasattr(target, '__call__'):
244  raise ValueError("'target' must be callable")
245  if not hasattr(target, '__module__') or not hasattr(target, '__name__'):
246  raise ValueError("'target' must be statically defined"
247  "(must have '__module__' and '__name__' attributes)")
248  return ConfigClass
249 

Member Data Documentation

◆ check

lsst.pex.config.config.Field.check
inherited

Definition at line 293 of file config.py.

◆ ConfigClass

lsst.pex.config.configurableField.ConfigurableField.ConfigClass

Definition at line 263 of file configurableField.py.

◆ default

lsst.pex.config.config.Field.default
inherited

Definition at line 289 of file config.py.

◆ doc

lsst.pex.config.config.Field.doc
inherited

Definition at line 280 of file config.py.

◆ dtype

lsst.pex.config.config.Field.dtype
inherited

Definition at line 276 of file config.py.

◆ optional

lsst.pex.config.config.Field.optional
inherited

Definition at line 297 of file config.py.

◆ source

lsst.pex.config.config.Field.source
inherited

Definition at line 304 of file config.py.

◆ supportedTypes

lsst.pex.config.config.Field.supportedTypes = set((str, bool, float, int, complex))
staticinherited

Definition at line 262 of file config.py.

◆ target

lsst.pex.config.configurableField.ConfigurableField.target

Definition at line 262 of file configurableField.py.


The documentation for this class was generated from the following file: