NumPy 1.26.1 发行说明#

NumPy 1.26.1 是一个维护版本,修复了 1.26.0 版本发布后发现的错误和回归。此外,它增加了从源代码构建时检测 BLAS 和 LAPACK 的新功能。主要亮点包括:

  • 改进了 Meson 构建对 BLAS 和 LAPACK 库的检测

  • 与即将发布的 NumPy 2.0 的 Pickle 兼容性。

1.26.x 系列是 NumPy 2.0 之前最后一个计划的次要版本系列。此版本支持的 Python 版本为 3.9-3.12。

构建系统变更#

改进的 BLAS/LAPACK 检测和控制#

Meson 现在实现了对多种 BLAS 和 LAPACK 的自动检测。默认情况下,构建系统将尝试检测 MKL、Accelerate(在 macOS >=13.3 上)、OpenBLAS、FlexiBLAS、BLIS 以及参考 BLAS/LAPACK。对 MKL 的支持得到了显著改进,并增加了对 FlexiBLAS 的支持。

提供了新的命令行标志,以进一步控制选择要构建的 BLAS 和 LAPACK 库。

要选择特定库,请通过 pippypa/build 使用 config-settings 接口。例如,要选择 libblas/liblapack,请使用

$ pip install numpy -Csetup-args=-Dblas=blas -Csetup-args=-Dlapack=lapack
$ # OR
$ python -m build . -Csetup-args=-Dblas=blas -Csetup-args=-Dlapack=lapack

这不仅适用于上述库,也适用于 Meson 能够通过 pkg-config 或 CMake 检测到的任何指定名称的库。

除了 -Dblas-Dlapack,还有许多其他新标志可用于控制 BLAS/LAPACK 的选择和行为:

  • -Dblas-order-Dlapack-order:按顺序搜索的库名称列表,覆盖默认搜索顺序。

  • -Duse-ilp64:如果设置为 true,则使用 ILP64 (64 位整数) BLAS 和 LAPACK。请注意,在此版本中,ILP64 支持已扩展到包括 MKL 和 FlexiBLAS。OpenBLAS 和 Accelerate 在之前的版本中已受支持。

  • -Dallow-noblas:如果设置为 true,则允许 NumPy 使用其内部(非常慢的)备用例程进行构建,而不是链接外部 BLAS/LAPACK 库。*此标志的默认值在未来的 1.26.x 版本中可能会更改为 ``true``,但对于 1.26.1 版本,我们更倾向于将其保持为 ``false``,因为如果发生无法检测到已安装库的情况,我们希望收到错误报告,以便我们能快速评估新的自动检测机制是否需要进一步改进。*

  • -Dmkl-threading:用于选择 MKL 的线程层。有四个选项:seqiompgomptbb。默认值为 auto,它会根据所选的 MKL 版本适当选择其中之一。

  • -Dblas-symbol-suffix:手动选择要用于库的符号后缀——仅在链接非标准方式构建的库时才需要。

新特性#

numpy._core 子模块存根#

添加了 numpy._core 子模块存根,以在使用 Numpy 1.26 运行时,提供与使用 NumPy 2.0 创建的 pickled 数组的兼容性。

贡献者#

共有 13 人为本次发布做出了贡献。名字旁带有“+”的人是首次贡献补丁。

  • Andrew Nelson

  • Anton Prosekin +

  • Charles Harris

  • Chongyun Lee +

  • Ivan A. Melnikov +

  • Jake Lishman +

  • Mahder Gebremedhin +

  • Mateusz Sokół

  • Matti Picus

  • Munira Alduraibi +

  • Ralf Gommers

  • Rohit Goswami

  • Sayed Adel

合并的拉取请求#

本次发布共合并了 20 个拉取请求。

  • #24742:维护:更新 cibuildwheel 版本

  • #24748:维护:修复使用 setup.py 构建的 wheel 中的版本字符串

  • #24771:构建,错误:修复主机标志(例如 -march=native)导致的构建失败…

  • #24773:文档:更新 f2py 文档,删除关于 -fimplicit-none 的说明

  • #24776:错误:修复 s390x 上当基线为 none 时 SIMD f32 trunc 测试

  • #24785:构建:将 libquadmath 添加到许可证及其他调整 (#24753)

  • #24786:维护:为 Cirrus 激活 use-compute-credits

  • #24803:构建:更新 vendored-meson/meson 以修复 mips64

  • #24804:维护:修复 Windows 许可证路径

  • #24813:错误:修复 Windows OS 检测宏的顺序。

  • #24831:错误,SIMD:在有问题的 Apple clang x86_64 上使用标量 cmul (#24828)

  • #24840:错误:修复 f2py 的 DATA 语句

  • #24870:API:添加 NumpyUnpickler 以进行向后移植

  • #24872:维护:在 PyPy 上将失败的测试标记为 Xfail。

  • #24879:构建:修复数学函数特性检查,修复 FreeBSD 构建,添加 CI…

  • #24899:增强:meson:实现 BLAS/LAPACK 自动检测和许多 CI…

  • #24902:文档:为 BLAS/LAPACK 构建添加 1.26.1 发行说明部分…

  • #24906:维护:向后移植 numpy._core 存根。移除 NumpyUnpickler

  • #24911:维护:将 pypa/cibuildwheel 从 2.16.1 提升到 2.16.2

  • #24912:错误:龙芯架构不使用 REAL(10)