[Numpy-svn] r5140 - in trunk/numpy/core: . blasdot src

numpy-svn at scipy.org numpy-svn at scipy.org
Wed May 7 16:24:37 EDT 2008


Author: oliphant
Date: 2008-05-07 15:24:34 -0500 (Wed, 07 May 2008)
New Revision: 5140

Modified:
   trunk/numpy/core/blasdot/_dotblas.c
   trunk/numpy/core/defmatrix.py
   trunk/numpy/core/src/arrayobject.c
Log:
 * 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.

Modified: trunk/numpy/core/blasdot/_dotblas.c
===================================================================
--- trunk/numpy/core/blasdot/_dotblas.c	2008-05-07 20:13:45 UTC (rev 5139)
+++ trunk/numpy/core/blasdot/_dotblas.c	2008-05-07 20:24:34 UTC (rev 5140)
@@ -176,6 +176,9 @@
 }
 
 
+/* 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 @@
     register int i, N=PyArray_NDIM(ap);
     register intp *strides = PyArray_STRIDES(ap);
 
+    if (((intp)(ap->data) % itemsize) != 0)
+	return 1;
     for (i=0; i<N; i++) {
 	if ((strides[i] < 0) || (strides[i] % itemsize) != 0) 
 	    return 1;

Modified: trunk/numpy/core/defmatrix.py
===================================================================
--- trunk/numpy/core/defmatrix.py	2008-05-07 20:13:45 UTC (rev 5139)
+++ trunk/numpy/core/defmatrix.py	2008-05-07 20:24:34 UTC (rev 5140)
@@ -223,6 +223,8 @@
         return
 
     def __getitem__(self, index):
+        if isscalar(index):
+            return self.__array__()[index]
         self._getitem = True
 
         try:
@@ -472,11 +474,6 @@
     def ptp(self, axis=None, out=None):
         return N.ndarray.ptp(self, axis, out)._align(axis)
 
-    # Needed becase tolist method expects a[i]
-    #  to have dimension a.ndim-1
-    def tolist(self):
-        return self.__array__().tolist()
-
     def getI(self):
         M,N = self.shape
         if M == N:

Modified: trunk/numpy/core/src/arrayobject.c
===================================================================
--- trunk/numpy/core/src/arrayobject.c	2008-05-07 20:13:45 UTC (rev 5139)
+++ trunk/numpy/core/src/arrayobject.c	2008-05-07 20:24:34 UTC (rev 5140)
@@ -1972,14 +1972,19 @@
     sz = self->dimensions[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);




More information about the Numpy-svn mailing list