Skip to content
Snippets Groups Projects
Commit 9e8d8a51 authored by David Schäfer's avatar David Schäfer
Browse files

clearer structure for the evaluator environments

parent c1bf2e1b
No related branches found
No related tags found
No related merge requests found
...@@ -36,7 +36,6 @@ def initGlobalMap(): ...@@ -36,7 +36,6 @@ def initGlobalMap():
"len": partial(_dslInner, len), "len": partial(_dslInner, len),
"isflagged": _dslIsFlagged, "isflagged": _dslIsFlagged,
"nan": np.nan, "nan": np.nan,
**FUNC_MAP,
} }
return out return out
...@@ -74,8 +73,8 @@ class DslTransformer(ast.NodeTransformer): ...@@ -74,8 +73,8 @@ class DslTransformer(ast.NodeTransformer):
ast.Invert, ast.Invert,
) )
def __init__(self, func_map, variables): def __init__(self, environment, variables):
self.func_map = func_map self.environment = environment
self.variables = variables self.variables = variables
def _rename( def _rename(
...@@ -101,7 +100,7 @@ class DslTransformer(ast.NodeTransformer): ...@@ -101,7 +100,7 @@ class DslTransformer(ast.NodeTransformer):
def visit_Call(self, node): def visit_Call(self, node):
func_name = node.func.id func_name = node.func.id
if func_name not in self.func_map: if func_name not in self.environment:
raise NameError(f"unspported function: '{func_name}'") raise NameError(f"unspported function: '{func_name}'")
node = ast.Call( node = ast.Call(
...@@ -187,8 +186,6 @@ class MetaTransformer(ast.NodeTransformer): ...@@ -187,8 +186,6 @@ class MetaTransformer(ast.NodeTransformer):
def parseExpression(expr: str) -> ast.AST: def parseExpression(expr: str) -> ast.AST:
tree = ast.parse(expr, mode="eval") tree = ast.parse(expr, mode="eval")
# if not isinstance(tree.body, (ast.Call, ast.Compare)):
# raise TypeError('function call needed')
return tree return tree
...@@ -210,7 +207,9 @@ def compileExpression(expr, data, flagger, env): ...@@ -210,7 +207,9 @@ def compileExpression(expr, data, flagger, env):
def evalExpression(expr, data, field, flagger, nodata=np.nan): def evalExpression(expr, data, field, flagger, nodata=np.nan):
global_env = initGlobalMap() local_env = {
local_env = initLocalMap(data, field, flagger, nodata) **initGlobalMap(),
code = compileExpression(expr, data, flagger, {**global_env, **local_env}) **initLocalMap(data, field, flagger, nodata)
return evalCode(code, global_env, local_env) }
code = compileExpression(expr, data, flagger, local_env)
return evalCode(code, FUNC_MAP, local_env)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment