Если оператор декоратор на функции для необязательного импорта Numba - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь сделать необязательную оптимизированную функцию с помощью 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)
            ^
...