Metadata-Version: 2.1
Name: lagrange
Version: 0.3.0
Summary: Python library with a basic native implementation of Lagrange interpolation over finite fields.
Home-page: https://github.com/lapets/lagrange
Author: Andrei Lapets
Author-email: a@lapets.io
License: MIT
Platform: UNKNOWN
Description-Content-Type: text/x-rst
License-File: LICENSE

========
lagrange
========

Python library with a basic native implementation of Lagrange interpolation over finite fields.

|pypi| |readthedocs| |actions| |coveralls|

.. |pypi| image:: https://badge.fury.io/py/lagrange.svg
   :target: https://badge.fury.io/py/lagrange
   :alt: PyPI version and link.

.. |readthedocs| image:: https://readthedocs.org/projects/lagrange/badge/?version=latest
   :target: https://lagrange.readthedocs.io/en/latest/?badge=latest
   :alt: Read the Docs documentation status.

.. |actions| image:: https://github.com/lapets/lagrange/actions/workflows/lint-test-cover-docs.yml/badge.svg
   :target: https://github.com/lapets/lagrange/actions/workflows/lint-test-cover-docs.yml
   :alt: GitHub Actions status.

.. |coveralls| image:: https://coveralls.io/repos/github/lapets/lagrange/badge.svg?branch=master
   :target: https://coveralls.io/github/lapets/lagrange?branch=master
   :alt: Coveralls test coverage summary.

Purpose
-------
Native implementation of the Lagrange interpolation algorithm over finite fields.

Package Installation and Usage
------------------------------
The package is available on `PyPI <https://pypi.org/project/lagrange/>`_::

    python -m pip install lagrange

The library can be imported in the usual way::

    from lagrange import lagrange

Examples
--------
Interpolation can be performed on collections of points represented in a variety of ways::

    >>> lagrange({1: 15, 2: 9, 3: 3}, 17)
    4
    >>> lagrange([(1, 15), (2, 9), (3, 3)], 17)
    4
    >>> lagrange([15, 9, 3], 17)
    4
    >>> lagrange(\
        {1: 119182, 2: 11988467, 3: 6052427, 4: 8694701,\
         5: 9050123, 6: 3676518, 7: 558333, 8: 12198248,\
         9: 7344866, 10: 10114014, 11: 2239291, 12: 2515398},\
        15485867)
    123
    >>> lagrange(\
        [119182, 11988467, 6052427, 8694701, 9050123, 3676518,\
         558333, 12198248, 7344866, 10114014, 2239291, 2515398],\
        15485867)
    123

Documentation
-------------
The documentation can be generated automatically from the source files using `Sphinx <https://www.sphinx-doc.org/>`_::

    cd docs
    python -m pip install -r requirements.txt
    sphinx-apidoc -f -E --templatedir=_templates -o _source .. ../setup.py && make html

Testing and Conventions
-----------------------
All unit tests are executed and their coverage is measured when using `nose <https://nose.readthedocs.io/>`_ (see ``setup.cfg`` for configuration details)::

    python -m pip install nose coverage
    nosetests --cover-erase

Alternatively, all unit tests are included in the module itself and can be executed using `doctest <https://docs.python.org/3/library/doctest.html>`_::

    python lagrange/lagrange.py -v

Style conventions are enforced using `Pylint <https://www.pylint.org/>`_::

    python -m pip install pylint
    pylint lagrange

Contributions
-------------
In order to contribute to the source code, open an issue or submit a pull request on the `GitHub page <https://github.com/lapets/lagrange>`_ for this library.

Versioning
----------
Beginning with version 0.2.0, the version number format for this library and the changes to the library associated with version number increments conform with `Semantic Versioning 2.0.0 <https://semver.org/#semantic-versioning-200>`_.


