Skip to main content

Computer Algebra System for working with math expressions

Project description

mathy_core: parse and manipulate math expressions

Build Types codecov Pypi version Code style: black

Mathy core is a python package (with type annotations) for working with math problems. It has a tokenizer for converting plain text into tokens, a parser for converting tokens into expression trees, a rule-based system for manipulating the trees, a layout system for visualizing trees, and a set of problem generation functions that can be used to generate datasets for ML training.

🚀 Quickstart

You can install mathy_core from pip:

pip install mathy_core

📖 Documentation

Check out https://core.mathy.ai for API documentation, examples, and more!

Examples

Consider a few examples to get a feel for what Mathy core does.

Evaluate an expression

Arithmetic is a snap.

from mathy_core import ExpressionParser

expression = ExpressionParser().parse("4 + 2")
assert expression.evaluate() == 6

Evaluate with variables

Variable values can be specified when evaluating an expression.

from mathy_core import ExpressionParser, MathExpression

expression: MathExpression = ExpressionParser().parse("4x + 2y")
assert expression.evaluate({"x": 2, "y": 5}) == 18

Transform an expression

Expressions can be changed using rules based on the properties of numbers.

from mathy_core import ExpressionParser
from mathy_core.rules import DistributiveFactorOutRule

input = "4x + 2x"
output = "(4 + 2) * x"
parser = ExpressionParser()

input_exp = parser.parse(input)
output_exp = parser.parse(output)

# Verify that the rule transforms the tree as expected
change = DistributiveFactorOutRule().apply_to(input_exp)
assert str(change.result) == output

# Verify that both trees evaluate to the same value
ctx = {"x": 3}
assert input_exp.evaluate(ctx) == output_exp.evaluate(ctx)

Development

Install the prerequisites in a virtual environment (python3 required)

sh tools/setup.sh

Run the test suite and view code-coverage statistics

sh tools/test.sh

The tests cover ~90% of the code so they're a good reference for how to use the various APIs.

Semantic Versioning

Before Mathy Core reaches v1.0 the project is not guaranteed to have a consistent API, which means that types and classes may move around or be removed. That said, we try to be predictable when it comes to breaking changes, so the project uses semantic versioning to help users avoid breakage.

Specifically, new releases increase the patch semver component for new features and fixes, and the minor component when there are breaking changes. If you don't know much about semver strings, they're usually formatted {major}.{minor}.{patch} so increasing the patch component means incrementing the last number.

Consider a few examples:

From Version To Version Changes are Breaking
0.2.0 0.2.1 No
0.3.2 0.3.6 No
0.3.1 0.3.17 No
0.2.2 0.3.0 Yes

If you are concerned about breaking changes, you can pin the version in your requirements so that it does not go beyond the current semver minor component, for example if the current version was 0.1.37:

mathy_core>=0.1.37,<0.2.0

Contributors

Mathy Core wouldn't be possible without the wonderful contributions of the following people:


Justin DuJardin

JT Stukes

This project follows the all-contributors specification. Contributions of any kind welcome!

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

mathy_core-0.9.4.tar.gz (59.6 kB view details)

Uploaded Source

Built Distribution

mathy_core-0.9.4-py3-none-any.whl (74.1 kB view details)

Uploaded Python 3

File details

Details for the file mathy_core-0.9.4.tar.gz.

File metadata

  • Download URL: mathy_core-0.9.4.tar.gz
  • Upload date:
  • Size: 59.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for mathy_core-0.9.4.tar.gz
Algorithm Hash digest
SHA256 69410412be65ec8f57da7dfa6d3eb5ee29c82820d40dbae81b68a45b33ad2a96
MD5 e321a0fdc147fc5389c887fe5fe8cf79
BLAKE2b-256 c3373e3700c353516a8f538ee559c8862bd2fcdf93fdc5b679299a4755683f0a

See more details on using hashes here.

File details

Details for the file mathy_core-0.9.4-py3-none-any.whl.

File metadata

  • Download URL: mathy_core-0.9.4-py3-none-any.whl
  • Upload date:
  • Size: 74.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for mathy_core-0.9.4-py3-none-any.whl
Algorithm Hash digest
SHA256 c471f216c55c1c1faf26e9d192d0b4b900b95c0b8ee38bc7d98564d61738400c
MD5 fc16ac4f2eab80df5cb71bffb3f41858
BLAKE2b-256 db0d434ede1bf362f37e9be49a00ddaee6e65c7c71ec1f06eaa838f768e0b1a2

See more details on using hashes here.

Supported by

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