LSSTApplications  17.0,17.0+1,17.0+10,17.0+11,17.0+14,17.0+6,17.0-1-g377950a+5,17.0.1,17.0.1-1-g0d345a5+2,17.0.1-1-g444bd44+2,17.0.1-1-g46e6382+2,17.0.1-1-g4d4fbc4,17.0.1-1-g703d48b+1,17.0.1-1-g9deacb5+2,17.0.1-1-gaef33af,17.0.1-1-gea52513+2,17.0.1-1-gf4e0155+2,17.0.1-1-gfc65f5f+2,17.0.1-1-gfc6fb1f,17.0.1-2-g0ce9737+2,17.0.1-2-g2a2f1b99+2,17.0.1-2-gd73ec07+2,17.0.1-2-gd9aa6e4+1,17.0.1-3-gb71a564+2,17.0.1-3-gc20ba7d+2,17.0.1-4-g41c8d5dc0+1,17.0.1-4-gfa71e81,17.0.1-5-gb7d1e01+1,17.0.1-5-gf0ac6446+2,17.0.1-7-g69836a1+1
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 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: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 542 of file config.py.

542  def __delete__(self, instance, at=None, label='deletion'):
543  """Delete an attribute from a `lsst.pex.config.Config` instance.
544 
545  Parameters
546  ----------
547  instance : `lsst.pex.config.Config`
548  The config instance that contains this field.
549  at : `list` of `lsst.pex.config.callStack.StackFrame`
550  The call stack (created by
551  `lsst.pex.config.callStack.getCallStack`).
552  label : `str`, optional
553  Event label for the history.
554 
555  Notes
556  -----
557  This is invoked by the owning `~lsst.pex.config.Config` object and
558  should not be called directly.
559  """
560  if at is None:
561  at = getCallStack()
562  self.__set__(instance, None, at=at, label=label)
563 
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 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 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: