首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试numba的包装器

尝试numba的包装器
EN

Stack Overflow用户
提问于 2014-01-28 02:44:03
回答 1查看 243关注 0票数 1

我写了这个包装器,根据可用性来决定是否使用numba (“numba可以导入吗?”)和用户设置(“numba_enabled()是否返回True?")。

这对于测试特别有用,我想在有numba和没有numba的情况下运行测试。

代码语言:javascript
复制
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_

问题:包装器会导致函数抛出这个错误:

代码语言:javascript
复制
*** OverflowError: can't convert negative value to unsigned char

如果我设置了try_numba_autojit = numba.autojit,覆盖包装器,就不会出现错误。我的结论是*args可能正在做一些numba不喜欢的事情。

在pdb中,我尝试手动解压参数:

代码语言:javascript
复制
(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?

EN

回答 1

Stack Overflow用户

发布于 2014-01-28 04:11:58

我不知道为什么你所做的事情不起作用,但是如果你可以在包装时测试numba的可用性/使用性,而不是函数调用时,这可能会起作用(未测试,抱歉)

代码语言:javascript
复制
def try_numba_autojit():
    if numba_enabled():
        try:
            import numba
            return numba.autojit
        except ImportError:
            pass
    return lambda func: func

并像这样使用:

代码语言:javascript
复制
@try_numba_autojit()
def f(a,b,c): ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21389007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档