summaryrefslogtreecommitdiff
path: root/numpy/core/src/umath/loops.c.src
diff options
context:
space:
mode:
authorYash Mehrotra <yashmehrotra95@gmail.com>2015-09-29 01:45:45 +0530
committerYash Mehrotra <yashmehrotra95@gmail.com>2015-09-29 01:45:45 +0530
commit00edb2b6a96b7189be91d16cb84981a60c5961e8 (patch)
treeee2237c8c7c8345e2119f6e08312904d22c49aac /numpy/core/src/umath/loops.c.src
parent7001d613aaa445ff650a273ec3d4db6787daf2e3 (diff)
downloadpython-numpy-00edb2b6a96b7189be91d16cb84981a60c5961e8.tar.gz
python-numpy-00edb2b6a96b7189be91d16cb84981a60c5961e8.tar.bz2
python-numpy-00edb2b6a96b7189be91d16cb84981a60c5961e8.zip
MAINT: Deprecated PyObject_Compare in favor of PyObject_RichCompareBool. Fixes #6265 and #6229
Diffstat (limited to 'numpy/core/src/umath/loops.c.src')
-rw-r--r--numpy/core/src/umath/loops.c.src49
1 files changed, 25 insertions, 24 deletions
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);
}
/*