Skip to main content

Arbitrary-precision formula parser and solver.

Project description

formula - Arbitrary-precision formula parser and solver


Development status

Status: Production/Stable

Development plan:

  • Complex numbers support. (Character i are reserved for this by default.)

This project built with pybind11.


On Unix (Linux, OS X)

  • pip install formula

On Windows (Requires Visual Studio 2015)

  • For Python 3.5+:

    • clone this repository
    • pip install ./formula
  • For earlier versions of Python, including Python 2.7:

    Pybind11 requires a C++11 compliant compiler (i.e. Visual Studio 2015 on Windows). Running a regular pip install command will detect the version of the compiler used to build Python and attempt to build the extension with it. We must force the use of Visual Studio 2015.

    • clone this repository
    • "%VS140COMNTOOLS%\..\..\VC\vcvarsall.bat" x64
    • set MSSdk=1
    • pip install ./formula

    Note that this requires the user building formula to have registry edition rights on the machine, to be able to run the vcvarsall.bat script.

Windows runtime requirements

On Windows, the Visual C++ 2015 redistributable packages are a runtime requirement for this project. It can be found here.

If you use the Anaconda python distribution, you may require the Visual Studio runtime as a platform-dependent runtime requirement for you package:

    - python
    - setuptools
    - pybind11

   - python
   - vs2015_runtime  # [win]


formula contains case sensitive (by default) string parser. Let's imagine that we have a string expression, e.g. "(x^2+y)/sin(a*z)". We want to calculate the value of this function in the following point:

x=0.001, y=0.0000000000000000000000555, z=-2, a=-1,

So we pass the expression to the formula constructor.

from formula import Formula
f5a = Formula("(x^2+y)/sin(a*z)")

And it is enough to call the get(...) method or the get_derivative(...) to calculate the value of the expression or the derivative of the expression at this point.

variables = {
  "x": "0.001",
  "y": "0.0000000000000000000000555",
  "z": "-2",
  "a": "-1",
value = f5a.get(variables)
x_derivative = f5a.get_derivative("x", variables)
z_derivative = f5a.get_derivative("z", variables)


formula is provided under Apache license that can be found in the LICENSE file. By using, distributing, or contributing to this project, you agree to the terms and conditions of this license.

Test call

from formula import Formula
pi = Formula("2*asin(x)", 64).get({"x": "1"})

Project details

Download files

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

Files for formula, version 1.1.4
Filename, size File type Python version Upload date Hashes
Filename, size formula-1.1.4-cp36-cp36m-win_amd64.whl (953.2 kB) File type Wheel Python version cp36 Upload date Hashes View
Filename, size formula-1.1.4-cp37-cp37m-win_amd64.whl (949.3 kB) File type Wheel Python version cp37 Upload date Hashes View
Filename, size formula-1.1.4-py3.6-win-amd64.egg (1.1 MB) File type Egg Python version 3.6 Upload date Hashes View
Filename, size formula-1.1.4-py3.7-win-amd64.egg (1.1 MB) File type Egg Python version 3.7 Upload date Hashes View
Filename, size formula-1.1.4.tar.gz (24.4 MB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page