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 版本。这也是除了保留 0.29.X 兼容性之外第一个支持 Cython 3.0 的版本。支持这两个升级是一个大型项目,此版本涉及 100 多个文件。变更日志并未涵盖工作的全部内容,特别感谢 Ralf Gommers、Sayed Adel、Stéfan van der Walt 和 Matti Picus,他们在主开发分支中完成了大部分工作。

此版本的亮点是:

  • Python 3.12.0 支持。

  • Cython 3.0.0 兼容性。

  • 使用 Meson 构建系统

  • 更新了 SIMD 支持

  • f2py 修复、介子和 bind(x) 支持

  • 支持更新的 Accelerate BLAS/LAPACK 库

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

新功能

#中的数组 API v2022.12 支持numpy.array_api

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

( gh-23789 )

支持更新的 Accelerate BLAS/LAPACK 库#

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

( gh-24053 )

meson#的后端f2py

f2py在编译模式(即)现在接受该 选项。这是 Python以后的默认选项。旧版本仍默认为.f2py -c--backend meson3.12--backend distutils

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

对于f2py仅作为代码生成器(即没有-c.

( gh-24532 )

bind(c)支持f2py

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

注意: 设计上的绑定不遵守,因为with 意味着仅保证和中的名称相同,而不是 和中的名称相同。bind(c, name = 'routine_name_other_than_fortran_routine')f2pybind(c)nameCFortranPythonFortran

( gh-24555 )

改进#

iso_c_binding支持f2py

以前,用户必须定义​​自己的自定义f2cmap文件才能使用 Fortran2003iso_c_binding内部模块定义的类型映射。这些类型映射现在原生支持f2py

( gh-24555 )

构建系统更改#

在此版本中,NumPy 已改用 Meson 作为构建系统,并改用 meson-python 作为构建后端。安装 NumPy 或构建轮子可以使用pip和等标准工具来完成pypa/build。支持以下内容:

  • 常规安装:或(在克隆的存储库中) pip install numpypip install .

  • 建造一个轮子:(首选),或python -m buildpip wheel .

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

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

所有常规pippypa/build标志(例如, --no-build-isolation)应该按预期工作。

NumPy 特定的构建定制#

许多 NumPy 特定的自定义构建方式已经发生了变化。NPY_*不再支持控制 BLAS/LAPACK、SIMD、线程和其他此类选项的环境变量,也不再支持选择site.cfgBLAS 和 LAPACK 的文件。相反,可以通过pip/build的配置设置界面将命令行标志传递给构建。这些标志都列在meson_options.txt存储库根目录的文件中。详细文档将在最终 1.26.0 版本发布之前提供;现在请参阅SciPy“从源代码构建”文档,因为大多数构建自定义在 SciPy 中的工作方式与在 NumPy 中几乎相同。

构建依赖关系#

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

故障排除

这次构建系统的改动相当大。如果出现意外问题,仍然可以setup.py通过复制pyproject.toml.setuppypyproject.toml.但是,请在 NumPy 问题跟踪器上打开一个包含详细信息的问题。我们的目标是setup.py尽快逐步淘汰构建,因此希望看到所有潜在的阻止程序在 1.26.0 发布周期的早期就出现。

贡献者#

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

  • @DWesl

  • 阿尔伯特·斯特皮 +

  • 巴斯·范贝克

  • 查尔斯·哈里斯

  • 开发者生态系统工程

  • 菲利佩·莱恩斯 +

  • 杰克·范德普拉斯

  • 梁艳+

  • 马丁·范·克维克

  • 马蒂·皮库斯

  • 梅丽莎·韦伯·门东萨

  • 纳米米尚克

  • 内森·戈德鲍姆

  • 拉尔夫·戈默斯

  • 罗希特·戈斯瓦米

  • 赛义德·阿德尔

  • 塞巴斯蒂安·伯格

  • 斯特凡·范德沃尔特

  • 泰勒·雷迪

  • 沃伦·韦克瑟

合并拉取请求#

此版本总共合并了 59 个拉取请求。

  • #24305 : MAINT: 准备 1.26.x 分支进行开发

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

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

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

  • #24327:TYP:修剪_NestedSequence.__getitem__签名

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

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

  • #24338:BUG:随机:修复 dirichlet 的 nan 生成。

  • #24340:维护:Dependabot 从主更新

  • #24342:维护:添加回 NPY_RUN_MYPY_IN_TESTSUITE=1

  • #24353:维护:extbuild.py从主更新。

  • #24356:TST:修复 distutils 测试以排除最近安装工具中的弃用…

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

  • #24381:维护:修复代码空间 setup.sh 脚本

  • #24403:ENH:用于多目标构建支持的供应商介子

  • #24404:BLD:供应商 meson-python 使用 SIMD 构建 Windows...

  • #24405:BLD,SIMD:介子CPU调度程序实现

  • #24406:维护:删除版本控制者

  • #24409:REL:准备 NumPy 1.26.0b1 版本。

  • #24453:维护:固定狮身人面像的上部版本。

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

  • #24456:BUG:清理警告[跳过azp][跳过圆圈][跳过travis][跳过...

  • #24460 : 维护:升级到旋转 0.5

  • #24495:BUG:已删除,使用.asv devasv run

  • #24496:BUG:修复由于原地自动生成未更改而导致的介子构建失败...

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

  • #24522:BUG:使用 git_hash 的默认分配[跳过 ci]

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

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

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

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

  • #24544:维护:协调 fortranobject

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

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

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

  • #24591:BLD:修复_umath_linalg依赖关系

  • #24594:维护:停止在 ppc64le 上进行测试。

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

  • #24606:BUG:将 Cythonbinding指令更改为“False”。

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

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

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

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

  • #24617:维护:修复fromnumeric.pyi

  • #24622:BUG,ENH:修复iso_c_binding类型地图并修复bind(c)......

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

  • #24630:TYP:显式声明dtypegeneric可散列

  • #24637:ENH:使用重构打字“显示”测试typing.assert_type

  • #24638:维护:将操作/结帐从 3.6.0 提升到 4.0.0

  • #24647:ENH:meson后端f2py

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

  • #24653:REL:准备 NumPy 1.26.0rc1 版本。

  • #24659:BLD:允许指定长双精度格式以避免运行时......

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

  • #24675 : BLD:使用 MSVC 在 Windows 上为 32 位 Python 构建轮子

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

  • #24701:BUG:修复 f2py 中复杂值的数据 stmt 处理

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

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