2015-08-05 3 views
4

Редактировать: Кажется, проблема на самом деле не связана с тем, что классы меняются. Кажется, я не могу получить классы для работы с Numba. Запуск (в качестве примера) код here выдает ошибки, связанные с подписями, а также:Ошибки подписи при использовании классов с Numba

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 

Задание (что я считаю) подпись с чем-то вроде @numba.jit("numba.void(numba.bool)") в строке 3 не помогает.

ответ

3

Последние версии numba не поддерживают классы jit'ing. Это было возможно в более старых версиях, но было удалено из-за низкой производительности в одном из последних рефакторингов. См. here.

Следующая версия Numba (0.20.1) должна повторно поддерживать их поддержку. См. discussion on the mailing list.

+0

А, я вижу. Я не мог найти упоминания об этом нигде в примечаниях к выпуску, документации или в Google. Полагаю, я подожду до следующей версии. Спасибо. –

0

Вышеприведенный ответ немного устарел. С version 0.23.0 numba имеет правильное значение class support, используя декоратор jitclass.

Смежные вопросы