From c32a389417cd22a7fca720f2b1505acbe8560b3d Mon Sep 17 00:00:00 2001 From: Travis Oliphant Date: Wed, 7 May 2008 20:24:34 +0000 Subject: * Make matrices return 1-dimensional array on item selection for 1.2\n * Remove (now un-needed) tolist method from matrices\n * For ticket #551, copy data if start of memory is not aligned on itemsize location in optimized blas wrapper. --- numpy/core/blasdot/_dotblas.c | 5 +++++ numpy/core/defmatrix.py | 7 ++----- numpy/core/src/arrayobject.c | 21 +++++++++++++-------- 3 files changed, 20 insertions(+), 13 deletions(-) (limited to 'numpy/core') diff --git a/numpy/core/blasdot/_dotblas.c b/numpy/core/blasdot/_dotblas.c index 933b21137..e2619b6d7 100644 --- a/numpy/core/blasdot/_dotblas.c +++ b/numpy/core/blasdot/_dotblas.c @@ -176,6 +176,9 @@ _select_matrix_shape(PyArrayObject *array) } +/* This also makes sure that the data segment is aligned with + an itemsize address as well by returning one if not true. +*/ static int _bad_strides(PyArrayObject *ap) { @@ -183,6 +186,8 @@ _bad_strides(PyArrayObject *ap) register int i, N=PyArray_NDIM(ap); register intp *strides = PyArray_STRIDES(ap); + if (((intp)(ap->data) % itemsize) != 0) + return 1; for (i=0; idimensions[0]; lp = PyList_New(sz); for(i = 0; i < sz; i++) { - v=(PyArrayObject *)array_big_item(self, i); - if (v->nd >= self->nd) { - PyErr_SetString(PyExc_RuntimeError, - "array_item not returning smaller-" \ - "dimensional array"); - Py_DECREF(v); - Py_DECREF(lp); - return NULL; + if (PyArray_CheckExact(self)) { + v=(PyArrayObject *)array_big_item(self, i); + } + else { + v = PySequence_GetItem((PyObject *)self, i); + if ((!PyArray_Check(v)) || (v->nd >= self->nd)) { + PyErr_SetString(PyExc_RuntimeError, + "array_item not returning smaller-" \ + "dimensional array"); + Py_DECREF(v); + Py_DECREF(lp); + return NULL; + } } PyList_SetItem(lp, i, PyArray_ToList(v)); Py_DECREF(v); -- cgit v1.2.1