diff options
Diffstat (limited to 'numpy')
| -rw-r--r-- | numpy/core/src/private/npy_import.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/numpy/core/src/private/npy_import.h b/numpy/core/src/private/npy_import.h new file mode 100644 index 000000000..e618e121e --- /dev/null +++ b/numpy/core/src/private/npy_import.h @@ -0,0 +1,33 @@ +#ifndef NPY_IMPORT_H +#define NPY_IMPORT_H + +#include <Python.h> +#include <assert.h> + +/*! \brief Fetch and cache Python function. + * + * Import a Python function and cache it for use. The function checks if + * cache is NULL, and if not NULL imports the Python function specified by + * \a module and \a function, increments its reference count, and stores + * the result in \a cache. Usually \a cache will be a static variable and + * should be initialized to NULL. On error \a cache will contain NULL on + * exit, + * + * @param module Absolute module name. + * @param function Function name. + * @param cache Storage location for imported function. + */ +NPY_INLINE void +npy_cache_pyfunc(const char *module, const char *function, PyObject **cache) +{ + if (*cache == NULL) { + PyObject *mod = PyImport_ImportModule(module); + + if (mod != NULL) { + *cache = PyObject_GetAttrString(mod, function); + Py_DECREF(mod); + } + } +} + +#endif |
