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 在此