LSST Applications g00274db5b6+edbf708997,g00d0e8bbd7+edbf708997,g199a45376c+5137f08352,g1fd858c14a+1d4b6db739,g262e1987ae+f4d9505c4f,g29ae962dfc+7156fb1a53,g2cef7863aa+73c82f25e4,g35bb328faa+edbf708997,g3e17d7035e+5b3adc59f5,g3fd5ace14f+852fa6fbcb,g47891489e3+6dc8069a4c,g53246c7159+edbf708997,g64539dfbff+9f17e571f4,g67b6fd64d1+6dc8069a4c,g74acd417e5+ae494d68d9,g786e29fd12+af89c03590,g7ae74a0b1c+a25e60b391,g7aefaa3e3d+536efcc10a,g7cc15d900a+d121454f8d,g87389fa792+a4172ec7da,g89139ef638+6dc8069a4c,g8d7436a09f+28c28d8d6d,g8ea07a8fe4+db21c37724,g92c671f44c+9f17e571f4,g98df359435+b2e6376b13,g99af87f6a8+b0f4ad7b8d,gac66b60396+966efe6077,gb88ae4c679+7dec8f19df,gbaa8f7a6c5+38b34f4976,gbf99507273+edbf708997,gc24b5d6ed1+9f17e571f4,gca7fc764a6+6dc8069a4c,gcc769fe2a4+97d0256649,gd7ef33dd92+6dc8069a4c,gdab6d2f7ff+ae494d68d9,gdbb4c4dda9+9f17e571f4,ge410e46f29+6dc8069a4c,geaed405ab2+e194be0d2b,w.2025.47
LSST Data Management Base Package
Loading...
Searching...
No Matches
lsst.pex.config.configurableField.ConfigurableInstance Class Reference
Inheritance diagram for lsst.pex.config.configurableField.ConfigurableInstance:
lsst.pex.config.configurableField.ConfigurableField

Public Member Functions

 __init__ (self, config, field, at=None, label="default")
 
 apply (self, *args, **kw)
 
 retarget (self, target, ConfigClass=None, at=None, label="retarget")
 
 __getattr__ (self, name)
 
 __setattr__ (self, name, value, at=None, label="assignment")
 
 __delattr__ (self, name, at=None, label="delete")
 
 __reduce__ (self)
 

Protected Member Functions

ConfigurableInstance _copy (self, Config parent)
 
Config _config (self)
 

Protected Attributes

 _field = self._field.validateTarget(target, ConfigClass)
 
 _target
 
 _ConfigClass
 
 _config
 
 _value
 

Properties

 target = property(lambda x: x._target)
 
 ConfigClass = property(lambda x: x._ConfigClass)
 
 value = property(lambda x: x._value)
 

Detailed Description

A retargetable configuration in a `ConfigurableField` that proxies
a `~lsst.pex.config.Config`.

Parameters
----------
config : `~lsst.pex.config.Config`
    Config to proxy.
field : `~lsst.pex.config.ConfigurableField`
    Field to use.
at : `list` of `~lsst.pex.config.callStack.StackFrame` or `None`
    Stack frame for history recording. Will be calculated if `None`.
label : `str`
    Label to use for history recording.

Notes
-----
``ConfigurableInstance`` implements ``__getattr__`` and ``__setattr__``
methods that forward to the `~lsst.pex.config.Config` it holds.
``ConfigurableInstance`` adds a `retarget` method.

The actual `~lsst.pex.config.Config` instance is accessed using the
``value`` property (e.g. to get its documentation).  The associated
configurable object (usually a `~lsst.pipe.base.Task`) is accessed
using the ``target`` property.

Definition at line 50 of file configurableField.py.

Constructor & Destructor Documentation

◆ __init__()

lsst.pex.config.configurableField.ConfigurableInstance.__init__ ( self,
config,
field,
at = None,
label = "default" )

Definition at line 94 of file configurableField.py.

94 def __init__(self, config, field, at=None, label="default"):
95 object.__setattr__(self, "_config_", weakref.ref(config))
96 object.__setattr__(self, "_field", field)
97 object.__setattr__(self, "__doc__", field.doc)
98 object.__setattr__(self, "_target", field.target)
99 object.__setattr__(self, "_ConfigClass", field.ConfigClass)
100 object.__setattr__(self, "_value", None)
101
102 if at is None:
103 at = getCallStack()
104 at += [self._field.source]
105 self.__initValue(at, label)
106
107 history = config._history.setdefault(field.name, [])
108 history.append(("Targeted and initialized from defaults", at, label))
109

Member Function Documentation

◆ __delattr__()

lsst.pex.config.configurableField.ConfigurableInstance.__delattr__ ( self,
name,
at = None,
label = "delete" )
Pretend to be an isntance of  ConfigClass.
Attributes defiend by ConfigurableInstance will shadow those defined
in ConfigClass.

Definition at line 212 of file configurableField.py.

212 def __delattr__(self, name, at=None, label="delete"):
213 """
214 Pretend to be an isntance of ConfigClass.
215 Attributes defiend by ConfigurableInstance will shadow those defined
216 in ConfigClass.
217 """
218 if self._config._frozen:
219 raise FieldValidationError(self._field, self._config, "Cannot modify a frozen Config")
220
221 try:
222 # attribute exists in the ConfigurableInstance wrapper
223 object.__delattr__(self, name)
224 except AttributeError:
225 if at is None:
226 at = getCallStack()
227 self._value.__delattr__(name, at=at, label=label)
228

◆ __getattr__()

lsst.pex.config.configurableField.ConfigurableInstance.__getattr__ ( self,
name )

Definition at line 192 of file configurableField.py.

192 def __getattr__(self, name):
193 return getattr(self._value, name)
194

◆ __reduce__()

lsst.pex.config.configurableField.ConfigurableInstance.__reduce__ ( self)

Definition at line 229 of file configurableField.py.

229 def __reduce__(self):
230 raise UnexpectedProxyUsageError(
231 f"Proxy object for config field {self._field.name} cannot "
232 "be pickled; it should be converted to a normal `Config` instance "
233 "via the `value` property before being assigned to other objects "
234 "or variables."
235 )
236
237

◆ __setattr__()

lsst.pex.config.configurableField.ConfigurableInstance.__setattr__ ( self,
name,
value,
at = None,
label = "assignment" )
Pretend to be an instance of ConfigClass.

Attributes defined by ConfigurableInstance will shadow those defined
in ConfigClass

Definition at line 195 of file configurableField.py.

195 def __setattr__(self, name, value, at=None, label="assignment"):
196 """Pretend to be an instance of ConfigClass.
197
198 Attributes defined by ConfigurableInstance will shadow those defined
199 in ConfigClass
200 """
201 if self._config._frozen:
202 raise FieldValidationError(self._field, self._config, "Cannot modify a frozen Config")
203
204 if name in self.__dict__:
205 # attribute exists in the ConfigurableInstance wrapper
206 object.__setattr__(self, name, value)
207 else:
208 if at is None:
209 at = getCallStack()
210 self._value.__setattr__(name, value, at=at, label=label)
211

◆ _config()

Config lsst.pex.config.configurableField.ConfigurableInstance._config ( self)
protected

Definition at line 121 of file configurableField.py.

121 def _config(self) -> Config:
122 # Config Fields should never outlive their config class instance
123 # assert that as such here
124 assert self._config_() is not None
125 return self._config_()
126

◆ _copy()

ConfigurableInstance lsst.pex.config.configurableField.ConfigurableInstance._copy ( self,
Config parent )
protected

Definition at line 110 of file configurableField.py.

110 def _copy(self, parent: Config) -> ConfigurableInstance:
111 result = object.__new__(ConfigurableInstance)
112 object.__setattr__(result, "_config_", weakref.ref(parent))
113 object.__setattr__(result, "_field", self._field)
114 object.__setattr__(result, "__doc__", self.__doc__)
115 object.__setattr__(result, "_target", self._target)
116 object.__setattr__(result, "_ConfigClass", self._ConfigClass)
117 object.__setattr__(result, "_value", self._value.copy())
118 return result
119

◆ apply()

lsst.pex.config.configurableField.ConfigurableInstance.apply ( self,
* args,
** kw )
Call the configurable.

Parameters
----------
*args : `~typing.Any`
    Arguments to use when calling the configurable.
**kw : `~typing.Any`
    Keyword parameters to use when calling.

Notes
-----
In addition to the user-provided positional and keyword arguments,
the configurable is also provided a keyword argument ``config`` with
the value of `ConfigurableInstance.value`.

Definition at line 140 of file configurableField.py.

140 def apply(self, *args, **kw):
141 """Call the configurable.
142
143 Parameters
144 ----------
145 *args : `~typing.Any`
146 Arguments to use when calling the configurable.
147 **kw : `~typing.Any`
148 Keyword parameters to use when calling.
149
150 Notes
151 -----
152 In addition to the user-provided positional and keyword arguments,
153 the configurable is also provided a keyword argument ``config`` with
154 the value of `ConfigurableInstance.value`.
155 """
156 return self.target(*args, config=self.value, **kw)
157

◆ retarget()

lsst.pex.config.configurableField.ConfigurableInstance.retarget ( self,
target,
ConfigClass = None,
at = None,
label = "retarget" )
Target a new configurable and ConfigClass.

Parameters
----------
target : `type`
    Item to retarget.
ConfigClass : `type` or `None`, optional
    New config class to use.
at : `list` of `~lsst.pex.config.callStack.StackFrame` or `None`,\
        optional
    Stack for history recording.
label : `str`, optional
    Label for history recording.

Definition at line 158 of file configurableField.py.

158 def retarget(self, target, ConfigClass=None, at=None, label="retarget"):
159 """Target a new configurable and ConfigClass.
160
161 Parameters
162 ----------
163 target : `type`
164 Item to retarget.
165 ConfigClass : `type` or `None`, optional
166 New config class to use.
167 at : `list` of `~lsst.pex.config.callStack.StackFrame` or `None`,\
168 optional
169 Stack for history recording.
170 label : `str`, optional
171 Label for history recording.
172 """
173 if self._config._frozen:
174 raise FieldValidationError(self._field, self._config, "Cannot modify a frozen Config")
175
176 try:
177 ConfigClass = self._field.validateTarget(target, ConfigClass)
178 except BaseException as e:
179 raise FieldValidationError(self._field, self._config, e.message) from e
180
181 if at is None:
182 at = getCallStack()
183 object.__setattr__(self, "_target", target)
184 if ConfigClass != self.ConfigClass:
185 object.__setattr__(self, "_ConfigClass", ConfigClass)
186 self.__initValue(at, label)
187
188 history = self._config._history.setdefault(self._field.name, [])
189 msg = f"retarget(target={_typeStr(target)}, ConfigClass={_typeStr(ConfigClass)})"
190 history.append((msg, at, label))
191

Member Data Documentation

◆ _config

lsst.pex.config.configurableField.ConfigurableInstance._config
protected

Definition at line 174 of file configurableField.py.

◆ _ConfigClass

lsst.pex.config.configurableField.ConfigurableInstance._ConfigClass
protected

Definition at line 116 of file configurableField.py.

◆ _field

lsst.pex.config.configurableField.ConfigurableInstance._field = self._field.validateTarget(target, ConfigClass)
protected

Definition at line 113 of file configurableField.py.

◆ _target

lsst.pex.config.configurableField.ConfigurableInstance._target
protected

Definition at line 115 of file configurableField.py.

◆ _value

lsst.pex.config.configurableField.ConfigurableInstance._value
protected

Definition at line 193 of file configurableField.py.

Property Documentation

◆ ConfigClass

lsst.pex.config.configurableField.ConfigurableInstance.ConfigClass = property(lambda x: x._ConfigClass)
static

Definition at line 131 of file configurableField.py.

◆ target

lsst.pex.config.configurableField.ConfigurableInstance.target = property(lambda x: x._target)
static

Definition at line 127 of file configurableField.py.

◆ value

lsst.pex.config.configurableField.ConfigurableInstance.value = property(lambda x: x._value)
static

Definition at line 135 of file configurableField.py.


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