A module for evaluating math expressions without eval()
Project description
strmath
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.
Installation
The module is available for installation from PyPI
$ pip install strmath
Basic Usage
from strmath import evaluate
result = evaluate("(90 + 2) // 4")
print(result)
Accuracy
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.
Features
Currently Supported
- basic math operations (+, -, /, //, *, **, %) eg.
"2 + 5 * 2" --> 12
- float operations
- braces eg.
"(2 + 5) * 2" --> 20
- functions from
math
module and some builtins
Planned for Future
- custom functions registration
- correct
-
operator as neg (eg.50+-30
) - mathematical constants (i.e. PI)
Principle
- Tokenize expression (split it into operators and numbers)
- Apply operations order
- Build evaluation binary tree
- Evaluate the tree
License
This repository is licensed under MIT license. See LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file strmath-1.1.tar.gz
.
File metadata
- Download URL: strmath-1.1.tar.gz
- Upload date:
- Size: 6.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.14 CPython/3.10.5 Linux/5.15.0-1014-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a4435842e18475798353675c9c431d849b770fde7d86e68801bda96c07ba20e5 |
|
MD5 | 077ef669da2848c4a2f20c736f91e3c7 |
|
BLAKE2b-256 | 14f4fb15906eb1ba0de5c57da6a408641c6144cc0589d1a5469ad505b7a770ae |
File details
Details for the file strmath-1.1-py3-none-any.whl
.
File metadata
- Download URL: strmath-1.1-py3-none-any.whl
- Upload date:
- Size: 7.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.14 CPython/3.10.5 Linux/5.15.0-1014-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | aa6d231db0d9bb6814d0dc83589a855dedf03020054d45b48c8511cc1143e661 |
|
MD5 | 952fb585798e2955b8168dc25c0bb89e |
|
BLAKE2b-256 | 132456578747a28770bb04911f5a33a5306c25b4853bed4d75d9887d5b1c7c30 |