Computer Algebra System for working with math expressions
Project description
mathy_core: parse and manipulate math expressions
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
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 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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 69410412be65ec8f57da7dfa6d3eb5ee29c82820d40dbae81b68a45b33ad2a96 |
|
MD5 | e321a0fdc147fc5389c887fe5fe8cf79 |
|
BLAKE2b-256 | c3373e3700c353516a8f538ee559c8862bd2fcdf93fdc5b679299a4755683f0a |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | c471f216c55c1c1faf26e9d192d0b4b900b95c0b8ee38bc7d98564d61738400c |
|
MD5 | fc16ac4f2eab80df5cb71bffb3f41858 |
|
BLAKE2b-256 | db0d434ede1bf362f37e9be49a00ddaee6e65c7c71ec1f06eaa838f768e0b1a2 |