lsst.pipe.tasks
g124d44cf3d+ce19972735
Loading...
Searching...
No Matches
python
lsst
pipe
tasks
dataFrameActions
_baseDataFrameActions.py
Go to the documentation of this file.
1
from
__future__
import
annotations
2
3
__all__ = (
"DataFrameAction"
,)
4
5
from
lsst.pex.config
import
Field, ListField
6
from
typing
import
Iterable, Any, Mapping
7
8
from
lsst.pex.config.configurableActions
import
ConfigurableAction
9
10
11
class
DataFrameAction
(ConfigurableAction):
12
_actionCache: Mapping[int, Any]
13
14
cache = Field(doc=
"Controls if the results of this action should be cached,"
15
" only works on frozen actions"
,
16
dtype=bool, default=
False
)
17
cacheArgs = ListField(doc=
"If cache is True, this is a list of argument keys that will be used to "
18
"compute the cache key in addition to the DataFrameId"
,
19
dtype=str, optional=
True
)
20
21
def
__init_subclass__
(cls, **kwargs) -> None:
22
cls.
_actionCache
_actionCache
= {}
23
24
def
call_wrapper(function):
25
def
inner_wrapper(self, dataFrame, **kwargs):
26
dfId = id(dataFrame)
27
extra = []
28
for
name
in
(self.
cacheArgs
or
tuple()):
29
if
name
not
in
kwargs:
30
raise
ValueError(f
"{name} is not part of call signature and cant be used for "
31
"caching"
)
32
extra.append(kwargs[name])
33
extra.append(dfId)
34
key = tuple(extra)
35
if
self.
cache
and
self._frozen:
36
# look up to see if the value is in cache already
37
if
result := self.
_actionCache
_actionCache
.get(key):
38
return
result
39
result = function(self, dataFrame, **kwargs)
40
if
self.
cache
and
self._frozen:
41
self.
_actionCache
_actionCache
[key] = result
42
return
result
43
return
inner_wrapper
44
cls.
__call__
__call__
= call_wrapper(cls.
__call__
__call__
)
45
super().
__init_subclass__
(**kwargs)
46
47
def
__call__(self, dataFrame, **kwargs) -> Iterable[Any]:
48
"""This method should return the result of an action performed on a
49
dataframe
50
"""
51
raise
NotImplementedError(
"This method should be overloaded in a subclass"
)
52
53
@property
54
def
columns
(self) -> Iterable[str]:
55
"""This property should return an iterable of columns needed by this action
56
"""
57
raise
NotImplementedError(
"This method should be overloaded in a subclass"
)
lsst::pex::config::configurableActions
lsst.pipe.tasks.dataFrameActions._baseDataFrameActions.DataFrameAction
Definition
_baseDataFrameActions.py:11
lsst.pipe.tasks.dataFrameActions._baseDataFrameActions.DataFrameAction.cacheArgs
cacheArgs
Definition
_baseDataFrameActions.py:17
lsst.pipe.tasks.dataFrameActions._baseDataFrameActions.DataFrameAction.__call__
__call__
Definition
_baseDataFrameActions.py:44
lsst.pipe.tasks.dataFrameActions._baseDataFrameActions.DataFrameAction.cache
cache
Definition
_baseDataFrameActions.py:14
lsst.pipe.tasks.dataFrameActions._baseDataFrameActions.DataFrameAction._actionCache
_actionCache
Definition
_baseDataFrameActions.py:22
lsst.pipe.tasks.dataFrameActions._baseDataFrameActions.DataFrameAction.columns
Iterable[str] columns(self)
Definition
_baseDataFrameActions.py:54
lsst.pipe.tasks.dataFrameActions._baseDataFrameActions.DataFrameAction.__call__
Iterable[Any] __call__(self, dataFrame, **kwargs)
Definition
_baseDataFrameActions.py:47
lsst.pipe.tasks.dataFrameActions._baseDataFrameActions.DataFrameAction.__init_subclass__
None __init_subclass__(cls, **kwargs)
Definition
_baseDataFrameActions.py:21
lsst.pipe.tasks.dataFrameActions._baseDataFrameActions.DataFrameAction._actionCache
Mapping _actionCache
Definition
_baseDataFrameActions.py:12
lsst::pex::config
Generated on Thu May 9 2024 03:58:23 for lsst.pipe.tasks by
1.10.0