使用Numba课程时出现签名错误

时间:2015-08-05 13:34:50

标签: python numba

编辑:似乎问题实际上与类更改的事实无关。我似乎无法让任何类与Numba一起工作。运行(作为示例)代码here也会产生与签名相关的错误:

Traceback (most recent call last):
  File "numba_test.py", line 7, in <module>
    class test_base_class_numba(object):
  File "numba_test.py", line 8, in test_base_class_numba
    @numba.void()
TypeError: 'Signature' object is not callable

我在Python中有一个类,它根据一些初始条件更改为第二类类。当我尝试用Numba编译这个类时,我得到了一个神秘的错误。最好用一个例子说明这一点:

import numba

@numba.jit
class First():
    def __init__(self, test):
        self.some_inherited_property = 1

        if test:
            self.__class__ = SecondA
        else:
            self.__class__ = SecondB

class SecondA(First):
    def some_func_a():
        print "I am class SecondA"

class SecondB(First):
    def some_func_b():
        print "I am class SecondB"

thing = First(False)

当我运行此代码时,出现以下错误:

Traceback (most recent call last):
  File "numba_test.py", line 3, in <module>
    @numba.jit
  File ".../numba/decorators.py", line 155, in jit
    targetoptions=options)
  File ".../numba/dispatcher.py", line 262, in __init__
    pysig = utils.pysignature(py_func)
  File ".../funcsigs/__init__.py", line 176, in signature
    raise ValueError('callable {0!r} is not supported by signature'.format(obj))
ValueError: callable <class __main__.First at 0x7f37696fb4c8> is not supported by signature

在第3行用@numba.jit("numba.void(numba.bool)")之类的东西指定(我认为是)签名没有用。

2 个答案:

答案 0 :(得分:3)

最新版本的numba不支持jit'ing类。这在旧版本中是可能的,但由于后来的一个重构中的性能不佳而被删除。请参阅here

Numba的下一个版本(0.20.1)应该重新引入对它们的支持。见discussion on the mailing list

答案 1 :(得分:0)

上面的答案现在有点过时了。由于version 0.23.0 numba使用jitclass装饰器再次具有适当的class support