Это определенно похоже на странную ошибку.Если я использую аргумент forceobj=True
для numba.jit
или если я передам locals
с любой из локальных переменных tup
, total
или idx
соответствующего типа, то функции Numba будут работать.
Еще более загадочно, если я просто добавлю вызовы к numba.typeof(idx)
, то это также сработает, не требуя дополнительных аргументов внутри вызова к jit
.К сожалению, когда я запускаю numba --annotate
из командной строки в моем скрипте с этими изменениями, похоже, что все они вызывают все, что трактуется как pyobject
.
Это все с numba 0.40.0.
Вот некоторые изменения, которые я пробовал в скрипте:
# file 'test_numba.py'
import numba
import numpy as np
@numba.jit()
# @numba.jit(forceobj=True)
# @numba.jit(locals={'tup': tuple, 'idx': np.int64, 'total': np.int64})
# also tried mixing and matching about 'locals' with and without the
# numba.typeof calls below, and used `numba --annotate test_numba.py`
# from command line to inspect annotated types.
def test_fn():
tup = (3,2,4,6,2)
total = 0
print(numba.typeof(tup))
print(numba.typeof(total))
for idx in range(5):
print(numba.typeof(idx))
total += tup[-idx]
return total
if __name__ == "__main__":
test_fn()