Hello, I have a code that runs smoothly on older versions of Numba (0.56.4
) and SciPy (1.7.3
). However, it encounters issues with the latest releases of these libraries. Specifically, I am looking for a way to integrate Numba’s vectorize
decorator with the Bessel functions J0
and J1
from SciPy’s special
module. Has anyone successfully accomplished this, especially in the context of the most recent versions of Numba and SciPy? I’d appreciate any insights or code examples. Thank you.
import numba
import scipy.special as sc
from numba import vectorize
# import numba_special # The import generates Numba overloads for special
@numba.vectorize('float64(float64,float64,float64)',nopython=True)
def f(ro, rs, delta):
return rs / ro * np.exp((-1 / delta) * (ro - rs))
@numba.vectorize('float64(float64,float64,float64)',nopython=True)
def mz(ro, rs, delta):
return (1 - f(ro, rs, delta)**2) / (1 + f(ro, rs, delta)**2)
@numba.vectorize('float64(float64,float64,float64)',nopython=True)
def mro(ro, rs, delta):
return (2 * f(ro, rs, delta) ) / (1 + f(ro, rs, delta)**2)
@vectorize('float64(float64)',nopython=True)
def jj0(x):
return(sc.j0(x))
@vectorize('float64(float64)',nopython=True)
def jj1(x):
return(sc.j1(x))
@vectorize('float64(float64,float64,int64,float64,float64,float64,float64,float64)',nopython=True)
def h_ro(a,b,N,ro,z,r1,r2,lz):
zeta = r2/r1
beta = lz/r1
x = np.linspace(a+(b-a)/(2*N), b-(b-a)/(2*N), N)
fx = jj1(x*ro)*(zeta*jj1(x*zeta)-jj1(x))*np.exp(x*beta*z)*(1-np.exp(-x*beta))
area = np.sum(fx)*(b-a)/N
return area