我写了这个包装器,根据可用性来决定是否使用numba (“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中,我尝试手动解压参数:
(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?
发布于 2014-01-28 04:11:58
我不知道为什么你所做的事情不起作用,但是如果你可以在包装时测试numba的可用性/使用性,而不是函数调用时,这可能会起作用(未测试,抱歉)
def try_numba_autojit():
if numba_enabled():
try:
import numba
return numba.autojit
except ImportError:
pass
return lambda func: func并像这样使用:
@try_numba_autojit()
def f(a,b,c): ...https://stackoverflow.com/questions/21389007
复制相似问题