diff options
author | Travis Oliphant <oliphant@enthought.com> | 2006-12-02 04:11:31 +0000 |
---|---|---|
committer | Travis Oliphant <oliphant@enthought.com> | 2006-12-02 04:11:31 +0000 |
commit | bf677ca3b1b02c57da75a302a0f0b5704e3f525f (patch) | |
tree | 06947d88317a5c3787ce13bd4b6250b2341e19ca /numpy/core/src | |
parent | 574fe369112ded91f80502db73022a8fd79d3fe3 (diff) | |
download | numpy-bf677ca3b1b02c57da75a302a0f0b5704e3f525f.tar.gz |
Allow argsort and sort functions and argsort method to take None as an argument. Add order= keyword to sort and argsort functions.
Diffstat (limited to 'numpy/core/src')
-rw-r--r-- | numpy/core/src/arraymethods.c | 3 | ||||
-rw-r--r-- | numpy/core/src/arrayobject.c | 2 | ||||
-rw-r--r-- | numpy/core/src/multiarraymodule.c | 20 |
3 files changed, 11 insertions, 14 deletions
diff --git a/numpy/core/src/arraymethods.c b/numpy/core/src/arraymethods.c index d33fbc70e..fcde13fae 100644 --- a/numpy/core/src/arraymethods.c +++ b/numpy/core/src/arraymethods.c @@ -898,7 +898,8 @@ array_argsort(PyArrayObject *self, PyObject *args, PyObject *kwds) PyArray_Descr *newd, *saved=NULL; static char *kwlist[] = {"axis", "kind", "order", NULL}; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|iO&O", kwlist, &axis, + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O&O&O", kwlist, + PyArray_AxisConverter, &axis, PyArray_SortkindConverter, &which, &order)) return NULL; diff --git a/numpy/core/src/arrayobject.c b/numpy/core/src/arrayobject.c index ac85fcd23..bc662b7d1 100644 --- a/numpy/core/src/arrayobject.c +++ b/numpy/core/src/arrayobject.c @@ -8445,7 +8445,7 @@ PyArray_ObjectType(PyObject *op, int minimum_type) outtype = _array_find_type(op, intype, MAX_DIMS); ret = outtype->type_num; Py_DECREF(outtype); - Py_DECREF(intype); + Py_XDECREF(intype); return ret; } diff --git a/numpy/core/src/multiarraymodule.c b/numpy/core/src/multiarraymodule.c index 88b063888..8d213c84a 100644 --- a/numpy/core/src/multiarraymodule.c +++ b/numpy/core/src/multiarraymodule.c @@ -2388,7 +2388,7 @@ PyArray_Sort(PyArrayObject *op, int axis, NPY_SORTKIND which) n = op->nd; if ((n==0) || (PyArray_SIZE(op)==1)) return 0; - + if (axis < 0) axis += n; if ((axis < 0) || (axis >= n)) { PyErr_Format(PyExc_ValueError, @@ -2468,7 +2468,7 @@ argsort_static_compare(const void *ip1, const void *ip2) static PyObject * PyArray_ArgSort(PyArrayObject *op, int axis, NPY_SORTKIND which) { - PyArrayObject *ap=NULL, *ret=NULL, *store; + PyArrayObject *ap=NULL, *ret=NULL, *store, *op2; intp *ip; intp i, j, n, m, orign; int argsort_elsize; @@ -2485,25 +2485,21 @@ PyArray_ArgSort(PyArrayObject *op, int axis, NPY_SORTKIND which) *((intp *)ret->data) = 0; return (PyObject *)ret; } - if (axis < 0) axis += n; - if ((axis < 0) || (axis >= n)) { - PyErr_Format(PyExc_ValueError, - "axis(=%d) out of bounds", axis); - return NULL; - } + + if ((op2=(PyAO *)_check_axis(op, &axis, 0))==NULL) return NULL; /* Determine if we should use new algorithm or not */ - if (op->descr->f->argsort[which] != NULL) { - return _new_argsort(op, axis, which); + if (op2->descr->f->argsort[which] != NULL) { + return _new_argsort(op2, axis, which); } - if ((which != PyArray_QUICKSORT) || op->descr->f->compare == NULL) { + if ((which != PyArray_QUICKSORT) || op2->descr->f->compare == NULL) { PyErr_SetString(PyExc_TypeError, "requested sort not available for type"); goto fail; } - SWAPAXES(ap, op); + SWAPAXES(ap, op2); op = (PyArrayObject *)PyArray_ContiguousFromAny((PyObject *)ap, PyArray_NOTYPE, |