LSST Applications 27.0.0,g0265f82a02+469cd937ee,g02d81e74bb+21ad69e7e1,g1470d8bcf6+cbe83ee85a,g2079a07aa2+e67c6346a6,g212a7c68fe+04a9158687,g2305ad1205+94392ce272,g295015adf3+81dd352a9d,g2bbee38e9b+469cd937ee,g337abbeb29+469cd937ee,g3939d97d7f+72a9f7b576,g487adcacf7+71499e7cba,g50ff169b8f+5929b3527e,g52b1c1532d+a6fc98d2e7,g591dd9f2cf+df404f777f,g5a732f18d5+be83d3ecdb,g64a986408d+21ad69e7e1,g858d7b2824+21ad69e7e1,g8a8a8dda67+a6fc98d2e7,g99cad8db69+f62e5b0af5,g9ddcbc5298+d4bad12328,ga1e77700b3+9c366c4306,ga8c6da7877+71e4819109,gb0e22166c9+25ba2f69a1,gb6a65358fc+469cd937ee,gbb8dafda3b+69d3c0e320,gc07e1c2157+a98bf949bb,gc120e1dc64+615ec43309,gc28159a63d+469cd937ee,gcf0d15dbbd+72a9f7b576,gdaeeff99f8+a38ce5ea23,ge6526c86ff+3a7c1ac5f1,ge79ae78c31+469cd937ee,gee10cc3b42+a6fc98d2e7,gf1cff7945b+21ad69e7e1,gfbcc870c63+9a11dc8c8f
LSST Data Management Base Package
Loading...
Searching...
No Matches
_baseDataFrameActions.py
Go to the documentation of this file.
1from __future__ import annotations
2
3__all__ = ("DataFrameAction",)
4
5from lsst.pex.config import Field, ListField
6from typing import Iterable, Any, Mapping
7
8from lsst.pex.config.configurableActions import ConfigurableAction
9
10
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:
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
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")
table::Key< int > id
Definition Detector.cc:162