Skip to main content
Donate to the Python Software Foundation or Purchase a PyCharm License to Benefit the PSF! Donate Now

Arbitrary-precision formula parser and solver.

Project description

formula - Arbitrary-precision formula parser and solver

PyPI

Development status

Status: Beta

Development plan:

  • Complex numbers support. (Character i are reserved for this by default.)
  • Support getting all variables, numbers, functions after parsing.
  • Examples.
  • Support the LongReal from python. Auto conversion in the get method. Try ... any?

This project built with pybind11.

Installation

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 DISTUTILS_USE_SDK=1
    • 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:

requirements:
  build:
    - python
    - setuptools
    - pybind11

  run:
   - python
   - vs2015_runtime  # [win]

Documentation

The 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 getD(...) 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.getD("x", variables)
z_derivative = f5a.getD("z", variables)

License

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.

Filename, size & hash SHA256 hash help File type Python version Upload date
formula-1.0.0b4-cp37-cp37m-win32.whl (721.7 kB) Copy SHA256 hash SHA256 Wheel cp37
formula-1.0.0b4-py3.7-win32.egg (875.1 kB) Copy SHA256 hash SHA256 Egg 3.7
formula-1.0.0b4.tar.gz (24.4 MB) Copy SHA256 hash SHA256 Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page