Cleaning the math configuration of numpy.core

作者:大卫Cournapeau
联系:david @ ar 媒体 kyoto-u ac jp
日期:2008-09-04

Executive summary

在构建numpy.core之前,我们使用一些配置测试来收集一些关于可用数学函数的信息。多年来,配置变得复杂,到了难以支持新平台很容易。

此建议的目标是清除数学功能的配置,以便更轻松地进行维护。

Current problems

目前,数学配置主要测试一些数学函数,并相应地配置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,等...)。

Requirements

我们有两个强烈的要求:
  • 它不应该打破任何当前支持的平台
  • 它不应该使配置慢得多(1-2秒是可以接受的)

Proposal

我们建议打破任何隐含的假设,并且彼此独立地测试每个数学函数,如通常由autoconf所做的那样。由于测试大量函数可能很耗时,因此我们将在autoconf中使用类似于AC_CHECK_FUNCS_ONCE的方案,即一次测试一组函数,并且只有在它断开的情况下,才执行每个函数检查。当第一检查工作时,它应该与当前方案一样快,除了明确地检查假设(例如,HAVE_LONGDOUBLE_FUNCS隐含的所有函数将被一起检查)。

Issues

静态vs非静态?对于基本功能,我们应该定义它们是静态的还是静态的?

License

此文档已放在公共领域。

[1]:Autobook here