NEP 3 — 清理 numpy.core 的数学配置#

作者:

David Cournapeau

联系方式:

david@ar.media.kyoto-u.ac.jp

日期:

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 这里