From 00edb2b6a96b7189be91d16cb84981a60c5961e8 Mon Sep 17 00:00:00 2001 From: Yash Mehrotra Date: Tue, 29 Sep 2015 01:45:45 +0530 Subject: MAINT: Deprecated PyObject_Compare in favor of PyObject_RichCompareBool. Fixes #6265 and #6229 --- numpy/core/src/umath/loops.c.src | 49 ++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 24 deletions(-) (limited to 'numpy/core/src/umath/loops.c.src') diff --git a/numpy/core/src/umath/loops.c.src b/numpy/core/src/umath/loops.c.src index 36046d9b8..04a3fd0c8 100644 --- a/numpy/core/src/umath/loops.c.src +++ b/numpy/core/src/umath/loops.c.src @@ -2618,41 +2618,42 @@ OBJECT_@kind@(char **args, npy_intp *dimensions, npy_intp *steps, void *NPY_UNUS NPY_NO_EXPORT void OBJECT_sign(char **args, npy_intp *dimensions, npy_intp *steps, void *NPY_UNUSED(func)) { -#if defined(NPY_PY3K) PyObject *zero = PyLong_FromLong(0); + UNARY_LOOP { PyObject *in1 = *(PyObject **)ip1; PyObject **out = (PyObject **)op1; + PyObject *ret = NULL; int v; - PyObject *ret; - if (PyObject_Cmp(in1 ? in1 : Py_None, zero, &v) == -1) { - return; + + if (in1 == NULL) { + in1 = Py_None; } - ret = PyLong_FromLong(v); - if (PyErr_Occurred()) { - Py_DECREF(zero); - return; + + if ((v = PyObject_RichCompareBool(in1, zero, Py_LT)) == 1) { + ret = PyLong_FromLong(-1); } - Py_XDECREF(*out); - *out = ret; - } - Py_DECREF(zero); -#else - PyObject *zero = PyInt_FromLong(0); - UNARY_LOOP { - PyObject *in1 = *(PyObject **)ip1; - PyObject **out = (PyObject **)op1; - PyObject *ret = PyInt_FromLong( - PyObject_Compare(in1 ? in1 : Py_None, zero)); - if (PyErr_Occurred()) { - Py_DECREF(zero); - return; + else if (v == 0 && + (v = PyObject_RichCompareBool(in1, zero, Py_GT)) == 1) { + ret = PyLong_FromLong(1); + } + else if (v == 0 && + (v = PyObject_RichCompareBool(in1, zero, Py_EQ)) == 1) { + ret = PyLong_FromLong(0); + } + else if (v == 0) { + /* in1 is NaN */ + PyErr_SetString(PyExc_TypeError, + "unorderable types for comparison"); + } + + if (ret == NULL) { + break; } Py_XDECREF(*out); *out = ret; } - Py_DECREF(zero); -#endif + Py_XDECREF(zero); } /* -- cgit v1.2.3