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 runtime,而 MS runtime 不支援 long double。不幸的是,這樣做會破壞 mingw 數學函數偵測,因為隱含的假設是 mingw 的組態 sizeof(long double) != sizeof(double)。
另一個例子是僅使用一個函數來測試一組函數:如果找到 expf,則假定所有基本 float 函數都可用。相反地,應該獨立測試每個函數(expf、sinf 等...)。
需求#
- 我們有兩個強烈的需求
不應破壞任何目前支援的平台
不應使組態變慢太多(1-2 秒是可以接受的)
提案#
我們建議打破任何隱含的假設,並像 autoconf 通常所做的那樣,彼此獨立地測試每個數學函數。由於測試大量函數可能會很耗時,因此我們將使用類似於 autoconf 中 AC_CHECK_FUNCS_ONCE 的方案,也就是一次測試一組函數,並且僅在它中斷的情況下才執行每個函數的檢查。當第一次檢查有效時,它應該與目前的方案一樣快,只是假設被明確檢查(例如,HAVE_LONGDOUBLE_FUNCS 隱含的所有函數將一起檢查)。
問題#
靜態 vs 非靜態?對於基本函數,我們應該將它們定義為靜態還是非靜態?
授權條款#
本文件已置於公共領域。
[1]: Autobook 在此