Download backend/tools/calculator_tool.py from build-small-hackathon/elysium: direct link, hf CLI and curl.
- Browser
- Download file 792 Bytes
-
https://huggingface.co/spaces/build-small-hackathon/elysium/resolve/4fe2c5589b5b0062e15d147d4902c970210e2fbf/backend/tools/calculator_tool.py
- Command line
-
hf download hf://spaces/build-small-hackathon/elysium@4fe2c5589b5b0062e15d147d4902c970210e2fbf/backend/tools/calculator_tool.py
-
curl -L -o calculator_tool.py https://huggingface.co/spaces/build-small-hackathon/elysium/resolve/4fe2c5589b5b0062e15d147d4902c970210e2fbf/backend/tools/calculator_tool.py
792 Bytes
| import ast, operator as op | |
| _OPS = {ast.Add: op.add, ast.Sub: op.sub, ast.Mult: op.mul, ast.Div: op.truediv, | |
| ast.Pow: op.pow, ast.USub: op.neg, ast.Mod: op.mod} | |
| def _ev(node): | |
| if isinstance(node, ast.Num): return node.n | |
| if isinstance(node, ast.Constant): return node.value | |
| if isinstance(node, ast.BinOp): return _OPS[type(node.op)](_ev(node.left), _ev(node.right)) | |
| if isinstance(node, ast.UnaryOp): return _OPS[type(node.op)](_ev(node.operand)) | |
| raise ValueError("unsafe expression") | |
| def run(params: dict) -> dict: | |
| expr = params.get("expression", "") | |
| try: | |
| return {"result": _ev(ast.parse(expr, mode="eval").body), "expression": expr} | |
| except Exception as e: | |
| return {"error": str(e), "expression": expr} | |