我编写了这个包装器以根据可用性(“可以numba
导入吗?”)和用户设置(“是否numba_enabled()
返回 True?”)来使用 numba。
这对于测试特别有用,我想在有和没有 numba 的情况下运行测试。
def try_numba_autojit(func):
def func_(*args):
if numba_enabled():
try:
import numba
except:
pass
else:
return numba.autojit(func)(*args)
return func(*args)
return func_
问题:包装器导致原本可以抛出此错误的函数:
*** OverflowError: can't convert negative value to unsigned char
如果我设置try_numba_autojit = numba.autojit
,覆盖包装器,则没有错误。我的结论是 *args 可能正在做一些 numba 不喜欢的事情。
在 pdb 中,我尝试手动解压缩 args:
(Pdb) numba.autojit(func)
<specializing numba function(<function _refine at 0xa53ec6c>)>
(Pdb) numba.autojit(func)(*args)
*** OverflowError: can't convert negative value to unsigned char
(Pdb) numba.autojit(func)(args[0], args[1], args[2], args[3], args[4], args[5], args[6])
*** OverflowError: can't convert negative value to unsigned char
这给出了同样的错误。
是否有推荐的定义一个函数try_numba_autojit
来避免让 numba 不安?