Нетипизированное глобальное имя ‘sum_’: не удается определить тип Numba

#python #python-3.x #numpy #numba

#python #python-3.x #numpy #numba

Вопрос:

Я получаю сообщение об ошибке:

 numba.core.errors.TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Untyped global name 'sum_': cannot determine Numba type of <class 'function'>
  

для следующего кода:

 import numba as nb
from numba.pycc import CC

cc = CC('yin')

@cc.export('sum_', nb.float32(nb.float32[:]))
def sum_(a):
    s = 0
    for i in a:
        s  = i
    return s

@cc.export('average', nb.float32(nb.float32[:]))
def average(a):
    return sum_(a)/len(a)

cc.compile()
  

Что я должен делать?

Ответ №1:

Я уже сталкивался с этой проблемой однажды. Режим компиляции с опережением времени по какой-то причине не помогает в выводе типов, в отличие jit от или njit скомпилированных функций. Обходным путем, как предлагается здесь, было бы добавление дополнительного njit декоратора.

 import numba as nb
from numba.pycc import CC

cc = CC('yin')

@nb.njit
@cc.export('sum_', nb.float32(nb.float32[:]))
def sum_(a):
    s = 0
    for i in a:
        s  = i
    return s

@cc.export('average', nb.float32(nb.float32[:]))
def average(a):
    return sum_(a)/len(a)

cc.compile()