использование numba jitclass, где один атрибут - это другой jitclass из отдельного модуля - PullRequest
1 голос
/ 07 февраля 2020

В файле MyMod.py у меня есть

from numba import jitclass                 # import the decorator
from numba import float64, int32, bool_, deferred_type    # import the types
from collections import OrderedDict
import numpy as np

spec = OrderedDict()
spec['a'] = float64
spec['b'] = float64[:]

@jitclass(spec)
class MyClass(object):
    def __init__(self, a, len_b):
        self.a = a
        self.b = np.zeros(len_b, dtype=np.float64)

, а в MyOtherMod.py у меня есть

from numba import jitclass                 # import the decorator
from numba import float64, int32, bool_, deferred_type    # import the types
from collections import OrderedDict
import numpy as np
import MyMod

# spec1 = OrderedDict()
my_inst_type = deferred_type()
my_inst_type.define(MyMod.MyClass.class_type.instance_type)
# spec1['my_inst'] = my_inst_type
spec1 = [('my_inst', my_inst_type)]

@jitclass(spec1)
class MyContainerClass(object):
    def __init__(self, my_inst):
        self.my_inst = my_inst

Я пытаюсь использовать это в блокноте Jupyter с

import MyMod
import MyOtherMod
import importlib
importlib.reload(MyMod)
importlib.reload(MyOtherMod)

mc_inst = MyMod.MyClass(32.2, 7)

mcc_inst = MyMod.MyContainerClass(mc_inst)

Последняя строка кода выдает огромное сообщение об ошибке, наиболее важной частью которого является

File "MyMod.py", line 25:
    def __init__(self, my_inst):
        self.my_inst = my_inst
        ^

[1] During: lowering "(self).my_inst = my_inst" at C:\Users\cbaker2\Documents\Python Scripts\numba_test\MyMod.py (25)
[2] During: resolving callee type: jitclass.MyContainerClass#21843f1a248<my_inst:DeferredType#2303242342216>
[3] During: typing of call at <string> (3)

Если поместить оба класса в один файл, это все работает. Как мне заставить его работать в двух отдельных модулях?

...