Polynomials as a numpy datatype
Project description
Numpoly is a generic library for creating, manipulating and evaluating arrays of polynomials based on numpy.ndarray objects.
Feature Overview
Intuitive interface for users experienced with numpy, as the library provides a high level of compatibility with the numpy.ndarray, including fancy indexing, broadcasting, numpy.dtype, vectorized operations to name a few.
Computationally fast evaluations of lots of functionality inherent from numpy.
Vectorized polynomial evaluation.
Support for arbitrary number of dimensions and name for the indeterminants.
Native support for lots of numpy.<name> functions using numpy’s compatibility layer (which also exists as numpoly.<name> equivalents).
Support for polynomial division through the operators /, % and divmod.
Extra polynomial specific attributes exposed on the polynomial objects like poly.exponents, poly.coefficients, poly.indeterminants etc.
Polynomial derivation through functions like numpoly.diff, numpoly.gradient, numpoly.hessian etc.
Decompose polynomial sums into vector of addends using numpoly.decompose.
Variable substitution through numpoly.call.
numpoly is currently being 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. That is it. You should now be able to import the library in your Python REPL:
>>> import numpoly
Example Usage
Constructing polynomial is typically done using one of the available constructors:
>>> numpoly.monomial(start=0, stop=3, names=2)
polynomial([1, q0, q0**2, q1, q0*q1, q1**2])
It is also possible to construct your own from symbols:
>>> q0, q1 = numpoly.variable(2)
>>> numpoly.polynomial([1, q0**2-1, q0*q1, q1**2-1])
polynomial([1, q0**2-1, q0*q1, q1**2-1])
Or in combination with numpy objects using various arithmetics:
>>> q0**numpy.arange(4)-q1**numpy.arange(3, -1, -1)
polynomial([-q1**3+1, -q1**2+q0, q0**2-q1, q0**3-1])
The constructed polynomials can be evaluated as needed:
>>> poly = 3*q0+2*q1+1
>>> poly(q0=q1, q1=[1, 2, 3])
polynomial([3*q1+3, 3*q1+5, 3*q1+7])
Or manipulated using various numpy functions:
>>> numpy.reshape(q0**numpy.arange(4), (2, 2))
polynomial([[1, q0],
[q0**2, q0**3]])
>>> numpy.sum(numpoly.monomial(13)[::3])
polynomial(q0**12+q0**9+q0**6+q0**3+1)
Development
Development is done using Poetry manager. Inside the repository directory, install and create a virtual environment with:
poetry install
To run tests:
poetry run pytest numpoly test doc --doctest-modules
To build documentation, run:
cd doc/
make html
The documentation will be generated into the folder doc/.build/html.
Questions and Contributions
Please feel free to file an issue for:
bug reporting
asking questions related to usage
requesting new features
wanting to contribute with code
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
Hashes for numpoly-1.0.3-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 39d1264d304211192afbc51df4bd5a2a61eda38137926ea6e135e1361146deca |
|
MD5 | 26ba3b8a20a65d1bf90064c2faec1e5d |
|
BLAKE2b-256 | 86f1db97a7ada6adb351e22ca1c506eda3b69014f878005bb2dbc705054de43b |