У меня возникают проблемы, чтобы начать использовать Numba в классе Python - PullRequest
0 голосов
/ 08 февраля 2019

Итак, основываясь на вопросе и ответе Как использовать Python Class с Numba и справочной страницей Numba https://numba.pydata.org/numba-doc/dev/user/jitclass.html

Я попытался скомпилировать класс в этой среде.

Изначально я определил спецификацию для класса и добавил соответствующую сигнатуру

    @jitclass(spec)

перед определением класса.Как в ссылке и предыдущем ответе.

spec = [('max_k_w',float64),
        ('max_k_o',float64),
        ('lw',float64),
        ('ew',float64),
        ('tw',float64),
        ('lo',float64),
        ('eo',float64),
        ('to',float64),
        ('u0',float64),
        ('mu_w',float64),
        ('mu_o',float64)]

@jitclass(spec)
class LET_Perm():

    self.params = {
        "max_kr_w"                                                  : max_k_w,
        "max_kr_o"                                                  : max_k_o,
        "L_w_coeff(Moghadasi2015)"                                  : lw,
        "E_w_coeff(Moghadasi2015)"                                  : ew,
        "T_w_coeff(Moghadasi2015)"                                  : tw,
        "L_o_coeff(Moghadasi2015)"                                  : lo,
        "E_o_coeff(Moghadasi2015)"                                  : eo,
        "T_o_coeff(Moghadasi2015)"                                  : to,
        "residual_w"                                                : u_0,
        "viscosity_o"                                               : mu_w,
        "viscosity_w"                                               : mu_o
    }

    # model definitions and parameters
    max_k_w       = self.params["max_kr_w"]
    max_k_o       = self.params["max_kr_o"]

и много строк ниже, я называю этот класс

bl = LET_Perm(0.533,0.781,4.02,2.0,0.41,1,1.18,1.28,0.2,0.97,1.74)

Внутри класса я определил соответствующие функции свойств (я предполагаю, что мы пишем этооператор только один раз, говоря, что ВСЕ функции отныне и внутри класса будут подвергаться процессу numba.)

К сожалению, при запуске сценария я получаю следующее сообщение:

File "let_perm.py", line 40:
def __init__(self,max_k_w=0.533,max_k_o=0.781,lw=4.02,ew=2.0,tw=0.41,
    <source elided>
        "viscosity_o"                                               : mu_w,
        "viscosity_w"                                               : mu_o
        ^

[1] During: resolving callee type: jitclass.LET_Perm#5606fa569e48<max_k_w:float64,max_k_o:float64,lw:float64,ew:float64,tw:float64,lo:float64,eo:float64,to:float64,u0:float64,mu_w:float64,mu_o:float64>

[2] During: typing of call at <string> (3)

Я понимаюпараметры должны были быть числами с плавающей точкой, но внутри класса они обрабатываются как числа с плавающей точкой .... Объект self.params [] устанавливает эквивалентность, не так ли?

...