Итак, основываясь на вопросе и ответе Как использовать 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 [] устанавливает эквивалентность, не так ли?