This commit is contained in:
rajjagirdar-root 2026-05-13 11:25:37 -04:00 committed by GitHub
commit 8f5895989e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 48 additions and 0 deletions

0
calc/__init__.py Normal file
View File

0
calc/engine/__init__.py Normal file
View File

26
calc/engine/builtins.py Normal file
View File

@ -0,0 +1,26 @@
import math
SAFE_NAMES = {
# trig (radians)
"sin": math.sin, "cos": math.cos, "tan": math.tan,
"asin": math.asin, "acos": math.acos, "atan": math.atan,
"atan2": math.atan2,
# trig (degrees)
"sind": lambda x: math.sin(math.radians(x)),
"cosd": lambda x: math.cos(math.radians(x)),
"tand": lambda x: math.tan(math.radians(x)),
# hyperbolic
"sinh": math.sinh, "cosh": math.cosh, "tanh": math.tanh,
# logs & exp
"log": math.log, "log2": math.log2, "log10": math.log10,
"ln": math.log, "exp": math.exp,
# powers & roots
"sqrt": math.sqrt, "pow": math.pow,
# rounding
"abs": abs, "round": round, "floor": math.floor, "ceil": math.ceil,
# misc
"factorial": math.factorial, "gcd": math.gcd,
"degrees": math.degrees, "radians": math.radians,
# constants
"pi": math.pi, "e": math.e, "tau": math.tau, "inf": math.inf,
}

22
calc/engine/evaluator.py Normal file
View File

@ -0,0 +1,22 @@
from calc.engine.builtins import SAFE_NAMES
def evaluate(expr: str, extra_names: dict = None) -> tuple[str, bool]:
"""
Evaluate a math expression safely.
Returns (result_string, is_error).
"""
namespace = dict(SAFE_NAMES)
if extra_names:
namespace.update(extra_names)
try:
result = eval(expr, {"__builtins__": {}}, namespace)
return str(result), False
except ZeroDivisionError:
return "Error: Division by zero", True
except ValueError as err:
return f"Error: {err}", True
except NameError as err:
return f"Error: {err}", True
except Exception as err:
return f"Error: {err}", True