Jit — ошибка «Ошибка в конвейере режима nopython», несмотря на то, что nopython не используется в numbaPython

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Jit — ошибка «Ошибка в конвейере режима nopython», несмотря на то, что nopython не используется в numba

Сообщение Гость »

Я использую итерацию функции значения для решения сложной задачи динамического программирования со многими состояниями. Я хочу использовать numba/jit для ускорения моего кода (и, в конечном итоге, для распараллеливания циклов for). Когда я использую декоратор @jit в своем коде, я получаю ошибку nopython, несмотря на то, что я не вызываю режим nopython.

Код: Выделить всё

@jit
def vfi(cm, λ=1):
vf_new = np.zeros_like(cm.vf)
k_prime = np.zeros_like(cm.k_opt)
for k_i in range(cm.k_grid_size):
cm.set_k(cm.kgrid[k_i])
for b_i in range(cm.cb_grid_size):
cm.set_b(cm.cb_mesh[0][b_i])
for s_i in range(2):
cm.set_s(s_i)
b_prime = cm.b_prime(cm.kgrid)
vf_interp = RegularGridInterpolator((cm.kgrid, cm.cb_mesh[0],cm.sgrid), cm.vf)
objective = cm.F - cm.T(cm.kgrid) - cm.C(cm.kgrid) + cm.β*cm.p*np.array([vf_interp(x) for x in zip(cm.kgrid,b_prime,np.zeros_like(b_prime))]) + cm.β*(1-cm.p)*np.array([vf_interp(x) for x in zip(cm.kgrid,b_prime,np.ones_like(b_prime))])
vf_new[k_i,b_i,s_i] = np.max(objective)
k_prime[k_i,b_i,s_i] = np.argmax(objective)
error = np.max(np.abs(cm.vf - vf_new))
cm.vf = cm.vf + λ*(vf_new-cm.vf)
cm.k_opt = k_prime
return error

qe.util.tic()
cm = CarrybacksModel()
error = 10000000
itern=0
tol = 1e-5
while error>tol:
error = vfi(cm)
itern+=1
print(f"Iteration number {itern}, error = {error}.")
print(f"Completed in {itern} iterations.")
qe.util.toc()
возвращает следующую ошибку:

Код: Выделить всё

> ---------------------------------------------------------------------------
TypingError                               Traceback (most recent call last)
Cell In[57], line 7
5 tol = 1e-5
6 while error>tol:
----> 7     error = vfi(cm)
8     itern+=1
9     print(f"Iteration number {itern}, error = {error}.")

File ~\miniconda3\Lib\site-packages\numba\core\dispatcher.py:468, in _DispatcherBase._compile_for_args(self, *args, **kws)
464         msg = (f"{str(e).rstrip()} \n\nThis error may have been caused "
465                f"by the following argument(s):\n{args_str}\n")
466         e.patch_message(msg)
--> 468     error_rewrite(e, 'typing')
469 except errors.UnsupportedError as e:
470     # Something unsupported is present in the user code, add help info
471     error_rewrite(e, 'unsupported_error')

File ~\miniconda3\Lib\site-packages\numba\core\dispatcher.py:409, in _DispatcherBase._compile_for_args..error_rewrite(e, issue_type)
407     raise e
408 else:
--> 409     raise e.with_traceback(None)

TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Untyped global name 'RegularGridInterpolator': Cannot determine Numba type of 

File "..\..\..\..\AppData\Local\Temp\ipykernel_16688\910653365.py", line 12:


This error may have been caused by the following argument(s):
- argument 0: Cannot determine Numba type of 
Я знаю, что не могу использовать режим njit/nopython, поскольку я определяю свой собственный класс, а RegularGridInterpolator scipy кажется несовместимым. Однако я подумал, что если использовать декоратор @jit вместо @njit, то nopython никогда не будет вызываться. Почему я получаю сообщение об ошибке nopython?
При необходимости я готов использовать другую функцию вместо RegularGridInterpolator — я сам написал ее и украсил ее с помощью @jit, но все равно получил ту же ошибку .

Подробнее здесь: https://stackoverflow.com/questions/781 ... thon-in-nu
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»