使用Python类型提示与Numba

18

来自Numba网站:

from numba import jit

@jit
def f(x, y):
    # A somewhat trivial example
    return x + y

有没有办法让numba使用Python类型提示(如果已提供)?

2个回答

16

可以,也可以不行。你可以简单地使用普通的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装饰器中提供:

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没有自动理解注释并建立其签名的方式。


4
似乎很简单就能编写一个装饰器,提取类型注释,将其翻译为Numba,并通过使用翻译后的类型调用jit来包装函数。 - Mike
@Mike 如果这么简单,为什么Numba还没有实现呢?这是一个相当庞大的项目。因此,我认为在边缘情况下安全地完成这个任务非常困难。 - julaine

2
由于这是即时编译,您必须执行该函数以生成签名。
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)]

每次前一个签名无法适应数据时,都会生成一个新的签名。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接