summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Wieser <wieser.eric@gmail.com>2017-03-30 20:04:41 +0100
committerEric Wieser <wieser.eric@gmail.com>2017-04-06 11:21:34 +0100
commitde0f5dcf501b29b173911b72c6e1488c4e573935 (patch)
treed10813145b8968d5384038df46af408b4521bc9b
parentaa746c68d092022df0952e43b29ca4abe092d03b (diff)
downloadnumpy-de0f5dcf501b29b173911b72c6e1488c4e573935.tar.gz
BUG: Use the same default ufunc name in all places
Previously the ufunc methods would use "(unknown)", but the basic __call__ would use "<unknown ufunc>"
-rw-r--r--numpy/core/src/umath/ufunc_object.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/numpy/core/src/umath/ufunc_object.c b/numpy/core/src/umath/ufunc_object.c
index 22a73e6ba..33d65b5bc 100644
--- a/numpy/core/src/umath/ufunc_object.c
+++ b/numpy/core/src/umath/ufunc_object.c
@@ -757,6 +757,15 @@ _set_out_array(PyObject *obj, PyArrayObject **store)
/********* GENERIC UFUNC USING ITERATOR *********/
/*
+ * Produce a name for the ufunc, if one is not already set
+ * This is used in the PyUFunc_handlefperr machinery, and in error messages
+ */
+static const char*
+_get_ufunc_name(PyUFuncObject *ufunc) {
+ return ufunc->name ? ufunc->name : "<unnamed ufunc>";
+}
+
+/*
* Parses the positional and keyword arguments for a generic ufunc call.
*
* Note that if an error is returned, the caller must free the
@@ -779,14 +788,12 @@ get_ufunc_arguments(PyUFuncObject *ufunc,
int nout = ufunc->nout;
PyObject *obj, *context;
PyObject *str_key_obj = NULL;
- const char *ufunc_name;
+ const char *ufunc_name = _get_ufunc_name(ufunc);
int type_num;
int any_flexible = 0, any_object = 0, any_flexible_userloops = 0;
int has_sig = 0;
- ufunc_name = ufunc->name ? ufunc->name : "<unnamed ufunc>";
-
*out_extobj = NULL;
*out_typetup = NULL;
if (out_wheremask != NULL) {
@@ -2037,7 +2044,7 @@ PyUFunc_GeneralizedFunction(PyUFuncObject *ufunc,
nout = ufunc->nout;
nop = nin + nout;
- ufunc_name = ufunc->name ? ufunc->name : "<unnamed ufunc>";
+ ufunc_name = _get_ufunc_name(ufunc);
NPY_UF_DBG_PRINT1("\nEvaluating ufunc %s\n", ufunc_name);
@@ -2598,7 +2605,7 @@ PyUFunc_GenericFunction(PyUFuncObject *ufunc,
nout = ufunc->nout;
nop = nin + nout;
- ufunc_name = ufunc->name ? ufunc->name : "<unnamed ufunc>";
+ ufunc_name = _get_ufunc_name(ufunc);
NPY_UF_DBG_PRINT1("\nEvaluating ufunc %s\n", ufunc_name);
@@ -2838,7 +2845,7 @@ reduce_type_resolver(PyUFuncObject *ufunc, PyArrayObject *arr,
int i, retcode;
PyArrayObject *op[3] = {arr, arr, NULL};
PyArray_Descr *dtypes[3] = {NULL, NULL, NULL};
- const char *ufunc_name = ufunc->name ? ufunc->name : "(unknown)";
+ const char *ufunc_name = _get_ufunc_name(ufunc);
PyObject *type_tup = NULL;
*out_dtype = NULL;
@@ -3027,7 +3034,7 @@ PyUFunc_Reduce(PyUFuncObject *ufunc, PyArrayObject *arr, PyArrayObject *out,
PyArray_Descr *dtype;
PyArrayObject *result;
PyArray_AssignReduceIdentityFunc *assign_identity = NULL;
- const char *ufunc_name = ufunc->name ? ufunc->name : "(unknown)";
+ const char *ufunc_name = _get_ufunc_name(ufunc);
/* These parameters come from a TLS global */
int buffersize = 0, errormask = 0;
@@ -3135,7 +3142,7 @@ PyUFunc_Accumulate(PyUFuncObject *ufunc, PyArrayObject *arr, PyArrayObject *out,
PyUFuncGenericFunction innerloop = NULL;
void *innerloopdata = NULL;
- const char *ufunc_name = ufunc->name ? ufunc->name : "(unknown)";
+ const char *ufunc_name = _get_ufunc_name(ufunc);
/* These parameters come from extobj= or from a TLS global */
int buffersize = 0, errormask = 0;
@@ -3510,7 +3517,7 @@ PyUFunc_Reduceat(PyUFuncObject *ufunc, PyArrayObject *arr, PyArrayObject *ind,
PyUFuncGenericFunction innerloop = NULL;
void *innerloopdata = NULL;
- const char *ufunc_name = ufunc->name ? ufunc->name : "(unknown)";
+ const char *ufunc_name = _get_ufunc_name(ufunc);
char *opname = "reduceat";
/* These parameters come from extobj= or from a TLS global */