Math Evaluator
A package that evaluates a mathematical expression given as a string.
By default it accepts
- operands
ints andfloats
- operators
- unary
+-, - binary
+-*/and - parantheses
()
- unary
Getting Started
Getting your first application running is super easy.
pip install math_evaluator
"""
A small CLI application that endlessly takes user input and evaluates it as a mathematical expression
"""
from math_evaluator import calc
while True:
# this will raise a SyntaxError if the expression is syntactically incorrect
# normally you should always catch that Exception
expression = input(">>> ")
print(calc(expression))
Customization
The above usage is the simplest and suffices most of the time. Anyways, Math Evaluator is built to be customized by you. It internally uses the Python parser however, so it's abilities cannot be changed fundamentally. For example operator assoziativity or how parentheses work cannot be altered.
This package consists of two main modules .implicit and .explicit. However, most applications will only need to use one of them.
.implicit
Checks if the expression is a valid mathematical expression and then evals it. This makes it totally safe to use - even when exposed to potencially malicious users.
.implicit example
We might want to extend the calculator to allow powers (** is the corresponding operator). To do that we can reach into math_evaluator.implicit and add ast operations to the valid operations
import ast
from math_evaluator.implicit import calc, valid_ops
valid_ops.add(ast.Pow)
assert calc("4**3") == 4**3
You can not only change the valid operations but also the allowed operands. We could for example add complex numbers
from math_evaluator.implicit import calc, allowed_types
allowed_types.add(complex)
assert calc("3*5j") == 15j
.explicit
Explicitly evaluates the expression. This allows you to modify the semantics.
.explicit example
In many other programming languages 5 ^ 4 is the same as 5*5*5*5 = 625. In Python however, ^ is the bitwise xor operator and 5 ^ 4 evaluates to 1. Now we will redefine ^ to mean the same as ** by reaching into the .explicit module:
import ast
import operator
from math_evaluator.explicit import calc, op_map
op_map[ast.BitXor] = operator.__pow__
assert calc("5^4") == 625
math_parser exports .explicit.calc by default.
Further customization
If you want to change the fundamental syntax or semantics, you can file an issue. Then I will try my best at weighing cost vs gain. If I deem your feature request as "unworthy", that should not stop you from forking this project and extending it on your own. I am available for any questions you might have.
Release files for math-evaluator 0.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| math_evaluator-0.0.3.tar.gz | 4.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| math_evaluator-0.0.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 9.4 kB
Release files / math_evaluator-0.0.3.tar.gz
| Download URL | math_evaluator-0.0.3.tar.gz |
|---|---|
| Size | 4.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
135c354c61a3be297176067961671f696ac3bc1626df3055094ab32e496b7bc0
|
|
BLAKE2b-256 checksum How to use checksums |
7440c77c398e005f8f37551e4c2c03219917209df4054490d768a9e2753ebb06
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.5
|
Release files / math_evaluator-0.0.3-py3-none-any.whl
| Download URL | math_evaluator-0.0.3-py3-none-any.whl |
|---|---|
| Size | 4.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
040804047aa8981ad85e9031d4656dafdea1790c05b6c7221c1bfc4b8877cc97
|
|
BLAKE2b-256 checksum How to use checksums |
83ab57220ce7e3478748516ebd0501fe582e150100e0f18b46f02503c23a35ef
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.5
|