hgrecco / numbakit-ode

Leveraging numba to speed up ODE integration
Other
68 stars 3 forks source link

.. image:: https://img.shields.io/pypi/v/numbakit-ode.svg :target: https://pypi.python.org/pypi/numbakit-ode :alt: Latest Version

.. image:: https://img.shields.io/pypi/l/numbakit-ode.svg :target: https://pypi.python.org/pypi/numbakit-ode :alt: License

.. image:: https://img.shields.io/pypi/pyversions/numbakit-ode.svg :target: https://pypi.python.org/pypi/numbakit-ode :alt: Python Versions

.. image:: https://github.com/hgrecco/numbakit-ode/workflows/CI/badge.svg?branch=main :target: https://github.com/hgrecco/numbakit-ode/actions?query=workflow%3ACI

.. image:: https://github.com/hgrecco/numbakit-ode/workflows/Lint/badge.svg?branch=main :target: https://github.com/hgrecco/numbakit-ode/actions?query=workflow%3ALint

.. image:: https://coveralls.io/repos/github/hgrecco/numbakit-ode/badge.svg?branch=main :target: https://coveralls.io/github/hgrecco/numbakit-ode?branch=main

.. image:: https://readthedocs.org/projects/numbakit-ode/badge/ :target: http://numbakit-ode.readthedocs.org/ :alt: Docs

numbakit-ode: leveraging numba to speed up ODE integration

numbakit-ode (nbkode) is a Python package to solve ordinary differential equations (ODE) that uses Numba_ to compile code and therefore speed up calculations.

The API is very similar to scipy's integrate module therefore allowing for easy migration.

It runs in Python 3.7+ depending on NumPy, SciPy and Numba_. It is licensed under BSD.

It is extremely easy and natural to use:

.. code-block:: python

>>> import nbkode
>>> def func(t, y):
...     return -0.1 * y
>>> t0 = 0.
>>> y0 = 1.
>>> solver = nbkode.ForwardEuler(func, t0, y0)
>>> ts, ys = solver.run([0., 5., 10.])

You can get a list of all solvers:

.. code-block:: python

>>> import nbkode
>>> nbkode.get_solvers() #doctest: +SKIP

or filter by characteristics or group name (or names).

.. code-block:: python

>>> nbkode.get_solvers(implicit=False, fixed_step=True) #doctest: +SKIP
>>> nbkode.get_solvers('euler', 'adam-bashforth') #doctest: +SKIP

Quick Installation

To install numbakit-ode, simply (soon):

.. code-block:: bash

$ pip install numbakit-ode

or utilizing conda, with the conda-forge channel (soon):

.. code-block:: bash

$ conda install -c conda-forge numbakit-ode

and then simply enjoy it!

Design principles

Fast: We love Numba_. It allows you to write clean Python code that translates to optimized machine code at runtime. We aim to be able to leverage this power to solve a system of ordinary differential equations.

Simple but useful API: Solvers are classes easy to instantiate, with sensible defaults and convenient methods.

Correctness: We check against established libraries like SciPy_ that our implementation match those of established libraries using automated testing.

Data driven development: We take decisions based on data, and for this purpose we measure the performance of each part of the package, and the effect of each change we make.


numbakit-ode is maintained by a community. See AUTHORS_ for a complete list.

To review an ordered list of notable changes for each version of a project, see CHANGES_

.. NumPy: http://www.numpy.org/ .. SciPy: http://www.scipy.org/ .. Numba: https://numba.pydata.org/ .. pytest: https://docs.pytest.org/ .. airspeed velocity: https://asv.readthedocs.io .. AUTHORS: https://github.com/hgrecco/numbakit-ode/blob/master/AUTHORS .. _CHANGES: https://github.com/hgrecco/numbakit-ode/blob/master/CHANGES