将 类 与 Numba 一起使用时出现签名错误
Signature errors when using classes with Numba
编辑:看来这个问题实际上与classes改变无关。我似乎无法让 any classes 与 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 中有一个 class,它会根据某些初始条件更改为第二种类型的 class。当我尝试使用 Numba 编译这个 class 时,我得到了一个神秘的错误。这最好用一个例子来说明:
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)")
之类的内容指定(我认为是)签名没有帮助。
最新版本的 numba 不支持 jit'ing 类。这在旧版本中是可能的,但由于在后来的重构之一中表现不佳而被删除。参见 here。
下一版 Numba (0.20.1) 应该会重新引入对它们的支持。参见 discussion on the mailing list。
上面的答案现在有点过时了。由于 version 0.23.0 numba has proper class support 再次使用 jitclass
装饰器。
编辑:看来这个问题实际上与classes改变无关。我似乎无法让 any classes 与 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 中有一个 class,它会根据某些初始条件更改为第二种类型的 class。当我尝试使用 Numba 编译这个 class 时,我得到了一个神秘的错误。这最好用一个例子来说明:
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)")
之类的内容指定(我认为是)签名没有帮助。
最新版本的 numba 不支持 jit'ing 类。这在旧版本中是可能的,但由于在后来的重构之一中表现不佳而被删除。参见 here。
下一版 Numba (0.20.1) 应该会重新引入对它们的支持。参见 discussion on the mailing list。
上面的答案现在有点过时了。由于 version 0.23.0 numba has proper class support 再次使用 jitclass
装饰器。