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

作者:

David Cournapeau

联系方式:

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

日期:

2008-09-04

状态:

Deferred

执行摘要#

在构建 numpy.core 之前,我们会进行一些配置测试以收集有关可用数学函数的信息。多年来,配置变得越来越复杂,以至于难以轻松支持新平台。

本提案的目标是清理数学功能配置,以便于维护。

当前问题#

目前,数学配置主要测试一些数学函数,并据此配置 numpy。但当前的系统并没有独立测试每个所需函数,而是更多地被用作解决特定平台奇特之处的权宜之计,利用了平台隐含的知识。这与只测试功能的能力的正常理念相悖,而 autoconf 的理念(至少在 Unix 上)已证明了可移植性的道路[1]。这会导致问题,因为修改或添加现有平台的配置会打破隐含的假设,而没有明确的解决方案。

例如,在 Windows 上,当 numpy 使用 mingw 构建时,最好强制配置 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 在这里