2016-10-19 2 views
1

Ich habe eine Hierarchie von Klassen und ich möchte meinen Code mit Numba Jitclass beschleunigen. Ich habe @jitclass für einige Beispiele ohne Klassenvererbung getestet und es funktioniert richtig und beschleunigt den Code. Wenn ich jedoch Klassenvererbung habe, trat der Fehler während der Kompilierung auf. Unten ist der Beispielcode, der das Problem zeigt. Ich wäre sehr dankbar für Kommentare und Anregungen. Jetzt sieht es für mich so aus, als ob die Klassenvererbung von Numba nicht unterstützt wird, aber ich habe in der Dokumentation keine Informationen darüber gefunden. Code-Beispiel:Numba Jitclass und Vererbung

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() 

Der Fehler ich habe ist:

TypeError: cannot subclass from a jitclass 

Antwort

1

Derzeit (Stand 0.28.1), Numba nicht unterstützt Subklassifizieren/von einem jitclass vererben. Es ist nicht in der Dokumentation angegeben, aber die Fehlermeldung ist ziemlich explizit. Ich schätze, diese Fähigkeit wird irgendwann in der Zukunft hinzugefügt werden, aber im Moment ist es eine Einschränkung.