Skip to main content

A mathematical expression parser supporting arithmetic, functions, and complex numbers

Project description

parsimathious

PyPI Python Tests License: MIT

parsimathious is a simple mathematical expression parser implemented with parsimonious. It supports basic arithmetic operations, parentheses, unary functions, constants, variables, and complex numbers.

Installation

You can install parsimathious using pip:

pip install parsimathious

Usage

Import the ExpressionParser and create an instance:

from parsimathious import ExpressionParser

parser = ExpressionParser()

Then you can parse and evaluate expressions:

result = parser("sin(pi / 2) + 1")
print(result)  # Output: 2.0

Supported functions and constants

On top of basic arithmetic operations, parsimathious supports the following unary functions and constants by default:

Name Python Implementation Description
sin math.sin Sine
cos math.cos Cosine
tan math.tan Tangent
log math.log Natural logarithm (base e)
sqrt math.sqrt Square root
exp math.exp Exponential (e^x)
log10 math.log10 Logarithm base 10
abs abs Absolute value
floor math.floor Floor (round down)
ceil math.ceil Ceiling (round up)
round round Round to nearest integer
sinh math.sinh Hyperbolic sine
cosh math.cosh Hyperbolic cosine
tanh math.tanh Hyperbolic tangent
asin math.asin Arc sine
acos math.acos Arc cosine
atan math.atan Arc tangent
asinh math.asinh Inverse hyperbolic sine
acosh math.acosh Inverse hyperbolic cosine
atanh math.atanh Inverse hyperbolic tangent
sec lambda x: 1 / math.cos(x) Secant
csc lambda x: 1 / math.sin(x) Cosecant
cot lambda x: 1 / math.tan(x) Cotangent

Constants

Name Value Description
pi math.pi The mathematical constant π
e math.e The mathematical constant e
i 1j The imaginary unit

Custom Unary Functions

It's also possible to support custom unary functions by passing a dictionary of function names to their implementations when creating the ExpressionParser:

import math
from parsimathious import ExpressionParser, UnaryFunctionMap

custom_functions: UnaryFunctionMap = {
    "log2": math.log2,  # Logarithm base 2
    "cube": lambda x: x ** 3,  # Cube function
}

parser = ExpressionParser(unary_functions=custom_functions)
result = parser("log2(8) + cube(3)")
print(result)  # Output: 30.0

Custom Constants

Custom constants can be passed via a dictionary of names to values when creating the ExpressionParser. This replaces the default constants (pi, e) rather than extending them, so include them again if you still need them:

import math
from parsimathious import ExpressionParser, ConstantMap

custom_constants: ConstantMap = {
    "pi": math.pi,
    "tau": 2 * math.pi,
}

parser = ExpressionParser(constants=custom_constants)
result = parser("tau / pi")
print(result)  # Output: 2.0

Constant names cannot overlap with variable names (see below), and i is reserved for the imaginary unit and cannot be used as a constant name.

Variables

Unlike constants, variables don't have a fixed value: their names are declared when creating the ExpressionParser, and their values are supplied at evaluation time, by passing a dictionary of names to values to the parser call (or to eval_ast):

from parsimathious import ExpressionParser

parser = ExpressionParser(variable_names=["x", "y"])
result = parser("x + y * 2", variables={"x": 1.0, "y": 3.0})
print(result)  # Output: 7.0

Each call only uses the variable values passed to it; if an expression references a declared variable but no value is provided for it, a ValueError is raised. As with constants, i is reserved for the imaginary unit and cannot be used as a variable name, and variable names cannot overlap with constant names.

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

parsimathious-0.2.1.tar.gz (5.3 kB view details)

Uploaded Source

Built Distribution

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

parsimathious-0.2.1-py3-none-any.whl (6.6 kB view details)

Uploaded Python 3

File details

Details for the file parsimathious-0.2.1.tar.gz.

File metadata

  • Download URL: parsimathious-0.2.1.tar.gz
  • Upload date:
  • Size: 5.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for parsimathious-0.2.1.tar.gz
Algorithm Hash digest
SHA256 25d2bbe019b0eb84aeab63f03c71ec3957dab8f527e926f86e957f3fd7e74058
MD5 c9cc9bb29f05b2468462e4060432d872
BLAKE2b-256 f95be15b67a85aed5f84d3407e6bd5b1cd42663be3b17931e3ed0c31aaa3a0ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for parsimathious-0.2.1.tar.gz:

Publisher: publish.yml on stur86/parsimathious

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file parsimathious-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: parsimathious-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 6.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for parsimathious-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6010ed16e503f2c5ed71e65fa4759b99b0394e45b7091aeab648110104473383
MD5 8659a5d37965012bd4e959630c58608f
BLAKE2b-256 450de632fd97ed821b265eb6af82e5fc8d0ed47bf5a3005676506cdca62f32f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for parsimathious-0.2.1-py3-none-any.whl:

Publisher: publish.yml on stur86/parsimathious

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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