Компиляция этих простых функций с помощью Numba не выполняется, и невозможно определить тип Numba. - PullRequest
0 голосов
/ 12 июля 2020

Мне определенно чего-то не хватает, когда дело доходит до вывода типов в Numba. Я написал этот небольшой образец и не могу понять, почему он не может определить тип при компиляции. Вы можете воспроизвести его, просто попытавшись запустить его:

import numpy as np
from numba import njit, prange


@njit(["void(uint8[::1], int16)"])
def run_a(arr, numeric):
    final_result = run_b(arr, numeric)   # <<== FAILS HERE
    print(final_result)


@njit(["float64(uint8[::1], int16)"], fastmath=True, nogil=True)
def run_b(arr, numeric):
    value1 = 1.0
    value_array = np.zeros(numeric, np.float64)

    return value1 + value_array.sum()


array = np.arange(10, dtype=np.uint8)
run_a(array, 2)

Он не работает с:

numba.core.errors.TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Untyped global name 'run_b': cannot determine Numba type of <class 'numba.core.ir.UndefinedType'>

File "tests.py", line 7:
def run_a(arr, numeric):
    final_result = run_b(arr, numeric)
    ^

Почему он не может вывести типы в этом вызове? Я даже аннотировал сигнатуры функций, так что, насколько я могу судить, не должно быть никаких сомнений в их типе. Это всего лишь образец кода, я пытаюсь понять, что не так.

Что мне не хватает? Как заставить это скомпилировать?

1 Ответ

0 голосов
/ 12 июля 2020

Я обнаружил проблему ... нужно поднять функции, иначе они не будут компилироваться. Таким образом, изменение порядка так, чтобы run_b приходило до run_a, решает проблему.

...