LSSTApplications  16.0-10-g0ee56ad+5,16.0-11-ga33d1f2+5,16.0-12-g3ef5c14+3,16.0-12-g71e5ef5+18,16.0-12-gbdf3636+3,16.0-13-g118c103+3,16.0-13-g8f68b0a+3,16.0-15-gbf5c1cb+4,16.0-16-gfd17674+3,16.0-17-g7c01f5c+3,16.0-18-g0a50484+1,16.0-20-ga20f992+8,16.0-21-g0e05fd4+6,16.0-21-g15e2d33+4,16.0-22-g62d8060+4,16.0-22-g847a80f+4,16.0-25-gf00d9b8+1,16.0-28-g3990c221+4,16.0-3-gf928089+3,16.0-32-g88a4f23+5,16.0-34-gd7987ad+3,16.0-37-gc7333cb+2,16.0-4-g10fc685+2,16.0-4-g18f3627+26,16.0-4-g5f3a788+26,16.0-5-gaf5c3d7+4,16.0-5-gcc1f4bb+1,16.0-6-g3b92700+4,16.0-6-g4412fcd+3,16.0-6-g7235603+4,16.0-69-g2562ce1b+2,16.0-8-g14ebd58+4,16.0-8-g2df868b+1,16.0-8-g4cec79c+6,16.0-8-gadf6c7a+1,16.0-8-gfc7ad86,16.0-82-g59ec2a54a+1,16.0-9-g5400cdc+2,16.0-9-ge6233d7+5,master-g2880f2d8cf+3,v17.0.rc1
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:164
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 338 of file configurableField.py.

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

◆ __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 528 of file config.py.

528  def __delete__(self, instance, at=None, label='deletion'):
529  """Delete an attribute from a `lsst.pex.config.Config` instance.
530 
531  Parameters
532  ----------
533  instance : `lsst.pex.config.Config`
534  The config instance that contains this field.
535  at : `list` of `lsst.pex.config.callStack.StackFrame`
536  The call stack (created by
537  `lsst.pex.config.callStack.getCallStack`).
538  label : `str`, optional
539  Event label for the history.
540 
541  Notes
542  -----
543  This is invoked by the owning `~lsst.pex.config.Config` object and
544  should not be called directly.
545  """
546  if at is None:
547  at = getCallStack()
548  self.__set__(instance, None, at=at, label=label)
549 
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:164

◆ freeze()

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

Definition at line 322 of file configurableField.py.

322  def freeze(self, instance):
323  value = self.__getOrMake(instance)
324  value.freeze()
325 

◆ 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 305 of file configurableField.py.

305  def save(self, outfile, instance):
306  fullname = _joinNamePath(instance._name, self.name)
307  value = self.__getOrMake(instance)
308  target = value.target
309 
310  if target != self.target:
311  # not targeting the field-default target.
312  # save target information
313  ConfigClass = value.ConfigClass
314  for module in set([target.__module__, ConfigClass.__module__]):
315  outfile.write(u"import {}\n".format(module))
316  outfile.write(u"{}.retarget(target={}, ConfigClass={})\n\n".format(fullname,
317  _typeStr(target),
318  _typeStr(ConfigClass)))
319  # save field values
320  value._save(outfile)
321 
daf::base::PropertySet * set
Definition: fits.cc:832
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 326 of file configurableField.py.

326  def toDict(self, instance):
327  value = self.__get__(instance)
328  return value.toDict()
329 

◆ validate()

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

Definition at line 330 of file configurableField.py.

330  def validate(self, instance):
331  value = self.__get__(instance)
332  value.validate()
333 
334  if self.check is not None and not self.check(value):
335  msg = "%s is not a valid value" % str(value)
336  raise FieldValidationError(self, instance, msg)
337 

◆ 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 284 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 280 of file config.py.

◆ doc

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

Definition at line 271 of file config.py.

◆ dtype

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

Definition at line 267 of file config.py.

◆ optional

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

Definition at line 288 of file config.py.

◆ source

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

Definition at line 295 of file config.py.

◆ supportedTypes

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

Definition at line 253 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: