Python wrapper of LSODA (solving ODEs) which can be called from within numba functions.
Project description
NumbaLSODA
NumbaLSODA
is a python wrapper to the LSODA method in ODEPACK, which is for solving ordinary differential equation initial value problems. LSODA was originally written in Fortran. NumbaLSODA
is a wrapper to a C++ re-write of the original code: https://github.com/dilawar/libsoda
This package is very similar to scipy.integrate.solve_ivp
(see here), when you set method = 'LSODA'
. But, scipy.integrate.solve_ivp
invokes the python interpreter every time step which can be slow. Also, scipy.integrate.solve_ivp
can not be used within numba jit-compiled python functions. In contrast, NumbaLSODA
never invokes the python interpreter during integration and can be used within a numba compiled function which makes NumbaLSODA
a lot faster than scipy for most problems (see benchmark
folder).
Installation
NumbaLSODA
will only work on MacOS or Linux. Install with pip:
python -m pip install NumbaLSODA
Basic usage
from NumbaLSODA import lsoda_sig, lsoda
from numba import njit, cfunc
import numpy as np
@cfunc(lsoda_sig)
def rhs(t, u, du, p):
du[0] = u[0]-u[0]*u[1]
du[1] = u[0]*u[1]-u[1]*p[0]
funcptr = rhs.address # address to ODE function
u0 = np.array([5.,0.8]) # Initial conditions
data = np.array([1.0]) # data you want to pass to rhs (data == p in the rhs).
t_eval = np.linspace(0.0,50.0,1000) # times to evaluate solution
usol, success = lsoda(funcptr, u0, t_eval, data = data)
# usol = solution
# success = True/False
The variables u
, du
and p
in the rhs
function are pointers to an array of floats. Therefore, operations like np.sum(u)
or len(u)
will not work. However, you can use the function nb.carray()
to make a numpy array out of the pointers. For example:
import numba as nb
@cfunc(lsoda_sig)
def rhs(t, u, du, p):
u_ = nb.carray(u, (2,))
p_ = nb.carray(p, (1,))
# ... rest of rhs goes here using u_ and p_
Above, u_
and p_
are numpy arrays build out of u
and p
, and so functions like np.sum(u_)
will work.
Also, note lsoda
can be called within a jit-compiled numba function (see below). This makes it much faster than scipy if a program involves many integrations in a row.
@njit
def test():
usol, success = lsoda(funcptr, u0, t_eval, data = data)
return usol
usol = test() # this works!
@njit
def test_sp():
sol = solve_ivp(f_scipy, t_span, u0, t_eval = t_eval, method='LSODA')
return sol
sol = test_sp() # this does not work :(
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 Distributions
Hashes for NumbaLSODA-0.1.4-pp37-pypy37_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 814e0c3e3c6c7fed046d7a59d92bf0a49005e43a33c5672bd784342893c334de |
|
MD5 | 8a5aff024f9291ef911208e09b1e3af9 |
|
BLAKE2b-256 | abd241b041a86a518e19652273e4f9a3765069133171cb5b9c237931c066fb61 |
Hashes for NumbaLSODA-0.1.4-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8b7e552384dede4a841f529ea25ac54fc2379a373657ffa6b385fdf065484a53 |
|
MD5 | 3e256063c4bb04e1720ec719774bf781 |
|
BLAKE2b-256 | 69261620de17c197167a1a417230a326136f4ac800e543543cf824fed6ef24cd |
Hashes for NumbaLSODA-0.1.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 687ec51717c1c08881f0f5d0f28e9b49a59a847c9d5d26d3a7ea39dddcb8465b |
|
MD5 | af616f731bee5495b55fbc9bc8caefdf |
|
BLAKE2b-256 | 5064e6dbd8dfbf108007d9d656009523fdd89d3753129eaffc09b6dc4878600d |
Hashes for NumbaLSODA-0.1.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 788af0fc7df5ffcc2843da745a48ae6796b3ea9e7263268f0d84d3203d2d0780 |
|
MD5 | fd23ff3d87fbf2efe996676531fcbd56 |
|
BLAKE2b-256 | 2993dcf0763f58394bca5365946b402a91aa07c0d3928b669f1c4a6626343ac0 |
Hashes for NumbaLSODA-0.1.4-cp310-cp310-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bc2f4c6e7037ce35834ba2ae2df93a4e602e2fe93df13659f1a3a3539be66875 |
|
MD5 | 64f54901dcd44792e1c71191565ccf81 |
|
BLAKE2b-256 | 9e8d4a40d4cf3f6abe044f23a0dc9354b3c79ca8f4ff46c246446781c1947bf8 |
Hashes for NumbaLSODA-0.1.4-cp310-cp310-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 81b07d474462ac018c2da4996512c9db63c7700b77622f0489125c7f1f5810d7 |
|
MD5 | 2c1dd5db54abb805997c85cbedbaf93f |
|
BLAKE2b-256 | 108092245426b998c32418a51fab2a1e9f50f3b2d4de985c705e87c9157c4de2 |
Hashes for NumbaLSODA-0.1.4-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e222a12b54639a8eece3e7c6471de5862b155807f10525424f10329609d55db5 |
|
MD5 | df9af315bfc77db5eecc7a5bec252111 |
|
BLAKE2b-256 | 7d8d3a68c90f3156d980f255f4f68d1da598860a29aeeb9dc1bc101e8d3441ad |
Hashes for NumbaLSODA-0.1.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b9e809b68d7680b60f06a3f39d247078a0021b710b4ab0c45cf93a5ce9f3e4c6 |
|
MD5 | dd87eb6cd03d56baab3fae2a1126d190 |
|
BLAKE2b-256 | 8c47d6c6585bb38f71f77bdf83220862dde105a061422536450bd3013a4a8c22 |
Hashes for NumbaLSODA-0.1.4-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9ae18e9c5d71899cad2a6b43c6da3b368f1a83f005d2c3fecc863fc50e02eced |
|
MD5 | f765aa59fab6c72cc0ede98d349a62f2 |
|
BLAKE2b-256 | 1dc33ee12384a6a07130754af5d79c89e251069568d515cdc608133df516d7ec |
Hashes for NumbaLSODA-0.1.4-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b83099e68469aaebf0b44b96dbd167a9527802abe7045923fafd3995f206fd56 |
|
MD5 | 160090364371bb5d72f41641df2bc0eb |
|
BLAKE2b-256 | bb79515483854326ccc82182012e7c7b77fcbebebf6225608297076320401896 |
Hashes for NumbaLSODA-0.1.4-cp39-cp39-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8b9f3d03c95139cd8d9dc99c9ec9b22a747589fc84aaec504e052a9c8d198f97 |
|
MD5 | 26b7e9b98bf410d6affac1c8e7551695 |
|
BLAKE2b-256 | 6f03d58f4f388f0ec71a81449fe8be27f28d8a2eb88256b82549e3c487339a87 |
Hashes for NumbaLSODA-0.1.4-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6ac0c49b1018e782f982608a5db08bf4d63686038fb951d00362245623933e2e |
|
MD5 | 2bdb4aaeef524f4638b120581713ba0d |
|
BLAKE2b-256 | f0a7ab7d8013bdffbf8d10e766a63ac32276719b0ce96933b1f5538da50cafbb |
Hashes for NumbaLSODA-0.1.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 98fc0a0d1ac2aa8128dc2bcfbf62e3b27fbb91e8f9e1e2cfd10d3d03cea30e01 |
|
MD5 | baaa21e19f53fb24c3ea55174d7fdfdc |
|
BLAKE2b-256 | 34be56525af715ae2ce160de466f1773e6f297d7932058f85ec04519a2908353 |
Hashes for NumbaLSODA-0.1.4-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8e90c5180c3f170077143a67bc349450845d4f1b0152101934cb4efe7356bd2f |
|
MD5 | d66c8c1a3409b3e8b4798fd63779ec0c |
|
BLAKE2b-256 | 6e9bc26ad3846062553db59113a26492b06dec28eea08b121c2c8a42f4b0982e |
Hashes for NumbaLSODA-0.1.4-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f5882b46a8baff8b1b6c06574a9327af3033f077a7a887d8bccc5267cd15b715 |
|
MD5 | aae6d0945ea85791a4e0b1a541d24d65 |
|
BLAKE2b-256 | 2f013c432af0e082d0bd986f5565433da51b9c1df3b71c52eba6f3c523ae3b06 |
Hashes for NumbaLSODA-0.1.4-cp38-cp38-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | af0db401c6bea490ec82056c1da2623f2891c85ee6168c8eb59a797475e9db78 |
|
MD5 | 0f29cb5384d513b3aad6135cdedac12d |
|
BLAKE2b-256 | a71d20ab5079dd7dfe879316a849a5ffb5da9a4bdb4b011900828100cc265f80 |
Hashes for NumbaLSODA-0.1.4-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6889dd0788424606adc5419575ce09ecd79849422e6370e11bd16441ff4884ef |
|
MD5 | 84961f109b76d73ac0d241e85ad5867a |
|
BLAKE2b-256 | 46d49a3a06cf07c4b25cfc4b966b69b20ed1a0616ea2f680028fbf42fc404be7 |
Hashes for NumbaLSODA-0.1.4-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a78d89fb650e80a1dfbbaa2a34bca1434c37f50d60efa187fabcaaa58a8afd48 |
|
MD5 | efd032904122289ccaf286e1a08ccc85 |
|
BLAKE2b-256 | 31c288417551864a059400ed31e592c58d38c592e96a6b497f9660c25f04e8b3 |
Hashes for NumbaLSODA-0.1.4-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f02232c6c01b10eef99d717c33c22cd127a4012596026fb0b8af8bc3737c7981 |
|
MD5 | 33d2605e203cd986c103a1dc69c27c1b |
|
BLAKE2b-256 | 513277c11af197e9713683b5870fa89ee5f7b872ba05579007db6266e26302c7 |
Hashes for NumbaLSODA-0.1.4-cp37-cp37m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0185a8debb41d613d9dbd7d828ed444cd30f5768fc98029822630f3a219d6a48 |
|
MD5 | 37729a438fcc790a585493e50bef760e |
|
BLAKE2b-256 | 8db961248447a32079c1e6dc34e7632e4f3a0f96df2035c4a7167329182a5a80 |
Hashes for NumbaLSODA-0.1.4-cp37-cp37m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b12b9123e1c36a7a728f7ba09bc7d9bc223c950b8b89b1e0176c367429ddf4cf |
|
MD5 | 2c44bccf44056f18a2536b7c0e3da667 |
|
BLAKE2b-256 | 42be4d0ed95f735e8ec87938e945f0ec7f311da33bd44ed01b37396163be47c6 |
Hashes for NumbaLSODA-0.1.4-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7d162b33e425a9fdaa8aa9dbcc00d3ee3b27c2fac5859a2350132ee853861044 |
|
MD5 | 54185bb7926bcdc5548c276d32be34c1 |
|
BLAKE2b-256 | 445fb402b2ff1fe9eb1d3293a19098e60f84ff506e64d1348236d0e5fb98be58 |
Hashes for NumbaLSODA-0.1.4-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c747507c5816efadfb60a80c692a9c61f95f85a284b5ae21e93d247f5f3dcc36 |
|
MD5 | f64c800490f91b6cb0005f028f357fa2 |
|
BLAKE2b-256 | 70804ee3d60581f28ac68d2aea18204134a75a1d2f5299b1f9c9bc89ff24abbb |
Hashes for NumbaLSODA-0.1.4-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6c267acf6421248215404b0c3fd1df8608a2aeaf025a850726939f7493a415e0 |
|
MD5 | 629b5bf9fe64416fe6629af64649fbb9 |
|
BLAKE2b-256 | 26214af67fbd670b440413f80c6f11fc375a2607ea0fa9ad05f9600fb44ff69a |
Hashes for NumbaLSODA-0.1.4-cp36-cp36m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 79dc40f3fd9560e4de016688e60820fca5c16834871ce91747ec84c2d93c36c2 |
|
MD5 | 72d8be785666c4a5653f3cfe8afa8baf |
|
BLAKE2b-256 | 9ab2e7e92b9f6a43084d8247c3add6bb43d81319e06a7b405360fbcf6fb18b51 |
Hashes for NumbaLSODA-0.1.4-cp36-cp36m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 44bf79b93d762f25b1055b396ae98bc091d9a3445a065adbb378c464b8b3f45e |
|
MD5 | 3e0bcdae65351d81e0979f976cf6acf4 |
|
BLAKE2b-256 | 8f4a783ecb0bb5f0a9853b003f9cb974941a922f9f92f0478767eacfd2b92551 |
Hashes for NumbaLSODA-0.1.4-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3f4a26377f72778c6d81e95bd6b0e2fa78b7a7a8386cf168c289e16078bd560a |
|
MD5 | a6990dbba726a192e4d8c94570e65c61 |
|
BLAKE2b-256 | 5e0b5652d63bcbfcbad8492854fc7a5a5cb414343533ca6f9f9e01e71ec83918 |
Hashes for NumbaLSODA-0.1.4-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 509cf73fbefb4bd2031e72666045a7f3c5eaace4a1f7fa8430bdba75d7b76c9b |
|
MD5 | 56e32d146df8057e876732d25976011d |
|
BLAKE2b-256 | d49c2dbc3116222d45fb82c36164426c9bfe8ec51440c42819c236c176c09b47 |
Hashes for NumbaLSODA-0.1.4-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 70967c8f28c18c54f23cffed8ddebce18983b470eb077491f7ba6fc77dd08151 |
|
MD5 | 945c135bf2984628ff14e12bba194086 |
|
BLAKE2b-256 | fb4bcac32a288343c05694c5647ce494184bc74c3a921f78835bf4b531b56d93 |