22 from __future__
import annotations
24 __all__ = (
"makeColumnExpressionAction", )
29 from typing
import Mapping, MutableMapping, Set, Type, Union, Optional, Any
31 from numpy
import log10
as log
32 from numpy
import (cos, sin, cosh, sinh)
35 from ..configurableActions
import ConfigurableActionField
36 from ._baseDataFrameActions
import DataFrameAction
39 OPERATORS = {ast.Add: op.add, ast.Sub: op.sub, ast.Mult: op.mul,
40 ast.Div: op.truediv, ast.Pow: op.pow, ast.BitXor: op.xor,
43 EXTRA_MATH = {
"cos": cos,
"sin": sin,
"cosh": cosh,
"sinh": sinh,
"log": log}
64 val = self.visit(node.operand)
65 return OPERATORS[type(node.op)](val)
68 lhs = self.visit(node.left)
69 rhs = self.visit(node.right)
70 return OPERATORS[type(node.op)](lhs, rhs)
73 if node.func.id
in self.
variablesvariables:
74 function = self.visit(node.func)
75 return function(self.visit(node.args[0]))
77 raise ValueError(
"String not recognized")
80 raise ValueError(
"String not recognized")
84 exprDefaults: Optional[Mapping[str, Union[DataFrameAction,
85 Type[DataFrameAction]]]] =
None,
87 ) -> Type[DataFrameAction]:
88 node = ast.parse(expr, mode=
'eval')
91 names: Set[str] = set()
92 for elm
in ast.walk(node):
93 if isinstance(elm, ast.Name):
97 names -= EXTRA_MATH.keys()
99 fields: Mapping[str, ConfigurableActionField] = {}
101 if exprDefaults
is not None and (value := exprDefaults.get(name))
is not None:
102 kwargs = {
"default": value}
109 def __call__(self, df: pd.DataFrame, **kwargs) -> pd.Series:
112 values_map[name] = getattr(self, name)(df, **kwargs)
115 return parser.visit(node.body)
117 dct: MutableMapping[str, Any] = {
"__call__": __call__}
118 if docstring
is not None:
119 dct[
'__doc__'] = docstring
122 return type(className, (DataFrameAction, ), dct)
def visit_NameConstant(self, node)
def visit_UnaryOp(self, node)
def visit_Num(self, node)
def visit_Call(self, node)
def __init__(self, **kwargs)
def visit_BinOp(self, node)
def visit_Name(self, node)
def generic_visit(self, node)
Type[DataFrameAction] makeColumnExpressionAction(str className, str expr, Optional[Mapping[str, Union[DataFrameAction, Type[DataFrameAction]]]] exprDefaults=None, str docstring=None)