Numba AOT компилирует функции с функциональными аргументами

#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. Думал, что сигнатуры функций могут передаваться только в виде строки. Это решило проблему, спасибо!