NumPy 1.22.1 发布说明深度解读维护版修复了什么、为什么重要【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址: https://gitcode.com/gh_mirrors/nu/numpyNumPy 1.22.1 是一个典型的“维护版maintenance release”它不引入新特性而是修复 1.22.0 发布后被上游用户如 SciPy、AstroPy 等和类型检查工具发现的缺陷。本文基于仓库中的发布说明 1.22.1-notes.rst 与对应变更日志 1.22.1-changelog.rst完整继承其中的关键修复清单、Python 版本支持范围、贡献者与全部 20 个合并的 Pull Request并结合当前仓库中的源码实现逐项解析修复点落在代码的哪一层、对下游用户意味着什么帮助读者判断该版本对科学计算栈的兼容意义。发布定位1.22.1 是什么性质的版本1.22.1-notes.rst 开篇即给出版本定义NumPy 1.22.1 is a maintenance release that fixes bugs discovered after the 1.22.0 release.关键信息有三点纯维护性质不改变公开 API 语义目标是让 1.22.0 之后的下游生态恢复稳定三类标志性修复原文列出的 Notable fixesFix f2PY docstring problems (SciPy)—— 修复 f2py 生成的文档字符串问题直接影响依赖 f2py 包装 Fortran 代码的 SciPyFix reduction type problems (AstroPy)—— 修复归约reduction的类型推断问题直接影响做大量数据规约的 AstroPyFix various typing bugs—— 修复一批类型标注stub错误改善 mypy 等静态检查体验Python 版本支持范围该版本支持Python 3.8–3.10。这是选型时的硬约束——如果你的运行环境是 Python 3.11 或 3.7则不在该版本的官方支持矩阵内1.22 系列在 NumPy 中属于最后一个支持 Python 3.8 的 1.x 分支线之一后续版本逐步收紧支持范围。变更全览20 个合并的 Pull Request1.22.1-notes.rst 与 1.22.1-changelog.rst 记录了本次合并的全部 20 个 PR。按类型归类如下便于检索定位类别PR摘要构建/维护#20702MAINT, DOC: 1.22.0 发布后的收尾修复构建/维护#20795MAINT: setuptools 版本过新时抛出 RuntimeError构建/维护#20714BUG: 恢复 vc141 支持归约/计算核心#20757BUG: 放宽归约中的 dtype 同一性检查Relax dtype identity check in reductions归约/计算核心#20805BUG: 修复 reduce 类操作必须始终遵守out参数归约/计算核心#20724BUG: 修复多维参数下的数组维数求解器array dimensions solver归约/计算核心#20798PERF: 优化对“值域在 [0,1] 内”的数组检查归约/计算核心#20719 类—见下文 array_api 系列类型标注#20725TYP: 将__array_namespace__的类型标注改为ModuleType类型标注#20726TYP, MAINT: 允许ndindex接受整数元组类型标注#20763TYP: 允许时间操作函数接受date与timedelta类型标注#20768TYP: 放宽ndarray.__array_finalize__的类型array_api#20806BUG:array_api.argsort(descendingTrue)尊重相对顺序稳定性array_api#20807BUG:array_api中 pow 相关函数允许整数输入array_api#20819BUG:array_api集合运算中逆索引返回正确形状文档#20703 / #20704 / #20797 / #20814 / #20815文档与许可证年份等修缮文档/构建#20796BUG, DOC: 修复 SciPy 文档构建警告对应 f2py docstring 问题共14 位贡献者参与了本次发布其中 Omid Rajaei 为首次贡献名单以 1.22.1-notes.rst 中 Contributors 一节为准。修复点一放宽归约中的 dtype 同一性检查AstroPy 问题Fix reduction type problems (AstroPy)对应 PR #20757BUG: Relax dtype identity check in reductions。归约是 NumPy 的核心路径之一np.sum、np.prod、np.max这类操作最终都会走到 C 层。在当前仓库中归约的分发与参数解析逻辑位于 multiarray 的 C 源码中参数解析入口之一是 npy_argparse.c其中存在按 dtype “同一性”判断的快速通道并有慢速回退逻辑见npy_argparse.c中“Slow fallback, if identity checks failed for some reason”注释。问题背景可以这样理解归约时NumPy 会根据输入 dtype、out参数 dtype、以及是否显式指定dtype来决定内部累加类型例如整型小类型需要提升到平台宽整型以避免溢出。1.22.0 中的检查过于严格——在某些“输入 dtype 与累加 dtype 不严格同一但完全兼容”的场景典型如子类型化 dtype、或带自定义元数据的 dtype误报类型冲突导致 AstroPy 中常见的聚合计算抛出异常或结果类型不符合预期。1.22.1 的修复将这一检查“放宽”为更合理的兼容性判定。对下游的实际意义如果你们在 AstroPy、pandas 或自研归约路径中依赖np.sum(..., dtype...)或out组合1.22.0 上出现过的类型报错在 1.22.1 中已被消除。归约测试矩阵可参见 numpy/_core/tests 中的归约相关用例。修复点二reduce 类操作始终遵守out参数PR #20805BUG: Fix that reduce-likes honor out always修复的是另一处归约语义缺陷reduce系列操作ufunc 的reduce/reduceat及其在 Python 层的封装在某些分支上忽略了out参数导致结果没有被写入用户指定的输出数组。归约的 Python 层封装位于 fromnumeric.py其reduce分发链最终调用 C 层 ufunc 的 reduce 实现见 loops.c.src 中的 ufunc 循环实现。该修复保证了a.reduce(..., outbuf)与a.reduce(...).copyto(buf)语义一致与where、axis等参数组合时out依然生效。这是典型的“API 契约修复”公开文档承诺的行为out必须被写入在特定路径上被违反对使用预分配缓冲区的性能敏感代码影响直接。修复点三多维参数下的数组维数求解器PR #20724BUG: Fix array dimensions solver for multidimensional arguments修复了 C 层在处理多维参数多个数组同时参与运算如逐元素运算a * b c中需要统一广播后的维数时的维数求解逻辑。NumPy 的广播维数求解发生在 C 层numpy/_core/src/common下的广播与维数求解代码当参与运算的数组维度组合较复杂时1.22.0 的求解器会算出错误的形状。该类修复属于广播/维数推导的核心基础设施修复虽然不体现在任何单个 API 上但会改变大量复合表达式np.add(a, b) c、np.multiply链等在多维输入下的正确性属于必须升级到 1.22.1 的理由之一。修复点四f2py 文档字符串问题SciPy 问题Fix f2PY docstring problems (SciPy)与 PR #20796BUG, DOC: Fixes SciPy docs build warnings相关f2py 从 Fortran 源解析出的 docstring 在部分场景下会破坏 Sphinx 文档构建产生大量警告甚至构建失败SciPy 作为 f2py 的主要下游首当其冲。f2py 的解析与规则实现位于 crackfortran.py 与 rules.py测试用例在 numpy/f2py/tests。对构建扩展包的用户修复后的行为是用 f2py 生成的包装模块不再污染 Sphinx 构建日志这对把 Fortran 代码打包发布如 scipy 各子模块的 CI 很重要。修复点五一批类型标注typing修复1.22 系列是 NumPy 2.0 类型标注大规模重写见 nep-0041-improved-dtype-support.rst之前的过渡期stub 质量直接影响 mypy 用户的体验。1.22.1 合并了 4 个 TYP 类 PR#20725将__array_namespace__的类型标注改为ModuleType。该属性是 Array API 标准协议的一部分语义上返回的是“命名空间模块”标注为ModuleType才正确#20726允许ndindex接受整数元组。ndindex定义于 shape_base.py其用途是生成类似np.ndindex(3, 4)的迭代索引器此前 stub 只标注接受独立的整型变长参数np.ndindex((2, 3))这种元组形式被静态检查拒绝1.22.1 后两类用法都能通过类型检查#20763允许时间操作函数np.datetime_as_string、np.timedelta_to_timedelta64等位于 fromnumeric.py 与 datetime 工具模块接受datetime.date与datetime.timedelta实例#20768放宽ndarray.__array_finalize__的类型标注使子类覆写签名参数类型与父类不完全一致不再触发 mypy 错误。标注本体位于 numpy/_core/init.pyi 等.pyi文件回归测试在 numpy/typing/tests含大量.pyi与 mypy 用例。修复点六Array API 原型array_api三处缺陷NumPy 在这一时期提供numpy.array_api实验性子模块对应 nep-0047-array-api-standard.rst 的落地过程。1.22.1 修复了其中三个真实缺陷#20806array_api.argsort(descendingTrue)不尊重相对顺序稳定性。descending语义后来被正式采纳进 NumPy 主 API当前仓库中np.argsort/np.sort均已支持descending与stable关键字见 fromnumeric.py 中sort、argpartition的签名与 docstring在 1.22.1 时点该修复保证了 array_api 路径下降序排序的稳定性与标准一致#20807array_api中 pow 相关函数pow/__pow__允许整数输入。Array API 标准对浮点指数函数的输入类型有严格规定NumPy 主 API 的宽松行为一度被 array_api 层误判为非法输入#20819array_api集合运算unique_inverse等返回的逆索引形状不正确——unique_inverse的逆索引应保留输入数组的原始形状便于x_reconstructed unique_values[inverse]的往返还原修复前在某些轴上形状被错误展平。修复点七构建与打包环境的两处加固#20714BUG: Restore vc141 support恢复对 MSVC v141Visual Studio 2019 早期工具链的支持。NumPy 的 C 扩展对编译器版本敏感1.22.0 的构建脚本在 v141 上回归修复保证仍在旧版 VS 工具链上编译的发行版/用户可自行构建#20795MAINT: Raise RuntimeError if setuptools version is too recent在 setuptools 版本过新导致构建产物异常时显式抛出RuntimeError而非静默失败。NumPy 1.x 系列使用 setuptools 构建当前仓库已切换到 meson见 building_with_meson.md 与 meson.options因此这条加固主要针对 1.22 时代用 setuptools 构建的 CI 与二次打包者。修复点八[0,1] 有界数组检查的性能优化PR #20798PERF: Optimize array check for bounded 0,1 values优化的是np.all(a 0) and np.all(a 1)这类“判断数组元素是否全部落在 [0,1] 区间”的模式原先需要两次独立的 min/max 归约并做 Python 层布尔组合修复后以更快的路径完成有界性检查。这类检查常见于概率数组校验、图像归一化验证、以及clip前置判断。作为 PERF 类修复它不改变结果只降低热路径开销。文档与许可证修缮其余 PR 属于文档维护均记录在 1.22.1-notes.rst#20703文档改用 PNG 替代 SVG 以兼容某些渲染器、#20704用户指南首页死链、#20797更正发布说明中 OpenBLAS 版本号——1.22.0 捆绑 OpenBLAS 3.19.0、#20814主页文案误写为 pandas 的勘误、#20815许可证版权年份更新为 2022。这些改动不影响运行时行为但对阅读发布说明与打包元数据的用户更准确。给使用者的升级建议仍在 1.22.0 且依赖 SciPy/AstroPy升级到 1.22.1 是低风险操作——它不改变 API只消除归约类型误报、out违约与多维广播求解错误Python 版本对齐确认解释器在 3.8–3.10 区间否则 1.22.1 不在官方支持矩阵内mypy 用户该版本的 4 个 TYP 修复会直接减少ndindex、__array_finalize__、时间函数与__array_namespace__上的误报array_api 实验用户若使用了numpy.array_api的argsort/unique_inverse/pow1.22.1 是行为正确性修复建议升级二次打包者若 CI 使用 VS2019 旧工具链v141或新版 setuptools1.22.1 的 #20714/#20795 能避免构建回归。在仓库中进一步核实的路径发布说明与 PR 全列表doc/source/release/1.22.1-notes.rst、doc/changelog/1.22.1-changelog.rst归约/广播/参数解析 C 层npy_argparse.c、numpy/_core/src/multiarray、loops.c.src归约 Python 封装fromnumeric.py、function_base.py类型标注与测试numpy/_core/init.pyi、numpy/typing/testsf2py 解析规则与测试numpy/f2py/crackfortran.py、numpy/f2py/tests相关 NEP 背景nep-0047-array-api-standard.rst、nep-0041-improved-dtype-support.rst说明本文引用的修复条目与版本号均直接取自上述发布说明文件对 C 层实现位置的描述基于当前仓库源码结构当前仓库为 2.x 代码树1.22 时代的同位置代码目录名可能略有差异如numpy/core→numpy/_core具体行为以 1.22.1 标签下的源码为准。【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址: https://gitcode.com/gh_mirrors/nu/numpy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
