numpy中的max函数在底层C代码中是如何实现的

使用了一段时间的numpy之后,想阅读以下numpy的c代码实现。在看到min, max, sum时,想看看如何根据axis参数去进行底层的实现。

如果没有理解错误的话:这几个函数入口在methods.c中的array_methods结构体中定义:

 {"max",
        (PyCFunction)array_max,
        METH_VARARGS | METH_KEYWORDS, NULL},
    {"mean",
        (PyCFunction)array_mean,
        METH_VARARGS | METH_KEYWORDS, NULL},
    {"min",
        (PyCFunction)array_min,
        METH_VARARGS | METH_KEYWORDS, NULL},

但是array_max函数实现是:

static PyObject *
array_max(PyArrayObject *self, PyObject *args, PyObject *kwds)
{
    NPY_FORWARD_NDARRAY_METHOD("_amax");
}

我不太明白这个NPY_FORWARD_NDARRAY_METHOD是如何找到对应callable来执行max函数的?

#define NPY_FORWARD_NDARRAY_METHOD(name) \
        static PyObject *callable = NULL; \
        npy_cache_import("numpy.core._methods", name, &callable); \
        if (callable == NULL) { \
            return NULL; \
        } \
        return forward_ndarray_method(self, args, kwds, callable)