#python #numba #aot
Вопрос:
Я пытаюсь AOT скомпилировать в Numba функцию, у которой есть функциональный аргумент, но я не могу найти способ правильно указать ее подпись. Используя очень простой пример со стандартным @njit
декоратором numba, я бы написал:
import numba as nb @nb.njit(nb.f8(nb.f8, nb.f8)) def fcn_sum(a, b): return a b @nb.njit(nb.f8(nb.typeof(fcn_sum), nb.f8, nb.f8)) def test(fun, a, b): return fun(a, b)
где nb.typeof(fcn_sum)
возвращает объект диспетчера, который действителен только для fcn_sum
функции. К сожалению, одна и та же стратегия для компиляции AOT приводит NameError
к ошибке, поскольку оба nb
и typeof
не распознаются:
@cc.export('test', 'f8(nb.typeof(fcn_sum), f8, f8)') def test(fun, a, b): return fun(a, b)
Как я могу указать сигнатуру функциональных аргументов, чтобы этот пример работал?
Ответ №1:
При использовании той же подписи, что и в случае @njit, ошибки не возникает:
@cc.export('test', nb.f8(nb.typeof(fcn_sum), nb.f8, nb.f8)) def test(fun, a, b): return fun(a, b)
Комментарии:
1. Думал, что сигнатуры функций могут передаваться только в виде строки. Это решило проблему, спасибо!