С сайта Numba:Используя подсказки типа питона с Numba
from numba import jit
@jit
def f(x, y):
# A somewhat trivial example
return x + y
Есть ли способ, чтобы иметь Numba подсказки типа использовать Python (если имеется)?
С сайта Numba:Используя подсказки типа питона с Numba
from numba import jit
@jit
def f(x, y):
# A somewhat trivial example
return x + y
Есть ли способ, чтобы иметь Numba подсказки типа использовать Python (если имеется)?
Да и нет. Вы можете просто использовать стандартный синтаксис python для аннотаций (декоратор jit
сохранит их). Основываясь на вашем простом примере:
from numba import jit
@jit
def f(x: int, y: int) -> int:
# A somewhat trivial example
return x + y
>>> f.__annotations__
{'return': int, 'x': int, 'y': int}
>>> f.signatures # they are not recognized as signatures for jit
[]
Однако явно (исполнение) подпись должна быть предоставлена в jit
-decorator:
from numba import int_
@jit(int_(int_, int_))
def f(x: int, y: int) -> int:
# A somewhat trivial example
return x + y
>>> f.signatures
[(int32, int32)] # may be different on other machines
Существует насколько я знаю не автоматический способ для jit
понимать аннотации и строить свою подпись из них.
Поскольку это как раз во время компиляции, необходимо выполнить функцию для создания подписей
In [119]: f(1.0,1.0)
Out[119]: 2.0
In [120]: f(1j,1)
Out[120]: (1+1j)
In [121]: f.signatures
Out[121]: [(float64, float64), (complex128, int64)]
Новая подпись генерируется каждый раз, когда предыдущий не соответствует данным.