NEP 3 — 清理 numpy.core 的数学配置#
- 作者:
David Cournapeau
- 联系方式:
- 日期:
2008-09-04
- 状态:
已延迟
执行摘要#
在构建 numpy.core 之前,我们使用一些配置测试来收集有关可用数学函数的信息。多年来,配置变得越来越复杂,以至于难以轻松地支持新平台。
本提案的目标是清理数学能力的配置,以便于维护。
当前问题#
当前,数学配置主要测试一些数学函数,并相应地配置 numpy。但是,当前系统并非独立地测试每个所需的函数,而是更多地作为解决特定平台奇特问题的变通方法开发的,使用了平台隐式知识。这违背了仅测试功能的正常理念,即 autoconf 的理念,该理念指明了可移植性(至少在 Unix 上)的道路 [1] 这会导致问题,因为在现有平台上修改或添加配置会破坏隐式假设,而没有明确的解决方案。
例如,在 Windows 上,当使用 mingw 构建 numpy 时,最好强制执行配置 sizeof(long double) == sizeof(double),因为 mingw 使用 MS 运行时,而 MS 运行时不支持 long double。不幸的是,这样做会破坏 mingw 数学函数检测,因为存在 mingw 配置 sizeof(long double) != sizeof(double) 的隐式假设。
另一个示例是仅使用一个函数来测试函数集:如果找到 expf,则假定所有基本浮点函数都可用。相反,应独立测试每个函数(expf、sinf 等)。
需求#
- 我们有两个严格的要求
它不应破坏任何当前支持的平台
它不应使配置速度大大降低(1-2 秒是可以接受的)
提案#
我们建议打破任何隐式假设,并像 autoconf 通常那样独立地测试每个数学函数。由于测试大量函数可能非常耗时,因此我们将使用类似于 autoconf 中 AC_CHECK_FUNCS_ONCE 的方案,即一次测试一组函数,并且仅在出现问题时才进行每个函数的检查。当第一次检查有效时,它应该与当前方案一样快,除了显式检查了假设(例如,HAVE_LONGDOUBLE_FUNCS 隐含的所有函数将一起检查)。
问题#
静态与非静态?对于基本函数,我们应该将它们定义为静态还是非静态?
许可证#
本文档已置于公共领域。
[1]: Autobook 这里