summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
Diffstat (limited to 'numpy')
-rw-r--r--numpy/core/src/private/npy_import.h33
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