summaryrefslogtreecommitdiff
path: root/numpy/core/src
diff options
context:
space:
mode:
authorTravis Oliphant <oliphant@enthought.com>2006-12-02 04:11:31 +0000
committerTravis Oliphant <oliphant@enthought.com>2006-12-02 04:11:31 +0000
commitbf677ca3b1b02c57da75a302a0f0b5704e3f525f (patch)
tree06947d88317a5c3787ce13bd4b6250b2341e19ca /numpy/core/src
parent574fe369112ded91f80502db73022a8fd79d3fe3 (diff)
downloadnumpy-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.c3
-rw-r--r--numpy/core/src/arrayobject.c2
-rw-r--r--numpy/core/src/multiarraymodule.c20
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,