版本 0.58.0 (2023年9月20日)
这是Numba的一个重要版本。Numba现在使用towncrier来创建发布说明,请在下面找到所有值得注意的项目的摘要。
亮点
新功能
numba.experimental.jitclass获得对__*matmul__方法的支持。
numba.experimental.jitclass现在支持以下方法:
__matmul____imatmul____rmatmul__
(PR-#8892)
改进
NumPy支持
@vectorize适应实现__array_ufunc__的参数。
使用numba.vectorize创建的通用函数(ufuncs)现在将尊重实现__array_ufunc__(NEP-13)的参数,以允许在从解释器调用ufunc时对参数和返回值进行预处理和后处理。
(PR-#8995)
CUDA更改
CUDA目标位运算ufunc支持。
添加了对CUDA目标上与位操作相关的一些ufunc的支持。具体包括:
numpy.bitwise_andnumpy.bitwise_ornumpy.bitwise_notnumpy.bitwise_xornumpy.invertnumpy.left_shiftnumpy.right_shift
(PR-#8974)
在CUDA中添加NumPy比较ufunc
此PR添加了对CUDA目标比较ufunc的支持(例如numpy.greater、numpy.greater_equal、numpy.less_equal等)。
(PR-#9007)
在Linux上报告libcuda.so的绝对路径
numba -s现在在Linux上报告libcuda.so的绝对路径,以帮助排查驱动程序问题,尤其是在WSL2上,Linux驱动程序可能在环境中被错误安装。
(PR-#9034)
向nvdisasm输出添加调试信息支持。
在通过nvdisasm进行调用的函数中,增加了对调试信息(源行和内联信息)的支持。例如,CUDA调度器.inspect_sass方法的输出现在已通过此信息得到增强。
(PR-#9035)
添加CUDA SASS CFG支持
此PR添加了以dot语言格式获取SASS CFG的支持。它向CUDADispatcher添加了一个inspect_sass_cfg()方法,并向nvdisasm命令行工具添加了-cfg标志。
(PR-#9051)
Bug修复
防止无效融合
此PR修复了一个问题:当一个数组在一个parfor中首次读取,随后又在同一parfor中写入时,该数组只被归类为在该parfor中被使用。当随后的另一个parfor也使用同一数组时,就会发生parfor的融合,这在第一个parfor也写入该数组的情况下应该被禁止。此PR将parfor中的此类数组视为既被使用又被定义,从而防止融合。
(PR-#7582)
修复用不兼容的第一类函数重载调度器的支持
修复了在将Dispatcher对象转换为第一类函数时未处理编译错误导致的问题。修复后,用户现在可以用不兼容的第一类函数重载调度器。详情请参考https://github.com/numba/numba/issues/9071。
(PR-#9072)
支持numpy.arange中的dtype关键字参数,并设置parallel=True
修复了parfors转换,以支持在numpy.arange(..., dtype=dtype)中使用dtype关键字参数。
(PR-#9095)
修复所有@overload使用与公共API匹配的参数名称。
Numba中某些用于NumPy和Python内置函数的@overload的参数名称与它们所重载的API中使用的参数名称不匹配。这导致在调用时使用参数名称作为关键字参数调用函数时,会产生编译错误。现在,这个问题已在整个代码库中得到普遍修复,并且正在运行一个单元测试,以尽力防止未来再次引入类似的错误。修复的函数包括:
来自Python内置函数:
complex
来自Python random模块:
random.seedrandom.gaussrandom.normalvariaterandom.randrangerandom.randintrandom.uniformrandom.shuffle
来自numpy模块:
numpy.argminnumpy.argmaxnumpy.array_equalnumpy.averagenumpy.count_nonzeronumpy.flipnumpy.fliplrnumpy.flipudnumpy.iinfonumpy.isscalarnumpy.imagnumpy.realnumpy.reshapenumpy.rot90numpy.swapaxesnumpy.union1dnumpy.unique
来自numpy.linalg模块:
numpy.linalg.normnumpy.linalg.condnumpy.linalg.matrix_rank
来自numpy.random模块:
numpy.random.betanumpy.random.chisquarenumpy.random.fnumpy.random.gammanumpy.random.hypergeometricnumpy.random.lognormalnumpy.random.paretonumpy.random.randintnumpy.random.random_samplenumpy.random.ranfnumpy.random.rayleighnumpy.random.samplenumpy.random.shufflenumpy.random.standard_gammanumpy.random.triangularnumpy.random.weibull
(PR-#9099)
弃用
弃用旧式NUMBA_CAPTURED_ERRORS
添加了NUMBA_CAPTURED_ERRORS=old_style的弃用计划。NUMBA_CAPTURED_ERRORS=new_style将在未来的版本中成为默认设置。详细信息请参阅https://numba.readthedocs.cn/en/stable/reference/deprecation.html#deprecation-of-old-style-numba-captured-errors
(PR-#9090)
拉取请求 (Pull-Requests)
PR #6647: 支持 intrinsic 装饰器的 prefer_literal 选项 (ashutoshvarma sklam)
PR #8462: 添加 PyBytes_AsString 和 PyBytes_AsStringAndSize (ianna)
PR #8633: DOC: 将 vectorize 和 guvectorize 示例转换为 doctest (Matt711)
PR #8854: 更新 mk_alloc 以支持 Numba-Dpex 计算遵循数据。 (mingjie-intel)
PR #8885: 修复 np.allclose 不处理默认参数的问题 (guilhermeleobas)
PR #8892: 在 jitclass 中添加对 __*matmul__ 方法的支持 (louisamand)
PR #8906: 在 jitclass 中添加对反射 dunder 方法的支持 (louisamand)
PR #8911: 移除 isinstance 实验性功能警告 (guilhermeleobas)
PR #8944: 为 np.isclose 添加异常处理 (guilhermeleobas)
PR #9022: 修复:更新 C++ ABI repo 引用 (emmanuel-ferdman)
PR #9028: 替换在 3.12 中移除的 imp 模块的使用 (hauntsaninja)
PR #9034: CUDA 库测试:报告 Linux 上加载的 libcuda.so 的绝对路径,+ 其他改进 (gmarkall)
PR #9039: 更正安装说明中的 git clone 链接。 (ellifteria)
PR #9068: 添加 np.geomspace (KrisMinchev)
PR #9069: 修复由于 importlib_resources 升级导致的 towncrier 错误 (sklam)
PR #9074: 添加 np.trim_zeros (sungraek guilhermeleobas)
PR #9082: 添加 np.vsplit, np.hsplit, and np.dsplit (KrisMinchev)
PR #9085: 为 np.row_stack 添加测试 (KrisMinchev)
PR #9087: 添加 np.polynomial.polyutils 中的 trimseq 以及 np.polynomial.polynomial 中的 polyadd, polysub, polymul (KrisMinchev)
PR #9094: 添加对 NUMBA_OPT 环境变量“max”级别的支持。 (stuartarchibald)
PR #9095: 支持 arange_parallel_impl 中的 dtype 关键字 (DrTodd13 sklam)
PR #9111: 修复 PR#9099 中的 ReST 语法错误 (stuartarchibald gmarkall sklam apmasell)
PR #9112: PR#9100 的修复 (stuartarchibald sklam)
PR #9113: 添加对 np.diagflat 的支持 (KrisMinchev)
PR #9114: 将 np 最小版本更新到 122 (stuartarchibald esc)
PR #9118: 添加对 np.resize() 的支持 (KrisMinchev)
PR #9190: 修复测试中多进程上下文不兼容的问题。 (stuartarchibald)