版本 0.60.0 (2024年6月13日)
这是一个主要的 Numba 版本发布。Numba 现在支持 NumPy 2.0 的二进制版本。用户应注意,这尚未包括仍在进行中的与 NEP 50 相关的类型级别更改。此版本不保证与 NumPy 2.0 的执行级别兼容性,因此用户在使用 Numba 与 NumPy 2.0 时应预期会出现一些类型和数值偏差,这些偏差与正常 Python 行为有所不同。
请在下方找到所有值得注意项目的摘要。
亮点
NumPy 2.0 二进制支持
为 NumPy 2.0 添加了二进制支持。然而,这尚未包括仍在进行中的与 NEP 50 相关的类型级别更改。
以下是面向用户的更改摘要:
之前可用于数组的
ptp()
方法已被弃用。建议改用np.ptp(arr)
函数。数据类型
np.bool8
已被弃用,并被np.bool
取代。np.product
函数已被弃用;建议用户使用np.prod
代替。从 NumPy 2.0 版本开始,
itemset()
方法已从ndarray
类中移除。要实现相同的功能,请使用赋值操作arr[index] = value
。已弃用的常量
np.PINF
和np.NINF
应分别替换为np.inf
表示正无穷大和-np.inf
表示负无穷大。
(PR-#9466)
新功能
在JIT代码中增强guvectorize支持
广义通用函数支持已扩展,现在可以从 JIT 编译的函数中调用 @guvectorize
装饰的函数。但是,请注意,广播功能尚未支持。在需要广播的情况下调用 guvectorize 函数可能会导致不正确的行为。
(PR-#8984)
添加对 ufunc.at 的实验性支持
添加了对 ufunc.at
的实验性支持。
(PR-#9239)
添加 float(<字符串字面量>)
构造函数
添加了对 float(<字符串字面量>)
的支持。
(PR-#9378)
添加对 math.log2
的支持。
添加了对 math.log2
的支持。
(PR-#9416)
为 nopython 模式添加 math.nextafter 支持。
在 nopython 模式下支持 math.nextafter
。
(PR-#9438)
添加对 parfor 二元操作归约的支持。
之前,只有像 += 这样的就地操作可以在 prange 中用作归约。现在,通过这个 PR,形式为 a = a binop b 的二元操作归约也可以使用。
(PR-#9521)
改进
扩展 isinstance()
对 NumPy 日期时间类型的支持
在 isinstance()
中添加对 numpy.datetime64
和 numpy.timedelta64
类型的支持。
(PR-#9455)
Python 3.12 sys.monitoring
支持已添加到 Numba 的调度器中。
Python 3.12 引入了一个新的模块 sys.monitoring
,该模块提供了一个事件驱动的监控 API,供需要监控执行的工具使用,例如调试器或分析器。Numba 的分发器类(处理 Python 解释器和编译代码之间控制转移的代码)已更新,以在适当的时候发出 sys.monitoring.events.PY_START
和 sys.monitoring.events.PY_RETURN
。这使得监视这些事件的工具能够识别控制何时进入和返回编译代码。由于这一变化,Numba 编译的代码现在以与历史相同的方式被 cProfile
识别,即它将出现在性能分析中。
(PR-#9482)
NumPy 支持
增加了对 np.size()
的支持
为 NumPy 添加了 np.size()
支持,该功能之前不受支持。
(PR-#9504)
CUDA API 变更
支持编译为 LTO-IR
在编译API中增加了对将设备函数编译为LTO-IR的支持。
(PR-#9274)
在CUDA中支持math.log、math.log2和math.log10
CUDA 目标现在支持 np.log
、np.log2
和 np.log10
。
(PR-#9417)
Bug 修复
修复parfor变量提升分析。
如果一个变量用于构建容器(例如,元组、列表、映射、集合)或作为参数传递给调用,那么保守地假设它可能会逃逸当前的并行循环迭代,因此不应被提升。
(PR-#9532)
弃用
弃用 old_style 错误捕获
根据弃用计划,old_style 错误捕获已被弃用,现在 default 是 new_style。
(PR-#9549)
已过时的弃用
移除 numba.core.retarget
在 numba.core.retarget
中实现的一些实验性功能已被移除。这些功能主要用于 numba-dpex,但该项目已转而使用 target extension API 来替代 numba.core.retarget
。
(PR-#9539)
文档变更
numba.cuda.gpus.current
文档修正
numba.cuda.gpus.current
被错误地描述为一个函数,现在被描述为一个属性。
(PR-#9394)
CUDA 12 conda 安装文档
已为使用 CUDA 12 conda 的用户添加了安装说明。
(PR-#9487)
拉取请求:
PR #8984: 支持 @jit 内的 @gufunc (guilhermeleobas)
PR #9239: ufunc.at (guilhermeleobas)
PR #9378: 添加 float(<字符串字面量>) 构造函数 (guilhermeleobas)
PR #9394: 修复 TypeError: ‘_DeviceContextManager’ object is not callable (i7878)
PR #9411: 0.59.0 最终版本的文档更新。(stuartarchibald)
PR #9416: 添加 math.log2 支持 (guilhermeleobas)
PR #9417: 为 CUDA 添加 np.log* 绑定 (guilhermeleobas gmarkall)
PR #9454: 在 BaseContext 中不要尝试注册不适用于此目标的重载,并进行相关修复 (gmarkall)
PR #9482: 添加对 sys.monitoring 事件的支持。(stuartarchibald)
PR #9559: 更新版本支持表 0.60 (esc <https://github.com/esc>)
PR #9568: 修复 parfors 测试中的 sigabrt 问题 (esc <https://github.com/esc> stuartarchibald)