Skip to main content

Polynomials as a numpy datatype

Project description

doc/.static/numpoly_logo.svg

circleci codecov pypi readthedocs

Numpoly is a generic library for creating, manipulating and evaluating arrays of polynomials.

The polynomial base class numpoly.ndpoly is a subclass of numpy.ndarray implemented to represent polynomials as array element. This makes the library very fast with the respect of the size of the coefficients. It is also adds compatibility with numpy functions and methods, where that makes sense, making the interface more intuitive.

Many numerical analysis, polynomial approximations as proxy predictors for real predictors to do analysis on. These models are often solutions to non-linear problems discretized with high mesh. As such, the corresponding polynomial approximation consist of high number of dimensions and large multi-dimensional polynomial coefficients. For these kind of problems numpoly is a good fit.

One example where numpoly is used as the backend is the uncertainty quantification library chaospy.

Installation

Installation should be straight forward:

pip install numpoly

And you should be ready to go.

Example usage

Constructing polynomial is typically done using one of the available constructors:

>>> numpoly.monomial(start=0, stop=4, names=("x", "y"))
polynomial([1, y, x, y**2, x*y, x**2, y**3, x*y**2, x**2*y, x**3])

It is also possible to construct your own from symbols:

>>> x, y = numpoly.symbols("x y")
>>> numpoly.polynomial([1, x**2-1, x*y, y**2-1])
polynomial([1, -1+x**2, x*y, -1+y**2])

Or in combination with numpy objects using various arithmetics:

>>> x**numpy.arange(4)-y**numpy.arange(3, -1, -1)
polynomial([1-y**3, x-y**2, x**2-y, -1+x**3])

The constructed polynomials can be evaluated as needed:

>>> poly = 3*x+2*y+1
>>> poly(x=y, y=[1, 2, 3])
polynomial([3+3*y, 5+3*y, 7+3*y])

Or manipulated using various numpy functions:

>>> numpy.reshape(x**numpy.arange(4), (2, 2))
polynomial([[1, x],
            [x**2, x**3]])
>>> numpy.sum(numpoly.monomial(13, names="z")[::3])
polynomial(1+z**3+z**6+z**9+z**12)

In addition there are also several operators specific to the polynomial:

>>> numpoly.diff([1, x, x**2], x)
polynomial([0, 1, 2*x])
>>> numpoly.gradient([x*y, x+y])
polynomial([[y, 1],
            [x, 1]])

Development

Development is done using Poetry manager. Inside the repository directory, install and create a virtual environment with:

poetry install

To run tests, run:

poentry run pytest numpoly test doc --doctest-modules

Questions & Troubleshooting

For any problems and questions you might have related to numpoly, please feel free to file an issue.

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 numpoly, version 0.1.6
Filename, size File type Python version Upload date Hashes
Filename, size numpoly-0.1.6-py2.py3-none-any.whl (75.7 kB) File type Wheel Python version py2.py3 Upload date Hashes View hashes
Filename, size numpoly-0.1.6.tar.gz (41.7 kB) File type Source Python version None Upload date Hashes View hashes

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 DigiCert DigiCert EV certificate StatusPage StatusPage Status page