从 Cython 调用 PyArray_SearchSorted——3 或 4 个参数?

Calling PyArray_SearchSorted from Cython -- 3 or 4 arguments?

我正在尝试使用来自 Cython 的 NumPy 的 C API PyArray_SearchSorted

当像 PyArray_SearchSorted(values, point, NPY_SEARCHLEFT) 那样调用它时,我收到 GCC 错误:error: too few arguments to function call, expected 4, have 3.

另一方面,当我像 PyArray_SearchSorted(values, point, NPY_SEARCHLEFT, NULL) 那样调用它时,Cython 提供了一个错误:Call with wrong number of arguments (expected 3, got 4).

仔细观察,函数签名之间似乎存在差异,如 currently defined in NumPy and as defined in Cython's includes

我知道 searchsorted 的 sorter 参数仅出现在 NumPy 1.7.0 中,但向后兼容性不是与 NumPy C API 的保证之一吗?或者这只是一个 Cython 错误?

以防万一,我在 OS X 上使用来自 conda 的 Cython 0.21.1、NumPy 1.9.1 和 Python 2.7。

看起来这个变化发生在版本 1.6 和 1.7 之间,在这个提交中:

https://github.com/numpy/numpy/commit/313fe46046a7192cbdba2e679a104777301bc7cf#diff-70664f05e46e0882b0ebe8914bea85b4L1611

我相信这绝对是一个错误,但不幸的是,即使有很高的勤奋标准,这种特殊的错误也很容易潜入。需要像严格的 ABI 一致性测试套件之类的东西才能始终如一地捕获这些。