版本 0.57.1 (2023年6月21日)

拉取请求:

  • PR #8964: 修复cuda随机模块中缺少的nopython关键字 (esc)

  • PR #8965: 修复 np.angle 的返回数据类型 (guilhermeleobas esc)

  • PR #8982: 不要为 parfor gufunc 执行 parfor 诊断传递。(DrTodd13)

  • PR #8996: 为8940添加测试 (esc)

  • PR #8958: 复活导入,这次在注册表初始化中 (esc)

  • PR #8947: 引入内部 _isinstance_no_warn (guilhermeleobas esc)

  • PR #8998: 修复8939(第二次尝试) (esc)

  • PR #8978: 使用 MVCLinker 时导入 MVC 包。(bdice)

  • PR #8895: CUDA: 启用使用CG的函数的缓存 (gmarkall)

  • PR #8976: 修复 ptxcompiler/cubinlinker 包的索引 URL。(bdice)

  • PR #9004: 当库不可用时跳过MVC测试 (gmarkall esc)

  • PR #9006: 链接到版本支持表,而不是使用显式版本 (esc)

  • PR #9005: 修复: 问题 #8923 - 避免在 CUDA ufuncs 中出现虚假的设备到主机传输 (gmarkall)

作者:

版本 0.57.0 (2023年5月1日)

此版本继续为 Numba 添加新功能、错误修复和稳定性改进。请注意,此版本包含大量弃用和即将弃用的通知,旨在为未来开发 Numba 的新技术提供便利。另请注意,这将是 Numba 团队支持 Windows 32 位包的最后一个版本。

核心依赖升级的亮点:

  • 支持 Python 3.11(最低要求已移至 3.8)

  • 支持NumPy 1.24(最低要求提升至1.21)

Python 语言支持增强:

  • 异常类现在支持非编译时常量的参数。

  • 内置函数 hasattrgetattr 支持编译时常量属性。

  • 内置函数 strrepr 现在与它们的 Python 实现类似。可以为类型关联自定义的 __str____repr__ 函数,并且它们会按预期工作。

  • Numba 在 str.startswith 中的 unicode 功能现在支持 kwargs startend

  • minmax 现在支持布尔类型。

  • 增加了对 dict(iterable) 构造函数的支持。

NumPy 功能/增强:

  • 最大的新功能集是在 numpy.random.Generator 支持中,现在支持绝大多数常用的分布。即:

    • Generator.beta

    • Generator.chisquare

    • Generator.exponential

    • Generator.f

    • Generator.gamma

    • Generator.geometric

    • Generator.integers

    • Generator.laplace

    • Generator.logistic

    • Generator.lognormal

    • Generator.logseries

    • Generator.negative_binomial

    • Generator.noncentral_chisquare

    • Generator.noncentral_f

    • Generator.normal

    • Generator.pareto

    • Generator.permutation

    • Generator.poisson

    • Generator.power

    • Generator.random

    • Generator.rayleigh

    • Generator.shuffle

    • Generator.standard_cauchy

    • Generator.standard_exponential

    • Generator.standard_gamma

    • Generator.standard_normal

    • Generator.standard_t

    • Generator.triangular

    • Generator.uniform

    • Generator.wald

    • Generator.weibull

    • Generator.zipf

  • 在 NumPy ndarray 类型上实现了 nbytes 属性。

  • 现在支持嵌套数组类型的嵌套。

  • datetimetimedelta 类型可以转换为 int

  • F 顺序迭代在 ufunc 生成中得到支持,以在使用主要为 F 顺序数组的组合时提高性能。

  • 以下功能现在也已支持:

    • np.argpartition

    • np.isclose

    • np.nan_to_num

    • np.new_axis

    • np.union1d

核心变更亮点:

  • 为了将Numba的许多内部实现,包括Python和NumPy函数,从低级扩展API转换为高级扩展API(numba.extending),进行了大量的重构工作。

  • __repr__ 方法支持 Numba 类型。

  • 扩展API(numba.extending)中适用函数的默认 target 现在是 "generic"。这意味着 @overload*@intrinsic 函数将默认被CPU和CUDA目标接受。

  • 在编译代码中,现在支持对 Numba 类型的 __getitem__ 使用。即 types.float64[:, ::1] 现在可以编译。

性能:

  • str.find()str.rfind() 的性能已得到提升。

  • __getitem__ 的 Unicode 支持现在避免了分配并返回一个视图。

  • numba.typed.Dict 字典现在接受一个 n_keys 选项,以启用将字典实例分配到预定的初始大小(有助于避免调整大小!)。

  • Numba 运行时 (NRT) 在性能和安全性方面得到了改进:

    • NRT 内部统计计数器现在默认关闭(移除原子锁争用)。

    • 默认情况下,调试缓存行填充是关闭的。

    • NRT 仅在编译开始时编译一次,而不是在函数装饰时编译,这提高了导入速度。

    • NRT 分配调用默认都是通过一个“检查过的”层来进行的。

CUDA:

  • 新的 NVIDIA 硬件和软件兼容性/支持:

    • 工具包:CUDA 11.8 和 12,11.x 版本具有次要版本兼容性。

    • 打包:NVIDIA 打包的 CUDA 工具包 conda 包。

    • 硬件:Hopper、Ada Lovelace 和 AGX Orin。

  • float16 支持:

    • 现在完全支持算术运算。

    • 一种新方法,is_fp16_supported(),以及设备属性,supports_float16,用于检查 float16 支持的可用性。

  • 功能:

    • 高级扩展API现在在CUDA目标中已完全支持。

    • 现在支持对多个签名进行急切编译、从广义ufuncs输出多个结果,以及指定ufuncs的返回类型。

    • 现在可以在内核中调用有限的一组 NumPy ufuncs(三角函数)。

  • 行信息质量改进:启用行信息不再导致生成代码的任何变化。

弃用:

  • numba.pycc 模块及其所有内容现在处于待弃用状态。

  • 期待已久的 object mode 回退 的全面弃用正在进行中。这一变化意味着没有关键字参数的 @jit 最终将等同于 @njit

  • @generated_jit 装饰器已被弃用,因为 Numba 扩展 API 提供了更好的支持,功能更为全面,特别是通过 @numba.extending.overload

版本支持/依赖变化:

  • setuptools 包现在是一个可选的运行时依赖,而不是一个必需的运行时依赖。

  • TBB 线程层现在需要 2021.6 或更高版本。

  • LLVM 14 现在通过 llvmlite 在所有平台上都得到了支持。

拉取请求:

作者:

版本 0.56.4 (2022年11月3日)

这是一个修复版本,用于修复与CUDA目标中的 .view() 方法相关的回归问题,该问题在使用NumPy版本1.23.0或更高版本时出现在CUDA设备数组上。

拉取请求:

作者:

版本 0.56.3 (2022年10月13日)

这是一个错误修复版本,旨在移除对 setuptools 包的版本限制,并修复与将零长度设备数组复制到零长度主机数组相关的CUDA目标中的一个错误。

拉取请求:

作者:

版本 0.56.2 (2022年9月1日)

这是一个支持 NumPy 1.23 并修复 CUDA 函数缓存的错误修复版本。

拉取请求:

作者:

版本 0.56.1 (未发布)

由于发布过程中出现问题,该版本被跳过。

版本 0.56.0 (2022年7月25日)

此版本继续为 Numba 添加新功能、错误修复和稳定性改进。请注意,这将是支持 Python 3.7 的最后一个版本,因为下一个版本系列(Numba 0.57)将支持 Python 3.11!另请注意,这将是 Numba 团队支持的最后一个支持 linux-32 包的版本。

Python 语言支持增强:

  • 在Python 3.10中,已添加了对大型内联字典和内部调用具有大量关键字参数的函数的支持。

  • operator.mul 现在可以用于 list

  • 字面切片,例如 slice(1, 10, 2) 可以从 nopython 模式函数中返回。

  • len 函数现在可以用于 dict_keysdict_valuesdict_items

  • Numba 的 set 实现现在支持引用计数的项目,例如字符串。

Numba 特定的功能增强:

  • 实验性的 jitclass 功能增加了对大量 builtin 方法的支持,例如为 jitclass 类型声明 __hash____getitem__

  • 现在可以在已经用 @jit 系列装饰器装饰的函数上使用 @vectorize

  • 名称混淆已更新,以发出与Python中函数名称完全匹配的编译函数名称。这意味着调试器,如GDB,可以直接在Python函数名称上设置断点。

  • 已添加一个 GDB “漂亮打印” 支持模块,当加载到 GDB 中时,Numba 对 Python/NumPy 类型的内部表示会在 GDB 中以它们在 Python 中的形式呈现。

  • @jit 系列装饰器中添加了一个实验性选项,用于完全关闭给定函数的 LLVM 优化过程(参见 @jit 装饰器系列中的 _dbg_optnone 关键字参数)。

  • 新增了一个环境变量 NUMBA_EXTEND_VARIABLE_LIFETIMES,如果设置该变量,将延长变量的生命周期至其基本块的末尾,以便在GDB中进行调试体验,类似于在编译的C/C++/Fortran代码中找到的体验。

NumPy 功能/增强:

  • 已添加对传递、使用和返回 numpy.random.Generator 实例的初步支持,目前包括对 random 分布的支持。

  • 广播函数 np.broadcast_shapesnp.broadcast_arrays 现在已得到支持。

  • minmax 函数现在可以与 np.timedelta64np.datetime64 类型一起使用。

  • 现在 np.sort() 支持沿最后一个轴对多维数组进行排序。

  • np.clip 函数已更新,可以接受 NumPy 数组作为 a_mina_max 参数。

  • NumPy 的分配例程(如 np.emptynp.ones 等)支持使用 enum.IntEnum 成员指定的形状参数。

  • 现在支持 np.random.noncentral_chisquare 函数。

  • 函数 np.fullnp.ones 的性能已得到提升。

并行加速器增强功能:

  • parallel=True 功能通过添加 numba.set_parallel_chunksizenumba.get_parallel_chunksize 函数得到了增强,以允许在并行区域中定义的工作进行更精细的调度。还支持通过上下文管理器调整 chunksize

  • 线程的 ID 现在被定义为可预测且在已知范围内,可以通过调用函数 numba.get_thread_id 获取。

  • @stencil 的性能在串行和并行执行中都得到了提升。

CUDA 增强功能:

  • 新功能:

    • 自递归设备函数。

    • 向量类型支持 (float4, int2, 等).

    • 现在可以创建扩展类型的共享/本地数组。

    • 支持将 CUDA C / C++ 设备函数链接到 Python 内核中。

    • 适用于计算能力8.6和8.7的PTX生成 - 例如RTX A系列,GTX 3000系列。

    • float16 类型的比较操作。

  • 性能提升:

    • 上下文查询在启动配置期间不再进行。

    • 启动配置现在使用LRU缓存。

    • 现在支持 CUDA 内核的磁盘缓存。

  • 文档:添加了许多新示例。

文档:

  • Numba 现在有了一个官方的“使命宣言”。

  • 文档中现在有一个“版本支持表”,作为一个易于使用的单一参考点,用于查找有关 Numba 发布及其所需/支持的依赖项的信息。

通用增强功能:

  • 在拥有大量包的环境中,Numba 导入速度更快,因为它现在使用 importlib-metadata 来查询其他包。

  • 现在支持为内部编译事件处理系统发出chrome跟踪输出。

  • 此版本在使用 Pyston Python 解释器时已经过测试并确认可以正常工作。

拉取请求:

作者:

版本 0.55.2 (2022年5月25日)

这是一个维护版本,以支持 NumPy 1.22 和 Apple M1。

拉取请求:

总PR数: 12

作者:

总作者数:3

版本 0.55.1 (2022年1月27日)

这是一个修复错误的发布版本,解决了0.55.0加速发布中所有剩余的问题,以及自那时以来发现的任何发布关键性回归问题。

CUDA 目标弃用通知:

  • 对 CUDA 工具包 < 10.2 的支持已弃用,并将在 Numba 0.56 中移除。

  • 对计算能力 < 5.3 的设备的支持已被弃用,并将在 Numba 0.56 中移除。

拉取请求:

作者:

版本 0.55.0 (2022年1月13日)

此版本包含了一系列重要的依赖升级,以及一些新功能和错误修复。

注意:由于 NumPy CVE-2021-33430 漏洞,此版本绕过了通常的发布流程,以便及时提供支持 NumPy 1.21 的 Numba 版本。发布了一个单一的候选版本(RC1),并报告了一些问题,这些问题总结如下,并将在后续的 0.55.1 版本中修复。

此版本的已知问题:

  • 结构化数组的数组类型字段复制结果不正确 (#7693)

  • DebugInfo 生成的两个问题 (#7726, #7730)

  • 在使用Python 3.10时,32位Windows系统上浮点值的``hash``编译失败 (#7713)。

核心依赖升级的亮点:

  • 对 Python 3.10 的支持

  • 对 NumPy 1.21 的支持

Python 语言支持增强:

  • 实验性支持 isinstance

NumPy 功能/增强:

以下功能现在已支持:

  • np.broadcast_to

  • np.float_power

  • np.cbrt

  • np.logspace

  • np.take_along_axis

  • np.average

  • np.argmin 增加了对 axis 关键字参数的支持。

  • np.ndarray.astype 增加了对以字面字符串形式表示的类型的支持。

核心变更亮点:

  • 对于使用 Numba 扩展 API 的用户,Numba 现在有一种新的错误处理模式,它会将所有不继承自 numba.errors.NumbaException 的异常视为“硬错误”并立即展开堆栈。这使得在使用扩展 API 编写 @overload 等时更容易调试,因为现在不再混淆 Python 错误和 Numba 错误。可以通过设置环境变量启用此功能:NUMBA_CAPTURED_ERRORS='new_style'

  • 现在可以通过环境变量 NUMBA_THREADING_LAYER_PRIORITY 来更改线程层选择的优先级。

CUDA 目标的变更亮点:

  • 支持 NVIDIA 的 CUDA Python 绑定。

  • 通过内部函数支持16位浮点数及其基本操作。

  • Stream.async_done 结果中提供了流,使得实现异步工作队列更加容易。

  • 设备数组中的结构化类型支持、NumPy数组中的字符序列支持,以及嵌套数组上的一些数组操作。

  • 对底层进行了大量重构,以使 CUDA 目标更接近 CPU 目标,这为未来版本中支持 CUDA 中的高级扩展 API 奠定了基础。

英特尔还慷慨赞助了原生调试(DWARF)支持和处理每函数编译标志的研究与开发:

  • 行号/位置跟踪有了显著改进。

  • Numba 对容器(例如元组、数组)的内部表示现在被编码为结构体。

  • Numba 的每函数编译标志被编码到函数修饰名称的 ABI 字段中,以便可以编译并区分具有不同标志设置的同一函数的不同版本。

一般弃用通知:

  • 没有新的通用弃用。

CUDA 目标弃用通知:

  • 没有新的 CUDA 目标弃用。

版本支持/依赖变化:

  • 支持 Python 3.10。

  • 支持 NumPy 版本 1.21。

  • 支持的最低 NumPy 版本已提升至 1.18 用于运行时(然而编译仍与 NumPy 1.11 兼容)。

拉取请求:

作者:

版本 0.54.1 (2021年10月7日)

这是 0.54.0 的错误修复版本。它修复了结构化数组类型处理中的回归问题,CUDA 目标初始化失败时的潜在泄漏,Numba 的 vendored cloudpickle 模块重置动态类引起的回归问题,以及一些与测试/基础设施相关的次要问题。

  • PR #7348: test_inspect_cli: 使用默认(utf-8)编解码器解码异常 (Graham Markall)

  • PR #7360: CUDA: 修复初始化失败时的潜在泄漏 (Graham Markall)

  • PR #7386: 确保在使用外部NRT测试之前初始化NRT。(stuartarchibald)

  • PR #7388: 修补 cloudpickle 以在每次解封时不再重置动态类 (Siu Kwan Lam)

  • PR #7393: 如果文件不存在,跳过Azure管道测试 (esc)

  • PR #7428: 修复回归问题 #7355: 无法在结构化数组数据类型中设置项目 (Siu Kwan Lam)

作者:

版本 0.54.0 (2021年8月19日)

此版本包含大量新功能、重要的重构、关键的错误修复以及多项依赖项升级。

Python 语言支持增强:

  • f-字符串 的基本支持。

  • dict 推导式现在已支持。

  • 内置函数 sum 已实现。

NumPy 功能/增强:

以下功能现在已支持:

  • np.clip

  • np.iscomplex

  • np.iscomplexobj

  • np.isneginf

  • np.isposinf

  • np.isreal

  • np.isrealobj

  • np.isscalar

  • np.random.dirichlet

  • np.rot90

  • np.swapaxes

此外,np.argmax 现在支持 axis 关键字参数,并且现在可以在 __setitem__ 调用中使用 0d NumPy 数组作为标量。

内部变化:

  • 通过 DWARF 的调试支持已经修复并增强。

  • Numba 现在优化了局部变量的生成方式,以帮助减少在 LLVM 的 SROA 传递中所花费的时间。

CUDA 目标变更:

  • 支持发出 lineinfo 以供 Nsight Compute 等分析工具使用

  • 改进了各种三角函数、除法及其他函数的快速数学代码生成

  • 使用延迟添加 libdevice 到编译单元以加快编译速度

  • Windows 上的 IPC 支持

  • 支持将元组传递给 CUDA ufuncs

  • 性能警告:

    • 当通过在主机内存中的数组上调用内核来创建隐式副本时

    • 当由于内核或ufunc/gufunc配置导致占用率较低时

  • 支持实现warp聚合的内在函数:

    • 使用更多 CUDA 函数支持:activemask()lanemask_lt()

    • ffs() 函数现在可以正常工作了!

  • CUDA 目标中对 @overload 的支持

英特尔慷慨赞助了研究与开发,这促成了许多新功能和内部支持的变更:

  • 调度器现在可以通过用户定义的上下文管理器重新定位到新的目标。

  • 已添加对自定义 NumPy 数组子类的支持(包括可重载的内存分配器)。

  • 一个基于继承的目标模型,允许目标共享 @overload 实现。

  • 具有继承行为的每个函数的编译器标志。

  • 扩展API现在通过 @overload_classmethod 装饰器支持重载类方法。

弃用:

CUDA 目标的弃用和重大更改:

  • 在计算设备数组的连续性时,宽松的步幅检查现在是默认设置。

  • inspect_ptx() 方法已被弃用。对于需要获取 PTX 以进行外部编译的用例,请改用 compile_ptx()

  • 设备函数的急切编译(当 device=True 且提供了签名时的情况)已被弃用。

版本支持/依赖变化:

  • LLVM 11 现在通过 llvmlite 在所有平台上都得到了支持。

  • 最低支持的 Python 版本已提升至 3.7。

  • 支持 NumPy 版本 1.20。

  • 支持的最低 NumPy 版本已提升至 1.17 用于运行时(然而编译仍然兼容 NumPy 1.11)。

  • 供应商 cloudpickle v1.6.0 – 现在用于所有 pickle 操作。

  • 现在支持 TBB >= 2021,所有之前的版本都不再支持(由于ABI破坏性更改,难以维护)。

拉取请求:

作者:

版本 0.53.1 (2021年3月25日)

这是针对 0.53.0 的错误修复版本。它包含以下四个拉取请求,修复了两个关键的回归问题和两个由 openSuSe 团队报告的构建失败问题:

  • PR #6826 修复了 gufunc 序列化中的回归问题

  • PR #6828 修复CUDA中的回归问题:在映射和管理的数组device_setup中设置流

  • PR #6837 在测试导入行为时忽略来自打包模块的警告。

  • PR #6851 将未报告的 llvm 时间值设置为 0.0

作者:

  • 本·格雷纳

  • 格雷厄姆·马克尔

  • 林思宽

  • 斯图尔特·阿奇博尔德

版本 0.53.0 (2021年3月11日)

此版本继续为 Numba 添加新功能、错误修复和稳定性改进。

核心变更亮点:

  • 支持 Python 3.9 (Stuart Archibald)。

  • 函数子类型化(Lucio Fernandez-Arjona)。

  • 对动态 gufuncs 的初步支持(即来自 @guvectorize)(Guilherme Leobas)。

  • 并行加速器 (@njit(parallel=True) 现在支持 Fortran 顺序数组 (Todd A. Anderson 和 Siu Kwan Lam)。

英特尔还慷慨赞助了研究与开发,这促成了两项新功能的诞生:

  • 为了诊断目的,公开LLVM编译过程的时间(Siu Kwan Lam)。

  • 用于广播编译器事件的事件系统(Siu Kwan Lam)。

CUDA 目标的变更亮点:

  • 从CUDA 11.2开始(使用NVVM IR 1.6 / LLVM IR 7.0.1的工具包版本)现在已支持(Graham Markall)。

  • 添加了一个快速的立方根函数(Michael Collison)。

  • 增加了对原子 xor、递增、递减、交换的支持,并将比较并交换扩展为支持64位整数(Michael Collison)。

  • 添加 cuda.is_supported_version() 以检查 CUDA 运行时版本是否受支持 (Graham Markall)。

  • CUDA 调度器现在与 CPU 调度器共享基础设施,改进了延迟编译内核的启动时间(Graham Markall)。

  • CUDA 数组接口已更新到第 3 版,增加了对流的支持(Graham Markall)。

  • 元组和 namedtuples 现在可以传递给内核(Graham Markall)。

  • 增加了对协作组的初步支持,支持网格组和网格同步(Graham Markall 和 Nick White)。

  • 增加了对 math.log2math.remainder 的支持 (Guilherme Leobas)。

一般弃用通知:

  • 没有新的通用弃用。

CUDA 目标弃用通知:

  • macOS 上的 CUDA 支持在此版本中已被弃用(它仍然有效,只是不再支持)。

  • 自 0.51.0 版本起已弃用的 cuda.jit 装饰器的 argtypesrestypesbind 关键字参数已被移除。

  • 自2014年起已弃用的 Device.COMPUTE_CAPABILITY 属性已被移除(请改用 compute_capability)。

  • 设备数组的 to_host 方法已被移除(请改用 copy_to_host)。

通用增强功能:

  • PR #4769: objmode 复杂类型拼写 (Siu Kwan Lam)

  • PR #5579: 函数子类型化 (Lucio Fernandez-Arjona)

  • PR #5659: 添加对 parfors 创建 ‘F’ortran 布局 Numpy 数组的支持。(Todd A. Anderson)

  • PR #5936: 改进用户定义数据类型的数组分析。(Todd A. Anderson)

  • PR #5938: 对动态 gufuncs 的初步支持 (Guilherme Leobas)

  • PR #5958: 使 typed.List 成为 typing 泛型 (Lucio Fernandez-Arjona)

  • PR #6334: 支持从其他模块访问属性 (Farah Hariri)

  • PR #6373: 允许调度器被缓存 (Eric Wieser)

  • PR #6519: 避免不必要的 ir.Del 生成和移除 (Ehsan Totoni)

  • PR #6545: 重构 ParforDiagnostics (Elena Totmenina)

  • PR #6560: 添加 LLVM 传递计时器 (Siu Kwan Lam)

  • PR #6573: 从 IPython shell 调用时,改进 typed.List 的 __str__ 方法(Amin Sadeghi)

  • PR #6575: 避免临时变量赋值 (Ehsan Totoni)

  • PR #6578: 添加对 numpy intersect1d 的支持和基本测试用例 (@caljrobe)

  • PR #6579: 支持 Python 3.9。(Stuart Archibald)

  • PR #6580: 在编译器状态中存储部分类型错误 (Ehsan Totoni)

  • PR #6626: 一个简单的广播编译器事件的事件系统 (Siu Kwan Lam)

  • PR #6635: 尝试将动态 getitems 解析为静态后展开变换。(Stuart Archibald)

  • PR #6636: 添加了 llvm_lock 事件 (Siu Kwan Lam)

  • PR #6664: 为 PR 5659 添加测试 (Siu Kwan Lam)

  • PR #6680: 允许 getattr 在 objmode 输出类型规范中工作 (Siu Kwan Lam)

修复:

  • PR #6176: 移除对已弃用的 numpy 全局变量的引用 (Eric Wieser)

  • PR #6374: 使用 Python 3 风格的 OSError 处理 (Eric Wieser)

  • PR #6402: 修复 typed.Dicttyped.List 在参数化类型上崩溃的问题 (Andreas Sodeur)

  • PR #6403: 添加 types.ListType.key (Andreas Sodeur)

  • PR #6410: 修复了问题 #6386 (Danny Weitekamp)

  • PR #6425: 修复问题 #6405 的 unicode 连接(Teugea Ioan-Teodor)

  • PR #6437: 在分析归约时,不要将外部parfor中已知的归约变量传递给内部parfor。(Todd A. Anderson)

  • PR #6453: 在元数据中保留原始变量名称以改进诊断(Ehsan Totoni)

  • PR #6454: 修复: 对字面量的修复 (Eric Larson)

  • PR #6463: 将 llvmlite 升级到 0.36 系列 (Stuart Archibald)

  • PR #6466: 修正 finalize_dynamic_globals 的拼写错误 (Sergey Pokhodenko)

  • PR #6489: 改进不支持的 Buffer 情况下的错误信息。(Stuart Archibald)

  • PR #6503: 添加测试以确保 Numba 导入时没有警告。(Stuart Archibald)

  • PR #6508: 将需求推迟到 setup.py (Siu Kwan Lam)

  • PR #6521: 如果 typeguard 正在运行,则跳过注释的 jitclass 测试。(Stuart Archibald)

  • PR #6524: 修复 typed.List 返回值 (Lucio Fernandez-Arjona)

  • PR #6562: 修正 numba sysinfo 输出中的拼写错误 (Nick Sutcliffe)

  • PR #6574: 如果存在2个或更多并行循环,则运行并行循环融合 (Ehsan Totoni)

  • PR #6582: 修复未初始化的填充字节的类型字典错误 (Siu Kwan Lam)

  • PR #6584: 从 __init__ __all__ 中移除 jitclass。(Stuart Archibald)

  • PR #6586: 在非局部情况下,在分支修剪之前运行闭包内联(Stuart Archibald)

  • PR #6591: 修复内联汇编测试失败。(Siu Kwan Lam)

  • PR #6622: 修复 #6534,处理类似赋值元组的解包。(Stuart Archibald)

  • PR #6652: 简化 PR-6334 (Siu Kwan Lam)

  • PR #6653: 修复 get_numba_envvar (Siu Kwan Lam)

  • PR #6654: 修复 #6632 支持替代的 dtype 字符串拼写 (Stuart Archibald)

  • PR #6685: 在分类器中添加 Python 3.9。(Stuart Archibald)

  • PR #6693: 使用 c++11 编译 _devicearray.cpp 的补丁 (Valentin Haenel)

  • PR #6716: 如果赋值的左侧在右侧使用,则考虑其为活跃的(修复 #6715)(Ehsan Totoni)

  • PR #6727: 避免全局元组中非整数导致的数组分析错误 (Ehsan Totoni)

  • PR #6733: 修复 #6668 中的段错误和错误 (Siu Kwan Lam)

  • PR #6741: 在IR内联器中启用SSA (Ehsan Totoni)

  • PR #6763: 为 conda 包使用一个替代的约束条件 (Valentin Haenel)

  • PR #6786: 修复 gufunc kwargs 支持 (Siu Kwan Lam)

CUDA 增强/修复:

  • PR #5162: 指定 CUDA 数组接口的同步语义 (Graham Markall)

  • PR #6245: CUDA 协作网格组 (Graham Markall 和 Nick White)

  • PR #6333: 移除无效的 _Kernel.__call__ (Graham Markall)

  • PR #6343: CUDA: 添加对传递元组和命名元组到内核的支持 (Graham Markall)

  • PR #6349: 重构调度器以移除不必要的间接层 (Graham Markall)

  • PR #6358: 为 cuda 添加 log2 和 remainder 实现(Guilherme Leobas)

  • PR #6376: 在 test_atomics.py 中为问题 #6370 添加了一个固定种子 (Teugea Ioan-Teodor)

  • PR #6377: CUDA: 修复测试套件中的各种问题 (Graham Markall)

  • PR #6409: 实现 cuda 原子异或 (Michael Collison)

  • PR #6422: CUDA: 移除已弃用的项目,预期 CUDA 11.1 (Graham Markall)

  • PR #6427: 移除 gufunc 的重复定义 (Amit Kumar)

  • PR #6432: CUDA: 使用 _dispatcher.Dispatcher 作为基础 Dispatcher 类 (Graham Markall)

  • PR #6447: CUDA: 在 Dispatcher 中添加 get_regs_per_thread 方法 (Graham Markall)

  • PR #6499: CUDA 原子递增、递减、交换和比较并交换(Michael Collison)

  • PR #6510: CUDA: 在必要时使设备数组赋值同步 (Graham Markall)

  • PR #6517: CUDA: 添加所有8位字符的NVVM测试 (Graham Markall)

  • PR #6567: 将llvm替换代码重构为单独的函数 (Michael Collison)

  • PR #6642: Testhound/cuda 立方根 (Michael Collison)

  • PR #6661: CUDA: 支持 NVVM70 / CUDA 11.2 (Graham Markall)

  • PR #6663: 修复由于某些平台缺少定义的“-static”库导致的错误 (Siu Kwan Lam)

  • PR #6666: CUDA: 添加一个函数以查询运行时版本是否受支持。(Graham Markall)

  • PR #6725: CUDA: 修复 CUDA 11.2 的调试模式下编译为 PTX 的问题 (Graham Markall)

文档更新:

  • PR #5740: 添加关于如何创建MWR的FAQ条目。(Stuart Archibald)

  • PR #6346: DOC: 在FAQ中添加获取开发构建的来源 (Eyal Trabelsi)

  • PR #6418: 文档: 使用 https 作为主页 (@imba-tjd)

  • PR #6430: CUDA 文档: 添加带有 3D 网格和跨步循环的 RNG 示例 (Graham Markall)

  • PR #6436: 文档: 修正弃用通知中的拼写错误 (Thibault Ballier)

  • PR #6440: 添加关于解释器中类型化容器的性能说明。(Stuart Archibald)

  • PR #6457: 链接到 read the docs 而不是 numba 主页 (Hannes Pahl)

  • PR #6470: 添加关于numba的PyCon Sweden 2020演讲(Ankit Mahato)

  • PR #6472: 文档 numba.extending.is_jitted (Stuart Archibald)

  • PR #6495: 修复文字列表文档中的拼写错误。(Stuart Archibald)

  • PR #6501: 添加关于Numba的有限资源以及如何帮助的文档条目。(Stuart Archibald)

  • PR #6502: 添加 CODEOWNERS 文件。(Stuart Archibald)

  • PR #6531: 更新规范URL。(Stuart Archibald)

  • PR #6544: 对5分钟指南进行了小的拼写/语法修正 (Ollin Boer Bohan)

  • PR #6599: docs: 修复简单拼写错误, consevatively -> conservatively (Tim Gates)

  • PR #6609: 推荐使用 miniforge 替代 c4aarch64 (Isuru Fernando)

  • PR #6671: 将环境创建示例更新到 Python 3.8 (Lucio Fernandez-Arjona)

  • PR #6676: 在各种文档中更新硬件和软件版本。(Stuart Archibald)

  • PR #6682: 更新 0.53 版本的弃用通知 (Stuart Archibald)

CI/基础设施更新:

  • PR #6458: 在CI中启用typeguard (Siu Kwan Lam)

  • PR #6500: 更新错误报告和功能请求模板。(Stuart Archibald)

  • PR #6516: 通过使用conda修复RTD构建。(Stuart Archibald)

  • PR #6587: 添加 zenodo 徽章 (Siu Kwan Lam)

作者:

  • 阿明·萨德吉

  • 阿米特·库马尔

  • 安德烈亚斯·索德尔

  • Ankit Mahato

  • 克里斯·巴恩斯

  • 丹尼·韦特坎普

  • Ehsan Totoni (核心开发者)

  • 埃里克·拉尔森

  • 埃里克·维瑟

  • Eyal Trabelsi

  • 法拉·哈里里

  • 格雷厄姆·马克尔

  • 吉尔赫梅·莱奥巴斯

  • 汉纳斯·帕尔

  • 伊苏鲁·费尔南多

  • Lucio Fernandez-Arjona

  • 迈克尔·科里森

  • 尼克·萨特克利夫

  • 尼克·怀特

  • Ollin Boer Bohan

  • 谢尔盖·波霍坚科

  • Siu Kwan Lam (核心开发者)

  • Stuart Archibald (核心开发者)

  • Teugea Ioan-Teodor

  • 蒂博·巴利耶

  • 蒂姆·盖茨

  • Todd A. Anderson (核心开发者)

  • Valentin Haenel (核心开发者)

  • @caljrobe

  • @imba-tjd

版本 0.52.0 (2020年11月30日)

此版本专注于性能改进,但也增加了一些新功能,并包含了许多错误修复和稳定性改进。

核心性能改进的亮点包括:

  • 英特尔慷慨赞助了关于开发新的引用计数修剪传递的研究和开发。此传递在LLVM级别运行,并且可以修剪许多常见的引用计数模式。这将主要通过以下两个原因提高性能:

    • 用于执行引用计数的原子锁上的压力将会减少。

    • 移除引用计数操作允许更多的内联操作,并且优化过程通常可以对现有的内容进行更多的处理。

    (林思源)。

  • 英特尔还资助了改进 numba.typed.List 容器性能的工作,特别是在 __getitem__ 和迭代方面(Stuart Archibald)。

  • 超字级并行向量化现已开启,优化管道已进行轻度分析和调整,以便能够更频繁地进行向量化(Stuart Archibald)。

核心功能变化亮点包括:

  • JIT 调度器对象上的 inspect_cfg 方法得到了显著增强,现在包括了高亮输出以及交错的行标记和 Python 源代码(Stuart Archibald)。

  • BSD 操作系统现在非正式支持(Stuart Archibald)。

  • 对NumPy支持的众多功能/功能改进,包括支持:

    • np.asfarray (Guilherme Leobas)

    • 记录数组中的“子类型”(Lucio Fernandez-Arjona)

    • np.splitnp.array_split (Isaac Virshup)

    • operator.containsndarray (@mugoh)。

    • np.asarray_chkfinite (Rishabh Varshney)。

    • NumPy 1.19 (Stuart Archibald)。

    • ndarray 分配器,emptyoneszeros,接受以字符串字面量指定的 ``dtype``(Stuart Archibald)。

  • 布尔类型现在作为字面类型得到支持(Alexey Kozlov)。

  • 在CUDA目标上:

    • CUDA 9.0 现在是支持的最低版本(Graham Markall)。

    • 已添加对统一内存的支持(Max Katz)。

    • 内核启动开销减少(Graham Markall)。

    • 已添加对映射数组、内存复制和内存设置的Cudasim支持(Mike Williams)。

    • 访问权限已连接到所有 libdevice 函数(Graham Markall)。

    • 已添加了额外的 CUDA 原子操作(Michael Collison)。

    • 额外的数学库函数(frexpldexpisfinite)(袁志浩)。

    • 支持复数上的 power 运算(Graham Markall)。

需要注意的弃用项:

没有新的弃用功能。然而,请注意,大约在40个版本前添加的“兼容性”模式,以帮助从0.11过渡到0.12+,已经被移除!此外,根据弃用计划,允许从Numba的顶级命名空间导入``jitclass``的垫片现在已被移除。

通用增强功能:

  • PR #5418: 添加 np.asfarray 实现 (Guilherme Leobas)

  • PR #5560: 记录子类型 (Lucio Fernandez-Arjona)

  • PR #5609: Jitclass 从类型注释中推断规范 (Ethan Pronovost)

  • PR #5699: 实现 np.split 和 np.array_split (Isaac Virshup)

  • PR #6015: 添加 BooleanLiteral 类型 (Alexey Kozlov)

  • PR #6027: 支持 InlineOverloads 中的操作符内联 (Alexey Kozlov)

  • PR #6038: 关闭 #6037,修复 FreeBSD 编译问题 (László Károlyi)

  • PR #6086: 添加更多可访问的版本信息 (Stuart Archibald)

  • PR #6157: 在 @cfunc 中添加 pipeline_class 参数,该参数由 @jit 支持。(Arthur Peters)

  • PR #6262: 支持从字符串字面量获取数据类型。(Stuart Archibald)

  • PR #6271: 支持 ndarray 包含 (@mugoh)

  • PR #6295: 增强 inspect_cfg (Stuart Archibald)

  • PR #6304: 支持 NumPy 1.19 (Stuart Archibald)

  • PR #6309: 为BSD添加合适的文件搜索路径。(Stuart Archibald)

  • PR #6341: 重新滚动 6279 (Rishabh Varshney 和 Valentin Haenel)

性能提升:

  • PR #6145: 为命名元组添加指纹的补丁。(Stuart Archibald)

  • PR #6202: 加速 str(int) (Stuart Archibald)

  • PR #6261: 添加 np.ndarray.ptp() 支持。(Stuart Archibald)

  • PR #6266: 使用自定义的 LLVM 引用计数修剪传递 (Siu Kwan Lam)

  • PR #6275: 开启 SLP 向量化。(Stuart Archibald)

  • PR #6278: 改进类型化列表性能。(Stuart Archibald)

  • PR #6335: 拆分优化过程。(Stuart Archibald)

  • PR #6455: 修复混淆引用上的refprune,并稳定优化关于包装器的处理。(Stuart Archibald)

修复:

  • PR #5639: 使 UnicodeType 继承自 Hashable (Stuart Archibald)

  • PR #6006: 解决 parfor 中错误提升的列表。(Todd A. Anderson)

  • PR #6126: 如果无法确定版本,修复 version_info (Valentin Haenel)

  • PR #6137: 移除对Python 2的long类型的引用(Eric Wieser)

  • PR #6139: 使用直接语法代替 add_metaclass 装饰器 (Eric Wieser)

  • PR #6140: 将 utils.iteritems(d) 的调用替换为 d.items() (Eric Wieser)

  • PR #6141: 修复 #6130 objmode 缓存段错误 (Siu Kwan Lam)

  • PR #6156: 移除对 reraise 的调用,改为直接使用 with_traceback (Eric Wieser)

  • PR #6162: 将字符序列支持移出初始化(Stuart Archibald)

  • PR #6165: #5425 继续 (Amos Bird 和 Stuart Archibald)

  • PR #6166: 从 numba.core.utils 中移除 Python 2 兼容性 (Eric Wieser)

  • PR #6185: 在 NotDefinedError 上提供更好的错误信息 (Luiz Almeida)

  • PR #6194: 从 traverse_types 中移除递归 (Radu Popovici)

  • PR #6200: 解决 #5973 问题 (Stuart Archibald)

  • PR #6203: 使 find_callname 仅查找可能是 NumPy 一部分的函数。(Stuart Archibald)

  • PR #6204: 修复 getitem 的 unicode 类型选择。(Stuart Archibald)

  • PR #6206: 在 Linux x86 上使用 -g -Wall -Werror 编译所有扩展模块,提供 -O0 标志选项 (Graham Markall)

  • PR #6212: 修复 objmode 重新编译问题 (Alexey Kozlov)

  • PR #6213: 修复 #6177。移除对 Numba 包的 AOT 依赖(Siu Kwan Lam)

  • PR #6224: 为数组分析添加元组连接支持。(#5396 继续)(Todd A. Anderson)

  • PR #6231: 移除兼容模式 (Graham Markall)

  • PR #6254: 修复 win-32 哈希错误(来自 Stuart Archibald)(Ray Donnelly)

  • PR #6265: 修复 #6260 (Stuart Archibald)

  • PR #6267: 加速一些非常慢的单元测试 (Stuart Archibald)

  • PR #6281: 按照弃用计划移除 numba.jitclass 的 shim。(Stuart Archibald)

  • PR #6294: 使返回类型传播到所有返回变量 (Andreas Sodeur)

  • PR #6300: 取消因为 #4026 而跳过的测试。(Owen Anderson)

  • PR #6307: 由于LLVM SVML CC中的错误,移除对SVML版本的限制 (Stuart Archibald)

  • PR #6316: 使 IR 内联测试不自我变异。(Stuart Archibald)

  • PR #6318: PR #5892 继续 (Todd A. Anderson, via Stuart Archibald)

  • PR #6319: 在调试开启时允许关闭边界检查。(Stuart Archibald)

  • PR #6324: PR 6208 继续 (Ivan Butygin 和 Stuart Archibald)

  • PR #6337: 在 types.TypeRef 上实现了 key (Andreas Sodeur)

  • PR #6354: 将 llvmlite 升级到 0.35 系列。(Stuart Archibald)

  • PR #6357: 修复 enumerate 无效的 decref (Siu Kwan Lam)

  • PR #6359: 修复了32位系统上的类型化列表索引问题(Stuart Archibald)

  • PR #6378: 修复向量化测试中错误的CPU覆盖。(Stuart Archibald)

  • PR #6379: 使用 O0 以启用内联且不影响后续 O3 的循环向量化… (Siu Kwan Lam)

  • PR #6384: 修复失败的测试以匹配平台不变的整数拼写。(Stuart Archibald)

  • PR #6390: 更新 inspect_cfg (Stuart Archibald)

  • PR #6396: 移除对 tbb 包的硬依赖。(Stuart Archibald)

  • PR #6408: 不要对包含数组的元组进行数组分析。(Todd A. Anderson)

  • PR #6441: 修复 Unicode 切片中的 ASCII 标志 (0.52.0rc2 回归) (Ehsan Totoni)

  • PR #6442: 修复在 0.52 RC2 中对一维数组元组的数组分析回归问题 (Ehsan Totoni)

  • PR #6446: 修复 #6444: 与引用窃取函数相关的修剪器问题 (Siu Kwan Lam)

  • PR #6450: 修复 asfarray 关键字参数默认处理。(Stuart Archibald)

  • PR #6486: 修复抽象基类导入 (Valentin Haenel)

  • PR #6487: 限制 Python 的最大版本 (Siu Kwan Lam)

  • PR #6527: setup.py: 修复 Python 版本守卫 (Chris Barnes)

CUDA 增强/修复:

  • PR #5465: 移除宏扩展并用前端类型 + 后端降低替换使用(Graham Markall)

  • PR #5741: CUDA: 添加 round() 的双参数实现 (Graham Markall)

  • PR #5900: 启用 CUDA 统一内存 (Max Katz)

  • PR #6042: CUDA: 通过直接启动内核来降低启动开销 (Graham Markall)

  • PR #6064: 在 numba.cuda 中降低 math.frexp 和 math.ldexp 的级别 (Zhihao Yuan)

  • PR #6066: 在 numba.cuda 中降低 math.isfinite 的使用 (Zhihao Yuan)

  • PR #6092: CUDA: 添加 mapped_array_like 和 pinned_array_like (Graham Markall)

  • PR #6127: 修复 Volta 架构上 reduction 内核的竞争条件,要求 CUDA 9,添加带有默认掩码的 syncwarp(Graham Markall)

  • PR #6129: 扩展 Cudasim 以支持大部分内存功能。(Mike Williams)

  • PR #6150: CUDA: 为 cudadrv 启用 flake8 并修复错误 (Graham Markall)

  • PR #6152: CUDA: 为所有 libdevice 函数提供包装器,并修复数学函数的类型 (#4618) (Graham Markall)

  • PR #6227: 当未找到支持的架构时引发异常 (Jacob Tomlinson)

  • PR #6244: CUDA 文档: 使使用模拟器的工作流程更加明确 (Graham Markall)

  • PR #6248: 添加对CUDA原子减法操作的支持 (Michael Collison)

  • PR #6289: 重构原子测试用例以减少代码重复 (Michael Collison)

  • PR #6290: CUDA: 添加对复数幂的支持 (Graham Markall)

  • PR #6296: 修复 numba.cuda 模块中的 flake8 违规问题 (Graham Markall)

  • PR #6297: 修复 numba.cuda.tests.cudapy 模块中的 flake8 违规问题 (Graham Markall)

  • PR #6298: 修复 numba.cuda.tests.cudadrv 中的 flake8 违规问题 (Graham Markall)

  • PR #6299: 修复 numba.cuda.simulator 中的 flake8 违规 (Graham Markall)

  • PR #6306: 修复合并后cuda原子测试中的flake8问题。(Stuart Archibald)

  • PR #6325: 重构代码以支持原子操作 (Michael Collison)

  • PR #6329: 修复CUDA测试的Flake8问题 (Stuart Archibald)

  • PR #6331: 明确指出在导入之前需要设置 NUMBA_ENABLE_CUDASIM (Graham Markall)

  • PR #6340: CUDA: 修复 #6339,启动专用内核时的性能回归问题 (Graham Markall)

  • PR #6380: 仅在Linux上测试托管分配(Graham Markall)

文档更新:

  • PR #6090: 文档: 添加关于直接创建 Numba 类型列表的文档 (@rht)

  • PR #6110: 更新 CONTRIBUTING.md (Stuart Archibald)

  • PR #6128: CUDA 文档: 恢复 Dispatcher.forall() 文档 (Graham Markall)

  • PR #6277: 修复: cross2d 错误的文档引用 (问题 #6276) (@jeertmans)

  • PR #6282: 移除关于 Python 2(.7) EOL 的文档。(Stuart Archibald)

  • PR #6283: 添加关于公共CI如何实现以及用户如何提供帮助的说明。(Stuart Archibald)

  • PR #6292: 文档化结构化数组属性访问的支持 (Graham Markall)

  • PR #6310:声明非官方的*BSD支持(Stuart Archibald)

  • PR #6342: 修复字面意义上使用的文档。(Stuart Archibald)

  • PR #6348: doc: 修正 jitclass.rst 中的拼写错误 (“initilising” -> “initialising”) (@muxator)

  • PR #6362: 将 README 中的 llvmlite 支持移至 0.35 (Stuart Archibald)

  • PR #6363: 请注意,引用计数类型不允许在 set() 中使用。(Stuart Archibald)

  • PR #6364: 迁移 0.52 的弃用时间表 (Stuart Archibald)

CI/基础设施更新:

  • PR #6252: 显示频道URL (Siu Kwan Lam)

  • PR #6338: 将用户问题引导至 Discourse 而非 Google 群组。(Stan Seibert)

  • PR #6474: 为在LLVM中导致SIGABRT的测试添加PPC64LE跳过。(Stuart Archibald)

作者:

  • 阿列克谢·科兹洛夫

  • Amos Bird

  • 安德烈亚斯·索德尔

  • 亚瑟·彼得斯

  • 克里斯·巴恩斯

  • Ehsan Totoni (核心开发者)

  • 埃里克·维瑟

  • Ethan Pronovost

  • 格雷厄姆·马克尔

  • 吉尔赫梅·莱奥巴斯

  • 艾萨克·维尔舒普

  • 伊万·布提金

  • 雅各布·汤姆林森

  • Luiz Almeida

  • László Károlyi

  • Lucio Fernandez-Arjona

  • 马克斯·卡茨

  • 迈克尔·科里森

  • 迈克·威廉姆斯

  • 欧文·安德森

  • Radu Popovici

  • Ray Donnelly

  • Rishabh Varshney

  • Siu Kwan Lam (核心开发者)

  • Stan Seibert (核心开发者)

  • Stuart Archibald (核心开发者)

  • Todd A. Anderson (核心开发者)

  • Valentin Haenel (核心开发者)

  • Zhihao Yuan

  • @jeertmans

  • @mugoh

  • @muxator

  • @rht

版本 0.51.2 (2020年9月2日)

这是 0.51.1 的错误修复版本。它修复了 CFG 回边计算算法中的一个关键性能错误,该错误导致在编译具有某些病态属性的用例时出现指数时间复杂度。

  • PR #6195: PR 6187 继续。不要访问已经检查过的后继者

作者:

  • 格雷厄姆·马克尔

  • Siu Kwan Lam (核心开发者)

版本 0.51.1 (2020年8月26日)

这是 0.51.0 的错误修复版本,它修复了缓存中的一个关键错误,CUDA 目标初始化序列中的另一个关键错误,并修复了一些编译时性能退化问题:

  • PR #6141: 修复 #6130 objmode 缓存段错误

  • PR #6146: 修复由于控制流分析导致的编译速度减慢

  • PR #6147: CUDA: 在导入时不进行运行时调用

  • PR #6153: 修复 #6151。将 UnicodeCharSeq 转换为 str 进行比较。

  • PR #6168: 修复 Issue #6167: test_cuda_submodules 中的失败

作者:

  • 格雷厄姆·马克尔

  • Siu Kwan Lam (核心开发者)

  • Stuart Archibald (核心开发者)

版本 0.51.0 (2020年8月12日)

此版本继续为 Numba 添加新功能,并且还包含大量错误修复和稳定性改进。

核心功能变化亮点包括:

  • 编译链现在基于 LLVM 10(Valentin Haenel)。

  • Numba 内部已切换为优先使用非字面类型而非字面类型,以减少函数过度特化,从而加快编译时间(Siu Kwan Lam)。

  • 在CUDA目标上:支持CUDA Toolkit 11、Ampere和计算能力8.0;为内核打印``SASS``代码;可以在CUDA流中插入对Python函数的回调,并且流是异步可等待的;添加了原子``nanmin``和``nanmax``函数;修复了各种错误编译和段错误。(主要由Graham Markall完成;流的回调由Peter Würtz完成)。

英特尔还慷慨赞助了研究与开发,这些研究与开发带来了一些令人兴奋的新功能:

  • 支持异构不可变列表和异构不可变字符串键字典。还为所有包含字面值的列表和字典提供了可选的初始/构造值捕获功能(Stuart Archibald)。

  • 一个新的按引用传递的可变结构扩展类型 StructRef (Siu Kwan Lam)。

  • 对象模式块现在可以被缓存,这带来了许多缓存相关的错误修复和性能提升。这也允许缓存定义在闭包中的函数(Siu Kwan Lam)。

需要注意的弃用项:

为了与其他目标对齐,@cuda.jitargtypesrestypes 关键字参数现已弃用,bind 关键字参数也已弃用。此外,numba.jit 装饰器家族的 target 关键字参数也已弃用。

通用增强功能:

  • PR #5463: 添加 str(int) 实现

  • PR #5526: 实现 np.asarray(字面量)

  • PR #5619: 添加对多输出ufuncs的支持

  • PR #5711: 使用 timedelta 输入进行除法

  • PR #5763: 支持 np.bincount 的 minlength 参数

  • PR #5779: 当参数为空时,从 np.dot 返回零数组。

  • PR #5796: 为 np.positive 添加实现

  • PR #5849: 当索引为 StringLiteral 时,为记录设置项目,包括字面展开

  • PR #5856: 添加对就地二元操作转换为并行循环的支持。

  • PR #5893: 一次分配一个一维迭代空间,以实现更均匀的分布。

  • PR #5922: 减少 objmode 和 unpickling 的开销

  • PR #5944: 在轮子中重新启用 OpenMP

  • PR #5946: 实现字面量字典和列表。

  • PR #5956: 更新 numba_sysinfo.py

  • PR #5978: 添加 structref 作为一个按引用传递的可变结构体

  • PR #5980: 弃用 numba.jit 的 target 关键字参数。

  • PR #6058: 为重载API添加prefer_literal选项

修复:

  • PR #5674: 修复 #3955。允许 with objmode 被缓存

  • PR #5724: 延迟初始化进程锁以防止多进程问题

  • PR #5783: 使 np.divide 和 np.remainder 代码更加相似

  • PR #5808: 修复 5665 块 jit(nopython=True, forceobj=True) 并抑制 njit(forceobj=True)

  • PR #5834: 修复 Ellipsis 上的 is 运算符

  • PR #5838: 确保 Dispatcher.__eq__ 总是返回一个布尔值

  • PR #5841: 清理:在更多地方使用 PythonAPI.bool_from_bool

  • PR #5862: 不要将循环迭代变量泄漏到 numba.np.npyimpl 命名空间中

  • PR #5869: 更新 repomap

  • PR #5879: 修复 linalg 例程中错误的输入突变

  • PR #5882: 在 jit 装饰器中进行类型检查

  • PR #5925: 分别使用 np.inf 和 -np.inf 作为最大和最小浮点值。

  • PR #5935: 修复多进程中的默认参数

  • PR #5952: 修复“内部错误 … 在 BoundFunction(…) 期间,局部变量 ‘errstr’ 在赋值前被引用”

  • PR #5962: 使用 LLVM 10 和 AVX512 修复 SVML 测试

  • PR #5972: 修复 numba/runtests.py 的 flake8 问题

  • PR #5995: 使用新的 llvmlite 版本更新 setup.py

  • PR #5996: 将 llvmlite 的最低版本设置为 0.33

  • PR #6004: 修复 LiteralStrKeyDict 分支修剪中的问题

  • PR #6017: 修复 numba_do_raise

  • PR #6028: 修复 #6023

  • PR #6031: 继续 5821

  • PR #6035: 修复字面量的过度特化

  • PR #6046: 修复了最大化融合步骤中的语句重排错误。

  • PR #6056: 修复了通过 inline_arraycall 对非空 build_list 进行无效内联的问题

  • PR #6057: 修复主分支上 aarch64/python_3.8 的失败

  • PR #6070: 修复过度特化的容器

  • PR #6071: 移除 setup.py 中的 f-字符串

  • PR #6072: 修复 #6005

  • PR #6073: 修复了辅助函数中无效的C原型。

  • PR #6078: 复制 NumPy 的 PyArray_DescrCheck 宏

  • PR #6081: 修复跨驱动器使用和relpath的问题。

  • PR #6083: 修复初始值统一中的错误。

  • PR #6087: 从 randrange 测试中移除无效的健全性检查

  • PR #6089: 修复对 TypingError 的无效引用

  • PR #6097: 将函数代码和闭包字节添加到缓存键中

  • PR #6099: 由于ABI变化,限制TBB版本的上限。

  • PR #6101: 由于假设的SVML错误,限制icc_rt版本的最低限制。

  • PR #6107: 修复并测试 #6095

  • PR #6109: 修复了在 #6094 中报告的问题

  • PR #6111: 将 LiteralList 和 LiteralStrKeyDict 从 tuple 中解耦

  • PR #6116: 修复 #6102。非唯一标签的问题。

CUDA 增强/修复:

  • PR #5359: 移除对 0d 数组的特殊处理

  • PR #5709: CUDA: 对 cuda.jit 和内核/调度器抽象的重组

  • PR #5732: CUDA 文档: 记录内核的 forall 方法

  • PR #5745: CUDA 流回调和异步可等待流

  • PR #5761: 为CUDA的int类型添加isnan和isinf的实现

  • PR #5819: 添加对 CUDA 11 和 Ampere / CC 8.0 的支持

  • PR #5826: CUDA: 添加获取内核SASS的函数

  • PR #5846: CUDA: 允许禁用 NVVM 优化,并修复调试问题

  • PR #5851: CUDA EMM 增强 - 添加默认的 get_ipc_handle 实现,有条件地跳过测试

  • PR #5852: CUDA: 修复 cuda.test()

  • PR #5857: CUDA 文档: 添加关于重置 EMM 插件的说明

  • PR #5859: CUDA: 修复reduce文档并改进样式

  • PR #6016: 修复了cuda测试中列表拼写的变化。

  • PR #6020: CUDA: 修复 #5820,添加 atomic nanmin / nanmax

  • PR #6030: CUDA: 在将IR发送给NVVM之前不要优化它

  • PR #6052: 修复 atomic_add_double 测试套件的 dtype

  • PR #6080: CUDA: 防止原子内部函数的自动升级

  • PR #6123: 修复 #6121

文档更新:

  • PR #5782: 在 Read the Docs 上托管文档

  • PR #5830: doc: 提到缓存使用 pickle

  • PR #5963: 修复指向 numpy ufunc 签名文档的断链

  • PR #5975: 重组沟通部分

  • PR #5981: 在python偏差页面中记录边界检查行为

  • PR #5993: structref 的文档

  • PR #6008: 小修复,使项目符号能被sphinx渲染

  • PR #6013: 强调 cuda 内核函数是异步的

  • PR #6036: 从 numba.errors 更新弃用文档到 numba.core.errors

  • PR #6062: 将引用 numba.pydata.org 改为 https

CI 更新:

  • PR #5850: 更新了“新建问题”的行为,以更好地重定向用户。

  • PR #5940: 添加 discourse 徽章

  • PR #5960: 在CI上设置mypy

来自用户贡献的PR的增强功能(感谢!):

  • Aisha Tammy 在 #5821 中添加了在编译时关闭 TBB 支持的功能(在 #6031 中由 Stuart Archibald 继续)。

  • Alexander Stiebing 在 #5952 中修复了一个赋值前引用的错误。

  • Alexey Kozlov 在 #6028 中修复了元组 getitem 对字面量的一个错误。

  • Andrew Eckart 在 #5869 中更新了 repomap,在 #5782 中增加了对 Read the Docs 的支持,在 #5779 中修复了 np.dot 实现中的一个错误以正确处理空数组,并在 #5763 中为 np.bincount 增加了对 minlength 的支持。

  • @bitsisbits 在 #5956 中更新了 numba_sysinfo.py 以正确处理 HSA 代理。

  • Daichi Suzuo 修复了线程后端初始化序列中的一个错误,使得它在 #5724 中现在正确地成为一个惰性锁。

  • Eric Wieser 贡献了许多补丁,特别是在增强和改进 ufunc 功能方面:

    • #5359: 移除对0维数组的特殊处理

    • #5834: 修复Ellipsis上的is运算符

    • #5619: 添加对多输出ufuncs的支持

    • #5841: 清理:在更多地方使用 PythonAPI.bool_from_bool

    • #5862: 不要将循环迭代变量泄漏到 numba.np.npyimpl 命名空间中

    • #5838: 确保 Dispatcher.__eq__ 总是返回一个布尔值

    • #5830: doc: 提到缓存使用 pickle

    • #5783: 使 np.divide 和 np.remainder 代码更加相似

  • Ethan Pronovost 在 #5881 中添加了一个防护措施,以防止常见的错误,即在同一个函数上两次应用 jit 装饰器。

  • Graham Markall 为 CUDA 目标贡献了许多补丁,如下:

    • #6052: 修复 atomic_add_double 测试的 dtype

    • #6030: CUDA: 在发送IR到NVVM之前不要优化它

    • #5846: CUDA: 允许禁用 NVVM 优化,并修复调试问题

    • #5826: CUDA: 添加获取内核SASS的函数

    • #5851: CUDA EMM 增强 - 添加默认的 get_ipc_handle 实现,有条件地跳过测试

    • #5709: CUDA: 对 cuda.jit 和内核/调度器抽象的重组

    • #5819: 添加对 CUDA 11 和 Ampere / CC 8.0 的支持

    • #6020: CUDA: 修复 #5820,添加原子 nanmin / nanmax

    • #5857: CUDA 文档: 添加关于重置 EMM 插件的说明

    • #5859: CUDA: 修复reduce文档和样式改进

    • #5852: CUDA: 修复 cuda.test()

    • #5732: CUDA 文档: 记录内核的 forall 方法

  • Guilherme Leobas 在 #5463 中增加了对 str(int) 的支持,并在 #5526 中增加了对 np.asarray(字面值) 的支持。

  • Hameer Abbasi 在 #5980 中弃用了 numba.jittarget 关键字参数。

  • Hannes Pahl 在 Numba 的 GitHub 页面上添加了一个徽章,链接到新的 discourse 论坛,相关工作在 #5940 中完成,并且还修复了一个允许非法组合的标志传递到 @jit 中的错误,相关工作在 #5808 中完成。

  • Kayran Schmidt 在 #6013 的文档中强调,CUDA 内核函数是异步的。

  • Leonardo Uieda 在 #5963 中修复了一个指向 NumPy ufunc 签名文档的断链。

  • Lucio Fernandez-Arjona 在 #5960 中将 mypy 添加到 CI 并开始为代码库添加类型注解,还在 #5935 中修复了调度器上的 (反)序列化问题,在 #5876 中改进了未定义变量错误消息,在 #5711 中增加了对 timedelta 输入的除法支持,并在 #5849 中实现了当索引为 StringLiteral 时对记录的 setitem 操作。

  • Ludovic Tiako 在 #5981 的 python 偏差页面中记录了 Numba 的边界检查行为。

  • Matt Roeschke 在 #6062 中将所有 http 引用更改为 https

  • @niteya-shah 在 #5761 中为 CUDA 目标上的整数类型实现了 isnanisinf,并在 #5796 中实现了 np.positive

  • Peter Würtz 在 #5745 中添加了 CUDA 流回调和异步可等待流。

  • @rht 修复了在 #6036 中弃用文档中提到的无效导入。

  • Sergey Pokhodenko 在 #5962 中更新了 LLVM 10 的 SVML 测试。

  • Shyam Saladi 在 #6008 中修复了一个 Sphinx 渲染错误。

作者:

  • Aisha Tammy

  • 亚历山大·施泰宾

  • 阿列克谢·科兹洛夫

  • 安德鲁·埃卡特

  • @bitsisbits

  • Daichi Suzuo

  • 埃里克·维瑟

  • Ethan Pronovost

  • 格雷厄姆·马克尔

  • 吉尔赫梅·莱奥巴斯

  • 哈米尔·阿巴西

  • 汉纳斯·帕尔

  • 凯兰·施密特

  • 科兹洛夫, 阿列克谢

  • 莱昂纳多·乌伊达

  • Lucio Fernandez-Arjona

  • Ludovic Tiako

  • 马特·罗斯切克

  • @niteya-shah

  • 彼得·维茨

  • 谢尔盖·波霍坚科

  • Shyam Saladi

  • @rht

  • Siu Kwan Lam (核心开发者)

  • Stuart Archibald (核心开发者)

  • Todd A. Anderson (核心开发者)

  • Valentin Haenel (核心开发者)

版本 0.50.1 (2020年6月24日)

这是 0.50.0 的错误修复版本,它修复了错误报告中的一个关键错误以及一些其他较小的问题:

  • PR #5861: 为可能的 Windows get_terminal_size 异常添加了异常处理

  • PR #5876: 改进未定义变量错误信息

  • PR #5884: 更新 0.50.1 版本的弃用通知

  • PR #5889: 修复了对于 inline=’always’ 实际上没有强制重新分派的问题

  • PR #5912: 修复在某些类型模板上的错误属性访问,导致异常中断。

  • PR #5918: 修复由于 #5876 引起的 cuda 测试问题

作者:

  • @pepping_dore

  • Lucio Fernandez-Arjona

  • Siu Kwan Lam (核心开发者)

  • Stuart Archibald (核心开发者)

版本 0.50.0 (2020年6月10日)

与过去六个月发布的其他版本相比,这是一个更常见的版本。它包含了多项维护任务的结果,以及一些新功能和大量的错误修复。

核心功能变化亮点包括:

  • 编译链现在基于 LLVM 9。

  • 错误处理和报告系统已得到改进,以减少错误消息的大小,并提高质量和特异性。

  • CUDA 目标提供了更多的流构造器,并且新增了一个无需链接和加载代码到设备即可编译为 PTX 的函数。此外,用于描述 CUDA 线程和块的基于宏的系统已被替换为标准的类型和降低实现,以改进调试和扩展性。

重要提示:在 0.49.x 版本中为了适应 Numba 内部重构而存在的向后兼容垫片已被移除。如果从移动的位置导入模块,将会发生 ImportError

通用增强功能:

  • PR #5060: 启用 np.sum 用于 timedelta64

  • PR #5225: 调整解释器以通过 bool() 调用使条件成为谓词。

  • PR #5506: Jitclass 静态方法

  • PR #5580: 恢复 shim

  • PR #5591: 修复 #5525 为 numba -s 输出添加总内存图。

  • PR #5616: 简化 ufunc 内核注册

  • PR #5617: 从 Numba 仓库中移除 /examples。

  • PR #5673: 修复内联器以在IR上运行所有传递并正确清理。

  • PR #5700: 使类型推断更容易理解:添加SSA转储,用于``DEBUG_TYPEINFER``

  • PR #5702: 针对LLVM 9的修复

  • PR #5722: 改进错误信息。

  • PR #5758: 支持 NumPy 1.18

修复:

  • PR #5390: 为 lookup_module 添加错误处理

  • PR #5464: Jitclass 删除注解以避免错误

  • PR #5478: 修复 #5471。省略类型未被识别为字面值的问题。

  • PR #5517: 修复 numba.typed.List 对单例和空可迭代对象的扩展

  • PR #5549: 检查类型 getitem

  • PR #5568: 在Windows上添加跳过入口点测试

  • PR #5581: 恢复 #5568

  • PR #5602: 修复由从 numba.typed.List 中弹出引起的段错误

  • PR #5645: 修复SSA冗余CFG计算

  • PR #5686: 修复 SSA 非最小化问题

  • PR #5689: 修复统一函数类型中的错误(问题 5685)

  • PR #5694: 如果切片数组分析的任何部分不可分析,则跳过部分切片数组分析。

  • PR #5697: 修复 parfor 循环嵌套变量的 usedef 问题。

  • PR #5705: 修复了 SSA 看起来像归约变量的情况。

  • PR #5714: 修复测试中的错误

  • PR #5717: 在任何编译开始之前初始化 Numba 扩展。

  • PR #5721: 修复数组迭代器布局。

  • PR #5738: 修复在构建农场上的主分支

  • PR #5757: 强制 LLVM 使用 ZMM 寄存器进行向量化。

  • PR #5764: 修复 flake8 错误

  • PR #5768: 区间示例:修复导入

  • PR #5781: 将记录数组示例移动到测试模块

  • PR #5791: 修复无cgroups问题

  • PR #5795: 恢复引用计数移除过程并使其严格

  • PR #5807: 由于PPC CTR循环问题,跳过在POWER8上失败的测试。

  • PR #5812: 修复 #5792 的次要问题,@overload 内联缓存的 IR 被突变。

  • PR #5815: 固定 llvmlite 版本为 0.33

  • PR #5833: 修复了错误信息中源位置显示不正确的问题。

CUDA 增强/修复:

  • PR #5347: CUDA: 提供更多流构造函数

  • PR #5388: CUDA: 修复 test_round{f4,f8} 中的 OOB 写入

  • PR #5437: 修复 #5429: 在从 as_cuda_array(...) 生成的数组上使用 .get_ipc_handle(...) 时发生的异常

  • PR #5481: CUDA: 用类型和降低实现替换宏

  • PR #5556: CUDA: 使原子语义与 Python / NumPy 匹配,并修复 #5458

  • PR #5558: CUDA: 仅在保留时释放主上下文

  • PR #5561: CUDA: 添加编译为PTX的函数(+其他小修复)

  • PR #5573: CUDA: 在cuda-memcheck下跳过导致挂起的测试

  • PR #5578: 为CUDA目标实现math.modf

  • PR #5704: CUDA 即时编译:修复 max_registers 关键字参数

  • PR #5718: CUDA 库路径测试:当 CUDA_HOME 未设置时,取消设置 CUDA_PATH

  • PR #5800: 修复 LLVM 9 IR 以支持 NVVM

  • PR #5803: CUDA 更新预期错误信息以修复 #5797

文档更新:

  • PR #5546: DOC: 在内联笔记中添加关于成本模型的文档。

  • PR #5653: 更新关于 try-finally 情况的文档

来自用户贡献的PR的增强功能(感谢!):

  • Elias Kuthe 修复了 #5768 中 Interval 示例中的导入问题

  • Eric Wieser 在 #5616 中简化了 ufunc 内核注册机制

  • Ethan Pronovost 在 #5464 中修复了 jitclass__annotations__ 的问题,在 #5549 中修复了导致 Numba 的 Type.__getitem__ 无限循环的错误,在 #5714 中修复了 np.arange 测试中的错误,并在 #5506 中为 jitclass 添加了对 @staticmethod 的支持。

  • Gabriele Gemmi 在 #5578 中为 CUDA 目标实现了 math.modf

  • Graham Markall 贡献了许多补丁,主要针对 CUDA 目标,如下:

    • #5347: CUDA: 提供更多流构造函数

    • #5388: CUDA: 修复 test_round{f4,f8} 中的 OOB 写入

    • #5437: 修复 #5429: 在使用 as_cuda_array(...) 生成的数组上调用 .get_ipc_handle(...) 时发生的异常

    • #5481: CUDA: 用类型和降低实现替换宏

    • #5556: CUDA: 使原子语义与 Python / NumPy 匹配,并修复 #5458

    • #5558: CUDA: 仅在保留时释放主上下文

    • #5561: CUDA: 添加编译到PTX的函数(+其他小修复)

    • #5573: CUDA: 在cuda-memcheck下跳过导致其挂起的测试

    • #5648: 在EMM插件测试后取消内存管理器设置

    • #5700: 使类型推断更容易理解:添加SSA转储,用于``DEBUG_TYPEINFER``

    • #5704: CUDA 即时编译:修复 max_registers 关键字参数

    • #5718: CUDA 库路径测试:当 CUDA_HOME 未设置时,取消设置 CUDA_PATH

    • #5800: 修复 LLVM 9 IR 以适应 NVVM

    • #5803: CUDA 更新预期错误信息以修复 #5797

  • Guilherme Leobas 更新了 #5653 中关于 try-finally 的文档

  • Hameer Abbasi 在 #5546 的内联笔记中添加了关于成本模型的文档

  • Jacques Gaudin 重写了 numba -s 以生成和使用关于当前系统的输出字典,详见 #5591

  • James Bourbeau 更新了 min/argmin 和 max/argmax 以处理非前导的 nans(通过 #5758)

  • Lucio Fernandez-Arjona 在 #5781 中将记录数组示例移动到了一个测试模块,并在 #5060 中为 np.sum 添加了 np.timedelta64 处理。

  • Pearu Peterson 在 #5689 中修复了 unified_function_type 中的一个错误

  • Sergey Pokhodenko 修复了 #5757 中影响 LLVM 10 在 Intel SkyLake 处理器上向量化宽度的问题。

  • Shan Sikdar 在 #5390 中为 lookup_module 添加了错误处理

  • @toddrme2178 为 NumPy 1.18 添加 CI 测试(通过 #5758)

作者:

  • 伊莱亚斯·库特

  • 埃里克·维瑟

  • Ethan Pronovost

  • 加布里埃莱·格米

  • 格雷厄姆·马克尔

  • 吉尔赫梅·莱奥巴斯

  • 哈米尔·阿巴西

  • 雅克·戈丁

  • 詹姆斯·伯尔博

  • Lucio Fernandez-Arjona

  • Pearu Peterson

  • 谢尔盖·波霍坚科

  • 山·西卡达尔

  • Siu Kwan Lam (核心开发者)

  • Stuart Archibald (核心开发者)

  • Todd A. Anderson (核心开发者)

  • @toddrme2178

  • Valentin Haenel (核心开发者)

版本 0.49.1 (2020年5月7日)

这是 0.49.0 的错误修复版本,它修复了 SSA 形式的一些残留问题,分支剪枝逻辑中的一个关键错误,以及一些其他较小的错误:

  • PR #5587: 修复了 #5586 线程实现中的拼写错误

  • PR #5592: 修复 #5583 从文档和示例中移除对 cffi_support 的引用

  • PR #5614: 修复 parfors 中比较表达式的 resolve 中的无效类型。

  • PR #5624: 修复在修剪时错误地将谓词重写为位常量的问题。

  • PR #5627: 修复 #5623,基于无效的等式假设的 SSA 本地定义扫描。

  • PR #5629: 修复了array_exprs中的命名错误

  • PR #5630: 修复 #5570。由于 SSA 命名导致的错误竞赛变量检测。

  • PR #5638: 使 literal_unroll 函数作为自由变量工作。

  • PR #5648: 在EMM插件测试后取消内存管理器设置

  • PR #5651: 修复一些 SSA 问题

  • PR #5652: 固定到 sphinx=2.4.4 以避免 C 声明的问题

  • PR #5658: 修复未定义的一级函数类型统一问题

  • PR #5669: 更新5分钟指南中的示例,关于SSA类型稳定性。

  • PR #5676: 恢复 numba.types 为公共 API

作者:

  • 格雷厄姆·马克尔

  • 胡安·曼努埃尔·克鲁兹·马丁内斯

  • Pearu Peterson

  • 肖恩·劳

  • Stuart Archibald (核心开发者)

  • Siu Kwan Lam (核心开发者)

版本 0.49.0 (2020年4月16日)

此版本在代码更改方面非常大。大规模移除了不支持的 Python 和 NumPy 版本,并进行了大量的重构以简化 Numba 代码库,使其更容易为贡献者所用。Numba 的中间表示也经历了一些重要的变化,以解决一些长期存在的问题。此外,还添加了一些新功能,并修复了大量错误!

重要提示:在此版本中,Numba 的内部结构发生了很大变化。为了不立即破坏使用 Numba 内部的项目,此版本提供了一个向后兼容的“垫片”。如果从移动的位置导入模块,垫片将发出弃用警告并建议如何更新导入语句以适应新位置。该垫片将在 0.50.0 版本中移除!

核心功能变化亮点包括:

  • 移除所有与 Python 2 相关的代码,并将最低支持的 Python 版本更新为 3.6,最低支持的 NumPy 版本更新为 1.15,最低支持的 SciPy 版本更新为 1.0。(Stuart Archibald)。

  • Numba 代码库的重构。代码现在按功能组织成子模块。这清理了 Numba 的顶层命名空间。(Stuart Archibald)。

  • Numba 中间表示的 ir.Del 自由静态单赋值形式介绍(Siu Kwan Lam 和 Stuart Archibald)。

  • 为使用并行CPU后端的代码添加了一个类似OpenMP的线程掩码API(Aaron Meurer 和 Stuart Archibald)。

  • 对于CUDA目标,现在所有内核启动都需要一个配置,这样可以防止意外启动具有旧默认值(单个线程在单个块中)的内核。硬编码的自动调优器现在也被移除,此类调优被推迟到提供相同功能的CUDA API调用(Graham Markall)。

  • CUDA 目标还增加了一个外部内存管理插件接口,允许 Numba 使用另一个支持 CUDA 的库来进行所有内存分配和释放(Graham Markall)。

  • Numba 类型化列表容器增加了对从可迭代对象构建的支持(Valentin Haenel)。

  • 为一级函数类型添加了实验性支持(Pearu Peterson)。

来自用户贡献的PR的增强功能(感谢!):

  • Aaron Meurer 在 #4615 中添加了对运行时线程掩码的支持。

  • Andreas Sodeur 修复了一个长期存在的错误,该错误阻止了 cProfile 与 Numba JIT 编译函数一起工作,详见 #4476。

  • Arik Funke 修复了 test_array_reductions 中的错误信息 (#5278),解决了测试发现的问题 (#5239),使得文档在 Windows 上再次能够构建 (#5453),并在 #5489 中修复了文档中的嵌套列表问题。

  • Antonio Russo 在 #5252 中修复了一个 SyntaxWarning。

  • Eric Wieser 增加了对推断对象数组类型(#5348)和迭代2D数组(#5115)的支持,还修复了由于在#5222中缺少(void)导致的某些编译器警告。此外,还帮助改进了“shim”及其相关警告,涉及#5485、#5488、#5498以及部分#5532。

  • Ethan Pronovost 修复了 #5454 中使用 jitclass 时 shim 错误警告的问题,并在 #5505 中防止了 jitclass __init__ 中的非法返回值。

  • Gabriel Majeri 在 #5106 中将 SciPy 2019 的演讲添加到了文档中。

  • Graham Markall 更改了 Numba HTML 文档主题,以解决 #5346 中长期存在的多个问题。此外,还贡献了大量 CUDA 增强和修复,具体包括:

    • #5519: CUDA: 静音测试套件 - 修复 #4809,移除 autojit,删除打印

    • #5443: 修复 #5196: 文档: 仅在调试模式下启用CUDA中的断言

    • #5436: 修复 #5408: test_set_registers_57 在 Maxwell 上失败

    • #5423: 修复 #5421: 添加关于在CUDA内核中打印的注释

    • #5400: 修复 #4954,以及其他一些小的 CUDA 测试套件修复

    • #5328: NBEP 7: 外部内存管理插件接口

    • #5144: 修复 #4875: 使 #2655 测试在调试模式下预期通过

    • #5323: 文档化CUDA数组接口的生命周期语义

    • #5061: 防止在没有配置的情况下启动内核,移除自动调优器

    • #5099: 修复 #5073: 动态共享内存的所有切片都别名

    • #5136: CUDA: 在默认流上启用异步操作

    • #5085: 支持其他itemsizes与视图

    • #5059: 文档:解释如何将Memcheck与Numba一起使用,修复CUDA文档中的问题

    • #4957: 在文档中添加关于覆盖gufunc输入的说明

  • Greg Jennings 修复了 np.random.choice 在 #3897/#5310 中未能正确识别 RNG 种子的问题。

  • Guilherme Leobas 在 #5293 中添加了对 np.isnat 的支持。

  • Henry Schreiner 在 #5150 中使 requirements.txt 中的 llvmlite 需求更加明确。

  • Ivan Butygin 帮助修复了 #5114/#5250 中 parfors 顺序降低的问题。

  • Jacques Gaudin 在 #5548 中修复了 Python >= 3.8 在 numba -s 中的一个错误。

  • Jim Pivarski 在 #5280 中添加了一些调试入口点的提示。

  • John Kirkham 在 #5252 中为 CUDA 设备数组的 dtype 参数添加了 numpy.dtype 强制转换。

  • Leo Fang 在 #5104 中添加了一个支持 __cuda_array_interface__ 的库列表。

  • Lucio Fernandez-Arjona 在 #5182 中为 NumPy 记录类型添加了 getitem,当索引是 StringLiteral 类型时,并在 #5450 中通过添加到目录和移除编号来改进了文档的渲染。

  • Mads R. B. Kristensen 修复了 __cuda_array_interface__ 在 #5189 中不需要上下文的问题。

  • Marcin Tolysz 在 #5174 中为 AOT 编译添加了对嵌套模块的支持。

  • Mike Williams 在 #5343 中修复了 CUDA 模拟器中 NumPy 记录和 getitem 的一些问题。

  • Pearu Peterson 在 #5287 中添加了对一等函数类型的实验性支持(并在 #5459、#5473/#5429 和 #5557 中进行了修复)。

  • Ravi Teja Gutta 在 #4376/#5313 中增加了对 np.flip 的支持。

  • Rohit Sanjay 修复了类型细化对于传递给类型化列表 extend() 的 unicode 输入的问题(#5295),并修复了 unicode .strip() 以去除 #5213 中的所有空白字符。

  • Vladimir Lukyanov 在 #5361 中修复了 typed.dict 中的一个尴尬的错误,在 #5357 中添加了一个修复以确保 LLVM 和汇编转储正确高亮,并在 #5333 中实现了 Numba IR 词法分析器并添加了对 Numba IR 转储的高亮。

  • hdf 在 #5257 中修复了 CUDA jit 目标中 boundscheck 标志的问题。

通用增强功能:

  • PR #4615: 允许在运行时屏蔽线程

  • PR #4798: 基于原始谓词添加分支修剪。

  • PR #5115: 添加对遍历二维数组的支持

  • PR #5117: 实现 ord()/chr()

  • PR #5122: 移除 Python 2。

  • PR #5127: 为 boxer/unboxer 调用 jitcode 的调用约定适配器

  • PR #5151: 实现无类型的类型列表

  • PR #5174: 嵌套模块 https://github.com/numba/numba/issues/4739

  • PR #5182: 当索引为 StringLiteral 时,为 Record 类型添加 getitem

  • PR #5185: 从闭包中提取代码生成工具

  • PR #5197: 重构 Numba,第一部分

  • PR #5210: 从构建工具中移除更多不支持的 Python 版本。

  • PR #5212: 增加了查看ELF反汇编CFG的支持。

  • PR #5227: 不可变的类型化列表

  • PR #5231: 增加了对 np.asarraynumba.typed.List 一起使用的支持

  • PR #5235: 为 numba.typed.List 添加了属性 dtype

  • PR #5272: 重构 parfor: 拆分 ParforPass

  • PR #5281: 在合法化之前使 IR ir.Del 保持自由。

  • PR #5287: 一级函数类型

  • PR #5293: np.isnat

  • PR #5294: 从可迭代对象创建类型化列表

  • PR #5295: 优化unicode输入上的typed-list以扩展

  • PR #5296: 重构 parfor: 从 passes 中获得更好的异常

  • PR #5308: 提供 numba.extending.is_jitted

  • PR #5320: 重构数组分析

  • PR #5325: 让 literal_unroll 接受 types.Named*Tuple

  • PR #5330: 将 parfor 降低中的常见操作重构为一个新的实用工具

  • PR #5333: 添加: 高亮显示 Numba IR 转储

  • PR #5342: 支持传递给 parfors 的元组。

  • PR #5348: 添加对推断对象数组类型的支持

  • PR #5351: 再次SSA

  • PR #5352: 添加垫片以适应重构。

  • PR #5356: 在 njit 中实现分配的参数

  • PR #5369: 使测试顺序在功能可用性方面更加一致

  • PR #5428: Wip/弃用 jitclass 位置

  • PR #5441: 对一等函数的额外更改

  • PR #5455: 迁移到 llvmlite 0.32.*

  • PR #5457: 为未类型化的列表实现 repr

修复:

  • PR #4476: 在调度器跟踪路径中修复帧注入的另一次尝试

  • PR #4942: 防止某些 parfor 别名。重命名复制的函数变量以防止递归类型锁定。

  • PR #5092: 修复 #5087

  • PR #5150: 在 requirements.txt 中更明确地要求 llvmlite

  • PR #5172: 修复 llvmlite 的版本规范

  • PR #5176: 规范化传入 fold_arguments 的关键字参数。

  • PR #5183: 显式传递 ‘inline’ 给 overload

  • PR #5193: 修复由于安装时缺少文件导致的CI失败

  • PR #5213: 修复 .strip() 以去除所有空白字符

  • PR #5216: 修复调度器将命名元组误认为简单元组的错误

  • PR #5222: 修复由于缺少 (void) 导致的编译器警告

  • PR #5232: 修复了一个导致主分支崩溃的错误导入

  • PR #5239: 修复 unittest 的测试发现

  • PR #5247: 继续 PR #5126

  • PR #5250: 部分修复/5098

  • PR #5252: 简单修复 SyntaxWarning

  • PR #5276: 为 has_no_side_effect 添加 prange 变体。

  • PR #5278: 修复 test_array_reductions 中的错误信息

  • PR #5310: PR #3897 继续

  • PR #5313: 继续 PR #4376

  • PR #5318: 从 MANIFEST.in 中移除 AUTHORS 文件引用

  • PR #5327: 如果发现 FNV 哈希作为 CPython 的默认设置,则添加警告。

  • PR #5338: 移除引用计数修剪过程

  • PR #5345: 禁用因删除通过而失败的测试。

  • PR #5357: 小修复以正确高亮 llvm 和 asm

  • PR #5361: 5081 typed.dict

  • PR #5431: 为 numba 扩展模块入口点添加容差。

  • PR #5432: 修复导致编译器警告的代码。

  • PR #5445: 移除未定义的变量

  • PR #5454: 不要对 numba.experimental.jitclass 发出警告

  • PR #5459: 修复了问题 5448

  • PR #5480: 修复 #5477,literal_unroll 在搜索 getitems 时出现 KeyError

  • PR #5485: 在“没有直接替换”错误消息中显示违规模块

  • PR #5488: 添加缺失的 numba.config 垫片

  • PR #5495: 修复phi strip后变量缺少空初始化的问题

  • PR #5498: 使 shim 弃用警告也能在 Python 3.6 上工作

  • PR #5505: 如果 __init__ 返回值,提供更好的错误信息

  • PR #5527: 尝试修复 #5518

  • PR #5529: PR #5473 继续

  • PR #5532: 使 numba.<mod> 无需导入即可使用

  • PR #5542: 修复了RC2模块shim错误

  • PR #5548: 修复 #5537 移除了对 platform.linux_distribution 的引用

  • PR #5555: 通过恢复对 ArrayAnalysis 的更改来修复 #5515

  • PR #5557: 一级函数调用不能使用关键字参数

  • PR #5569: 修复 RewriteConstGetitems 未为新表达式注册 calltype 的问题

  • PR #5571: 固定 llvmlite 需求

CUDA 增强/修复:

  • PR #5061: 防止在没有配置的情况下启动内核,移除自动调谐器

  • PR #5085: 支持其他项目大小的视图

  • PR #5099: 修复 #5073: 动态共享内存的所有切片都别名

  • PR #5104: 添加支持 __cuda_array_interface__ 的库列表

  • PR #5136: CUDA: 在默认流上启用异步操作

  • PR #5144: 修复 #4875: 使 #2655 测试在调试模式下预期通过

  • PR #5189: __cuda_array_interface__ 不需要上下文

  • PR #5253: 将 dtype 强制转换为 numpy.dtype

  • PR #5257: 边界检查修复

  • PR #5319: 使面向用户的错误字符串使用绝对路径而非相对路径。

  • PR #5323: 文档化 CUDA Array Interface 的生命周期语义

  • PR #5328: NBEP 7: 外部内存管理插件接口

  • PR #5343: 修复 cuda 欺骗

  • PR #5400: 修复 #4954,以及其他一些小的 CUDA 测试套件修复

  • PR #5436: 修复 #5408: test_set_registers_57 在 Maxwell 上失败

  • PR #5519: CUDA: 静默测试套件 - 修复 #4809,移除 autojit,删除打印

文档更新:

  • PR #4957: 在文档中添加关于覆盖 gufunc 输入的说明

  • PR #5059: 文档:解释如何将Memcheck与Numba一起使用,修复CUDA文档中的问题

  • PR #5106: 将 SciPy 2019 演讲添加到文档中

  • PR #5147: 更新主分支以适应 0.48.0 更新

  • PR #5155: 解释在 Numba IR 级别内联将做什么

  • PR #5161: 修复 README.rst 格式

  • PR #5207: 移除 AUTHORS 列表

  • PR #5249: 修复“参见”的目标路径

  • PR #5262: 修正内联文档中的拼写错误

  • PR #5270: 修复 typeddict 文档中的 ‘see also’

  • PR #5280: 为调试入口点添加了一些提示。

  • PR #5297: 更新文档,添加 {g,}ufuncs 的介绍。

  • PR #5326: 更新安装文档以包含 OpenMP 要求。

  • PR #5346: 文档:使用 sphinx_rtd_theme

  • PR #5366: 在安装检查输出中移除对 Python 2.7 的引用

  • PR #5423: 修复 #5421: 添加关于在CUDA内核中打印的注释

  • PR #5438: 更新文档构建的包依赖。

  • PR #5440: 更新弃用通知。

  • PR #5443: 修复 #5196: 文档: 仅在调试模式下启用CUDA中的断言

  • PR #5450: 文档:移除编号并为目录添加标题

  • PR #5453: 修复在 Windows 上构建文档的问题

  • PR #5489: 文档: 修复嵌套项目列表的渲染

CI 更新:

  • PR #5314: 更新用于Azure CI中OSX的镜像。

  • PR #5360: 移除 Travis CI 徽章。

作者:

  • Aaron Meurer

  • 安德烈亚斯·索德尔

  • 安东尼奥·鲁索

  • Arik Funke

  • 埃里克·维瑟

  • Ethan Pronovost

  • 加布里埃尔·马杰里

  • 格雷厄姆·马克尔

  • 格雷格·詹宁斯

  • 吉尔赫梅·莱奥巴斯

  • hdf

  • 亨利·施赖纳

  • 伊万·布提金

  • 雅克·戈丁

  • 吉姆·皮瓦尔斯基

  • 约翰·柯克汉姆

  • Leo Fang

  • Lucio Fernandez-Arjona

  • Mads R. B. Kristensen

  • Marcin Tolysz

  • 迈克·威廉姆斯

  • Pearu Peterson

  • 拉维·特贾·古塔

  • 罗希特·桑杰

  • Siu Kwan Lam (核心开发者)

  • Stan Seibert (核心开发者)

  • Stuart Archibald (核心开发者)

  • Todd A. Anderson (核心开发者)

  • Valentin Haenel (核心开发者)

  • 弗拉基米尔·卢基扬诺夫

版本 0.48.0 (2020年1月27日)

此版本特别小,因为它旨在捕捉任何错过 0.47.0 截止日期的问题(截止日期故意与 Python 2.7 支持结束时间一致)。下一个版本将会大得多。

此版本的核心变化主要集中在为结束对 Python 2.7 支持所需的清理工作的开始,CUDA 目标的改进以及对众多额外 Unicode 字符串方法的支持。

来自用户贡献的PR的增强功能(感谢!):

  • Brian Wignall 在 #4998 中修正了更多拼写错误。

  • Denis Smirnov 增加了对字符串方法 capitalize (#4823)、casefold (#4824)、swapcase (#4825)、rsplit (#4834)、partition (#4845) 和 splitlines (#4849) 的支持。

  • Elena Totmenina 扩展了对字符串方法 startswith (#4867) 的支持,并添加了 endswith (#4868)。

  • Eric Wieser 在 #4760 中使 type_callable 返回装饰后的函数本身。

  • Ethan Pronovost 在 #4617 中增加了对 np.argwhere 的支持

  • Graham Markall 贡献了大量的 CUDA 增强和修复,具体包括:

    • #5068: 从utils中移除Python 3.4的backports

    • #4975: 使 device_array_like 创建连续数组 (修复 #4832)

    • #5023: 不要用0个元素启动ForAll内核(修复 #5017)

    • #5016: 修复CUDA库搜索中的各种问题(修复 #4979)

    • #5014: 启用共享内存的记录和布尔值使用,移除ddt,添加额外的转置测试

    • #4964: 修复 #4628: 为CUDA设备数组添加更合适的类型注解

    • #5007: test_consuming_strides: 保持开发数组的活动状态

    • #4997: 在文档中说明需要CUDA Toolkit 8.0

  • James Bourbeau 在 #5027 中将 Python 3.8 分类器添加到 setup.py 中。

  • John Kirkham 在 #5049 中对 __cuda_array_interface__ 文档进行了澄清。

  • Leo Fang 在 #5012 中修复了 dummyarray 中的索引问题。

  • Marcel Bargull 修复了 Python 3.8 在 #5029 中的构建和测试问题。

  • Maria Rubtsov 增加了对字符串方法 isdecimal (#4842)、isdigit (#4843)、isnumeric (#4844) 和 replace (#4865) 的支持。

通用增强功能:

  • PR #4760: 使 type_callable 返回装饰后的函数

  • PR #5010: 合并字符串PR

    此合并PR包括以下内容:

    • PR #4823: 基于 CPython 实现 str.capitalize()

    • PR #4824: 基于CPython实现str.casefold()

    • PR #4825: 基于CPython实现str.swapcase()

    • PR #4834: 基于CPython实现str.rsplit()

    • PR #4842: 实现 str.isdecimal

    • PR #4843: 实现 str.isdigit

    • PR #4844: 实现 str.isnumeric

    • PR #4845: 基于 CPython 实现 str.partition()

    • PR #4849: 基于CPython实现str.splitlines()

    • PR #4865: 实现 str.replace

    • PR #4867: 基于 CPython 的 str.startswith() 功能扩展

    • PR #4868: 为 str.endswith() 添加功能

  • PR #5039: 禁用帮助消息。

  • PR #4617: 为 np.argwhere 添加覆盖率

修复:

  • PR #4724: 仅使用直播(而非别名)来创建后 parfor 直播集。

  • PR #4998: 修复更多拼写错误

  • PR #5024: 在静态重写之前传播语义常量。

  • PR #5027: 在 setup.py 中添加 Python 3.8 分类器

  • PR #5046: 更新 setup.py 和 buildscripts 以满足依赖要求

  • PR #5053: 在 define() 中从数组转换为名称,并且不要因多个一致的定义而失效。

  • PR #5058: 允许在 wrap_index 中混合使用整数类型

  • PR #5078: 捕获在JITed函数中使用全局类型化列表

  • PR #5092: 修复 #5087,字节码分析中的错误。

CUDA 增强/修复:

  • PR #4964: 修复 #4628: 为 CUDA 设备数组添加更合适的类型注解

  • PR #4975: 使 device_array_like 创建连续数组 (修复 #4832)

  • PR #4997: 在文档中声明需要 CUDA Toolkit 8.0

  • PR #5007: test_consuming_strides: 保持开发数组的活动状态

  • PR #5012: 修复访问 dummyarray 的“-1”元素时出现的 IndexError

  • PR #5014: 启用共享内存的记录和布尔值使用,移除ddt,添加额外的转置测试

  • PR #5016: 修复CUDA库搜索中的各种问题(修复 #4979)

  • PR #5023: 不要用0个元素启动ForAll内核(修复 #5017)

  • PR #5068: 从 utils 中移除 Python 3.4 的回退

文档更新:

  • PR #5049: 澄清字典的含义

  • PR #5062: 更新文档以适应更新后的版本要求

  • PR #5090: 更新 0.48.0 的弃用通知

CI 更新:

  • PR #5029: 为 Python 3.8 测试安装可选依赖项

  • PR #5040: 从公共CI中移除Py2.7和Py3.5

  • PR #5048: 修复 CI py38

作者:

  • 布莱恩·威格纳

  • 丹尼斯·斯米尔诺夫

  • 埃琳娜·托特米娜

  • 埃里克·维瑟

  • Ethan Pronovost

  • 格雷厄姆·马克尔

  • 詹姆斯·伯尔博

  • 约翰·柯克汉姆

  • Leo Fang

  • Marcel Bargull

  • 玛丽亚·鲁布佐夫

  • Siu Kwan Lam (核心开发者)

  • Stan Seibert (核心开发者)

  • Stuart Archibald (核心开发者)

  • Todd A. Anderson (核心开发者)

  • Valentin Haenel (核心开发者)

版本 0.47.0 (2020年1月2日)

此版本在多个重要领域扩展了 Numba 的功能,并且由于它包含了支持 Python 2 和 Python 3.5 的最后一个主要点发布,因此也具有重要意义。下一个版本(0.48.0)将仅支持 Python 3.6 及以上版本!(这遵循了 NumPy 在 NEP 29 中指定的弃用时间表。)

核心功能变化亮点包括:

  • 全面支持 Python 3.8 (Siu Kwan Lam)

  • 选择加入的边界检查(Aaron Meurer)

  • mapfilterreduce 的支持(Stuart Archibald)

英特尔还慷慨赞助了研究与开发,这些研究与开发带来了一些令人兴奋的新功能:

  • 初步支持基本的 try/except 用法(Siu Kwan Lam)

  • 能够将由闭包/lambda创建的函数作为参数传递(Stuart Archibald)

  • sortedlist.sort() 现在接受 key 参数 (Stuart Archibald 和 Siu Kwan Lam)

  • 一个新的编译器传递通过使用函数 numba.literal_unroll 触发,该函数允许对异构元组和常量列表进行迭代。(Stuart Archibald)

来自用户贡献的PR的增强功能(感谢!):

  • Ankit Mahato 在 #4862 中添加了对 PyCon India 2019 上关于 Numba 的新演讲的引用

  • Brian Wignall 友善地修正了 #4909 中的一些拼写错误和打字错误

  • Denis Smirnov 编写了大量方法,显著增强了字符串支持,包括:

    • str.rindex() 在 #4861

    • str.isprintable() 在 #4836

    • str.index() 在 #4860

    • start/end 参数用于 str.find() 在 #4866

    • str.isspace() 在 #4835

    • str.isidentifier() #4837

    • str.rpartition() 在 #4841

    • str.lower()str.islower() 在 #4651

  • Elena Totmenina 在 #4839、#4840 和 #4847 中分别实现了 str.isalnum()str.isalpha()str.isascii

  • Eric Larson 修复了 #4710 中的字面量比较错误

  • Ethan Pronovost 在 #4770 中更新了 np.arange 的实现,以允许使用 dtype 关键字参数,并在 #4715 中为几种类型添加了 bool 实现。

  • Graham Markall 修复了 CUDA 目标的一些问题,具体如下:

    • #4931: 为 CUDA 自动调优添加了 CC 7.0 / 7.5 的物理限制

    • #4934: 修复了 TestCudaWarpOperations 中的错误

    • #4938: 改进了CUDA vectorize装饰器的错误/警告

  • Guilherme Leobas 在 #4667 中修复了 urem 实现中的一个拼写错误

  • Isaac Virshup 贡献了许多补丁,修复了错误,增加了对更多 NumPy 函数的支持,并增强了 Python 功能支持。这些贡献包括:

    • #4729: 允许使用混合类型形状元组构造数组

    • #4904: 实现 np.lcm

    • #4780: 实现 np.gcd 和 math.gcd

    • #4779: 使切片构造函数更接近Python。

    • #4707: 添加了对 slice.indices 的支持

    • #4578: 澄清 numba ufunc 支持的功能

  • James Bourbeau 修复了一些工具问题,#4794 将 setuptools 添加为依赖项,#4501 为 flake8 合规性添加了预提交钩子。

  • Leo Fang 在 #4629 中使 numba.dummyarray.Array 可迭代

  • Marc Garcia 修复了 numba.jit 参数名 signature_or_function 在 #4703

  • Marcelo Duarte Trevisani 在 #4725 中将 llvmlite 的要求修改为 >=0.30.0

  • Matt Cooper 通过移除 maxParallel 解决了 #4737 中长期存在的 CI 问题。

  • Matti Picus 修复了 Azure Pipelines 中 #4734 的 collections.abc 问题。

  • Rob Ennis 在 #4911 中修复了 np.interp float32 处理的错误

  • VDimir 在 #4777 中修复了数组转置布局中的一个错误,并在 #4776 中重新启用了一些空闲测试并进行了修复。

  • Vyacheslav Smirnov 在 #4645 中启用了对 str.istitle()` 的支持

通用增强功能:

  • PR #4432: 边界检查

  • PR #4501: 添加预提交钩子

  • PR #4536: 当调用者是函数时,处理内联器中的关键字参数

  • PR #4599: 允许闭包成为函数,启用 map(), filter()

  • PR #4611: 基于Cpython为unicode实现title()方法

  • PR #4645: 启用对 unicode 字符串的 istitle() 方法的支持

  • PR #4651: 实现 str.lower() 和 str.islower()

  • PR #4652: 实现 str.rfind()

  • PR #4695: 重构 overload* 并支持 jit_optionsinline

  • PR #4707: 增加了对 slice.indices 的支持

  • PR #4715: 为几种类型添加 bool 重载

  • PR #4729: 允许使用混合类型的形状元组进行数组构造

  • PR #4755: Python3.8 支持

  • PR #4756: 为 ndarray.fill 添加 parfor 支持。

  • PR #4768: 更新 typeconv 错误信息以请求 sys.executable。

  • PR #4770: 使用 @overload 更新 np.arange 实现

  • PR #4779: 使切片构造函数更接近Python。

  • PR #4780: 实现 np.gcd 和 math.gcd

  • PR #4794: 添加 setuptools 作为依赖项

  • PR #4802: 将 git hash 放入构建字符串中

  • PR #4803: 为不当使用的归约变量提供更好的编译器错误信息。

  • PR #4817: 类型化列表的实现和暴露分配

  • PR #4818: 类型化列表更快的复制

  • PR #4835: 基于CPython实现str.isspace()

  • PR #4836: 基于 CPython 实现 str.isprintable()

  • PR #4837: 基于 CPython 实现 str.isidentifier()

  • PR #4839: 基于CPython实现 str.isalnum()

  • PR #4840: 基于CPython实现str.isalpha()

  • PR #4841: 基于CPython实现str.rpartition()

  • PR #4847: 基于 CPython 实现 str.isascii()

  • PR #4851: 为 FunctionIR 添加 graphviz 输出

  • PR #4854: Python3.8 循环提升

  • PR #4858: 基于 CPython 实现 str.expandtabs()

  • PR #4860: 基于 CPython 实现 str.index()

  • PR #4861: 基于 CPython 实现 str.rindex()

  • PR #4866: 支持 str.find() 的 start/end 参数

  • PR #4874: 升级到 llvmlite 0.31

  • PR #4896: 根据架构和Python版本特化arange的dtype。

  • PR #4902: 对 try except 的基本支持

  • PR #4904: 实现 np.lcm

  • PR #4910: 循环规范化与类型感知的元组解包器/循环体版本控制传递

  • PR #4961: 更新 Python 3.8 的 hash(tuple)。

  • PR #4977: 实现带有键的 sort/sorted。

  • PR #4987: 为所有类型类添加 is_internal 属性。

修复:

  • PR #4090: 更新到 LLVM8 的 memset/memcpy 内部函数

  • PR #4582: 在进行跨线程缩减数组的缩减操作时,将 sub 转换为 add,将 div 转换为 mul。

  • PR #4648: 正确处理 0 作为切片参数。

  • PR #4660: 从所有块的等价集中移除重复定义的变量。

  • PR #4672: 修复 dufunc 的序列化问题

  • PR #4710: BUG: 字面量的比较

  • PR #4718: 修改 get_call_table 以支持中间变量。

  • PR #4725: 需要 llvmlite >=0.30.0

  • PR #4734: 更倾向于从 collections.abc 导入

  • PR #4736: 修复 flake8 错误

  • PR #4776: 修复并启用来自 test_array_manipulation 的 idle 测试

  • PR #4777: 修复转置输出数组布局

  • PR #4782: 修复SVML问题(及其连锁函数解析效果)。

  • PR #4785: 将 0d 数组视为标量。

  • PR #4787: 修复标志上缺失的incref

  • PR #4789: 修复 numba/targets/base.py 中的拼写错误

  • PR #4791: 修复拼写错误

  • PR #4811: 修复现在失败的测试中的拼写错误

  • PR #4852: 窗口测试应仅检查双精度误差范围内的相等性

  • PR #4881: 通过在迭代器上使用 extend 来修复列表的细化

  • PR #4882: 修复 arange 中的返回类型和零步长处理。

  • PR #4885: 抑制关于ufunc大小的虚假RuntimeWarning

  • PR #4891: 暂时跳过 xfail 测试。Py3.8 CFG 重构似乎已经改变了测试用例。

  • PR #4892: 正则表达式需要接受“argument”的单数形式

  • PR #4901: 修复类型化列表的相等性

  • PR #4909: 修复一些拼写错误

  • PR #4911: 修复 np.interp 对 float32 处理的错误

  • PR #4920: 修复在禁用JIT时创建列表的问题

  • PR #4921: 修复在禁用JIT时创建字典的问题

  • PR #4935: 更好地处理同一变量上的多个缩减的 prange。

  • PR #4946: 改进 raise <string> 的错误信息。

  • PR #4955: 移动 literal_unroll 的重载以避免破坏 Python 2.7 的循环依赖

  • PR #4962: 修复Windows上的测试错误

  • PR #4973: 修复了 literal_unroll 中重标记逻辑的一个错误。

  • PR #4978: 修复带有星号参数的重载方法问题

  • PR #4981: 添加 ind_to_const 以减少等价类数量。

  • PR #4991: 继续 #4588 (让死代码移除在 prange 转换为 parfor 后处理移除更多不需要的代码)

  • PR #4994: 移除已修复底层问题的测试的 xfail。

  • PR #5018: 修复 #5011。

  • PR #5019: 由于distutils问题,在Python 3.8 + macOS上跳过pycc测试

CUDA 增强/修复:

  • PR #4629: 使 numba.dummyarray.Array 可迭代

  • PR #4675: 将 cuda 数组接口升级到版本 2

  • PR #4741: 更新为 Windows 选择 “CUDA_PATH”

  • PR #4838: 允许在CUDA目标中对连续设备数组使用ravel(‘A’)

  • PR #4931: 为 CC 7.0 / 7.5 添加自动调谐的物理限制

  • PR #4934: 修复 TestCudaWarpOperations 中的失败

  • PR #4938: 改进cuda vectorize装饰器的错误/警告

文档更新:

  • PR #4418: 有向图任务路线图

  • PR #4578: 澄清 numba ufunc 支持的功能

  • PR #4655: 修复 sphinx 构建警告

  • PR #4667: 修复urem实现中的拼写错误

  • PR #4669: 添加 ParallelAccelerator 论文的链接。

  • PR #4703: 修复 numba.jit 参数名称 signature_or_function

  • PR #4862: 添加了关于Numba的PyCon India 2019演讲

  • PR #4947: 使用 numba.typed 记录 jitclass。

  • PR #4958: 为 try..except 添加文档

  • PR #4993: 更新 0.47 版本的弃用内容

CI 更新:

  • PR #4737: 从 Azure Pipelines 中移除 maxParallel

  • PR #4767: 在osx上为py27固定到2.7.16

  • PR #4781: WIP/runtest cf pytest

作者:

  • Aaron Meurer

  • Ankit Mahato

  • 布莱恩·威格纳

  • 丹尼斯·斯米尔诺夫

  • Ehsan Totoni (核心开发者)

  • 埃琳娜·托特米娜

  • 埃里克·拉尔森

  • Ethan Pronovost

  • 乔瓦尼·卡瓦林

  • 格雷厄姆·马克尔

  • 吉尔赫梅·莱奥巴斯

  • 艾萨克·维尔舒普

  • 詹姆斯·伯尔博

  • Leo Fang

  • 马克·加西亚

  • Marcelo Duarte Trevisani

  • 马特·库珀

  • Matti Picus

  • 罗布·恩尼斯

  • Rujal Desai

  • Siu Kwan Lam (核心开发者)

  • Stan Seibert (核心开发者)

  • Stuart Archibald (核心开发者)

  • Todd A. Anderson (核心开发者)

  • VDimir

  • Valentin Haenel (核心开发者)

  • 维亚切斯拉夫·斯米尔诺夫

版本 0.46.0

此版本显著重构了 Numba 的主要部分之一,即编译器管道,以使其更具扩展性和更易于使用。此举旨在继续增强 Numba 作为编译器工具包的能力。同样地,Numba 现在有了一个扩展注册机制,允许其他使用 Numba 的项目自动发现其可由 Numba JIT 编译的函数。此外,还添加了许多其他相关的编译器工具包增强功能,以及一些更多的 NumPy 特性和大量的错误修复。

此版本已将 CUDA Array Interface 规范更新至第 2 版,该版本明确了 C 连续数组的 strides 属性,并规定了零大小数组的处理方式。Numba 中的实现已更改,可能会影响依赖旧行为的下游包(参见问题 #4661)。

来自用户贡献的PR的增强功能(感谢!):

  • Aaron Meurer 在 #4345 和 #4341 中修复了代码库中的一些 Python 问题。

  • Ashwin Srinath 通过 #4576 修复了一个 CUDA 性能问题。

  • Ethan Pronovost 在 #4601 中增加了对三角形索引函数(NumPy 函数 tril_indicestril_indices_fromtriu_indicestriu_indices_from)的支持。

  • Gerald Dalley 修复了 Python 2 中发生的竞争条件。

  • Gregory R. Lee 修复了已弃用的 inspect.getargspec 的使用。

  • Guilherme Leobas 贡献了五个 PR,在 #4518 和 #4386 中增加了对 np.appendnp.count_nonzero 的支持。在 #4510 中,类型化的 List 被修复以接受无符号整数。#4463 修复了 NamedTuple 内部的一个问题,而 #4397 更新了 np.sum 的文档。

  • James Bourbeau 在 #4331 中添加了一个新功能,允许自动将 jit 装饰器应用于整个模块。此外,在 #4447 和 #4433 中对文档和代码库进行了一些小修复,并在 #4228 中修复了就地数组操作。

  • Jim Crist 修复了 #4464 中补丁错误渲染的一个错误。

  • Leo Fang 在 #4609 中更新了 CUDA 数组接口合约。

  • Pearu Peterson 在 #4425 中增加了对基于 Unicode 的 NumPy 数组的支持。

  • Peter Andreas Entschev 修复了 #4581 中的 CUDA 并发错误。

  • Lucio Fernandez-Arjona 扩展了 Numba 的 np.sum 支持,现在可以在 #4472 中接受 dtype 关键字参数。

  • Pedro A. Morales Maries 在 #4128 中增加了对 np.cross 的支持,并在 #4595 中添加了必要的扩展 numba.numpy_extensions.cross2d

  • David Hoese、Eric Firing、Joshua Adelman 和 Juan Nunez-Iglesias 分别在 #4565、#4482、#4455、#4375 中修复了文档问题。

  • Vyacheslav Smirnov 和 Rujal Desai 在 #4606 中启用了对 unicode 字符串的 count() 支持。

通用增强功能:

  • PR #4113: 为语义常量添加重写。

  • PR #4128: 添加 np.cross 支持

  • PR #4162: 使IR可比较并使其合法化。

  • PR #4208: 研发内联、即时编译和重载。

  • PR #4331: 调用函数的自动JIT

  • PR #4353: 检查工具以确认numba支持的功能

  • PR #4386: 实现 np.count_nonzero

  • PR #4425: Unicode 数组支持

  • PR #4427: numba 扩展的入口点

  • PR #4467: 文字分派

  • PR #4472: 允许在 np.sum 中使用 dtype 输入参数

  • PR #4513: 新编译器。

  • PR #4518: 添加对 np.append 的支持

  • PR #4554: 重构 NRT C-API

  • PR #4556: 0.46 计划弃用的功能

  • PR #4567: 添加环境变量以禁用性能警告。

  • PR #4568: 添加 np.array_equal 支持

  • PR #4595: 实现 numba.cross2d

  • PR #4601: 添加三角索引函数

  • PR #4606: 启用对 unicode 字符串的 count() 方法的支持

修复:

  • PR #4228: 修复数组的就地操作符错误

  • PR #4282: 检测并抛出对生成器表达式的不支持

  • PR #4305: 不允许将写入容器的可变对象的分配提升。

  • PR #4311: 避免使用已弃用的 inspect.getargspec

  • PR #4328: 将 GC 宏替换为函数调用

  • PR #4330: 放宽类型化容器转换检查

  • PR #4341: 修复某些文件顶部的部分编码行(utf8 -> utf-8)

  • PR #4345: 在 numba/types 中用显式导入替换 “import *

  • PR #4346: 修复 ascii 字符串中 isupper 的错误算法。

  • PR #4349: 在 typed-list 中使用 jitclass 进行测试

  • PR #4361: 在诊断L4的LICM部分添加分配提升信息

  • PR #4366: 将搜索框偏移以避免在某些使用Safari的页面上换行。修复了 #4365。

  • PR #4372: 将所有 “except BaseException” 替换为 “except Exception”。

  • PR #4407: 恢复用于支持 NumPy 1.10 的“free” conda 频道。

  • PR #4408: 添加对常量字节的降低处理。

  • PR #4409: 添加异常链以提供更好的错误上下文

  • PR #4411: 类型名称不应包含面向用户的调试描述。

  • PR #4412: 修复 #4387。限制递归函数的返回类型数量

  • PR #4426: 修复了py2中的两个模块拆卸竞争问题。

  • PR #4431: 修复并测试 numpy.random.random_sample(n) 以适应 np117

  • PR #4463: NamedTuple - 在非可迭代元素上引发错误

  • PR #4464: 在补丁错误中添加一个换行符

  • PR #4474: 修复 parfors(及其他 IR 扩展)的移除死代码的活性问题

  • PR #4510: 使 List.__getitem__ 接受无符号参数

  • PR #4512: 在类型检查时,对大于1维数组的迭代抛出特定错误。

  • PR #4532: 修复使用 Literal 类型作为索引的 static_getitem

  • PR #4547: 更新内联成本模型信息。

  • PR #4557: 生成任意测试数据时使用特定的随机数种子

  • PR #4559: 调整测试超时时间

  • PR #4564: 在 ppc64le 上跳过触发 LLVM 错误的 unicode 数组测试

  • PR #4621: 修复由于缺少 numba/cext 导致的打包问题

  • PR #4623: 修复由于存储模型不匹配导致的 #4520 问题

  • PR #4644: 更新 llvmlite 0.30.0

CUDA 增强/修复:

  • PR #4410: 修复 #4111。cudasim 错误处理 recarray

  • PR #4576: 将 np.prod 替换为 functools.reduce 以从形状计算大小

  • PR #4581: 防止在 ForAll 中获取 GIL

  • PR #4592: 修复 #4589。 对于常量动态共享内存,只需传递 NULL 给 b2d_func。

  • PR #4609: 更新 CUDA 数组接口 & 强制 Numba 合规性

  • PR #4619: 为CUDA目标实现 math.{degrees, radians}。

  • PR #4675: 将 cuda 数组接口升级到版本 2

文档更新:

  • PR #4317: 为 ARMv8/AArch64 添加文档

  • PR #4318: 在文档中添加支持的平台。关闭 #4316

  • PR #4375: 为检查方法添加文档字符串

  • PR #4388: 更新 Python 2.7 EOL 声明

  • PR #4397: 添加关于 np.sum 的说明

  • PR #4447: 小幅并行性能提示编辑

  • PR #4455: 澄清关于数组的类型字典文档

  • PR #4482: 修复 guvectorize 文档字符串中的示例。

  • PR #4541: 修复 architecture.rst 中的两个拼写错误

  • PR #4548: 文档化 numba.extending.intrinsic 和内联。

  • PR #4565: 修正 jit-compilation 文档中的拼写错误

  • PR #4607: 在文档中添加依赖列表

  • PR #4614: 添加实现新编译器传递的文档。

CI 更新:

  • PR #4415: 在Linux上进行32位增量构建时不使用空闲通道

  • PR #4433: 移除过时的azure评论

  • PR #4493: 修复 CUDA 内在函数相关的重载内联器

  • PR #4593: 启用 Azure CI 批处理

贡献者:

  • Aaron Meurer

  • 阿什温·斯里纳特

  • 大卫·霍斯

  • Ehsan Totoni (核心开发者)

  • 埃里克·法林

  • Ethan Pronovost

  • 杰拉尔德·达利

  • 格雷戈里·R·李

  • 吉尔赫梅·莱奥巴斯

  • 詹姆斯·伯尔博

  • 吉姆·克里斯

  • 约书亚·阿德尔曼

  • Juan Nunez-Iglesias

  • Leo Fang

  • Lucio Fernandez-Arjona

  • Pearu Peterson

  • 佩德罗·A·莫拉莱斯·玛丽

  • 彼得·安德烈亚斯·恩切夫

  • Rujal Desai

  • Siu Kwan Lam (核心开发者)

  • Stan Seibert (核心开发者)

  • Stuart Archibald (核心开发者)

  • Todd A. Anderson (核心开发者)

  • Valentin Haenel (核心开发者)

  • 维亚切斯拉夫·斯米尔诺夫

版本 0.45.1

此补丁版本解决了在 0.45.0 版本中报告的一些回归问题,并增加了对 NumPy 1.17 的支持:

  • PR #4325: 接受标量/0维数组

  • PR #4338: 修复 #4299。Parfors 归约变量未被删除。

  • PR #4350: 仅在 fork() 时使用进程级锁。

  • PR #4354: 尝试修复 #4352。

  • PR #4357: 修复 np1.17 的 isnan、isinf、isfinite ufuncs

  • PR #4363: 修复 np.interp 在 np1.17 中对 nan 的处理

  • PR #4371: 修复 nump1.17 随机函数非别名问题

贡献者:

  • Siu Kwan Lam (核心开发者)

  • Stuart Archibald (核心开发者)

  • Valentin Haenel (核心开发者)

版本 0.45.0

在此版本中,Numba 增加了一个实验性的 numba.typed.List 容器,作为 reflected list 的未来替代品。此外,使用 parallel=True 装饰的函数现在可以被缓存,以减少与自动并行化相关的编译开销。

来自用户贡献的PR的增强功能(感谢!):

  • James Bourbeau 在 #4227 中为可报告的错误消息添加了 Numba 版本,在 #4200 中为 inspect_types 添加了 signature 参数,在 #4205 中改进了 normalize_signature 的文档字符串,并通过在 #4254 中为 register_dispatcher 添加引用计数修复了 #3658。

  • Guilherme Leobas 分别在 #4216 和 #4149 中实现了支配树和支配前沿算法。

  • Nick White 在 #4137 中修复了 CUDA 目标中 round 的问题。

  • Joshua Adelman 在 #4129 中增加了对判断一个值是否在 range 内的支持(即 x in range(...)),并在 #4076 中增加了来自 NumPy 的窗口函数(np.bartlett, np.hamming, np.blackman, np.hanning, np.kaiser)。

  • Lucio Fernandez-Arjona 在 #4077 中增加了对 np.select 的支持

  • Rob Ennis 在 #4157 中添加了对 np.flatnonzero 的支持

  • Keith Kraus 在 #4199 中扩展了 __cuda_array_interface__,添加了一个可选的掩码属性。

  • Gregory R. Lee 在 #4311 中替换了已弃用的 inspect.getargspec 用法。

通用增强功能:

  • PR #4328: 用函数调用替换 GC 宏

  • PR #4311: 避免使用已弃用的 inspect.getargspec

  • PR #4296: 放宽 ppc64le 上窗口函数测试的容差

  • PR #4254: 为 register_dispatcher 添加引用计数

  • PR #4239: 在数组分析中支持多维数组的 len() 函数

  • PR #4234: 为 np.kron 数组顺序引发信息性错误

  • PR #4232: 添加 unicodetype 数据库、底层字符串函数及示例。

  • PR #4229: 使哈希可缓存

  • PR #4227: 在可报告的错误信息中包含 numba 版本

  • PR #4216: 添加支配树

  • PR #4200: 为 inspect_types 添加签名参数

  • PR #4196: 捕获内部函数导入缺失的情况。

  • PR #4180: 更新不可小写的全局消息的使用。

  • PR #4166: 为 PR #4149 添加测试

  • PR #4157: 支持 np.flatnonzero

  • PR #4149: 为 Numba IR 实现 SSA 的支配边界

  • PR #4148: 在内联闭包调用中调用分支剪枝

  • PR #4132: 减少 inttoptr 的使用

  • PR #4129: 支持范围的包含

  • PR #4112: 为 np.transpose 和元组提供更好的错误信息

  • PR #4110: 添加范围属性, 开始, 停止, 步长

  • PR #4077: 添加 np select

  • PR #4076: 添加 numpy 窗口函数支持 (np.bartlett, np.hamming, np.blackman, np.hanning, np.kaiser)

  • PR #4095: 在 find_const() 中支持 ir.Global/FreeVar

  • PR #3691: 使 TypingError 更早中止编译

  • PR #3646: 记录类型推断中遇到的内部错误

修复:

  • PR #4303: 解决 scipy 错误 10206

  • PR #4302: 修复主分支上的flake8问题

  • PR #4301: 修复 np.select 实现中的整数字面量错误

  • PR #4291: 修复 jitclass 类型的序列化问题

  • PR #4262: 解决 #4251 - 修复重塑分析中的错误。

  • PR #4233: 修复了 #4215 揭示的问题

  • PR #4224: 修复 #4223。由于 objectmode 中的 StaticSetItem 导致的循环提升错误

  • PR #4222: 修复错误的Python路径。

  • PR #4178: 修复一元运算符重载,与unicode实现进行检查

  • PR #4173: 修复带有权重的 np.bincount 中的返回类型

  • PR #4153: 修复数组分析中的切片形状分配

  • PR #4152: 修复字典查找中的状态检查

  • PR #4145: 使用可调用对象而不是检查 __module__

  • PR #4118: 修复CPU上的内联汇编支持。

  • PR #4088: 解决 #4075 - parfors array_analysis 错误。

  • PR #4085: 解决 #3314 - parfors array_analysis 在 reshape 时的错误。

CUDA 增强/修复:

  • PR #4199: 扩展 __cuda_array_interface__ 以包含可选的掩码属性,版本提升至 1

  • PR #4137: CUDA - 修复 round 内置函数

  • PR #4114: 支持第三方激活的CUDA上下文

文档更新:

  • PR #4317: 为 ARMv8/AArch64 添加文档

  • PR #4318: 在文档中添加支持的平台。关闭 #4316

  • PR #4295: 修改弃用时间表

  • PR #4253: 修复 pysupported 文档中的拼写错误

  • PR #4252: 修复 repomap 上的拼写错误

  • PR #4241: 移除未使用的导入

  • PR #4240: 修复 jitclass 文档中的拼写错误

  • PR #4205: 在 normalize_signature 文档字符串中更新返回值顺序

  • PR #4237: 更新文档链接以指向最新文档而非开发文档。

  • PR #4197: 超链接 repomap

  • PR #4170: 澄清在 prange 中向数组累积的文档

  • PR #4147: 修复 DictType 可迭代对象的文档字符串

  • PR #3951: 重载指南

CI 更新:

  • PR #4300: AArch64 没有 faulthandler 包

  • PR #4273: 为测试固定到 MKL BLAS 以获得一致的结果

  • PR #4209: 恢复之前的网络容差补丁,并尝试使用conda配置

  • PR #4138: 仅在Python 3上进行Azure测试之前移除tbb,因为Python 2上已经移除了它

贡献者:

  • Ehsan Totoni (核心开发者)

  • 格雷戈里·R·李

  • 吉尔赫梅·莱奥巴斯

  • 詹姆斯·伯尔博

  • 约书亚·L·阿德尔曼

  • 基思·克劳斯

  • Lucio Fernandez-Arjona

  • 尼克·怀特

  • 罗布·恩尼斯

  • Siu Kwan Lam (核心开发者)

  • Stan Seibert (核心开发者)

  • Stuart Archibald (核心开发者)

  • Todd A. Anderson (核心开发者)

  • Valentin Haenel (核心开发者)

版本 0.44.1

此补丁版本解决了在 0.44.0 版本中报告的一些回归问题:

  • PR #4165: 修复 NUMBAPRO_NVVM 的 #4164 问题。

  • PR #4172: 如果参数名称被重新定义,则放弃分支修剪。(修复 #4163)

  • PR #4183: 修复 #4156。定义循环内变量的问题。

版本 0.44.0

重要提示:在此版本中,进行了一些重要的弃用(以及一些不太重要的弃用),建议用户阅读相关文档。

此版本中的通用增强功能包括:

  • Numba 在所有平台上都由 LLVM 8 支持,除了 ppc64le,由于 bug,它仍然停留在 LLVM 7.x 系列。

  • Numba 的字典支持现在包括了对键和值的类型推断。

  • 现在,.view() 方法适用于 NumPy 标量类型。

  • 新增支持的 NumPy 函数:np.delete, np.nanquantile, np.quantile, np.repeat, np.shape。

此外,已经投入了大量精力来修复一些长期存在的错误和大量其他错误,“修复”部分这次非常大!

来自用户贡献的PR的增强功能(感谢!):

  • Max Bolingbroke 在 #3847 中增加了对选择性使用 fastmath 标志的支持。

  • Rob Ennis 在 #3820 中使 min() 和 max() 在可迭代对象上工作,并在 #3899 中添加了 np.quantile 和 np.nanquantile。

  • Sergey Shalnov 添加了许多与 Unicode 字符串相关的功能,包括 #3978 中的 zfill,#4001 中的 ljust,#4044 中的 rjust 和 center,以及 #4048 中的 strip、lstrip 和 rstrip。

  • Guilherme Leobas 在 #3890 中增加了对 np.delete 的支持

  • Christoph Deil 在 #4066 中通过 python -m numba 公开了 Numba CLI,并进行了大量的文档修复。

  • Leo Schwarz 在 #3852 中为 jitclass 默认构造函数参数编写了大部分代码。

  • Nick White 增强了 CUDA 后端,在 #4054 中尽可能使用 min/max PTX 指令。

  • Lucio Fernandez-Arjona 在 #3952 中实现了 unicode 字符串 __mul__ 函数。

  • Dimitri Vorona 编写了 #3861 中实现 jitclass 的 getitem 和 setitem 的大部分代码。

通用增强功能:

  • PR #3820: 可迭代对象的最小值和最大值

  • PR #3842: Unicode 类型迭代

  • PR #3847: 允许对 fastmath 标志进行细粒度控制,以部分解决 #2923

  • PR #3852: PR #2894 的延续

  • PR #3861: 继续 PR #3730

  • PR #3890: 添加对 np.delete 的支持

  • PR #3899: 支持 np.quantile 和 np.nanquantile

  • PR #3900: 修复 3457 :: 实现 np.repeat

  • PR #3928: 为 NumPy 标量添加 .view() 方法

  • PR #3939: 更新 icc_rt 克隆配方。

  • PR #3952: 字符串的 __mul__ 方法,初始实现和测试

  • PR #3956: 类型推断的字典

  • PR #3959: 创建一个字符串切片视图以避免额外分配

  • PR #3978: zfill 操作的实现

  • PR #4001: ljust 操作的实现

  • PR #4010: 支持 dict(){}

  • PR #4022: 支持 llvm 8

  • PR #4034: 使 type.Optional str 更具代表性

  • PR #4041: 弃用警告

  • PR #4044: rjust 和 center 操作的实现

  • PR #4048: strip、lstrip 和 rstrip 操作的实现

  • PR #4066: 通过 python -m numba 暴露 numba CLI

  • PR #4081: 实现 np.shape 并支持 asarray 函数。

  • PR #4091: 弃用不带 RefType 的 iternext_impl 使用

CUDA 增强/修复:

  • PR #3933: 为 CUDA 设备数组对象添加了 .nbytes 属性。

  • PR #4011: 为 cuda 设备函数添加 .inspect_ptx() 方法

  • PR #4054: CUDA: 使用 min/max PTX 指令

  • PR #4096: 更新 CUDA 库查找的环境变量

文档更新:

  • PR #3867: 代码仓库地图

  • PR #3918: 添加Joris的Fosdem 2019演讲

  • PR #3926: 按日期排列Numba应用的演讲

  • PR #3943: 修复向量化文档中的两个小拼写错误

  • PR #3944: 修正 jitclass 文档

  • PR #3990: 在FAQ中提及预印本仓库。修复 #3981

  • PR #4012: 修正 contributing.rst 中的 runtests 命令

  • PR #4043: 修正拼写错误

  • PR #4047: 修复 guvectorize 的模糊文档

  • PR #4060: 移除文档中剩余的 autojit 提及

  • PR #4063: 修复文档字符串中的注释示例

  • PR #4065: 添加FAQ条目解释Numba项目名称

  • PR #4079: 为 typed.Dict 的原子性添加文档

  • PR #4105: 移除关于CUDA ENVVAR潜在替换的信息

修复:

  • PR #3719: 解决 #3528 问题。在不使用 parallel=True 时增加对切片的支持。

  • PR #3727: 移除已知死变量的删除操作。

  • PR #3845: 修复 .astype 中的可变标志传输

  • PR #3853: 修复C源代码中的一些小问题。

  • PR #3862: 修正数据的布尔重解释

  • PR #3863: 注释掉了 appveyor 徽章

  • PR #3869: 合并后修复了flake8

  • PR #3871: 在 ir.py 中添加断言以帮助强制正确的结构

  • PR #3881: 修复 datetime64 的 dtype 转换准备

  • PR #3884: 防止 objmode 回退 IR 的突变。

  • PR #3885: 更新 llvmlite 0.29

  • PR #3886: 使用 safe_load 从 pyyaml。

  • PR #3887: 通过允许conda重试来增加对网络错误的容忍度

  • PR #3893: 修复 namedtuple 构造函数中的类型转换。

  • PR #3894: 修复多重数组定义的数组内联器。

  • PR #3905: 将 #3903 合并到主分支

  • PR #3920: 如果发现不支持的跳转操作码,则引发更好的错误。

  • PR #3927: 对与numpy相关的文件应用flake8

  • PR #3935: 静默 DeprecationWarning

  • PR #3938: 为未知操作码提供更好的错误信息

  • PR #3941: 修复 parfor 转换中 ufuncs 的类型

  • PR #3946: 从 inline_closurecall 返回变量重命名字典

  • PR #3962: 修复 Record.make_c_struct 对齐计算中的错误

  • PR #3967: 修复pickling unicode时的错误

  • PR #3964: Unicode 分割算法版本控制

  • PR #3975: 为 numba -s 添加未知区域设置的处理程序

  • PR #3991: 允许在ufunc机制中使用可选参数

  • PR #3995: 移除类型推断中的断言,以改善错误信息。

  • PR #3996: 为 UnicodeType 添加 is_ascii 标志

  • PR #4009: 防止在 np.linalg.cond 中出现零除错误

  • PR #4014: 解决 #4007。

  • PR #4021: 为无效的全局写入添加更具体的错误消息。

  • PR #4023: 修复记录数据类型中标题的处理

  • PR #4024: 在声明对象被多次定义之前,先检查调用是否为常量。

  • PR #4027: 修复问题 #4020。 在编译时关闭 no_cpython_wrapper 标志…

  • PR #4033: [WIP] 修复反射列表内数组的错误数据类型 #4028

  • PR #4061: 将 IPython 缓存目录名称更改为 numba_cache

  • PR #4067: 删除 examples/notebooks/LinearRegr.py

  • PR #4070: 捕获对全局 typed.Dict 的写入并引发异常。

  • PR #4078: 检查元组长度

  • PR #4084: 修复可选返回 None 时缺少 incref 的问题

  • PR #4089: 使警告修复器在类型比较时刷新工作。

  • PR #4094: 修复注释def的函数定义查找逻辑

  • PR #4100: 修复32位上的对齐检查。

  • PR #4104: 使用符合 PEP 508 的 env 标记来安装依赖项

贡献者:

  • 本杰明·扎伊特伦

  • 克里斯托夫·戴尔

  • 大卫·赫希菲尔德

  • 迪米特里·沃罗纳

  • Ehsan Totoni (核心开发者)

  • 吉尔赫梅·莱奥巴斯

  • Leo Schwarz

  • Lucio Fernandez-Arjona

  • 马克斯·博林布罗克

  • 南都特吉

  • 尼克·怀特

  • 拉维·特贾·古塔

  • 罗布·恩尼斯

  • 谢尔盖·沙尔诺夫

  • Siu Kwan Lam (核心开发者)

  • Stan Seibert (核心开发者)

  • Stuart Archibald (核心开发者)

  • Todd A. Anderson (核心开发者)

  • Valentin Haenel (核心开发者)

版本 0.43.1

这是一个修复错误的发布版本,提供了一些小的改动来修复:分支修剪中的错误,np.interp 功能中的错误,并且完全适配 NumPy 1.16 发布系列。

  • PR #3826: 支持 NumPy 1.16

  • PR #3850: 重构 np.interp

  • PR #3883: 将修剪的条件重写为其评估的常量。

贡献者:

  • 罗布·恩尼斯

  • Siu Kwan Lam (核心开发者)

  • Stuart Archibald (核心开发者)

版本 0.43.0

在此版本中,主要的新功能包括:

  • 对静态类型字典的初始支持

  • 改进 hash() 以匹配 Python 3 的行为

  • 对 heapq 模块的支持

  • 能够将 C 结构体传递给 Numba

  • 更多 NumPy 函数:asarray, trapz, roll, ptp, extract

注意:

绝大多数的 NumPy 1.16 行为都得到了支持,然而涉及 NaTdatetimetimedelta 使用与早期版本的行为相匹配。ufunc 套件尚未扩展以适应 NumPy 1.16 中存在的两个与时间计算相关的新增功能。此外,函数 ediff1dinterp 在某些输入模式中出现 NaN 时,复制输出时存在已知的小问题。

通用增强功能:

  • PR #3563: 支持 np.roll

  • PR #3572: 支持 np.ptp

  • PR #3592: 在类型推断之前添加死分支剪枝。

  • PR #3598: 实现 np.asarray()

  • PR #3604: 支持 np.interp

  • PR #3607: 降低过程中的一些简化

  • PR #3612: 调度器中的精确匹配标志

  • PR #3627: 支持 np.trapz

  • PR #3630: 带有广播的 np.where

  • PR #3633: 支持 np.extract

  • PR #3657: np.max, np.min, np.nanmax, np.nanmin - 支持复数数据类型

  • PR #3661: 以 Numpy 结构化数组的形式访问 C 结构

  • PR #3678: 支持 str.split 和 str.join

  • PR #3684: 支持C结构体中的C数组

  • PR #3696: 添加内在函数以帮助调试引用计数

  • PR #3703: 类型哈希的实现。

  • PR #3715: 为 numba 内部使用移植 CPython3.7 字典

  • PR #3716: 支持字符串的就地连接

  • PR #3718: 为 ConstantInferenceError 异常添加位置信息。

  • PR #3720: 改进关于无效签名的错误信息

  • PR #3731: 对 heapq 的支持

  • PR #3754: 更新 llvmlite 0.28

  • PR #3760: 可重载的运算符.setitem

  • PR #3775: 支持重载运算符.delitem

  • PR #3777: 实现字典的编译器支持

  • PR #3791: 实现 numba 字典的解释器端接口

  • PR #3799: 在 numba 字典中支持 refcount’ed 类型

CUDA 增强/修复:

  • PR #3713: 修复当CC过低时的NvvmSupportError消息

  • PR #3722: 修复 #3705: 负步长导致的切片错误

  • PR #3755: 使 cuda.to_device 接受只读主机数组

  • PR #3773: 调整库搜索以适应多个位置

文档更新:

  • PR #3651: 修复文档中指向 berryconda 的链接

  • PR #3668: 添加 Azure Pipelines 构建徽章

  • PR #3749: DOC: 澄清 prange 与 range 的不同之处

  • PR #3771: 修复一些拼写错误

  • PR #3785: 澄清仅将 range 用作函数的情况。

  • PR #3829: 为 typed-dict 添加文档

修复:

  • PR #3614: 解决 #3586

  • PR #3618: 在ARM上跳过gdb测试。

  • PR #3643: 移除 support_literals 的使用

  • PR #3645: 强制并修复 AbstractTemplate.generic 必须返回一个 Signature

  • PR #3648: 在 @overload 签名不匹配时失败。

  • PR #3660: 在测试 numba.tests.test_lists.TestLists.test_mul_error 时添加了忽略消息

  • PR #3662: 用 numba.six 替换 six

  • PR #3663: 从 travisci 构建中移除覆盖率计算

  • PR #3672: 在迭代统一元组时避免内存泄漏

  • PR #3676: 修复了元组内常量字符串的降低问题

  • PR #3677: 确保所有引用的编译函数都正确链接

  • PR #3692: 修复由于对浮点值的测试过于严格导致的测试失败。

  • PR #3693: 拦截失败的导入以帮助用户。

  • PR #3694: 修复 enumerate 迭代器中的内存泄漏

  • PR #3695: 将内在实现的返回值 None 转换为虚拟值

  • PR #3697: 修复问题 #3687

  • PR #3701: 修复数组.T分析(修复 #3700)

  • PR #3704: 重载方法的修复

  • PR #3706: 不要递归地将调用变量推入嵌套的 parfors 中。解决 #3686。

  • PR #3710: 如果在循环中将可变变量传递给函数,则设置为不可提升。解决 #3699。

  • PR #3712: 使用更好的内置机制来解析调用类型,设置 parallel=True。解决 #3671 问题。

  • PR #3725: 修复无效的空列表删除

  • PR #3740: 将 uintp 添加为 tuple operator.getitem 的有效类型。

  • PR #3758: 修复内联中的目标定义更新

  • PR #3782: 在 yield optional 时引发类型错误。

  • PR #3792: 修复了将非模块对象用作函数模块的问题。

  • PR #3800: 修复 np.interp 的错误

  • PR #3808: 更新宏以包含 VS2014 以修复 py3.5 构建

  • PR #3809: 为仅调试的C函数添加调试保护。

  • PR #3816: 修复 array.sum(axis) 1d 输入的返回类型。

  • PR #3821: 使用 PySys_FormatStdout 替换 PySys_WriteStdout 以确保不会截断。

  • PR #3830: Getitem 不应返回可选类型

  • PR #3832: 在 find_file() 中处理单个字符串作为路径

贡献者:

  • Ehsan Totoni

  • Gryllos Prokopis

  • 乔纳森·J·赫尔姆斯

  • 凯拉·恩根

  • lalitparate

  • luk-f-a

  • Matyt

  • 马克斯·博林布罗克

  • 迈克尔·塞弗特

  • 罗布·恩尼斯

  • 林思宽

  • Stan Seibert

  • 斯图尔特·阿奇博尔德

  • Todd A. Anderson

  • Tao He

  • 瓦伦丁·哈内尔

版本 0.42.1

错误修复版本,修复了OSX wheel包中错误的哈希值。源代码无更改。

版本 0.42.0

在此版本中,主要功能包括:

  • 从 jitted 函数内部启动并附加 GDB 调试器的能力。

  • 将 LLVM 升级到 7.0.0 版本。

我们在开发者手册中添加了项目路线图的草稿。该路线图仅供参考,因为优先级和资源可能会发生变化。

以下是来自贡献的PR中的一些改进:

  • #3532. Daniel Wennberg 改进了 cuda.{pinned, mapped} API,使得在上下文管理器退出时,相关内存立即释放。

  • #3531. Dimitri Vorona 启用了 jitclass 方法的内联功能。

  • #3516. Simon Perkins 增加了对传递 numpy dtypes(例如 np.dtype("int32"))及其类型构造函数(例如 np.int32)到 jitted 函数的支持。

  • #3509. Rob Ennis 增加了对 np.corrcoef 的支持。

与在并行模式下创建空切片相关的回归问题(#3554, #3461)已通过 #3558 解决。

通用增强功能:

  • PR #3392: 直接从 Numba 启动并附加 gdb。

  • PR #3437: 为适应 LLVM 7.0.x 所做的更改

  • PR #3509: 支持 np.corrcoef

  • PR #3516: dtype 值的类型

  • PR #3520: 修复 @stencil 在提供 out kwarg 时忽略 cval 的问题。

  • PR #3531: 修复 jitclass 方法内联并避免不必要的 increfs

  • PR #3538: 避免由于无效的可见性导致的未来C级断言错误

  • PR #3543: 避免实现错误被 try-except 隐藏

  • PR #3544: 添加 long_running 测试标志和排除测试的功能。

  • PR #3549: ParallelAccelerator 缓存改进

  • PR #3558: 修复了就地二元运算符的数组分析。

  • PR #3566: 在 armv7l 上跳过对齐测试。

  • PR #3567: 修复命名元组中统一字面类型的错误

  • PR #3576: 为 NumPy 输出数组添加特殊复制例程

  • PR #3577: 修复 objmode 上下文管理器的示例和文档中的拼写错误。重新排序语句。

  • PR #3580: 在确定是否安全时使用别名信息

  • PR #3583: 使用 ir.unknown_loc 表示未知的 Loc,如 #3390 带有测试

  • PR #3587: 修复 llvm7 中 llvm.memset 使用方式的变更

  • PR #3596: 修复全局命名元组的数组分析

  • PR #3597: 如果线程后端初始化不安全,警告用户。

  • PR #3605: 为从ufunc调用写入只读数组添加保护

  • PR #3606: 提高未定义类型错误消息措辞的准确性。

  • PR #3611: gdb 测试守卫需要确认 ptrace 权限

  • PR #3616: 在ARM上跳过gdb测试。

CUDA 增强:

  • PR #3532: 一次性注销临时固定的主机数组

  • PR #3552: 在主机到设备的传输中正确处理广播数组。

  • PR #3578: 对齐 cuda 和 cuda 模拟器的 kwarg 名称。

文档更新:

  • PR #3545: 修复5分钟指南中的@njit描述

  • PR #3570: 对numba.cuda的小型文档修复

  • PR #3581: 修复 reference/types.rst 中的小拼写错误

  • PR #3594: 修改 @stencil 文档以正确反映 func_or_mode 参数

  • PR #3617: 截至2018年12月的草案路线图

贡献者:

  • 亚伦·克里奇利

  • 丹尼尔·温伯格

  • 迪米特里·沃罗纳

  • Dominik Stańczak

  • Ehsan Totoni (核心开发者)

  • Iskander Sharipov

  • 罗布·恩尼斯

  • 西蒙·穆勒

  • 西蒙·珀金斯

  • Siu Kwan Lam (核心开发者)

  • Stan Seibert (核心开发者)

  • Stuart Archibald (核心开发者)

  • Todd A. Anderson (核心开发者)

版本 0.41.0

此版本添加了以下主要功能:

  • 显示由 ParallelAccelerator 完成的优化诊断

  • 支持在 Intel VTune 中分析 Numba 编译的函数

  • 额外的 NumPy 函数:partition, nancumsum, nancumprod, ediff1d, cov, conj, conjugate, tri, tril, triu

  • 对Python 3 Unicode字符串的初步支持

通用增强功能:

  • PR #1968: armv7 支持

  • PR #2983: 反转 binop 运算符与运算符模块之间的映射 #2297

  • PR #3160: 并行诊断的首次尝试

  • PR #3307: 添加 NUMBA_ENABLE_PROFILING 环境变量,启用 jit 事件

  • PR #3320: 支持 np.partition

  • PR #3324: 支持 np.nancumsum 和 np.nancumprod

  • PR #3325: 在异常中添加位置信息。

  • PR #3337: 支持 np.ediff1d

  • PR #3345: 支持 np.cov

  • PR #3348: 支持用户管道类在提升中使用

  • PR #3363: 字符串支持

  • PR #3373: 改进空的不精确列表的错误信息。

  • PR #3375: 启用 overload(operator.getitem)

  • PR #3402: 支持元组中的负索引。

  • PR #3414: 重构 Const 类型

  • PR #3416: 优化了循环外的 alloca 使用

  • PR #3424: 更新 llvmlite 0.26

  • PR #3462: 添加对 np.conj/np.conjugate 的支持。

  • PR #3480: np.tri, np.tril, np.triu - 默认可选参数

  • PR #3481: 允许在 np.eye 中仅使用 dtype 参数作为关键字参数

CUDA 增强:

  • PR #3399: 为 cuda.jit 添加 max_registers 选项

持续集成 / 测试:

  • PR #3303: 使用 Azure Pipelines 的 CI

  • PR #3309: 解决apt的竞争条件问题

  • PR #3371: 修复 Azure Pipelines 的问题

  • PR #3362: 修复 #3360: RuntimeWarning: ‘numba.runtests’ 在 sys.modules 中找到

  • PR #3374: 在 wheel 构建中禁用 openmp

  • PR #3404: Azure Pipelines 模板

  • PR #3419: 修复cuda测试和测试发现中的错误报告

  • PR #3491: 防止在 armv7l 上安装 faulthandler

  • PR #3493: 修复了使用已修复的负索引行为的CUDA测试。

  • PR #3495: 开始对 Numba 源代码进行 Flake8 检查

修复:

  • PR #2950: 修复调度器以仅考虑连续性。

  • PR #3124: 修复 #3119,在归约中对0维数组抛出异常

  • PR #3228: 减少冗余模块链接

  • PR #3329: 修复Windows上的AOT问题。

  • PR #3335: 修复 __cuda_array_interface__ 视图的内存管理。

  • PR #3340: 修复错误名称中的拼写错误。

  • PR #3365: 修复默认的解包逻辑

  • PR #3367: 允许非全局引用 objmode() 上下文管理器

  • PR #3381: 修复在动态创建的函数中objmode的全局引用

  • PR #3382: 使用多个常量数组时的 CUDA_ERROR_MISALIGNED_ADDRESS 问题

  • PR #3384: 正确处理非常旧版本的 colorama

  • PR #3394: 为非32位安装添加32位包保护

  • PR #3397: 修复 with-objmode 警告

  • PR #3403 修复了在parfor传递后调用内联中的标签偏移

  • PR #3429: 修复了执行 exec(<字符串>) 时用户定义异常的引发。

  • PR #3432: 修复由于在py2.7中CI中的函数命名导致的错误

  • PR #3444: 修复了TBB的单线程执行问题,并为#3440添加了测试

  • PR #3449: 允许在 find_callname() 中匹配非数组对象

  • PR #3455: 更改 getiter 和 iternext 使其不再为纯函数。解决 #3425

  • PR #3467: 使 ir.UndefinedType 成为单例类。

  • PR #3478: 修复 np.random.shuffle 副作用

  • PR #3487: 对传递给 print() 的 kwargs 不支持

  • PR #3488: 移除无效脚本。

  • PR #3498: 修复布尔类型作为返回类型的模板支持

  • PR #3511: 修复处理 make_function 字面量的问题(#3414 的回归)

  • PR #3514: 添加缺失的 unicode != unicode

  • PR #3527: 修复复杂数学平方根实现,适用于大负值

  • PR #3530: 这为提供给 Parfors 的模式添加了一个参数检查。

  • PR #3536: 将列表析构函数的链接设置为 linkonce_odr 以修复AOT中的可见性

文档更新:

  • PR #3316: 更新 0.40 变更日志以包含更多 PR

  • PR #3318: 调整间距以避免搜索框换行到第二行

  • PR #3321: 在文档中添加关于异常导致的内存泄漏的说明。修复 #3263

  • PR #3322: 添加关于 CUDA + fork 问题的常见问题解答。修复 #3315。

  • PR #3343: 更新 argsort 的文档,部分支持 kind 关键字参数。

  • PR #3357: 在 5minguide.rst 中添加了对 njit 的提及。

  • PR #3434: 修复文档中的并行归约示例。

  • PR #3452: 修复断开的链接和标记问题。

  • PR #3484: 在文档中以em单位调整Numba标志的大小。修复了 #3313

  • PR #3502: 仅两个拼写错误

  • PR #3506: 文档字符串支持

  • PR #3513: 并行诊断的文档。

  • PR #3526: 修复与 @njit 声明相关的 5 分钟指南

贡献者:

  • 亚历克斯·福特

  • 安德烈亚斯·索德尔

  • 安东·马拉霍夫

  • 丹尼尔·斯坦德

  • Ehsan Totoni (核心开发者)

  • 亨利·施赖纳

  • Marcel Bargull

  • 马特·库珀

  • 尼克·怀特

  • 尼古拉斯·胡格

  • rjenc29

  • Siu Kwan Lam (核心开发者)

  • Stan Seibert (核心开发者)

  • Stuart Archibald (核心开发者)

  • Todd A. Anderson (核心开发者)

版本 0.40.1

这是一个仅针对 PyPI 的补丁版本,以确保 PyPI 轮子可以启用 TBB 线程后端,并在轮子中禁用 OpenMP 后端。manylinux1 的限制和用户环境的差异可能会导致在启用 OpenMP 的轮子构建中发生段错误。请注意,对于通过 conda 获取 Numba 0.40.0 的用户,此版本没有功能上的变化。

补丁:

  • PR #3338: 不小心将 Anton 从 0.40.0 的贡献者名单中遗漏了

  • PR #3374: 在wheel构建中禁用OpenMP

  • PR #3376: 更新 0.40.1 变更日志和 OpenMP 后端文档

版本 0.40.0

此版本增加了许多主要功能:

  • 一个新的 GPU 后端:现在可以使用 Linux 上的 ROCm 驱动编译适用于 AMD GPU 的内核。

  • Numba 用于自动多线程的线程池实现是可配置的,可以使用 TBB、OpenMP 或旧的“workqueue”实现。(TBB 可能会在未来的版本中成为首选默认设置。)

  • 关于Numba中线程和分叉安全性的新文档,以及线程安全性方面的整体改进。

  • 实验性支持在 nopython 模式函数中以对象模式执行代码块。

  • 并行循环现在允许数组作为归约变量

  • CUDA 改进:FMA、在支持的硬件上更快的 float64 原子操作、常量内存中的记录,以及改进的 datatime 数据类型支持

  • 更多 NumPy 函数:vander, tri, triu, tril, fill_diagonal

通用增强功能:

  • PR #3017: 添加支持 with-contexts 的功能

  • PR #3033: 添加对多维CFFI数组的支持

  • PR #3122: 在对象模式管道中添加内联器

  • PR #3127: 支持数组上的归约操作。

  • PR #3145: 支持 np.fill_diagonal

  • PR #3151: 保持一个最近N个反序列化函数的引用队列。修复 #3026

  • PR #3154: 如果可类型化,支持使用 list()。

  • PR #3166: Objmode with-块

  • PR #3179: 更新 llvmlite 0.25

  • PR #3181: 支持别名分析中的函数扩展

  • PR #3189: 支持对象方法类型中的字面常量

  • PR #3190: 支持在类型注解中传递闭包作为字面量值

  • PR #3199: 支持在简单的一元表达式中推断模板索引为常量

  • PR #3202: 线程层后端重构/重写/重造!

  • PR #3209: 支持 np.tri, np.tril 和 np.triu

  • PR #3211: 处理在构建元组中的解包(BUILD_TUPLE_UNPACK 操作码)

  • PR #3212: 支持 np.vander

  • PR #3227: 添加 NumPy 1.15 支持

  • PR #3272: 在 runtime._nrt_python.c_helpers 中添加 MemInfo_data

  • PR #3273: 重构。移除基于线程本地存储的上下文嵌套。

  • PR #3278: 编译器线程安全锁定

  • PR #3291: 在 numba -s 中添加 CPU 数量和 CFS 限制信息。

CUDA 增强:

  • PR #3152: 使用 cuda 驱动程序 API 获取最佳块大小以实现最佳占用率

  • PR #3165: 添加FMA内在函数支持

  • PR #3172: 使用 float64 添加原子操作,在可用的地方

  • PR #3186: 支持 CUDA 常量内存中的记录

  • PR #3191: CUDA: 修复日志大小

  • PR #3198: 修复 GPU datetime timedelta 类型的使用

  • PR #3221: 支持将 datetime/timedelta 标量参数传递给 CUDA 内核。

  • PR #3259: 添加 DeviceNDArray.view 方法以将数据重新解释为不同类型。

  • PR #3310: 修复分片cuda数组的IPC处理。

ROCm 增强功能:

  • PR #3023: 支持 AMDGCN/ROCm。

  • PR #3108: 将ROC信息添加到 numba -s 输出中。

  • PR #3176: 将 ROC 向量化初始化移动到 npyufunc

  • PR #3177: 为ROC流添加auto_synchronize支持

  • PR #3178: 更新ROC目标文档。

  • PR #3294: 在ROC编译路径中添加编译器锁。

  • PR #3280: 为HSA代理添加wavebits属性。

  • PR #3281: 修复 ds_permute 类型并添加测试

持续集成 / 测试:

  • PR #3091: 移除旧的配方,切换到基于环境变量的测试配置。

  • PR #3094: 为复数空间中的乘积增加更高的ULP容差。

  • PR #3096: 在增量脚本中设置错误退出

  • PR #3109: 如果没有 jinja2,则跳过需要 jinja2 的测试。

  • PR #3125: 跳过仅cudasim测试

  • PR #3126: 添加 Slack,移除 Flowdock

  • PR #3147: 改进在类型检查期间不支持的参数类型的错误信息。

  • PR #3128: 修复jetson tx2/ARM的recipe/build

  • PR #3167: 在安装之前在构建脚本中激活环境。

  • PR #3180: 添加跳过损坏测试的功能。

  • PR #3216: 修复某些容器设置中的 libcuda.so 加载问题

  • PR #3224: 切换到新的 Gitter 通知 webhook URL 并加密它

  • PR #3235: 添加32位Travis CI作业

  • PR #3257: 这将在Windows conda测试阶段中重新加入scipy/ipython。

修复:

  • PR #3038: 修复随机整数生成以匹配NumPy的结果。

  • PR #3045: 修复 #3027 - Numba 重新分配 sys.stdout

  • PR #3059: 已知 LoweringErrors 的处理程序。

  • PR #3060: 调整NumPy函数的属性错误。

  • PR #3067: 在线程块中发生异常时中止模拟器线程。

  • PR #3079: 实现 +/-(types.boolean) 修复 #2624

  • PR #3080: 正确计算复数类型的 np.var 和 np.std。

  • PR #3088: 修复 #3066 (prange 中的 array.dtype.type)

  • PR #3089: 修复无效的 ParallelAccelerator 提升问题。

  • PR #3136: 修复 #3135 (降低错误)

  • PR #3137: 修复问题3103(竞态条件检测)

  • PR #3142: 修复问题 #3139 (parfors 在 prange 块之间重复使用归约变量)

  • PR #3148: 移除无效的数组相等 @infer 代码

  • PR #3153: 修复带有 kw 参数调用的 canonicalize_array_math 类型

  • PR #3156: 修复了测试中缺少 pygments 的问题,并增加了防护措施。

  • PR #3168: Py37 字节输出修复。

  • PR #3171: 修复 #3146。修复 CFUNCTYPE void* 返回类型处理

  • PR #3193: 修复 setitem/getitem 解析器

  • PR #3222: 修复 #3214。在 while True 循环中对 POP_BLOCK 的错误处理。

  • PR #3230: 修复了looplifting中的活跃性分析问题

  • PR #3233: 修复32位ctypes.c_void_p的返回类型差异

  • PR #3234: 修复 np.where 的类型和布局。

  • PR #3237: 修复关于 imp 模块的 DeprecationWarning

  • PR #3241: 修复 #3225。在索引代码的类型定义中将 0nd 数组规范化为标量。

  • PR #3256: 修复 #3251: 将 ABCs 的导入移动到 Python >= 3.3 的 collections.abc

  • PR #3292: 修复问题3279。

  • PR #3302: 修复由于数据类型不匹配导致的错误

文档更新:

  • PR #3104: 针对 #3098 的变通方案(test_optional_unpack 海森堡错误)

  • PR #3132: 添加了一个约5分钟的Numba指南。

  • PR #3194: 修复关于 np.random 生成器 fork/线程安全的文档

  • PR #3242: 包含Numba演讲和教程链接的页面

  • PR #3258: 允许用户选择他们正在报告的问题类型。

  • PR #3260: 修复了损坏的链接

  • PR #3266: 修复用户/外部分配指针的cuda指针所有权问题

  • PR #3269: 使用CSS调整排版

  • PR #3270: 更新作为参数传递的函数的FAQ

  • PR #3274: 更新安装说明

  • PR #3275: 注意 pyobject 和 voidptr 是文档中的类型

  • PR #3288: 不再需要将并行优化称为“实验性”

  • PR #3318: 调整间距以避免搜索框换行到第二行

贡献者:

  • 安东·马拉霍夫

  • 亚历克斯·福特

  • 安东尼·比苏尔科

  • Ehsan Totoni (核心开发者)

  • 伦纳德·劳森

  • 马修·佩特罗夫

  • 尼克·怀特

  • Ray Donnelly

  • rjenc29

  • Siu Kwan Lam (核心开发者)

  • Stan Seibert (核心开发者)

  • Stuart Archibald (核心开发者)

  • 斯图尔特·雷诺兹

  • Todd A. Anderson (核心开发者)

版本 0.39.0

以下是 Numba 0.39.0 版本的重点内容。

  • 这是支持 Python 3.7 的第一个版本。

  • 在英特尔的帮助下,我们解决了SVML支持的问题(相关问题 #2938, #2998, #3006)。

  • 列表已支持包含引用计数类型,如 NumPy 数组和 list。注意,列表仍然不能容纳异构类型。

  • 我们对内部调用约定进行了重大更改,这应该对大多数用户来说是透明的,以允许未来的一项功能,该功能将允许从 nopython 模式函数跳回到 python 模式。这还修复了一个限制,即 print 在调用栈深处的 nopython 函数中无法使用。

  • 为了支持CUDA GPU,我们按照NumPy数组接口规范添加了`__cuda_array_interface__`,以允许Numba使用外部定义的设备数组。我们已经向CuPy提交了相应的拉取请求,以测试该概念并能够使用CuPy GPU数组。

  • Numba 调度器 inspect_types() 方法现在支持 pretty 关键字参数,如果设置为 True,将在从 ipython/jupyter-notebook 调用时生成 ANSI/HTML 输出,显示注释的类型。

  • 现在支持 NumPy 函数 ndarray.dotnp.percentilenp.nanpercentilenp.unique

  • Numba 现在支持使用每个项目的配置文件来永久设置通常通过 NUMBA_* 系列环境变量设置的行为。

  • 已添加对 ppc64le 架构的支持。

增强功能:

  • PR #2793: 简化并移除 html_annotate 模板中的 JavaScript。

  • PR #2840: 支持引用计数类型的列表

  • PR #2902: 支持 np.unique

  • PR #2926: 为所有架构启用围栏并添加开发者注释

  • PR #2928: 使关于未类型化列表的错误信息更加详细。

  • PR #2930: 添加配置文件和配色方案。

  • PR #2932: 在 check_output 解码中修复编码为 ‘UTF-8’。

  • PR #2938: Python 3.7 兼容性: _Py_Finalizing 变为 _Py_IsFinalizing()

  • PR #2939: 全面的 SVML 单元测试

  • PR #2946: 添加对 ndarray.dot 方法和测试的支持。

  • PR #2953: 百分位数和非数百分位数

  • PR #2957: 添加新的 3.7 操作码支持。

  • PR #2963: 改进别名分析以更加全面

  • PR #2984: 在数组分析中支持命名元组

  • PR #2986: 修复环境传播

  • PR #2990: 改进对内部函数的调用匹配

  • PR #3002: 第二次重写错误(解释器错误)。

  • PR #3004: 将 numpy.empty 添加到纯函数列表中。

  • PR #3008: 通过 llvmlite SVML 补丁检测增强 SVML 检测。

  • PR #3012: 使用异构/同构的通用拼写。

  • PR #3032: 修复pycc ctypes测试,由于调用约定不匹配

  • PR #3039: 在Numba环境诊断工具中添加SVML检测。

  • PR #3041: 这为使用 BLAS 的测试添加了 @needs_blas

  • PR #3056: 需要 llvmlite>=0.24.0

CUDA 增强:

  • PR #2860: __cuda_array_interface__

  • PR #2910: 更多 CUDA 内在函数

  • PR #2929: 添加标志以防止不必要的 D->H 复制

  • PR #3037: 在非对等可访问设备上添加 CUDA IPC 支持

CI 增强:

  • PR #3021: 更新 appveyor 配置。

  • PR #3040: 为所有构建添加故障处理程序

  • PR #3042: 添加 catchsegv

  • PR #3077: 在测试中为 -m 添加了可选的进程数量

修复:

  • PR #2897: 修复 numba ir 中删除语句的行位置

  • PR #2905: 修复 #2862

  • PR #3009: 修复递归调用中的可选类型返回

  • PR #3019: 针对问题 #3016 的变通方案和单元测试

  • PR #3035: [测试] 尝试延迟移除环境

  • PR #3048: [WIP] 修复构建农场上的cuda测试失败

  • PR #3054: 使测试在32位系统上工作

  • PR #3062: 修复在核函数启动前释放 cuda.In 的 devary

  • PR #3073: 解决 #3072 的变通方法

  • PR #3076: 避免由于解释器销毁时缺少全局变量导致的忽略异常

文档更新:

  • PR #2966: 修复环境变量文档中的语法。

  • PR #2967: 修复CUDA内核布局示例中的拼写错误。

  • PR #2970: 修复文档字符串复制粘贴错误。

贡献者:

以下人员为此次发布做出了贡献。

  • 安东·马拉霍夫

  • Ehsan Totoni (核心开发者)

  • Julia Tatz

  • 马蒂亚斯·布索尼耶

  • 尼克·怀特

  • Ray Donnelly

  • 林思源 (核心开发者)

  • Stan Seibert (核心开发者)

  • Stuart Archibald (核心开发者)

  • Todd A. Anderson (核心开发者)

  • Rik-de-Kort

  • rjenc29

版本 0.38.1

这是一个关键的错误修复版本,解决了以下问题:https://github.com/numba/numba/issues/3006

该错误不会影响使用来自 Anaconda 或 Intel Python 发行版的 conda 包的用户(但它会影响 conda-forge 的用户)。它不会影响使用来自 PyPI 的 wheel 的 pip 用户。

这仅影响一小部分用户,其中:

  • ICC 运行时(特别是 libsvml)存在于用户的环境中。

  • 用户正在使用一个静态链接了未打SVML支持补丁的LLVM版本的llvmlite。

  • 该平台是64位的。

此版本修复了一个代码生成路径,该路径在上述情况下可能导致生成不正确的结果。

修复:

  • PR #3007: 通过 llvmlite SVML 补丁检测增强 SVML 检测。

贡献者:

以下人员为此次发布做出了贡献。

  • Stuart Archibald (核心开发者)

版本 0.38.0

继上次发布专注于修复错误之后,本次发布转向根据社区反馈增加新功能和提升易用性。这次发布相对较大!需要注意的三个关键功能/变化是:

  • Numba (通过 llvmlite) 现在由 LLVM 6.0 支持,因此通用向量化得到了改进。还发现并修复了一个长期存在的导致损坏的 LLVM 错误。

  • 在向量化方面进一步显著的改进现在可以通过Numba支持Intel的短向量数学库(SVML)来实现。尝试使用 conda install -c numba icc_rt 来体验。

  • CUDA 8.0 现在是支持的最低 CUDA 版本。

其他亮点包括:

  • parallel=True 的错误修复在使用 ParallelAccelerator 技术时开启了更多的向量化机会。

  • 在改进错误报告和Numba的总体可用性方面投入了大量精力。这包括突出显示的错误消息和性能提示文档。尝试使用 conda install colorama 来体验。

  • 支持了许多新的 NumPy 函数,np.convolvenp.correlatenp.reshapenp.transposenp.permutationnp.realnp.imagnp.searchsorted 现在支持 side 关键字参数。此外,np.argsort 现在支持 kind 关键字参数,并提供了 quicksortmergesort 选项。

  • Numba 扩展 API 通过使用 numba.extending.get_cython_function_address 来获取函数地址,从而更容易地操作来自 Cython 模块的函数,这些地址可以直接用于 ctypes.CFUNCTYPE

  • Numba 现在允许将 jitted 函数(以及 jitted 函数的容器)作为参数传递给其他 jitted 函数。

  • CUDA 功能已增加了对更多位操作内在函数的支持,包括 SELP,并修复了许多错误。

  • 已添加对 PPC64LE 平台的初步支持工作,但全面支持仍在等待 LLVM 6.0.1 版本的发布,因为它包含 6.0.0 版本中没有的关键补丁。希望在下一个版本中能解决所有剩余问题。

  • 高级用户/编译器工程师定义自己的编译管道的功能。

增强功能:

  • PR #2660: 在 nopython 模式下支持 cffi 中的布尔类型。

  • PR #2741: 增强未定义变量的错误信息。

  • PR #2744: 在测试套件发现失败时添加诊断错误消息。

  • PR #2748: 添加了 Intel SVML 优化作为默认启用的选择退出选项

  • PR #2762: 支持带有轴参数的转置。

  • PR #2777: 添加对 np.correlate 和 np.convolve 的支持

  • PR #2779: 实现 np.random.permutation

  • PR #2801: 将即时编译的函数作为参数传递

  • PR #2802: 支持 np.real() 和 np.imag()

  • PR #2807: 暴露 import_cython_function

  • PR #2821: 为 np.searchsorted 添加 kwarg ‘side’

  • PR #2822: 添加稳定的 argsort

  • PR #2832: 修复 llvmlite 0.23/llvm 6 的问题

  • PR #2836: 在元组上支持 index 方法

  • PR #2839: 支持 np.transpose 和 np.reshape。

  • PR #2843: 自定义管道

  • PR #2847: 在无符号 prange 循环体中替换有符号数组访问索引

  • PR #2859: 添加对改进错误报告的支持。

  • PR #2880: 这增加了一个github问题模板。

  • PR #2881: 构建配方以克隆 Intel ICC 运行时。

  • PR #2882: 更新 TravisCI 以测试 SVML

  • PR #2893: 在 array.ctypes 对象中添加对数据缓冲区的引用

  • PR #2895: 迁移到 CUDA 8.0

修复:

  • PR #2737: 修复 #2007 (部分 1)。np.linalg 中的空数组处理。

  • PR #2738: 修复 install_requires 以允许 pip 获取预发布版本

  • PR #2740: 修复 2208。生成更好的错误信息。

  • PR #2765: 修复位数

  • PR #2780: PowerPC 引用计数内存栅栏

  • PR #2805: 修复 six 导入。

  • PR #2813: 修复 #2812: gufunc 标量输出错误。

  • PR #2814: 修复了 #2727 之后的构建问题

  • PR #2831: 尝试修复 #2473

  • PR #2842: 修复测试发现和损坏的CUDA驱动程序的问题。

  • PR #2850: 添加 rtsys 初始化保护和测试。

  • PR #2852: 跳过目标不是 x86 的向量化测试

  • PR #2856: 防止在 test_extending.py 中向 stdout 打印

  • PR #2864: 修正C代码以防止编译器警告。

  • PR #2889: 尝试修复 #2386。

  • PR #2891: 移除了对 inspect_cfg 的测试跳过

  • PR #2898: 在不支持的平台上为并行测试添加防护

  • PR #2907: 更新PPC64LE LLVM依赖的变更日志。

  • PR #2911: 将构建需求移动到 llvmlite>=0.23.0dev0

  • PR #2912: 修复随机排列测试。

  • PR #2914: 修复问题模板中的MD列表语法。

文档更新:

  • PR #2739: 在文档字符串中明确说明 error_model 的默认值

  • PR #2803: DOC: 并行向量化需要签名

  • PR #2829: 在文档中添加 Python 2.7 EOL 计划

  • PR #2838: 在列表中使用自动编号语法。

  • PR #2877: 添加性能优化文档。

  • PR #2883: 修复 #2872: 更新关于线程/分叉安全性的rng文档

  • PR #2908: 添加缺失的链接和文档引用。

  • PR #2909: 微小的拼写错误修正

ParallelAccelerator 增强/修复:

  • PR #2727: 对ParallelAccelerator中启用向量化的更改。

  • PR #2816: 任意参数的转置数组分析

  • PR #2874: 修复死代码消除器,使其不会移除带有副作用的调用

  • PR #2886: 修复 ParallelAccelerator 数组表达式 repr

CUDA 增强功能:

  • PR #2734: 从 cuda.h 中获取更多常量

  • PR #2767: 为 DeviceNDArray 添加 len(..) 支持

  • PR #2778: 为 CUDA 模拟器添加更多设备数组 API 函数

  • PR #2824: 为人口统计添加CUDA原语

  • PR #2835: 发出selp指令以避免分支

  • PR #2867: 全面支持 CUDA 设备属性

CUDA 修复:* PR #2768: 不要在每次赋值时编译代码 * PR #2878: 修复了 Pr/2865 测试中的 Win64 问题

贡献者:

以下人员为此次发布做出了贡献。

  • 阿布塔利布·阿加耶夫

  • 亚历克斯·奥利瓦斯

  • 安东·马拉霍夫

  • Dong-hee Na

  • Ehsan Totoni (核心开发者)

  • 约翰·兹温克

  • 乔什·威尔逊

  • 凯尔西·乔达尔

  • 尼克·怀特

  • Olexa Bilaniuk

  • Rik-de-Kort

  • Siu Kwan Lam (核心开发者)

  • Stan Seibert (核心开发者)

  • Stuart Archibald (核心开发者)

  • 托马斯·阿利尔森

  • Todd A. Anderson (核心开发者)

版本 0.37.0

此版本主要集中在错误修复和稳定性提升,但也增加了一些新功能,包括对 Numpy 1.14 的支持。Numba 核心的关键变化是期待已久的线程安全改进的最终部分,这些改进允许 Numba 在多个线程上并发运行,而不会遇到 LLVM 内部的已知线程安全问题。此外,CUDA 实现中加入了许多修复和增强功能,ParallelAccelerator 获得了一些新功能并进行了一些内部重构。

其他增强功能:

  • PR #2627: 移除使 llvmlite 线程安全的 hack

  • PR #2672: 添加 ascontiguousarray

  • PR #2678: 添加 Gitter 徽章

  • PR #2691: 修复 #2690: 添加将数组转换为元组的内在函数

  • PR #2703: 测试运行器功能:先失败和最后失败

  • PR #2708: 修复问题 #1907 的补丁

  • PR #2732: 添加对 array.fill 的支持

杂项修复:

  • PR #2610: 修复 #2606 中 optional.setattr 的降低问题

  • PR #2650: 移除 win32 余弦测试的跳过

  • PR #2668: 修复从只读数组创建的 empty_like。

  • PR #2682: 修复了 #2210,移除了 _DisableJitWrapper

  • PR #2684: 修复 #2340,生成器错误产生布尔值

  • PR #2693: 添加对 NumPy 1.14 的 travis-ci 测试,并同时检查 Python 2.7

  • PR #2694: 避免由于类型模板拒绝导致的类型推断失败

  • PR #2695: 更新 llvmlite 版本依赖。

  • PR #2696: 修复空元组的索引代码生成

  • PR #2698: 通过在 simplify_CFG 循环中延迟删除来修复 #2697。

  • PR #2701: 小修复以避免在当前目录中创建临时文件

  • PR #2725: 修复 #2481,由于变异的IR导致的LLVM IR解析错误

  • PR #2726: 修复 #2673: 不正确的fork错误信息。

  • PR #2728: #2620 的替代方案。移除无用代码 ByteCodeInst.get。

  • PR #2730: 为需要 SciPy/BLAS 的测试添加保护

文档更新:

  • PR #2670: 更新沟通渠道

  • PR #2671: 添加关于诊断循环向量化器的文档

  • PR #2683: 添加关于常量参数要求和常量内存分配的文档

  • PR #2722: 添加关于cuda中numpy支持的文档

  • PR #2724: 更新文档:关于不支持的参数的警告

ParallelAccelerator 增强/修复:

增加了对 np.arangenp.linspace 的并行支持,同时还有 np.meannp.stdnp.var。这是作为对核心 ParallelAccelerator 代码进行全面重构和清理的一部分完成的。

  • PR #2674: 核心 pa

  • PR #2704: 在 parfor 顺序降低后生成 Dels

  • PR #2716: 处理直接支持的匹配函数

CUDA 增强功能:

  • PR #2665: CUDA DeviceNDArray: 支持 numpy 转置 API

  • PR #2681: 允许分配给 DeviceNDArrays

  • PR #2702: 使 DummyArray 进行高维重塑

  • PR #2714: 使用 CFFI 重用代码

CUDA 修复:

  • PR #2667: 修复 CUDA DeviceNDArray 切片

  • PR #2686: 修复 #2663: 索引 cuda 数组时的偏移错误。

  • PR #2687: 确保构造的流绑定

  • PR #2706: 由于异常抛出代码导致的意外warp发散的解决方法

  • PR #2707: 修复回归问题:cuda测试子模块在runtests中未能正确加载

  • PR #2731: 在切片测试中使用更具挑战性的值。

  • PR #2720: 一个快速的测试套件修复,以避免在多进程池中运行新的cuda测试用例

贡献者:

以下人员为此次发布做出了贡献。

  • Coutinho Menezes Nilo

  • 丹尼尔

  • Ehsan Totoni

  • 尼克·怀特

  • 保罗·H·刘

  • 林思宽

  • Stan Seibert

  • 斯图尔特·阿奇博尔德

  • Todd A. Anderson

版本 0.36.2

这是一个修复错误的发布版本,提供了一些小的改动来解决:

  • PR #2645: 避免在较旧的 2.7.x 版本中使用 exec 时的 CPython 错误。

  • PR #2652: 添加对 CUDA 9 的支持。

版本 0.36.1

此版本继续为与英特尔合作的 ParallelAccelerator 技术添加新功能。其他值得注意的变化包括编译链更新为使用 LLVM 5.0,以及使用 conda-build 3 和新编译器生成 conda 包。

注意:版本 0.36.0 被标记为内部使用,但未发布。

ParallelAccelerator:

注意:ParallelAccelerator 技术正在积极开发中,应视为实验性技术。

与Intel合作完成的ParallelAccelerator相关的新功能包括:添加了 @stencil 装饰器以方便实现类似模板计算,支持一般归约,以及为并行切片/位数组赋值提供的切片和范围融合。关于上述功能的使用和实现文档已经添加。此外,一个新的调试环境变量 NUMBA_DEBUG_ARRAY_OPT_STATS 被提供,以提供哪些操作符/调用被转换为并行for循环的信息。

ParallelAccelerator 特性:

  • PR #2457: 并行加速器中的模板计算

  • PR #2548: 切片和范围融合,并行化位数组和切片赋值

  • PR #2516: 支持 ParallelAccelerator 中的通用归约

ParallelAccelerator 修复:

  • PR #2540: 修复 bug #2537

  • PR #2566: 修复问题 #2564。

  • PR #2599: 修复嵌套多维 parfor 类型推断问题

  • PR #2604: 修复了模板测试和 cmath sin()。

  • PR #2605: 修复了问题 #2603。

值得注意的附加功能:

此版本的 Numba(和 llvmlite)更新为使用 LLVM 5.0 版本作为编译器后端,Numba 支持此版本的主要变化是添加了一个自定义符号跟踪器,以避免在请求不存在的符号地址时调用 LLVM 的 ExecutionEngine 导致崩溃。此外,此版本 Numba 的 conda 包是使用 conda build 3 版本以及该版本中存在的新编译器/配方语法构建的。

  • PR #2568: 更新至 LLVM 5

  • PR #2607: 修复获取“nrt_unresolved_abort”地址时导致的终止

  • PR #2615: 向 conda build 3 迈进

感谢社区的反馈和错误报告,还进行了以下修复。

杂项修复/增强:

  • PR #2534: 为 np.take 添加元组支持。

  • PR #2551: 品牌重塑修复

  • PR #2552: 相对文档链接

  • PR #2570: 修复问题 #2561,处理循环退出时缺少后继者的情况

  • PR #2588: 修复 #2555。在Linux上禁用libpython.so链接。

  • PR #2601: 更新 llvmlite 版本依赖。

  • PR #2608: 修复潜在的缓存文件冲突

  • PR #2612: 修复由于在覆盖率运行时增加的开销导致的NRT测试失败

  • PR #2619: 修复了在锁外调用 pthread_cond_signal 的问题

  • PR #2622: 修复 np.nanmedian 在所有 NaN 情况下的问题。

  • PR #2633: 修复 CONTRIBUTING.md 中的 Markdown 问题

  • PR #2635: 使AOT对编译器的依赖变为可选。

CUDA 支持修复:

  • PR #2523: 修复在另一个线程中内存传输调用中的无效cuda上下文

  • PR #2575: 使用 CPU 初始化 GPU RNG 的 xoroshiro 状态。修复了 #2573。

  • PR #2581: 修复 cuda gufunc 将标量参数错误处理为数组和输出参数的问题

版本 0.35.0

此版本包含了一些令人兴奋的新功能,这是与英特尔合作在ParallelAccelerator技术方面的工作成果。此外,还对Numpy支持进行了一些添加,并进行了一些小但重要的修复,这些修复是大量努力追踪错误和实施稳定性改进的结果。

ParallelAccelerator:

注意:ParallelAccelerator 技术正在积极开发中,应视为实验性技术。

与英特尔合作完成的工作中,与 ParallelAccelerator 相关的新功能包括在 parallel 模式下支持更大范围的 np.random 函数,在无 Python 模式下打印 Numpy 数组,能够直接从列表推导中初始化 Numpy 数组,以及 .sum() 方法的 axis 参数。此外,还添加了关于 ParallelAccelerator 技术实现的文档。进一步地,为了在并行模式下启用广播行为的运行时检查,进行了大量关于等价关系的工作。

ParallelAccelerator 特性:

  • PR #2400: 数组推导

  • PR #2405: 支持打印 Numpy 数组

  • PR #2438: 在 ParallelAccelerator 中支持更多 np.random 函数

  • PR #2482: 在 nopython 模式下支持 sum 函数使用 axis 参数。

  • PR #2487: 为 ParallelAccelerator 技术添加开发者文档。

  • PR #2492: 核心 PA 重构增加了对广播语义的断言

ParallelAccelerator 修复:

  • PR #2478: 在parfor翻译前重命名cfg (#2477)

  • PR #2479: 修复在不支持的平台上数组推导测试失败的问题

  • PR #2484: 修复 win64 上的数组推导测试

  • PR #2506: 修复32位机器的问题。

值得注意的附加功能:

在无 Python 模式下,增加了对 np.takenp.finfonp.iinfonp.MachAr 的支持。此外,还添加了三个新的环境变量,其中两个用于覆盖 CPU 目标/特性,另一个用于警告如果设置了 parallel=True 但无法进行此类转换。

  • PR #2490: 实现 np.take 和 ndarray.take

  • PR #2493: 如果设置了 parallel=True 但无法实现,则显示警告。

  • PR #2513: 添加 np.MachAr, np.finfo, np.iinfo

  • PR #2515: 允许通过环境变量覆盖cpu目标和cpu特性。

由于测试农场的扩展和专注于修复错误,以下修复也被实施。

杂项修复/增强:

  • PR #2455: 为运行时错误添加上下文信息

  • PR #2470: 修复 #2458,np.median 性能不佳

  • PR #2471: 确保在 {g,}ufunc 构建中 LLVM 的线程安全。

  • PR #2494: 更新文档主题

  • PR #2503: 移除在 #2482 中添加的临时代码并进行功能增强

  • PR #2505: 在多线程测试期间序列化环境变异测试。

  • PR #2520: 修复失败的 cpu-target 覆盖测试

CUDA 支持修复:

  • PR #2504: 启用 CUDA 工具包版本测试

  • PR #2509: 禁用生成在较低CC版本中不可用代码的测试。

  • PR #2511: 修复 Windows 64 位 CUDA 测试。

版本 0.34.0

此版本新增了一系列重要功能,这些功能源于与英特尔在ParallelAccelerator技术上的合作。同时,增加了列表推导和闭包支持,支持Numpy 1.13,并引入了一种新的、更快的CUDA归约算法。对于Linux用户,此版本是首个基于Centos 6构建的版本,这将成为未来版本的新基础平台。最后,修复了多个线程安全、类型推断及其他一些小问题和错误。

ParallelAccelerator 特性:

注意:ParallelAccelerator 技术正在积极开发中,应视为实验性技术。

ParallelAccelerator 技术通过一个新的“nopython”模式选项“parallel”来访问。ParallelAccelerator 技术尝试识别具有并行语义的操作(例如将标量添加到向量),将相邻的此类操作融合在一起,然后在多个 CPU 核心上并行化它们的执行。这本质上是一种自动并行化。

除了自动并行化功能外,还通过使用 prange 代替 range 作为循环迭代器,提供了基于显式循环的并行性。

关于自动并行化和 prange 的更多信息和示例,分别可以在文档和示例目录中找到。

作为 ParallelAccelerator 必要工作的一部分,增加了对闭包和列表推导的支持:

  • PR #2318: 将 ParallelAccelerator 技术转移到 Numba

  • PR #2379: 并行加速器核心改进

  • PR #2367: 添加对 len(range(…)) 的支持

  • PR #2369: 列表推导式

  • PR #2391: 显式并行循环支持 (prange)

ParallelAccelerator 功能在所有支持的平台上和 Python 版本中都可用,除了(计划在未来版本中支持):

  • Windows 操作系统与 Python 2.7 的结合。

  • 运行32位Python的系统。

CUDA 支持增强:

  • PR #2377: 新的GPU归约算法

CUDA 支持修复:

  • PR #2397: 修复 #2393,始终设置 cuda 静态内存区域的对其方式

杂项修复:

  • PR #2373, Issue #2372: 修复了与 parfor 相关代码的 32 位兼容性问题

  • PR #2376: 修复 #2375 py2.7 vc9 缺少 stdint.h

  • PR #2378: 修复并行 gufunc 中内核获取 GIL 时的死锁问题。

  • PR #2382: 禁止在位操作中进行不安全的类型转换

  • PR #2385: docs: 修复 Sphinx 错误

  • PR #2396: 对移位操作使用64位右操作数

  • PR #2404: 修复 ufunc 编译缓存中的线程安全逻辑问题。

  • PR #2424: 确保类型推断的块迭代顺序一致。

  • PR #2425: 保护代码以防止在 win32 + py27 上使用 ‘parallel’

  • PR #2426: 枚举成员类型恢复的基本测试。

  • PR #2433: 修复与Windows py2.7相关的parfors测试

  • PR #2442: 如果 scipy 不可用,跳过需要 BLAS/LAPACK 的测试。

  • PR #2444: 添加对无效数组 setitem 的测试

  • PR #2449: 使运行时初始化器线程安全

  • PR #2452: 在64位Windows上跳过CFG测试

杂项增强:

  • PR #2366: 改进 IR 工具

  • PR #2388: 更新 README.rst 以指示 LLVM 的正确版本

  • PR #2394: 升级到 llvmlite 0.19.*

  • PR #2395: 将 llvmlite 版本更新到 0.19

  • PR #2406: 将环境对象暴露给ufuncs

  • PR #2407: 在lowerer内部的目标上下文中暴露环境对象

  • PR #2413: 为 buildbot 添加标志以传递给 conda 构建

  • PR #2414: 在本地配方中添加交叉编译标志

  • PR #2415: 对重写的一些清理

  • PR #2418: 为 Enum 类添加 getitem 支持

  • PR #2419: 添加对在矢量化中返回枚举的支持

  • PR #2421: 为Intel贡献的文件添加版权声明。

  • PR #2422: 修补代码库以兼容 np 1.13 版本

  • PR #2448: 在使用 ‘parallel’ 时,如果 cache=True,则添加警告消息

  • PR #2450: 为 .sum-like 和 .cumsum-like 数组方法添加关键字参数测试

版本 0.33.0

此版本解决了循环体内原子引用计数操作引起的几个性能问题。新增的优化过程已用于减少这些操作的影响。由于不必要的引用计数操作的移除,我们观察到受影响程序的速度提升在2倍至10倍之间。

CUDA GPU 支持也有多项增强:

  • 基于 xoroshiro128+ 算法 的 GPU 随机数生成器已添加。详情和示例请参见 文档

  • @cuda.jit CUDA 内核现在可以调用 @jit@njit CPU 函数,它们将自动编译为 CUDA 设备函数。

  • CUDA IPC 内存 API 用于在进程之间共享内存。使用细节请参见 文档

引用计数增强:

  • PR #2346, Issue #2345, #2248: 内联后增加额外的引用计数修剪

  • PR #2349: 修复 refct 修剪未移除带有尾调用的 refct 操作。

  • PR #2352, Issue #2350: 为不需要引用计数的函数添加引用计数修剪传递

CUDA 支持增强:

  • PR #2023: 支持设备数组的CUDA IPC

  • PR #2343, Issue #2335: 允许使用 CPU jit 装饰的函数作为 cuda 设备函数

  • PR #2347: 为CUDA设备代码添加随机数生成器支持

  • PR #2361: 更新 CC: 5.3, 6.0, 6.1, 6.2 的 autotune 表

杂项修复:

  • PR #2362: 避免由于在32位平台上输入到int32导致的测试失败

  • PR #2359: 修复了在执行时抛出 TypeError 的 nogil 示例。

  • PR #2357, Issue #2356: 修复依赖于脚本执行方式的脆弱测试。

  • PR #2355: 修复了作为另一个模块属性的cpu调度器引用

  • PR #2354: 修复了当函数需要NRT和引用计数修剪时的缓存问题

  • PR #2342, Issue #2339: 在使用未序列化的缓存代码时,向检查中添加警告

  • PR #2329, Issue #2250: 更好地处理缺失的操作码

其他增强功能:

  • PR #2360: 在错误消息解释中添加缺失的值。

  • PR #2353: 处理 get_host_cpu_features() 引发 RuntimeError 的情况

  • PR #2351: 为 erf/erfc/gamma/lgamma/log2 启用 SVML

  • PR #2344: 在 jit 装饰器中公开 error_model 设置

  • PR #2337: 使 fork() 的阻塞终止支持与新版 TBB 对齐

  • PR #2336: 将 llvmlite 版本升级到 0.18

  • PR #2330: PR #2318 中的核心更改

版本 0.32.0

在此版本中,我们将升级到 LLVM 4.0。当编译器被并发使用时,LLVM 内部存在许多竞态条件问题,这在使用 Numba 与 Dask 时很常见,为此我们做了大量工作来修复这些问题。

改进:

  • PR #2322: 由于与 tgamma 相关的未知但一致的错误,抑制测试错误

  • PR #2320: 将 llvmlite 依赖更新到 0.17

  • PR #2308: 在错误信息中添加关于为什么禁用cuda支持的详细信息。

  • PR #2302: 添加 os x 到 travis

  • PR #2294: 由于LLVM内部的内存泄漏,禁用MCJIT上的remove_module

  • PR #2291: 分割并行测试并回收工作线程以控制内存使用

  • PR #2253: 移除用于在列表中存储 meminfos 的指针填充技巧

修复:

  • PR #2331: 修复GPU数组索引中的一个错误

  • PR #2326: 修复 #2321 文档中引用不存在的函数。

  • PR #2316: 修复更多竞态条件问题

  • PR #2315: 修复 #2314。放宽严格类型检查以允许可选类型。

  • PR #2310: 修复由于并发编译和缓存加载导致的竞争条件

  • PR #2304: 修复内部函数第一个参数不是文档中声明的 typing.Context 的问题。

  • PR #2287: 修复 int64 原子最小-最大值

  • PR #2286: 修复 #2285 @overload_method 未链接依赖库

  • PR #2303: 缺少导入语句到 interval-example.rst

版本 0.31.0

在此版本中,我们增加了对 GDB 版本 >= 7.0 的调试的初步支持。该功能通过设置 debug=True 编译器选项启用,这将导致生成与 GDB 兼容的调试信息。CUDA 后端也获得了有限的调试支持,以便在内存检查和分析工具中显示源代码位置。详情请参阅 故障排除和提示

此外,我们添加了 fastmath=True 编译器选项以启用不安全的浮点转换,这允许 LLVM 自动向量化更多代码。

其他重要变化包括升级到 LLVM 3.9.1 并增加对 Numpy 1.12 的支持。

改进:

  • PR #2281: 更新为 numpy1.12

  • PR #2278: 添加 CUDA atomic.{max, min, compare_and_swap}

  • PR #2277: 在conda配方中添加关于部分,以在Anaconda Cloud中识别许可证和其他元数据

  • PR #2271: 为 CPU 和 CUDA 目标采用 itanium C++ 风格的名称修饰

  • PR #2267: 添加 fastmath 标志

  • PR #2261: 支持 dtype.type

  • PR #2249: 针对 llvm3.9 的更改

  • PR #2234: 将 llvmlite 要求提升至 0.16,并为 OS X 的 mviewbuf 添加 install_name_tool_fixer

  • PR #2230: 在 TravisCi 中添加 python3.6

  • PR #2227: 为 gufunc 包装器启用缓存

  • PR #2170: 添加调试支持

  • PR #2037: 为更容易地可视化函数操作,添加了 inspect_cfg() 方法。

修复:

  • PR #2274: 修复 nvvm ir 补丁在处理“load”时的错误

  • PR #2272: 修复对 cuda7.5 的破坏

  • PR #2269: 修复cuda.reduce中copy_strides内核的缓存问题

  • PR #2265: 修复 #2263: 当链接两个具有动态全局变量的模块时出错

  • PR #2252: 修复测试中的路径分隔符

  • PR #2246: 修复某些系统中 fork 导致的内存过度使用问题

  • PR #2241: 修复 #2240: 动态创建的函数中的 __module__ 不是 str

  • PR #2239: 修复指纹计算失败,防止回退

版本 0.30.1

这是一个修复bug的版本,以启用对Python 3.6的支持。此外,现在在源码构建时,如果定义了TBBROOT,则可以支持并行ufuncs的早期Intel TBB支持。TBB功能在我们的官方构建中未启用。

修复:

  • PR #2232: 修复 Python 3.6 中与 _Py_hashtable_xxx 的名称冲突。

改进:

  • PR #2217: 为并行ufunc添加Intel TBB线程池实现。

版本 0.30.0

此版本增加了对 Python 3.6 的初步支持,但尚未提供官方构建。新增了一个系统报告工具(numba --sysinfo),用于提供系统信息,以帮助核心开发人员进行复制和调试。请参阅下方了解其他改进和错误修复。

改进:

  • PR #2209: 支持 Python 3.6。

  • PR #2175: 支持 np.trace()np.outer()np.kron()

  • PR #2197: 支持 np.nanprod()

  • PR #2190: 支持ufunc的缓存。

  • PR #2186: 添加系统报告工具。

修复:

  • PR #2214, Issue #2212: 修复 ndenumerate 和 flat 迭代器中的内存错误。

  • PR #2206, Issue #2163: 修复 zip() 在早期耗尽时消耗额外元素的问题。

  • PR #2185, Issue #2159, #2169: 修复重写过程影响objmode回退的问题。

  • PR #2204, Issue #2178: 修复 liftedloop 的注解。

  • PR #2203: 修复 Appveyor 在 Python 3.5 上的段错误。

  • PR #2202, Issue #2198: 修复从ufunc缓存加载时目标上下文未初始化的问题。

  • PR #2172, Issue #2171: 修复可选类型解包。

  • PR #2189, Issue #2188: 禁用对大型 (>1MB) 全局数组的冻结。

  • PR #2180, Issue #2179: 修复循环提升中的无效变量版本。

  • PR #2156, Issue #2155: 修复 CUDA 上的 divmod, floordiv 段错误。

版本 0.29.0

此版本扩展了对递归函数的支持,包括直接和间接递归,无需显式函数类型注解。请参阅 examples/mergesort.py 中的新示例。新支持的 numpy 功能包括数组堆叠函数、np.linalg.eig* 函数、np.linalg.matrix_power、np.roots 以及赋值中的数组到数组广播。

此版本依赖于 llvmlite 0.14.0 并支持 CUDA 8,但不是必需的。

改进:

  • PR #2130, #2137: 添加类型推断递归,附带文档和示例。

  • PR #2134: 添加 np.linalg.matrix_power

  • PR #2125: 添加 np.roots

  • PR #2129: 添加 np.linalg.{eigvals,eigh,eigvalsh}

  • PR #2126: 添加数组到数组的广播功能。

  • PR #2069: 添加 hstack 及相关函数。

  • PR #2128: 允许向量化一个 jitted 函数。(感谢 @dhirschfeld)

  • PR #2117: 更新示例并使其可测试。

  • PR #2127: 重构解释器类及其结果。

修复:

  • PR #2149: 解决 MSVC9.0 SP1 fmod 错误 kb982107 的变通方法。

  • PR #2145, Issue #2009: 修复了 jitclass __init__ 方法的 kwargs。

  • PR #2150: 修复 objmode 回退中的减速问题。

  • PR #2050, Issue #1259: 修复某些生成器循环的活性问题。

  • PR #2072, Issue #1995: 无符号左值的右移应为逻辑右移。

  • PR #2115, Issue #1466: 修复因变量名混淆导致的 inspect_types() 错误。

  • PR #2119, Issue #2118: 修复从记录数据类型创建的数组类型。

  • PR #2122, Issue #1808: 修复由于数据模型错误导致的返回生成器问题。

版本 0.28.1

这是一个修复了与setuptools依赖相关的打包问题的bug修复版本。

版本 0.28.0

在其他改进中,此版本再次提升了对线性代数的支持水平——来自 numpy.linalg 模块的函数。此外,我们的随机数生成器现在保证是线程安全和分叉安全的。

改进:

  • PR #2019: 添加 @intrinsic 装饰器以定义可从JIT函数调用的低级子程序(目前这被视为私有API)。

  • PR #2059: 实现 np.concatenatenp.stack

  • PR #2048: 使随机生成器支持分叉安全和线程安全,为每个线程或进程生成独立的随机数流。

  • PR #2031: 添加浮点陷阱的文档。

  • 问题 #2053: 避免在并行 CPU 目标中轮询(修复了 Windows 上的严重性能回归)。

  • 问题 #2029: 使默认参数快速。

  • PR #2052: 为CUDA驱动添加日志记录。

  • PR #2049: 实现内置的 divmod() 函数。

  • PR #2036: 在数组上实现 argsort() 方法。

  • PR #2046: 通过延迟释放内存直到达到某些阈值,从而改进CUDA内存管理,以避免中断异步执行。

  • PR #2040: 将 CUDA 驱动实现切换为使用 CUDA 的“主上下文”API。

  • PR #2017: 允许 min(tuple)max(tuple)

  • PR #2039: 减少 CUDA 中 fork() 检测的开销。

  • PR #2021: 处理带有标题的结构化数据类型。

  • PR #1996: 将循环提升重写为 Numba IR 上的一个转换。

  • PR #2014: 实现 np.linalg.matrix_rank

  • PR #2012: 实现 np.linalg.cond

  • PR #1985: 重写即使是简单的数组表达式,这为其他优化打开了大门(例如,array ** 2 可以转换为 array * array)。

  • PR #1950: 让 typeof() 在失败时总是引发 ValueError。之前,它可能会根据输入引发错误或返回 None。

  • PR #1994: 实现 np.linalg.norm

  • PR #1987: 实现 np.linalg.detnp.linalg.slogdet

  • 问题 #1979: 文档整数宽度推断及如何解决。

  • PR #1938: Numba 现在与 LLVM 3.8 兼容。

  • PR #1967: 限制 np.linalg 函数为同质数据类型。希望传递混合类型输入的用户必须显式转换,这使得性能影响更加明显。

修复:

  • PR #2006: array(float32) ** int 应返回 array(float32)

  • PR #2044: 允许重塑空数组。

  • 问题 #2051: 修复在连接元组时的引用计数问题。

  • 问题 #2000: 使 Numpy 在 setup.py 中成为可选依赖,以便在没有预装 Numpy 的情况下也能使用 pip install 进行安装。

  • PR #1989: 修复 Dispatcher.disable_compile() 中的断言。

  • 问题 #2028: 当从多个进程缓存时忽略文件系统错误。

  • 问题 #2003: 允许使用 Unicode 变量和函数名(在 Python 3 上)。

  • 问题 #1998: 修复在并行ufuncs中重新获取GIL时的死锁问题。

  • PR #1997: 修复在某些Windows平台上进行AOT编译时的随机崩溃问题。

  • 问题 #1988: 传播 jitclass 文档字符串。

  • 问题 #1933: 确保数组常量以正确的对齐方式发出。

版本 0.27.0

改进:

  • 问题 #1976:当给CUDA内核提供非整数维度时,改进错误消息。

  • PR #1970: 使用静态指数优化幂运算符。

  • PR #1710: 改进编译器错误的上下文信息。

  • PR #1961: 支持打印常量字符串。

  • PR #1959: 在 print() 函数中支持更多类型。

  • PR #1823: 在CUDA后端中支持 compute_50

  • PR #1955: 支持 np.linalg.pinv

  • PR #1896: 改进 SmartArray API。

  • PR #1947: 支持 np.linalg.solve

  • 问题 #1943: 当参数类型检查失败时,改进错误信息。

  • PR #1927: 支持 np.linalg.lstsq

  • PR #1934: 在可能的情况下,使用系统的 hypot() 函数,而不是我们自己的实现。

  • PR #1929: 为 @cfunc 对象添加 cffi 支持。

  • PR #1932: 为并行CPU目标添加用户可控的线程池限制。

  • PR #1928: 当签名明确时支持自递归。

  • PR #1890: 在开发者文档中列出所有降低实现。

  • 问题 #1884: 支持 np.lib.stride_tricks.as_strided()

修复:

  • 问题 #1960: 修复源区域和目标区域重叠时的切片赋值问题。

  • PR #1963: 使 CUDA print() 原子化。

  • PR #1956: 允许0维数组常量。

  • 问题 #1945: 允许在AOT编译代码中使用Numpy ufuncs。

  • 问题 #1916: 修复 @generated_jit 的文档示例。

  • 问题 #1926: 修复在 IPython 会话中缓存函数时的回归问题。

  • 问题 #1923: 允许 carray() 和 farray() 接受非 intp 整数参数。

  • 问题 #1908: 在 Python 2 上接受非 ASCII 的 Unicode 文档字符串。

  • 问题 #1874: 允许在对象模式中使用 del container[key]

  • 问题 #1913: 修复当查找链包含已删除条目时的集合插入错误。

  • 问题 #1911: 允许在 jitclass 方法上使用函数注解。

版本 0.26.0

此版本增加了对 cfunc 装饰器的支持,用于将 numba jitted 函数导出到接受 C 回调的第三方 API。消除了在解释器内部使用 jitclasses 的大部分开销。增加了对 numpy.linalg 中分解的支持。最后,支持 Numpy 1.11。

改进:

  • PR #1889: 为 pycc 导出 BLAS 和 LAPACK 包装器。

  • PR #1888: 更快的数组幂运算。

  • 问题 #1867: 允许为 dufuncs 使用 “out” 关键字参数。

  • PR #1871: carray()farray() 用于从指针创建数组。

  • PR #1855: @cfunc 装饰器用于导出为 ctypes 函数。

  • PR #1862: 添加对 numpy.linalg.qr 的支持。

  • PR #1851: 支持 ‘_’ 和 ‘__’ 前缀属性的 jitclass。

  • PR #1842: 优化 Python 解释器中的 jitclass。

  • 问题 #1837: 修复 CUDA 模拟器中设备函数的问题。

  • PR #1839: 添加对 numpy.linalg 中分解的支持。

  • PR #1829: 支持 Python 枚举。

  • PR #1828: 添加对 numpy.random.rand()numpy.random.randn() 的支持

  • 问题 #1825: 使用 0-darray 代替标量索引。

  • 问题 #1824: 对象模式 gufuncs 的标量参数。

  • 问题 #1813: 让按位布尔运算符返回布尔值,而不是整数。

  • 问题 #1760: 生成器中的可选参数。

  • PR #1780: 支持 Numpy 1.11。

版本 0.25.0

此版本在 nopython 模式下增加了对 set 对象的支持。它还增加了对许多缺失的 Numpy 特性和函数的支持。在使用 dask、distributed 或 Spark 等分布式执行框架时,它提高了 Numba 的兼容性和性能。最后,它移除了对 Python 2.6、Python 3.3 和 Numpy 1.6 的兼容性。

改进:

  • 问题 #1800: 在CUDA目标中添加erf()、erfc()、gamma()和lgamma()函数。

  • PR #1793: 实现更多 Numpy 函数:np.bincount()、np.diff()、np.digitize()、np.histogram()、np.searchsorted() 以及 NaN-aware 归约函数(np.nansum()、np.nanmedian() 等)。

  • PR #1789: 优化一些归约函数,如 np.sum()、np.prod()、np.median() 等。

  • PR #1752: 使 CUDA 功能在 dask、distributed 和 Spark 中工作。

  • PR #1787: 支持 np.nditer() 用于广播的多数组快速索引。

  • PR #1799: 在分析时将JIT编译的函数报告为常规Python函数(允许查看定义函数的文件名和行号)。

  • PR #1782: 支持 np.any() 和 np.all()。

  • 问题 #1788: 支持 iter() 和 next() 内置函数。

  • PR #1778: 支持 array.astype()。

  • 问题 #1775: 允许用户为AOT编译设置目标CPU模型。

  • PR #1758: 支持使用 size 参数通过 np.random API 创建随机数组。

  • PR #1757: 支持在 array.flat 对象上使用 len()。

  • PR #1749: 移除对 Numpy 1.6 的兼容性。

  • PR #1748: 移除对 Python 2.6 和 3.3 的兼容性。

  • PR #1735: 支持 not in 运算符以及 operator.contains()。

  • PR #1724: 在 nopython 模式下支持同质集合。

  • 问题 #875:使数组常量的编译速度更快。

修复:

  • PR #1795: 修复了在使用分布式、Spark 或类似机制进行序列化时调用 Numba 函数时的巨大性能问题。

  • 问题 #1784: 使 jitclasses 在 NUMBA_DISABLE_JIT=1 下可用。

  • 问题 #1786: 允许在分析时使用线性代数函数。

  • 问题 #1796: 修复非连续输入时 np.dot() 的内存泄漏。

  • PR #1792: 修复元组的静态负索引问题。

  • 问题 #1771: 当 __pycache__ 不可写时,例如当用户代码安装在系统位置时,使用备用缓存目录。

  • 问题 #1223: 在数组表达式中使用 Numpy 错误模型(例如,除以零返回 infnan 而不是引发错误)。

  • 问题 #1640: 修复 np.random.binomial() 函数在大 n 值下的问题。

  • 问题 #1643: 当向 @jitclass 传递无效的规范时,改进错误报告。

  • PR #1756: 修复了在省略起始位置时使用负步长的切片问题。

版本 0.24.0

此版本引入了几项重大变化,包括用于灵活特化的 @generated_jit 装饰器,类似于 Julia 的 @generated 宏,或 SmartArray 数组包装类型,该类型允许在 CPU 和 GPU 之间无缝传输数组数据。

这将是支持 Python 2.6、Python 3.3 和 Numpy 1.6 的最后一个版本。

改进:

  • PR #1723: 提高JIT函数与Python分析器的兼容性。

  • PR #1509: 支持 array.ravel() 和 array.flatten()。

  • PR #1676: 添加 SmartArray 类型以支持在多个地址空间(主机和GPU)中进行透明的数据管理。

  • PR #1689: 减少导入 Numba 的启动开销。

  • PR #1705: 支持将 CFFI 类型注册为与已知 Numba 类型相对应。

  • PR #1686: 文档化扩展API。

  • PR #1698: 改进类型推断期间引发的警告。

  • PR #1697: 支持在非连续数组上使用 np.dot() 及其相关函数。

  • PR #1692: cffi.from_buffer() 改进 (允许更多指针类型,允许非Numpy缓冲对象)。

  • PR #1648: 添加 @generated_jit 装饰器。

  • PR #1651: 使用 LAPACK 实现 np.linalg.inv。感谢 Matthieu Dartiailh。

  • PR #1674: 支持 np.diag()。

  • PR #1673: 当查找未知全局变量上的属性时,改进错误消息。

  • 问题 #1569: 实现对 LLVM 区域设置错误的运行时检查。

  • PR #1612: 与 llvmlite 同步切换到 LLVM 3.7。

  • PR #1624: 允许将序列的切片分配给数组。

  • PR #1622: 支持使用常量切片对元组进行切片。

修复:

  • 问题 #1722: 修复返回可选布尔值(bool 或 None)。

  • 问题 #1734: 当变量在被定义之前被删除时,NRT decref 错误,可能导致内存泄漏。

  • PR #1732: 修复 CUDA 目标的元组 getitem 回归问题。

  • PR #1718: 可选到可选类型转换的处理不当。

  • PR #1714: 修复 JIT 函数上的 .compile() 不遵守 ._can_compile 的问题。

  • 问题 #1667: 修复数组上的 np.angle()。

  • 问题 #1690: 修复省略停止值和负步长值的切片问题。

  • PR #1693: 修复在处理非标量输入值时,标量形式参数的gufunc错误。

  • PR #1683: 修复在Windows下的并行测试。

  • 问题 #1616: 尽可能使用系统提供的 C99 数学库版本。

  • 问题 #1652: bool 数组的归约操作(例如 sum() 或 mean())应返回整数或浮点数,而不是布尔值。

  • 问题 #1664: 修复当使用常量索引对记录数组进行索引时的回归问题。

  • PR #1661: 在旧的Linux内核上禁用AVX。

  • 问题 #1636: 允许在模块上查找并引发异常。

版本 0.23.1

这是一个错误修复版本,旨在解决0.23.0版本中引入的几个回归问题,以及其他一些问题。

修复:

  • 问题 #1645: CUDA ufuncs 在 0.23.0 版本中被破坏。

  • 问题 #1638: 在传递元组列表时检查元组大小。

  • 问题 #1630: 在Windows下,并行ufunc在完成任务后仍会持续占用CPU。

  • 问题 #1628: 修复在 Windows 上使用 Python 3.5 的 ctypes 和 cffi 测试。

  • 问题 #1627: 修复 xrange() 支持。

  • PR #1611: 重写变量活跃性分析。

  • 问题 #1610: 允许在显式类型的ufuncs之间进行嵌套调用。

  • 问题 #1593: 修复对象模式中的 *args

版本 0.23.0

此版本引入了使用新的 @jitclass 装饰器的 JIT 类,允许用户定义 nopython 模式的结构。其他改进和错误修复如下所列。

改进:

  • PR #1609: 通过在调用者中内联一些简单的数学函数来加速它们

  • PR #1571: 实现 JIT 类

  • PR #1584: 改进数组索引的类型定义

  • PR #1583: 允许打印布尔值

  • PR #1542: 允许在 np.reshape() 中使用负值

  • PR #1560: 支持向量和矩阵的点积,包括 np.dot() 和 Python 3.5 中的 @ 运算符

  • PR #1546: 支持在记录数组和标量上进行字段查找(即除了 array.field 之外,还可以使用 array['field']

  • PR #1440: 支持 HSA wavebarrier() 和 activelanepermute_wavewidth() 内在函数

  • PR #1540: 支持 np.angle()

  • PR #1543: 实现CPU多线程gufuncs(target=”parallel”)

  • PR #1551: 允许在 np.where() 和 np.empty_like() 中使用标量参数。

  • PR #1516: 从 NumbaPro 添加更多示例

  • PR #1517: 支持 np.sinc()

修复:

  • 问题 #1603: 修复从缓存函数调用非缓存函数

  • 问题 #1594:确保在解包时列表是同质的

  • 问题 #1595: 替换已弃用的 get_pointer_to_function() 用法

  • 问题 #1586: 允许在同一台机器上由不同用户运行测试

  • 问题 #1587: 使 CudaAPIError 可序列化

  • 问题 #1568: 修复在 Visual Studio 2015 中使用 Numba

  • 问题 #1559: 修复引用重命名模块的 jit 函数的序列化

  • PR #1508: 让 reshape() 接受整数参数,而不仅仅是元组

  • 问题 #1545:改进解包列表对象时的错误检查

  • 问题 #1538: 修复 CUDA gufuncs 中的数组广播

  • 问题 #1526: 修复一个引用计数处理错误

版本 0.22.1

这是一个修复版本,旨在解决0.22.0版本中发现的某些打包问题和其他问题。

修复:

  • PR #1515: 在 MANIFEST.in 中包含 MANIFEST.in,以便从源 tar 文件中仍然可以正常使用 sdist。

  • PR #1518: 修复由隐藏别名引起的引用计数错误

  • PR #1519: 修复当传递 nopython=True 给 guvectorize 时错误的断言。

  • PR #1521: 修复 cuda.test()

版本 0.22.0

此版本有几个亮点:Python 3.5 支持、Numpy 1.10 支持、扩展模块的提前编译、以前仅在专有扩展 NumbaPro 中可用的额外矢量化功能、数组索引的改进。

改进:

  • PR #1497: 允许标量输入类型,而不是大小为1的数组到 @guvectorize

  • PR #1480: 为AOT编译添加distutils支持

  • PR #1460: 为提前(AOT)编译创建一个新的API

  • PR #1451: 允许将 Python 列表传递给 JIT 编译的函数,并在函数返回时反映突变

  • PR #1387: 支持 Numpy 1.10

  • PR #1464: 支持 cffi.FFI.from_buffer()

  • PR #1437: 传播从 Numba 编译的 ufuncs 引发的错误;此外,让“除以零”和其他数学错误产生警告,而不是提前退出函数

  • PR #1445: 支持部分花式索引

  • PR #1454: 支持“外部”CFFI模块

  • PR #1442: 改进数组索引以支持更多种类的基本切片

  • PR #1409: 支持显式的CUDA内存栅栏

  • PR #1435: 添加对 vectorize() 和 guvectorize() 的 HSA 支持

  • PR #1432: 实现 numpy.nonzero() 和 numpy.where()

  • PR #1416: 添加对 CUDA 的 vectorize() 和 guvectorize() 支持,这些功能最初在 NumbaPro 中提供。

  • PR #1424: 支持就地数组操作符

  • PR #1414: Python 3.5 支持

  • PR #1404: 添加最初在 NumbaPro 中提供的并行 ufunc 功能

  • PR #1393: 实现数组和列表的排序

  • PR #1415: 添加函数以估计CUDA内核的占用率

  • PR #1360: JIT 缓存现在存储编译后的对象代码,从而实现更大的速度提升。

  • PR #1402: 修复Linux下ARMv7 (armv7l) 架构的问题

  • PR #1400: 添加最初在 NumbaPro 中提供的 cuda.reduce() 装饰器

修复:

  • PR #1483: 允许 np.empty_like() 及其同类函数在非连续数组上使用

  • 问题 #1471: 允许缓存 IPython 中定义的 JIT 函数

  • PR #1457: 修复布尔数组的扁平索引

  • PR #1421: 允许在不显式输出情况下,对非连续数组调用 Numpy ufuncs

  • 问题 #1411:修复解包包含由 Numba 分配的数组的元组时发生的崩溃

  • 问题 #1394: 允许统一 range_state32 和 range_state64

  • 问题 #1373: 修复布尔列表上的代码生成错误

版本 0.21.0

此版本引入了对AMD异构系统架构的支持,该架构允许CPU和GPU之间直接共享内存。其他主要增强功能包括对列表的支持以及引入了一个可选的编译缓存。

改进:

  • PR #1391: 为CUDA代码实现print()函数

  • PR #1366: 实现整数类型增强提案(NBEP 1)

  • PR #1380: 支持单参数的 type() 内置函数

  • PR #1375: 允许对列表和元组进行布尔值评估

  • PR #1371: 在CUDA模式下支持array.view()

  • PR #1369: 在 nopython 模式下支持命名元组

  • PR #1250: 实现 numpy.median()。

  • PR #1289: 从常规Python调用JIT编译函数时,加快调度速度

  • 问题 #1226: 提高整数幂的性能

  • PR #1321: 文档支持CUDA的功能

  • PR #1345: HSA 支持

  • PR #1343: 在 nopython 模式下支持列表

  • PR #1356: 使 Numba 分配的内存对 tracemalloc 可见

  • PR #1363: 添加环境变量 NUMBA_DEBUG_TYPEINFER

  • PR #1051: 添加一个可选的、按函数编译的缓存

修复:

  • 问题 #1372: 当涉及同一变量多次或一元运算符时,某些数组表达式在重写时会失败。

  • 问题 #1385: 允许在函数中的任何位置声明 CUDA 局部数组

  • 问题 #1285: 在 Numpy 归约函数中支持 datetime64 和 timedelta64

  • 问题 #1332: 处理 EXTENDED_ARG 操作码。

  • PR #1329: 在对象模式中处理 in 运算符

  • 问题 #1322: 修复 Python 2 上的增强切片赋值

  • PR #1357: 修复某些负边界或步长值的切片问题。

版本 0.20.0

此版本更新了 Numba 以使用 LLVM 3.6 和 CUDA 7 进行 CUDA 支持。随着 CUDA 7 中平台弃用的更新,Numba 的 CUDA 功能不再支持 32 位平台。Windows 支持的最低版本为 Windows 7。

改进:

  • 问题 #1203: 支持索引 ndarray.flat

  • PR #1200: 将 cgutils 迁移到 llvmlite

  • PR #1190: 支持更多数组方法: .transpose(), .T, .copy(), .reshape(), .view()

  • PR #1214: 简化 setup.py 并避免手动维护

  • PR #1217: 支持 datetime64 和 timedelta64 常量

  • PR #1236: 编译时重新加载环境变量

  • PR #1225: 生成的代码中各种速度改进

  • PR #1252: 在CUDA中支持cmath模块

  • PR #1238: 使用32字节对齐的分配器以优化AVX

  • PR #1258: 支持 numpy.frombuffer()

  • PR #1274: 使用 TravisCI 容器基础设施以减少等待时间

  • PR #1279: 微优化调用分派中的重载解析

  • 问题 #1248: 当返回类型统一失败时,改进错误信息

修复:

  • 问题 #1131: 处理 np.conjugate() 和 np.arccos() 中的负零

  • 问题 #1188: 修复慢速数组返回

  • 问题 #1164: 避免在关闭时来自CUDA上下文的警告

  • 问题 #1229: 在数组中尊重可写标志

  • 问题 #1244: 修复引用计数修剪过程中的错误

  • 问题 #1251: 修复 Fortran 连续数组的局部左索引

  • 问题 #1264: 修复数组表达式中的编译错误

  • 问题 #1254: 修复生成数组对象时的错误

  • 问题 #1276: 修复嵌套生成器的使用

版本 0.19.2

此版本修复了 pypi 上的源代码分发。唯一的更改在 setup.py 文件中。我们不计划为此版本提供 conda 包,因为对于 conda 用户来说,此版本本质上与 0.19.1 相同。

版本 0.19.1

  • 问题 #1196:

    • 修复由于Numba IR中冗余变量删除导致的double-free段错误 (#1195)

    • 修复数组表达式重写过程中的使用后删除问题

版本 0.19.0

此版本在 Numba 运行时中引入了内存管理,允许在 Numba 编译的函数内部分配新数组。此外,还对 ufunc 基础设施进行了重构,并增加了一个优化过程,将级联数组操作折叠成一个高效的循环。

警告

支持所有编译器目标的Windows XP和Vista以及支持CUDA编译器目标的32位平台(Win/Mac/Linux)已被弃用。在Numba的下一个版本中,支持的Windows最旧版本将是Windows 7。CPU编译将继续在32位Linux和Windows平台上得到支持。

已知问题:

  • 由于内存管理带来的额外开销,非常短的 nopython 函数中存在一些性能退化。我们将在未来的版本中努力减少这种开销。

特性:

  • 问题 #1181: 在文档中添加一个常见问题解答部分。

  • 问题 #1162: 支持在 Numpy 数组上使用 cumsum()cumprod() 方法。

  • 问题 #1152: 支持 *args 参数传递风格。

  • 问题 #1147: 允许将字符序列作为参数传递给即时编译的函数。

  • 问题 #1110: 数组表达式的快捷去森林化和循环融合。

  • 问题 #1136: 支持各种 Numpy 数组构造函数,例如 numpy.zeros() 和 numpy.zeros_like()。

  • 问题 #1127: 添加一个在 CPU 上运行的 CUDA 模拟器,通过设置 NUMBA_ENABLE_CUDASIM 环境变量启用。

  • 问题 #1086: 允许从 nopython 函数中调用标准 Numpy ufuncs 而不需要显式的输出数组。

  • 问题 #1113: 在调用 numpy.empty() 及相关函数时支持关键字参数。

  • 问题 #1108:支持 Numpy 数组的 ctypes.data 属性。

  • 问题 #1077: nopython 模式下数组分配的内存管理。

  • 问题 #1105: 支持调用一个接受 ctypes.py_object 参数的 ctypes 函数。

  • 问题 #1084: 环境变量 NUMBA_DISABLE_JIT 禁用了 @jit 函数的编译,而是在调用时进入 Python 解释器。这使得调试多个 jitted 函数变得更加容易。

  • 问题 #927: 允许没有输出数组的广义函数。

  • 问题 #1097: 支持元组之间的比较。

  • 问题 #1075: 现在可以从 nopython 函数中调用 Numba 生成的 ufuncs。

  • 问题 #1062: @vectorize 现在允许省略签名,并且会在运行时编译所需的特化(类似于 @jit 的做法)。

  • 问题 #1027: 支持 numpy.round()。

  • 问题 #1085: 允许从JIT编译的函数中返回一个字符序列(从结构化数组中获取)。

修复:

  • 问题 #1170: 确保 ndindex(), ndenumerate()ndarray.flat 在生成器内部正常工作。

  • 问题 #1151: 禁止解包大小错误的元组。

  • 问题 #1141: 在 setup.py 中指定安装依赖。

  • 问题 #1106: 当提升的循环没有为函数尾部生成任何输出值时,循环提升将失败。

  • 问题 #1103: 修复当使用多个数组布局调用JIT编译函数时对某些输入的错误处理。

  • 问题 #1089: 修复 range() 函数处理大无符号整数的问题。

  • 问题 #1088: 从 conda 构建配方中安装入口点脚本 (numba, pycc)。

  • 问题 #1081:常量结构化标量现在可以正常工作。

  • 问题 #1080: 修复布尔值自动提升为整数的问题。

版本 0.18.2

错误修复:

  • 问题 #1073: 修复了HTML注释缺少模板文件的问题

  • 问题 #1074: 修复了由于 NVVM API 不匹配导致的 Windows 机器上的 CUDA 支持问题

版本 0.18.1

版本 0.18.0 尚未正式发布。

此版本移除了旧的已弃用且未文档化的 argtypesrestype 参数,这些参数曾用于 @jit 装饰器。函数签名应始终作为第一个参数传递给 @jit

特性:

  • 问题 #960:为JIT编译的函数添加 inspect_llvm() 和 inspect_asm() 方法:它们分别输出编译函数的LLVM IR和本地汇编源代码。

  • 问题 #990: 允许在 nopython 模式下将元组作为参数传递给即时编译的函数。

  • 问题 #774: 在 nopython 模式下支持两个参数的 round() 函数。

  • 问题 #987: 在 nopython 模式下支持 math 模块中缺失的函数: frexp(), ldexp(), gamma(), lgamma(), erf(), erfc()。

  • 问题 #995: 改进 Python 3 上 round() 函数的代码生成。

  • 问题 #981: 在 nopython 模式下支持来自 random 和 numpy.random 模块的函数。

  • 问题 #979: 添加 cuda.atomic.max()。

  • 问题 #1006: 改进异常的引发和报告。现在允许在 nopython 模式下使用错误消息引发异常。

  • 问题 #821: 允许将 ctypes 和 cffi 定义的函数作为 nopython 函数的参数。

  • 问题 #901: 允许 @jit 使用多个显式签名。签名必须以列表形式传递,如同 @vectorize 一样。

  • 问题 #884: 当使用错误类型调用 JIT 编译函数时,提供更好的错误信息。

  • 问题 #1010: 由于数据模型的重构,CUDA 参数的编组变得更简单和更快。

  • 问题 #1018: 支持 Numpy 结构化类型中的标量数组。

  • 问题 #808:将 Numba 导入时间减少一半。

  • 问题 #1021: 在 nopython 模式下支持缓冲区协议。提供缓冲区的对象,如 bytearrayarray.arraymemoryview 支持类似数组的操作,如索引和迭代。此外,memoryview 对象上的一些标准属性也得到了支持。

  • 问题 #1030: 在 Numpy 结构化数组中支持嵌套数组。

  • 问题 #1033: 为 CUDA 内核实现 inspect_types()、inspect_llvm() 和 inspect_asm() 方法。

  • 问题 #1029: 支持使用 CUDA 的 Numpy 结构化数组。

  • 问题 #1034: 在 nopython 和 object 模式下对生成器的支持。

  • 问题 #1044: 在调用 Numba 编译的函数时支持默认参数值。

  • 问题 #1048: 允许从CUDA函数调用Numpy标量构造函数。

  • 问题 #1047: 允许使用单个整数对多维数组进行索引,以获取视图。

  • 问题 #1050: 支持元组上的 len()。

  • 问题 #1011: 恢复 HTML 注释。

修复:

  • 问题 #977: 赋值优化过于激进。

  • 问题 #561: 在 Python 3 中,单参数的 round() 现在返回一个 int。

  • 问题 #1001: 修复了一个不太可能的错误,即两个具有相同名称和 id() 的闭包会编译为相同的 LLVM 函数名称,尽管闭包值不同。

  • 问题 #1006: 修复当一个JIT编译的函数被释放时的引用泄漏。

  • 问题 #1017: 更新 README 中关于 CUDA 的说明。

  • 问题 #1008: 生成更短的 LLVM 类型名称以避免 CUDA 导致的段错误。

  • 问题 #1005: 当从对象模式引发异常时,正确清理引用。

  • 问题 #1041: 修复 Numba 与第三方库 “future” 之间的不兼容性。

  • 问题 #1053: 修复 CUDA 共享数组的大小属性。

版本 0.17.0

此版本的主要重点是对文档进行了重写。新的文档结构更加合理,并且对Numba的功能和API进行了更详细的介绍。可以在 https://numba.pydata.org/numba-doc/dev/index.html 在线找到。

特性:

  • 问题 #895: LLVM 现在可以在 nopython 模式下内联嵌套函数调用。

  • 问题 #863: CUDA 内核现在可以推断其参数的类型(类似于“autojit”)。

  • 问题 #833: 在 nopython 模式下支持 numpy.{min,max,argmin,argmax,sum,mean,var,std}。

  • 问题 #905: 在 @jit 装饰器中添加一个 nogil 参数,以在 nopython 模式下释放 GIL。

  • 问题 #829: 为 @vectorize@guvectorize 添加一个 identity 参数,以设置 ufunc 的标识值。

  • 问题 #843:允许使用空元组对 0-d 数组进行索引。

  • 问题 #933: 允许在调用 Numba 编译函数时使用命名参数,而不仅仅是位置参数。

  • 问题 #902: 在 nopython 模式下支持 numpy.ndenumerate()。

  • 问题 #950: 现在默认启用 AVX,但在 Sandy Bridge 和 Ivy Bridge CPU 上除外,在这些 CPU 上它可能会产生比 SSE 更慢的代码。

  • 问题 #956: 支持结构化类型的常量数组。

  • 问题 #959: 不再允许使用浮点数对数组进行索引。

  • 问题 #955: 添加对3D CUDA网格和线程块的支持。

  • 问题 #902: 在 nopython 模式下支持 numpy.ndindex()。

  • 问题 #951: Numpy 数字类型 (numpy.int8 等) 可以在 nopython 模式下用作类型转换的构造函数。

修复:

  • 问题 #889: 修复 CUDA 后端的 NUMBA_DUMP_ASSEMBLY

  • 问题 #903: 修复在 Windows 下使用 ctypes 调用 stdcall 函数的问题。

  • 问题 #908: 允许从多个线程同时进行延迟编译。

  • 问题 #868: 当标量与非标量相乘时,错误信息不正确。

  • 问题 #917:允许在签名中使用 datetime64 和 timedelta64 进行矢量化(尽管仅限于无单位的值,因为这是 Numpy 的限制)。

  • 问题 #431: 允许重载 cuda 设备函数。

  • 问题 #917: 打印出在对象模式 ufuncs 中发生的错误。

  • 问题 #923: Numba 编译的 ufuncs 现在继承了原始 Python 函数的名称和文档。

  • 问题 #928: 修复嵌套调用中的布尔返回值。

  • 问题 #915: 当 @jit 使用带有参数类型不匹配的显式签名调用时,现在会引发错误。

  • 问题 #784: 修复 NaN 的真值。

  • 问题 #953:修复在多个函数(内核或设备)中使用共享内存的问题。

  • 问题 #970: 修复在 CentOS5 32 位系统上的一个不常见的双精度到 uint64 转换错误(C 编译器问题)。

版本 0.16.0

此版本包含了一个重大重构,以从 llvmpy 切换到 llvmlite 作为我们的代码生成后端。这一切换是必要的,以调和 LLVM 3.5(需要 C++11)和 Python 扩展(在 Windows 上需要特定编译器版本)的不同编译器要求。作为额外的好处,我们发现使用 llvmlite 使编译速度提高了两倍!

其他主要变化:

  • numpy 结构化数组的更快分派

  • 优化的 array.flat()

  • 改进的 CPU 特性选择

  • 修复宏展开代码中的常量元组回归问题

已知问题:

  • 由于在操作未对齐的 NumPy 数组时性能下降,AVX 代码生成默认仍处于禁用状态。我们希望将来能有解决方案。

  • 在*极其*罕见的情况下,LLVM 3.5 的 已知问题 代码生成可能会导致64位Linux系统上的ELF重定位错误。

版本 0.15.1

(这是一个修复错误的版本,它在0.15版本宣布之前就已经取代了它。)

修复:

  • Windows XP 上缺少 __ftol2 的解决方法。

  • 不要提升包含break语句的循环进行编译。

  • 修复了在需要向封闭作用域返回多个值时循环提升中的一个错误。

  • 处理循环提升的情况,当循环计数为零时需要更新累加器。

版本 0.15

特性:

  • 支持 Python cmath 模块。(NumPy 复数函数已经支持。)

  • 对非复数支持 .real.imag.conjugate()

  • 添加对 math.isfinite()math.copysign() 的支持。

  • 兼容模式:如果启用(默认关闭),对象模式编译失败时将回退到使用函数的纯Python实现。

  • 实验性 支持使用 cloudpickle 序列化 JIT 函数。

  • 对象模式中的循环优化现在适用于在循环后访问的修改标量的循环,例如累加器。

  • @vectorize 函数可以在对象模式下编译。

  • Numba 现在可以使用 Windows 平台上的 Visual C++ Compiler for Python 2.7 进行构建。

  • CUDA JIT 函数可以通过工厂函数返回,闭包中的变量作为常量冻结。

  • 在 nopython 模式下支持“可选”类型,允许 None 作为有效值。

修复:

  • 如果 nopython 模式编译因任何原因失败,自动回退到对象模式(除非将 nopython=True 传递给 @jit),而不是引发异常。

  • 允许从在对象模式下编译的函数中返回函数对象。

  • 修复了一个链接问题,该问题导致在Windows上使用较慢的平台数学函数(如 exp() ),从而导致与NumPy相比性能下降。

  • min()max() 在 nopython 模式下不再接受标量参数。

  • 修复了JIT函数多个编译版本之间类型提升处理的问题。调度器现在将编译一个新版本来解决这个问题。(问题 #776)

  • 修复32位Linux上float32到uint64的转换错误。

  • 修复类型推断以允许强制转换返回类型。

  • 允许一维 cuda.shared.arraycuda.local.array 的形状为一个单元素元组。

  • 更正确地处理带符号的零。

  • 在Windows上添加``atan2()``的自定义实现,以正确处理特殊情况。

  • 消除了在传输 CUDA 数组时使用的页锁定暂存区域处理中的竞争条件。

  • 修复导致性能不稳定的非确定性类型统一问题。(问题 #797)

版本 0.14

特性:

  • 在 nopython 模式下,几乎所有 Numpy 数学函数(包括比较、逻辑、位运算以及一些之前缺失的浮点函数)的支持。

  • Numpy 的 datetime64 和 timedelta64 数据类型在 Numpy 1.7 及更高版本中支持 nopython 模式。

  • 在 nopython 模式下对复数上的 Numpy 数学函数的支持。

  • ndarray.sum() 在 nopython 模式下受支持。

  • 当在 Numpy 数学函数中使用不支持的类型时,提供更好的错误信息。

  • 在环境中设置 NUMBA_WARNINGS=1 以查看哪些函数是在对象模式下编译的,哪些是在 nopython 模式下编译的。

  • 在 nopython 模式下添加对双参数 pow() 内置函数的支持。

  • 新的开发者文档,描述了Numba的工作原理以及如何添加新类型。

  • GPU 上对 Numpy 记录数组的支持。(注意:dtype 字段的错误对齐将导致异常被抛出。)

  • GPU 设备数组上的切片。

  • GPU 对象可以用作 Python 上下文管理器,以在代码块中选择活动设备。

  • GPU 设备数组可以绑定到一个 CUDA 流。所有后续操作(如内存复制)将在这个流上排队,而不是默认流。这可以防止与其他流不必要的同步。

修复:

  • 已禁用生成 AVX 指令,以避免在调用可能使用 SSE 指令的外部数学函数时出现性能问题,尤其是在 OS X 上。

  • JIT 函数在不再可访问时可以被垃圾收集器移除。

  • 各种其他的引用计数修复,以防止内存泄漏。

  • 修复了当输入参数超出范围时异常的处理。

  • 防止 autojit 函数在调用时使用不同数值类型进行不安全的数值转换。

  • 修复访问不可哈希的全局值时出现的编译错误。

  • 在IPython Notebook中优雅地处理无法启用faulthandler的失败情况。

  • 修复了一个导致循环提升失败的错误,如果循环位于 else 块内。

  • 修复了在Linux上多线程程序中选择CUDA设备的问题。

  • pow() 函数(以及 ** 操作)应用于两个整数时,现在返回整数而不是浮点数。

  • 使用对象dtype的Numpy数组在autojit中不再引发异常。

  • 尝试写入全局数组将导致编译回退到对象模式,而不是尝试并失败于 nopython 模式。

  • range() 可以处理所有负数参数(例如:range(-10, -12, -1)

版本 0.13.4

特性:

  • 在对象模式下设置和删除属性

  • 增加了对支持和不支持的 numpy ufuncs 的文档说明

  • 对一维 numpy 数组切片的赋值

  • 闭包变量和函数可以在对象模式中使用

  • 模块中的所有数值全局值都可以在JIT编译的代码中用作常量

  • 对 enumerate() 中的 start 参数的支持

  • 就地算术运算(+=、-= 等)

  • 在 nopython 模式下直接迭代一维 numpy 数组(例如“for x in array: …”)

修复:

  • 支持NVIDIA计算能力5.0的设备(如GTX 750)

  • 当使用 bool_ 作为返回类型时,矢量化不再崩溃/报错

  • 当在JIT函数中使用globals()时,返回正确的字典

  • 修复在对象中创建字典字面量时的崩溃错误

  • 如果在导入时 llvmpy 版本过旧,报告更详细的信息错误消息

  • 暂时禁用 pycc –header,该功能生成了不正确的函数签名。

版本 0.13.3

特性:

  • 在 nopython 模式下对 enumerate() 和 zip() 的支持

  • 将JIT函数的LLVM优化级别提升至-O1,在某些情况下启用编译代码的自动矢量化

  • 在 nopython 模式下对元组进行迭代和解包

  • 对象模式下对字典和集合(Python >= 2.7)字面量的支持

修复:

  • JIT 函数与原始函数具有相同的 __name__ 和 __doc__。

  • 对不同平台上JIT编译代码中的Python数学函数的数据类型和行为进行了大量改进,以更好地匹配。

  • 导入 Numba 时,如果存在 CUDA 驱动程序但无法初始化,将不再抛出异常。

  • guvectorize 现在正确支持带有标量参数的函数。

  • CUDA 驱动程序是延迟初始化的

版本 0.13.2

特性:

  • @vectorize ufunc 现在可以为单位步长数组生成 SIMD 快速路径

  • 添加了 cuda.gridsize

  • 添加了初步的异常处理(引发异常类)

修复:

  • UNARY_POSITIVE

  • 处理闭包和动态生成的函数

  • 全局 None 值

版本 0.13.1

特性:

  • 对CUDA数组切片的初步支持

修复:

  • 当系统具有不兼容的CUDA驱动时,间接修复numbapro

  • 修复 numba.cuda.detect

  • 导出 numba.intp 和 numba.intc

版本 0.13

特性:

  • numba.cuda 中开源 NumbaPro CUDA python 支持

  • 添加对 ufunc 数组广播的支持

  • 为 ufuncs 添加对混合输入类型的支持

  • 添加对从 jitted 函数返回元组的支持

修复:

  • 修复 Python2 中存储切片字节码的处理

  • 原地减法修复

  • 修复 pycc 以便正确发出头文件

  • 允许向量化在带有 jit 装饰器的函数上工作

版本 0.12.2

修复:

  • 在 nopython 模式下改进的 NumPy ufunc 支持

  • 杂项错误修复

版本 0.12.1

此版本修复了用户报告的0.12版本中的许多回归问题。此版本包含一个新的循环提升机制,该机制针对nopython模式编译的某些循环模式进行了专门化。这避免了直接支持堆分配和其他非常动态的操作。

改进:

  • 在对象模式代码中添加循环提升–在nopython模式下编译循环。这允许函数分配NumPy数组并使用Python对象,同时函数中的紧密循环仍然可以在nopython模式下编译。任何紧密循环使用的数组应在循环进入之前创建。

修复:

  • 添加对“math”模块大部分函数支持

  • 修复…else 处理

  • 添加对内置 round() 的支持

  • 修复三元 if…else 支持

  • 恢复 “numba” 脚本

  • 修复一些布尔表达式的问题

  • 添加对更多 NumPy ufuncs 的支持

版本 0.12

版本 0.12 包含了对编译器的一次重大重构。此次重构的主要目标是简化代码库,为后续工作打下更好的基础。次要目标是提高最坏情况下的性能,确保对象模式下编译的函数永远不会比纯 Python 代码运行得更慢(这在旧代码库的几个情况下是一个问题)。此次重构仍在进行中,需要进一步测试。

主要改进:

  • 由于性能和维护原因,对编译器进行了重大重构

  • 当原生模式失败时,更好地回退到对象模式

  • 在对象模式下提高了最坏情况下的性能

numba 的公共接口已经稍微改变。目的是使其更简洁和更合理:

  • jit 装饰器已被修改,因此可以在没有签名的情况下调用。在没有签名的情况下调用时,它的行为与旧的 autojit 相同。为了支持这种方法,autojit 已被弃用。

  • Jitted 函数现在可以被重载。

  • 添加了一个“njit”装饰器,其行为类似于“jit”装饰器,但带有nopython=True。

  • numba.vectorize 命名空间已不存在。vectorize 装饰器将位于主 numba 命名空间中。

  • 在主 numba 命名空间中添加了一个 guvectorize 装饰器。它类似于 numba.vectorize,但接受一个维度签名。它生成 gufuncs。这是已被弃用的 GUVectorize gufunc 工厂的替代品。

主要回归问题(将在未来的版本中修复):

  • 在 nopython 模式下不支持创建新的 NumPy 数组

  • 在 nopython 模式下不支持返回 NumPy 数组

  • 在 nopython 模式下不支持 NumPy 数组切片

  • 在 nopython 模式下,不支持列表和元组

  • string, datetime, cdecimal, 和 struct 类型尚未实现

  • 在 nopython 模式下不支持扩展类型(类)

  • 不支持闭包

  • 不支持 raise 关键字

  • 递归在 nopython 模式下不支持

版本 0.11

  • 对 NumPy 日期时间类型的实验性支持

版本 0.10

  • 注释工具 (./bin/numba –annotate –fancy) (感谢 Jay Bourque)

  • 开源的 prange

  • 对 raise 语句的支持

  • 可插拔数组表示

  • 对 enumerate 和 zip 的支持(感谢 Eugene Toder)

  • 更好的字符串格式化支持(感谢 Eugene Toder)

  • 内置函数 min()、max() 和 bool()(感谢 Eugene Toder)

  • 修复了一些代码重新加载的问题(感谢 Björn Linse)

  • 识别 NumPy 标量对象(感谢 Björn Linse)

版本 0.9

  • 改进的数学支持

  • 开源的通用ufuncs

  • 改进的数组表达式

版本 0.8

  • 支持自动即时编译的类
    • 继承尚未支持

  • pycc 的 Python 3 支持

  • 允许检索 ctypes 函数包装器
    • 因此支持检索指向函数的指针

  • 修复了数组切片视图的内存泄漏问题

版本 0.7.2

版本 0.7.1

  • 各种错误修复

版本 0.7

  • 开源的单线程 ufunc 向量化器

  • 开源的 NumPy 数组表达式编译

  • 开源的快速 NumPy 数组切片

  • 实验性 Python 3 支持

  • 支持类型化容器
    • 类型化的列表和元组

  • 对对象迭代的支持

  • 支持对象比较

  • 初步的 CFFI 支持
    • 对CFFI函数的Jit调用(传递给autojit函数)

    • TODO: 识别 ffi_lib.my_func 属性

  • 改进了对 ctypes 的支持

  • 允许通过类属性声明扩展属性类型

  • Python 中的类型转换支持
    • 无论是否使用 numba 编译,都能获得相同的语义

  • 递归支持
    • 对于jit方法和扩展类

  • 允许将 jit 函数作为 C 回调

  • 更友好的错误报告

  • 内部改进

  • 各种错误修复

版本 0.6.1

  • 支持位操作

版本 0.6

  • Python 2.6 支持

  • 可编程输入
    • 允许用户为外部代码添加类型推断

  • 更好的 NumPy 类型推断
    • outer, inner, dot, vdot, tensordot, nonzero, where, 二元ufuncs + 方法 (reduce, accumulate, reduceat, outer)

  • 基于类型的别名分析
    • 严格别名支持

  • 从Python调用时,更快的autojit调度

  • 通过数据和步幅预加载实现更快的数值循环

  • 对象转换中的整数溢出和下溢检查

  • 使 Meta 依赖项可选

版本 0.5

  • 基于SSA的类型推断
    • 允许变量重用

    • 允许在词法定义之前引用变量

  • 支持多重比较

  • 模板类型支持

  • 列表推导式

  • 指针支持

  • 许多错误修复

  • 添加了用户文档

版本 0.4

版本 0.3.2

  • 添加对对象算术的支持(问题 56)。

  • Bug 修复 (issue 55)。

版本 0.3

  • 将默认编译方法更改为 ast

  • 增加了对跨模块链接的支持

  • 增加了对闭包的支持(可以即时编译内部函数并返回它们)(参见 examples/closure.py)

  • 添加了对 dtype 结构的支持(可以通过属性访问结构中的元素)(参见 examples/structures.py)

  • 增加了对扩展类型(numba 类)的支持(参见 examples/numbaclasses.py)

  • 增加了对通用Python代码的支持(使用nopython来在使用了Python C-API时抛出错误,以避免因缺乏实现而默认使用通用Python导致的意外缓慢)

  • 修复了许多错误

  • 增加了对检测数学运算的支持。

  • 添加了 python 和 nopython 上下文

  • 增加了更多示例

许多功能仍需记录。查看示例和测试以获取更多信息。

版本 0.2

  • 添加了编译的抽象语法树方法

  • 从 numba 命名空间中移除了 d, f, i, b(使用 f8, f4, i4, b1)

  • 将函数更改为 autojit2

  • 添加了 autojit 函数来装饰对函数的调用,并使用变量的类型来创建编译版本。

  • 将 jit 和 autojit 函数的参数关键字更改为 restype 和 argtypes,以与 ctypes 模块保持一致。

  • 添加了 pycc – 一个将 Python 编译为共享库的编译器