NumPy 1.26.0 发行说明#

NumPy 1.26.0 版本是 1.25.x 发布周期的延续,增加了对 Python 3.12.0 的支持.Python 3.12 放弃了 distutils,因此支持它需要找到 NumPy 使用的基于 setup.py/distutils 构建系统的替代方案.我们选择使用 Meson 构建系统,这是第一个支持它的 NumPy 版本.这也是第一个支持 Cython 3.0 并保留 0.29.X 兼容性的版本.支持这两个升级是一个大型项目,在此版本中修改了 100 多个文件.变更日志没有捕捉到全部工作,特别感谢 Ralf Gommers,Sayed Adel,Stéfan van der Walt 和 Matti Picus,他们在主开发分支中做了很多工作.

此版本的亮点包括:

  • Python 3.12.0 支持.

  • Cython 3.0.0 兼容性.

  • 使用 Meson 构建系统

  • 更新的 SIMD 支持

  • f2py 修复,meson 和 bind(x) 支持

  • 支持更新的 Accelerate BLAS/LAPACK 库

此版本支持的 Python 版本为 3.9-3.12.

新特性#

numpy.array_api 中的 Array API v2022.12 支持#

  • numpy.array_api 现在完全支持数组 API 标准的 v2022.12 version .请注意,这还不包括标准中可选的 fft 扩展.

( gh-23789 )

支持更新的 Accelerate BLAS/LAPACK 库#

增加了对更新的 Accelerate BLAS/LAPACK 库的支持,包括 macOS 13.3 中的 ILP64(64 位整数)支持.这带来了 arm64 支持,并为常用的线性代数运算带来了高达 10 倍的显著性能提升.如果在构建时选择 Accelerate,则如果可用,将自动使用 13.3+ 版本.

( gh-24053 )

f2pymeson 后端#

编译模式下的 f2py (即 f2py -c )现在接受 --backend meson 选项.这是 Python 3.12 上的默认选项.旧版本仍然默认为 --backend distutils .

为了在实际用例中支持这一点,在编译模式下 f2py 接受一个或多个 --dep 标志,这些标志映射到 meson 后端中的 dependency() 调用,并且在 distutils 后端中不执行任何操作.

仅作为代码生成器使用 f2py 的用户(即没有 -c )没有任何更改.

( gh-24532 )

f2pybind(c) 支持#

函数和子例程都可以用 bind(c) 注释. f2py 将处理正确的类型映射,并为其他 C 接口保留唯一的标签.

注意: f2py 绑定不遵循 bind(c, name = 'routine_name_other_than_fortran_routine') ,因为带有 namebind(c) 旨在保证 CFortran 中只有相同的名称,而不是在 PythonFortran 中.

( gh-24555 )

改进#

f2pyiso_c_binding 支持#

以前,用户必须定义自己的自定义 f2cmap 文件才能使用 Fortran2003 iso_c_binding intrinsic 模块定义的类型映射.这些类型映射现在由 f2py 本机支持

( gh-24555 )

构建系统变更#

在此版本中,NumPy 已切换到 Meson 作为构建系统,并使用 meson-python 作为构建后端. 安装 NumPy 或构建 wheel 可以使用标准工具(如 pippypa/build )完成. 支持以下内容:

  • 常规安装: pip install numpy 或(在克隆的仓库中) pip install .

  • 构建 wheel: python -m build (首选),或 pip wheel .

  • 可编辑安装: pip install -e . --no-build-isolation

  • 通过使用 spin 实现的自定义 CLI 进行开发构建: spin build .

所有常规的 pippypa/build 标志(例如 --no-build-isolation )都应按预期工作.

NumPy 特定的构建自定义#

许多 NumPy 特定的构建自定义方式已更改. 不再支持控制 BLAS/LAPACK,SIMD,线程和其他此类选项的 NPY_* 环境变量,也不再支持选择 BLAS 和 LAPACK 的 site.cfg 文件. 相反,有一些命令行标志可以通过 pip / build 的 config-settings 接口传递给构建. 所有这些标志都列在 repo 根目录中的 meson_options.txt 文件中. 详细文档将在最终 1.26.0 版本发布前提供; 目前请参阅 the SciPy “building from source” docs ,因为在 SciPy 中,大多数构建自定义的工作方式与在 NumPy 中几乎相同.

构建依赖项#

虽然 NumPy 的运行时依赖项没有改变,但构建依赖项已经改变. 因为我们临时地将 Meson 和 meson-python 作为 vendor,所以有几个新的依赖项 - 请参阅 pyproject.toml[build-system] 部分了解详细信息.

故障排除#

此构建系统更改非常大. 如果出现意外问题,仍然可以使用基于 setup.py 的构建作为临时解决方法(在 Python 3.9-3.11 上,而不是 3.12),方法是将 pyproject.toml.setuppy 复制到 pyproject.toml . 但是,请在 NumPy 问题跟踪器上打开一个包含详细信息的问题. 我们的目标是尽快淘汰 setup.py 构建,因此希望尽早发现 1.26.0 发布周期中所有潜在的阻碍因素.

贡献者#

总共有 20 人为本次发布做出了贡献.名字旁边带有"+"的人是第一次贡献补丁.

  • @DWesl

  • Albert Steppi +

  • Bas van Beek

  • Charles Harris

  • Developer-Ecosystem-Engineering

  • Filipe Laíns +

  • Jake Vanderplas

  • Liang Yan +

  • Marten van Kerkwijk

  • Matti Picus

  • Melissa Weber Mendonça

  • Namami Shanker

  • Nathan Goldbaum

  • Ralf Gommers

  • Rohit Goswami

  • Sayed Adel

  • Sebastian Berg

  • Stefan van der Walt

  • Tyler Reddy

  • Warren Weckesser

合并的拉取请求#

总共有 59 个 pull requests 被合并到此版本中.

  • #24305 : MAINT: 为 numpy 1.26 准备 1.26.x 开发分支

  • #24308 : MAINT: 从 main 大量更新 numpy 1.26 的文件

  • #24322 : CI: 修复 1.26.x 分支上的 wheel 构建

  • #24326 : BLD: 将 openblas 更新到较新版本

  • #24327 : TYP: 减少 _NestedSequence.__getitem__ 签名

  • #24328 : BUG: 修复 choose 引用计数泄漏

  • #24337 : TST: 修复在没有 BLAS/LAPACK 的构建中运行测试套件

  • #24338 : BUG: random: 修复 dirichlet 生成 nan 的问题.

  • #24340 : MAINT: 来自 main 的 Dependabot 更新

  • #24342 : MAINT: 添加回 NPY_RUN_MYPY_IN_TESTSUITE=1

  • #24353 : MAINT: 从 main 更新 extbuild.py .

  • #24356 : TST: 修复最近 setuptools 中弃用的 distutils 测试…

  • #24375 : MAINT: 将 cibuildwheel 更新到 2.15.0 版本

  • #24381 : MAINT: 修复 codespaces setup.sh 脚本

  • #24403 : ENH: Vendor meson 以支持多目标构建

  • #24404 : BLD: vendor meson-python 使 Windows 构建支持 SIMD…

  • #24405 : BLD, SIMD:Meson CPU 调度器实现

  • #24406 : MAINT: 移除 versioneer

  • #24409 : REL:准备 NumPy 1.26.0b1 版本发布.

  • #24453 : MAINT:Pin sphinx 的较高版本.

  • #24455 : ENH:添加前缀到 _ALIGN 宏

  • #24456 : BUG:清理警告 [skip azp][skip circle][skip travis][skip…]

  • #24460 : MAINT:升级到 spin 0.5

  • #24495 : BUG: asv dev 已被移除,请使用 asv run .

  • #24496 : BUG:修复由于未更改的就地自动生成的 meson 构建失败…

  • #24521 : BUG:修复 git-version 脚本的问题,需要一个 shebang 才能运行

  • #24522 : BUG:为 git_hash 使用默认赋值 [skip ci]

  • #24524 : BUG:修复 choose 中的 NPY_cast_info 错误处理

  • #24526 : BUG:修复 f2py 中的公共块处理

  • #24541 : CI,TYP:升级 mypy 到 1.4.1

  • #24542 : BUG:修复假定长度的 f2py 回归

  • #24544 : MAINT:统一 fortranobject

  • #24545 : TYP:添加 kind 参数到 numpy.isin 类型规范

  • #24561 : BUG:修复屏蔽和非屏蔽结构化数组之间的比较

  • #24590 : CI:从 Cygwin 上的 DLL 列表中排除导入库.

  • #24591 : BLD:修复 _umath_linalg 依赖项

  • #24594 : MAINT:停止在 ppc64le 上进行测试.

  • #24602 : BLD: meson-cpu:修复在没有功能的平台上的 SIMD 支持

  • #24606 : BUG:更改 Cython binding 指令为"False".

  • #24613 : ENH:采用新的 macOS Accelerate BLAS/LAPACK 接口,包括…

  • #24614 : DOC:更新构建文档以使用 Meson

  • #24615 : TYP:添加缺失的 casting 关键字到 np.clip

  • #24616 : TST:将 cython 测试从 setup.py 转换为 meson

  • #24617 : MAINT:修复 fromnumeric.pyi

  • #24622 : BUG, ENH:修复 iso_c_binding 类型映射以及修复 bind(c)

  • #24629 : TYP:允许 binary_repr 接受任何实现…的对象

  • #24630 : TYP:显式声明 dtypegeneric 可哈希

  • #24637 : ENH:使用 typing.assert_type 重构类型"reveal"测试

  • #24638 : MAINT:将 actions/checkout 从 3.6.0 升级到 4.0.0

  • #24647 : ENH: meson 后端用于 f2py

  • #24648 : MAINT:重构 Clang 的部分加载解决方法

  • #24653 : REL:准备 NumPy 1.26.0rc1 版本发布.

  • #24659 : BLD:允许指定 long double 格式以避免运行时…

  • #24665 : BLD:修复 random.mtrand 扩展中的错误,不要链接 libnpyrandom

  • #24675 : BLD:使用 MSVC 构建 Windows 上 32 位 Python 的 wheels

  • #24700 : BLD: 修复交叉编译期间编译器选择的问题

  • #24701 : BUG: 修复 f2py 中对复数值的数据语句处理

  • #24707 : TYP: 为 py3.12 缓冲区协议添加注解

  • #24718 : DOC: 修复 1.26.x 上的一些文档构建问题并更新 spin docs