Skip to main content

A fast and secure mathematical expression evaluator.

Project description


Math Engine

Math Engine is a high-precision, modular calculation engine written in pure Python.
It provides a complete processing pipeline:

tokenizing → parsing (AST) → evaluating → optional equation solving

The package is available on PyPI:

pip install math-engine

✨ Features

  • Tokenizer Converts raw text to tokens: numbers, operators, parentheses, variables, functions.

  • Parser (AST) Recursive-descent parser with correct operator precedence.

  • Evaluator

    • High-precision Decimal arithmetic (precision = 50)
    • Fraction support where needed
    • Scientific functions: sin, cos, tan, log, , π, e, etc.
    • Supports variables via dictionary injection evaluate("2+LEVEL", {"LEVEL": 0.5})
  • Equation Solver

    • Solves linear equations with one variable
  • Settings system

    • Configurable decimal places
    • Output formats
    • Scientific mode
    • Robust load/save system via config_manager
  • Custom errors with clean messages.


🚀 Quick Start

1. Basic Evaluation

from math_engine import evaluate

print(evaluate("3 * (2 + 5) - 4^2")) # -> 5

2. Comparison

from math_engine import evaluate

print(evaluate("((3 * 3) / 2) = 7 + 5")) # -> False

3. Using Variables

You can inject any number of variables:

from math_engine import evaluate

test_vars = {
    "LEVEL": 0.5,
    "ENABLED": 1,
}

expr = "2 + 2 - LEVEL - 1"
result = evaluate(expr, test_vars)

print(result)     # -> 2.5 (depending on formatting settings)

Useful for:

  • config systems
  • scripting
  • modding tools
  • dynamic calculations

4. Solving Equations

from math_engine import evaluate

solution = evaluate("3x + 5 = 11")
print(solution)   # -> 2 (for x = 2)

5. Scientific Functions

from math_engine import evaluate

print(evaluate("sin(3π/4)")) # -> 0.71
print(evaluate("√(81)"))     # -> 9
print(evaluate("log(100)"))  # -> 4.61

⚙️ Settings: Load / Modify / Save

Math Engine includes a built-in settings system (config_manager) to control:

  • Decimal precision
  • Fraction vs Decimal output
  • Thousands separators

Load all existing settings

from math_engine import load_all_settings

print(load_all_settings())

This loads e.g.:

{
    "decimal_places": 2,
    "use_degrees": false,
    "allow_augmented_assignment": true,
    "fractions": false
}

Load specific existing settings

from math_engine import load_one_setting

print(load_one_setting("decimal_places")) # -> 2

Modify / save settings in code

from math_engine import change_setting

change_setting("decimal_places", 10)  # -> 1 (for saved successfully)
change_setting("decimal_places", "a") # -> -1 (for  not saved successfully)

Use settings when evaluating

If your engine exposes something like:

from math_engine import evaluate, load_all_settings

settings = load_all_settings()

print(evaluate("1/3"))

This allows:

  • consistent output across UI/CLI
  • user-customizable formatting
  • integration with your calculator GUI

(If your package exposes the settings differently, I can adapt this section.)


📁 Project Structure

math_engine/
├── MathEngine.py        # Core tokenizer, parser, evaluator, solver
├── ScientificEngine.py  # Scientific functions
├── config_manager.py    # Load + save user settings
├── error.py             # Custom error classes
└── config.json          # Saves all the settings
└── __init__.py          # Exports evaluate(), solve(), MathEngine, etc.


🛠️ Development

git clone https://github.com/JanTeske06/math_engine
cd math_engine
pip install -e .

Run tests:

pytest

📜 License

This project is licensed under the MIT License - see the dedicated LICENSE file for details.


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

math_engine-0.1.4.tar.gz (20.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

math_engine-0.1.4-py3-none-any.whl (21.1 kB view details)

Uploaded Python 3

File details

Details for the file math_engine-0.1.4.tar.gz.

File metadata

  • Download URL: math_engine-0.1.4.tar.gz
  • Upload date:
  • Size: 20.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for math_engine-0.1.4.tar.gz
Algorithm Hash digest
SHA256 1ac673df505e56c5b947d3f1f5a41cf6251d981aa319ee733003517b447fa3cc
MD5 e26f836f74a4ed44e42c4995386dd89a
BLAKE2b-256 ba637d88c9dab47fadab3eccb7b2c1ebc151a27098563f90ce515edddefd76ef

See more details on using hashes here.

File details

Details for the file math_engine-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: math_engine-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 21.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for math_engine-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 48d2be73521a6156f6cd773e74bdbf7747a08cf0d162a167dc0666314195ad75
MD5 fcef9487f808d7608ab9f4837da102b4
BLAKE2b-256 3895a8a6232abfc99640e2ce383e76a9ccb0113bdb06e3f4f42ad7596d1d24c7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page