版本 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
创建的通用函数(ufunc
s)现在将尊重实现__array_ufunc__
(NEP-13)的参数,以允许在从解释器调用ufunc时对参数和返回值进行预处理和后处理。
(PR-#8995)
CUDA更改
CUDA目标位运算ufunc
支持。
添加了对CUDA目标上与位操作相关的一些ufunc
的支持。具体包括:
numpy.bitwise_and
numpy.bitwise_or
numpy.bitwise_not
numpy.bitwise_xor
numpy.invert
numpy.left_shift
numpy.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.seed
random.gauss
random.normalvariate
random.randrange
random.randint
random.uniform
random.shuffle
来自numpy
模块:
numpy.argmin
numpy.argmax
numpy.array_equal
numpy.average
numpy.count_nonzero
numpy.flip
numpy.fliplr
numpy.flipud
numpy.iinfo
numpy.isscalar
numpy.imag
numpy.real
numpy.reshape
numpy.rot90
numpy.swapaxes
numpy.union1d
numpy.unique
来自numpy.linalg
模块:
numpy.linalg.norm
numpy.linalg.cond
numpy.linalg.matrix_rank
来自numpy.random
模块:
numpy.random.beta
numpy.random.chisquare
numpy.random.f
numpy.random.gamma
numpy.random.hypergeometric
numpy.random.lognormal
numpy.random.pareto
numpy.random.randint
numpy.random.random_sample
numpy.random.ranf
numpy.random.rayleigh
numpy.random.sample
numpy.random.shuffle
numpy.random.standard_gamma
numpy.random.triangular
numpy.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)