Я пытаюсь сделать необязательную оптимизированную функцию с помощью numba, в зависимости от пользователя, установившего пакет. Я попытался просто сделать оператор if, чтобы добавить декоратор к назначенной функции, но это не удалось с ошибкой numba. Я не уверен, что это неправильное использование декоратора в python, или это просто проблема, связанная с тем, что numba может прочитать функцию. Любые предложения?
import numpy as np
try:
import numba
nonumba = False
except:
nonumba = True
def r(x,y):
if nonumba:
return _r(x,y)
else:
@numba.jit(nopython=True,fastmath = True)
def optR(x,y):
return _r(x,y)
optR(x,y)
def v(x,y):
if nonumba:
return _v(x,y)
else:
@numba.jit(nopython=True,fastmath = True)
def optV(x,y):
return _v(x,y)
optV(x,y)
def _r(x,y):
z = np.empty(x.size)
for i in range(0,x):
z[i] = v(i,y[i])
return z
def _v(x,y):
return x + y
r(np.linspace(1,1,4),np.linspace(1,1,4))
Это ошибки с:
numba.errors.TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Untyped global name '_r': cannot determine Numba type of <class 'function'>
File "src\seg1d\numbatest.py", line 17:
def optR(x,y):
return _r(x,y)
^