from typing import Callable from numint.expression import Lark_StandAlone from numint.expression_transformer import ExpressionTransformer import math def parse_function(expr: str) -> Callable[[float], float]: """ :param expr: ein gültiger python (arithmetischer) Ausdruck. Die Funktionen aus math-Module (etwa sin, cos, sqrt, tan, atan) sowie Konstanten wie 'e' (entspricht math.e), 'pi' (entspricht math.pi) sind erlaubt :return: """ parser = Lark_StandAlone(transformer=ExpressionTransformer()) parsed_expr = parser.parse(expr) return lambda arg: eval(parsed_expr, {'x': float(arg), 'math': math}) def parse_value(expr:str) -> float: """ :param expr: :return: """ parser = Lark_StandAlone(transformer=ExpressionTransformer()) parsed_expr = parser.parse(expr) return eval(parsed_expr, {'math':math})