Skip to main content

Polynomials as a numpy datatype

Project description

https://github.com/jonathf/numpoly/raw/master/docs/.static/numpoly_logo.svg

circleci codecov readthedocs downloads pypi

Numpoly is a generic library for creating, manipulating and evaluating arrays of polynomials based on numpy.ndarray objects.

  • 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.

  • 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.derivative, numpoly.gradient, numpoly.hessian etc.

  • Decompose polynomial sums into vector of addends using numpoly.decompose.

  • Variable substitution through numpoly.call.

Installation

Installation should be straight forward:

pip install numpoly

Example Usage

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

>>> import numpoly
>>> numpoly.monomial(start=0, stop=3, dimensions=2)
polynomial([1, q0, q0**2, q1, q0*q1, q1**2])

It is also possible to construct your own from symbols together with numpy:

>>> import numpy
>>> 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)

Installation

Installation should be straight forward from pip:

pip install numpoly

Alternatively, to get the most current experimental version, the code can be installed from Github as follows:

  • First time around, download the repository:

    git clone git@github.com:jonathf/numpoly.git
  • Every time, move into the repository:

    cd numpoly/
  • After the first time, you want to update the branch to the most current version of master:

    git checkout master
    git pull
  • Install the latest version of numpoly with:

    pip install .

Development

Installing numpoly for development can be done from the repository root with the command:

pip install -e .[dev]

The deployment of the code is done with Python 3.10 and dependencies are then fixed using:

pip install -r requirements-dev.txt

Testing

To run test:

pytest --doctest-modules numpoly test docs/user_guide/*.rst README.rst

Documentation

To build documentation locally on your system, use make from the doc/ folder:

cd doc/
make html

Run make without argument to get a list of build targets. All targets stores output to the folder doc/.build/html.

Note that the documentation build assumes that pandoc is installed on your system and available in your path.

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

numpoly-1.3.3.tar.gz (369.7 kB view details)

Uploaded Source

File details

Details for the file numpoly-1.3.3.tar.gz.

File metadata

  • Download URL: numpoly-1.3.3.tar.gz
  • Upload date:
  • Size: 369.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.1

File hashes

Hashes for numpoly-1.3.3.tar.gz
Algorithm Hash digest
SHA256 86de3785eaf44f39a8a8e3d9970b14daa47cdfa21e6043a9818ba8d46e07170f
MD5 66e8c06c98ae93f5b6312000fafc5d16
BLAKE2b-256 dba84c310272f1e8c3c5a3213404dc4350dd651b66512dc90c4514fd902e7b9f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page