Numba jitclass 和继承

Numba jitclass and inheritance

我有一个 classes 的层次结构,我想通过使用 Numba jitclass 来加速我的代码。我已经针对一些没有 class 继承的示例测试了 @jitclass,它可以正常工作并加快代码速度。但是,如果我有 class 继承,则在编译期间发生错误。下面是演示问题的示例代码。如有任何意见和建议,我将不胜感激。现在对我来说,Numba 似乎不支持 class 继承,但我没有在文档中找到任何相关信息。 代码示例:

import numpy as np
from numba import jitclass         
from numba import int32, float32

spec = [
    ('n', int32),               
    ('val', float32[:]),          
]

@jitclass(spec)
class Parent(object):
    def __init__(self, n):
        self.n = n
        self.val = np.zeros(n, dtype=np.float32)

spec = [
    ('incr', float32),          
]

@jitclass(spec)
class Child(Parent):
    def __init__(self, n):
        Parent.__init__(self, n)
        self.incr = 2.

def func(self):
    for i in xrange(0, self.n):
        self.val[i] += self.incr
    return self.val

par = Parent(10)
chl = Child(10)
print chl.func()

我得到的错误是:

TypeError: cannot subclass from a jitclass

目前(从 0.28.1 开始),Numba 不支持来自 jitclass 的 subclassing/inheriting。它没有在文档中说明,但错误消息非常明确。我猜将来某个时候会添加此功能,但现在它是一个限制。