ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

NumPy 1.24.2 发布说明详解:17 项修复背后的维护版改动与源码实现剖析

NumPy 1.24.2 发布说明详解:17 项修复背后的维护版改动与源码实现剖析 NumPy 1.24.2 发布说明详解17 项修复背后的维护版改动与源码实现剖析【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址: https://gitcode.com/gh_mirrors/nu/numpyNumPy 1.24.2 是一个纯粹的维护性maintenance版本其使命是修复 1.24.1 发布后暴露的缺陷与回归问题。本篇以官方发布说明为骨架逐条解读该版本合并的全部 17 个 Pull Request并结合当前仓库中可查证的源码实现说明这些修复在np.loadtxt引号字段解析、只读数组fill语义、跨编译器对齐宏、ARM64/PowerPC SIMD 数学函数等处的具体落点帮助你在升级 NumPy 时准确判断每个修复与你代码的关联。版本定位与运行环境1.24.2 官方声明它是一个 maintenance release只修复 1.24.1 之后发现的 bug 和回归不引入任何新功能。该版本支持的 Python 版本为3.8–3.11即它处于 NumPy 最后一个支持 Python 3.8 的 1.x 维护线末端1.26 为 1.x 最终版。对于仍运行在 Python 3.8/3.11 早期环境、且不希望跨越 2.0 破坏性变更的用户1.24.2 是 1.24 系列中最安全的落点。贡献者本版本共有14 人贡献名字后带的是首次向 NumPy 提交补丁的贡献者贡献者首次贡献Bas van BeekCharles HarrisKhem RajMark HarfoucheMatti PicusPanagiotis ZestanakisPeter HawkinsPradipta GhoshRoss BarnowskiSayed AdelSebastian BergSyam Gaddedmbelovpkubaj全部 17 个已合并 PR 一览按发布说明本版本共合并 17 个 PR。下表按类别BUG / SIMD / BLD / MAINT / DOC / TST / TYP完整列出后文对关键条目逐一展开编号类别摘要22965MAINT将 CI 中的 python 3.11-dev 更新到 3.1122966DOC移除一处悬空的弃用警告文档22967ENH在 FreeBSD/powerpc64* 上检测 CPU 特性22968BUGnp.loadtxt无法读取带引号字段分隔的文本文件22969TST添加 fixture 避免测试随机化顺序引发的问题22970BUG修复fill违反只读标志的问题#2295922971MAINT为缺失 scalar 的 AttributeError 补充诊断信息22972MAINT将 scipy arm64 辅助导出移入主模块22976BUG, SIMD修复 arm64/clang 下 sin/cos 的伪 invalid 异常22989BUG确保 sin、cos、arctan2 的循环顺序正确23030DOC为strict参数补充 versionadded 信息23031BUG大多数编译器上使用_Alignof替代offsetof()23147BUG修复npvy__trunc_s32_f32PowerPC VXE23148BUG修复整数/浮点 scalar 提升promotion23149BUG补充缺失的type_traits头文件23150TYP, MAINT为npt.ArrayLike补充缺失的显式Any参数23161BLDwheel 构建中移除npy_nextafter的重复定义关键修复逐条剖析1.np.loadtxt带引号字段的文本解析#22968这是本版本对用户影响最直接的修复此前np.loadtxt在处理“引号包裹、且引号内含有分隔符或注释符”的文本时无法正确加载。修复后的行为可通过quotechar参数完整表达当前仓库 loadtxt 文档与实现 中保留了三类规范用法引号内的分隔符与注释符被忽略quotechar界定引号区间 from io import StringIO s StringIO(alpha, #42, 10.0\nbeta, #64, 2.0\n) dtype np.dtype([(label, U12), (value, float)]) np.loadtxt(s, dtypedtype, delimiter,, quotechar) array([(alpha, #42, 10.), (beta, #64, 2.)], dtype[(label, U12), (value, f8)])引号字段之间允许出现多个空白字符delimiterNone时空格作分隔 s StringIO(alpha, #42 10.0\nbeta, #64 2.0\n) np.loadtxt(s, dtypedtype, delimiterNone, quotechar) array([(alpha, #42, 10.), (beta, #64, 2.)], dtype[(label, U12), (value, f8)])连续两个引号字符转义为单个引号 s StringIO(Hello, my name is Monty!) np.loadtxt(s, dtypenp.str_, delimiter,, quotechar) array(Hello, my name is Monty!, dtypeU26)上述示例同时出现在 loadtxt 的 docstring 中也是回归测试的保护对象如果你的数据文件中存在, #这类“字段内包含分隔符”的情况升级到 1.24.2 后应重新验证读取结果。2.fill不再违反只读标志#22970上游 issue #22959对flags.writeable False的只读数组调用fill本应抛出写保护异常而非静默改写底层缓冲。该修复落在 C 层的数组方法实现中当前仓库 methods.c 的array_fill入口 负责校验写权限后再执行填充。对用户的意义是arr.fill(0)在只读视图如共享内存映射、as_strided只读包装上会按预期失败不再产生数据被意外修改的隐患。3. 用_Alignof替代offsetof()#23031offsetof()依赖结构体首成员技巧来推算类型对齐而 C11 的_Alignof是语义上更直接、对编译器更友好的方式。当前仓库中保留着完整的历史兼容逻辑见 common.h 中的NPY_ALIGNOF宏/* * GCC releases before GCC 4.9 had a bug in _Alignof. See GCC bug 52023 * clang versions 8.0.0 have the same bug. */ #ifdef __cplusplus #define NPY_ALIGNOF(type) alignof(type) #elif (!defined __STDC_VERSION__ || __STDC_VERSION__ 201112 \ || (defined __GNUC__ __GNUC__ 4 (__GNUC_MINOR__ 9) \ !defined __clang__) \ || (defined __clang__ __clang_major__ 8)) # define NPY_ALIGNOF(type) offsetof(struct {char c; type v;}, v) #else # define NPY_ALIGNOF(type) _Alignof(type) #endif这段代码正是 #23031 的遗留成果只有在老 GCC4.9GCC bug 52023和老 clang8上才退回offsetof结构体技巧其余“大多数编译器”一律走_Alignof。从源码结构看该宏被用于对齐检查路径影响的是构建期正确性而非运行时行为属于典型的编译告警/边界语义修复。4. SIMD 数学函数三连修#22976、#22989、#23147本版本集中处理了三处 SIMD 路径的数值问题arm64 clang 下 sin/cos 的伪 invalid 异常#22976特定输入会触发本不该出现的 FPU invalid 状态spurious invalid exception导致浮点异常检查环境下的假报错sin、cos、arctan2 的循环顺序#22989保证各 SIMD 循环按正确顺序发射修复与执行顺序相关的回归PowerPC VXE 下npvy__trunc_s32_f32#23147VXE 扩展路径上 f32→s32 截断指令行为错误。该函数在当前仓库 conversion.h 中可见完整的多后端实现包括 VXE2、VXE、IBM VSXvec_cts以及 clang 回退分支——#23147 修复的正是NPY_HAVE_VXE分支的打包/截断组合逻辑。从源码结构看这三处修复都位于umath与 SIMD 辅助层的热点路径如 loops_trigonometric.dispatch.cpp如果你在生产环境开启了浮点异常信号seterr为raise或运行在 PowerPC/arm64 平台升级 1.24.2 是必要的。5. 整数/浮点 scalar 提升修复#23148该修复处理整数与浮点 scalar 参与运算时的提升promotion错误1.25 起 NumPy 启用了 NEP 50 的弱提升weak promotion规则1.24.x 维护线中出现的提升回归在此被回正。对用户的直接影响是int标量与float数组/标量运算后的结果 dtype 符合预期不会再出现意外的整型结果或精度截断。6. 构建与平台适配修复#22967ENHFreeBSD 与 powerpc64/powerpc64le 平台新增 CPU 特性检测使发行版构建能正确启用/降级 SIMD 特性#23149补充缺失的type_traits头文件修复部分 C 标准库如 libstdc 严格模式下的编译失败#23161wheel 构建中移除npy_nextafter的重复定义消除符号重复告警#22965CI 中 python 3.11-dev 正式更名为 3.11#22972将 scipy arm64 辅助导出移入主模块理顺 wheel 依赖边界。7. 文档与类型标注修缮#23030为strict参数补充 versionadded 说明该参数随 1.24.0 的np.clip严格模式引入此前文档未标注版本#23150为类型存根中的npt.ArrayLike补充显式Any参数改善 mypy 静态检查#22971访问缺失 scalar 时AttributeError携带更明确的诊断信息#22966移除文档中一处已无对应的弃用警告描述#22969新增测试 fixture规避测试随机化顺序引入的偶发失败属于测试基建加固。升级建议与影响面判断综合发布说明可以给出明确的升级判断无 API 变更17 个 PR 中没有一个是破坏性接口改动pip install numpy1.24.2对现有代码是安全替换必须升级的场景使用np.loadtxt读取含引号字段的数据、依赖只读数组fill的写保护语义、在 arm64clang 工具链或 PowerPCVXE上运行三角函数/截断运算、以及开启浮点异常信号的数值代码环境约束Python 3.8–3.11 范围内可用。当前仓库已演进到numpy/_core新布局对应 2.x 系列但本文明析的所有修复主题——quotechar解析、NPY_ALIGNOF宏、SIMD 截断后端、array_fill权限校验——在当前代码中均可按文中路径复核便于你顺藤摸瓜阅读实现。参考文档官方发布说明1.24.2 发布说明相邻版本对照1.24.1 说明、1.24.3 说明【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址: https://gitcode.com/gh_mirrors/nu/numpy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表