A module for evaluating math expressions without eval(). Currently the module supports only simple math operations (eg. multiplication, subtraction, division, %) but in the future there will be functions support.
The module is available for installation from PyPI
$ pip install strmath
from strmath import evaluate
result = evaluate("(90 + 2) // 4")
print(result)
As tests show, the library is 100% accurate with python native evaluation:
+----------------+--------+---------+-----+-----------+-------------+
| | Python | StrMath | PEE | Mathparse | InfixParser |
+----------------+--------+---------+-----+-----------+-------------+
| Failures | 0 | 0 | 61 | 150 | 91 |
| Failures (%) | 0% | 0% | 30% | 75% | 45% |
+----------------+--------+---------+-----+-----------+-------------+
In the test above, 198 randomly generated samples were submitted to Python eval()
and several other parsing libraries, including strmath
.
As you can see, the library has 0 failures and almost same speed with native python. You can see test implementation here.
- basic math operations (+, -, /, //, *, **, %) eg.
"2 + 5 * 2" --> 12
- float operations
- braces eg.
"(2 + 5) * 2" --> 20
- functions from
math
module and some builtins
- custom functions registration
- correct
-
operator as neg (eg.50+-30
) - mathematical constants (i.e. PI)
- Tokenize expression (split it into operators and numbers)
- Apply operations order
- Build evaluation binary tree
- Evaluate the tree
This repository is licensed under MIT license. See LICENSE for details.