Z pewnością brakuje mi czegoś, jeśli chodzi o wpisanie wnioskowania w Numbie. Napisałem tę małą próbkę i nie da się dowiedzieć, dlaczego nie może wywnioskować typu podczas kompilacji. Możesz ponowną próbę, próbując go uruchomić:

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)

Nie powiedzie się z:

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)
    ^

Dlaczego nie może wywnioskować typów w tym połączeniu? Nawiązuję nawet podpisywanie funkcji, więc nie powinno być wątpliwości co typu, o ile mogę powiedzieć.

BTW Wiem, że to nie może uzyskać ogromnych zysków z Numbą. To tylko przykładowy kod, próbuję zrozumieć, co jest nie tak.

Czego brakuje? Jak uzyskać, aby skompilować?

0
Edy Bourne 12 lipiec 2020, 00:50

1 odpowiedź

Najlepsza odpowiedź

Znalazłem ten problem ... trzeba podnieść funkcje, albo nie sporządzają się. Tak więc odwrócenie porządku, tak że Run_B pojawia się befre run_a rozwiązuje problem.

0
Edy Bourne 11 lipiec 2020, 23:58