[Numpy-svn] r3503 - trunk/numpy/core/src

numpy-svn at scipy.org numpy-svn at scipy.org
Mon Jan 8 22:10:11 EST 2007


Author: oliphant
Date: 2007-01-08 21:10:09 -0600 (Mon, 08 Jan 2007)
New Revision: 3503

Modified:
   trunk/numpy/core/src/ufuncobject.c
Log:
Fix reduce problem with non-commutative arrays.

Modified: trunk/numpy/core/src/ufuncobject.c
===================================================================
--- trunk/numpy/core/src/ufuncobject.c	2007-01-09 01:44:40 UTC (rev 3502)
+++ trunk/numpy/core/src/ufuncobject.c	2007-01-09 03:10:09 UTC (rev 3503)
@@ -2132,7 +2132,7 @@
 		}
 		else {
 			loop->meth = NOBUFFER_UFUNCLOOP;
-			loop->steps[0] = (aar)->strides[axis];
+			loop->steps[1] = (aar)->strides[axis];
 			loop->N -= 1;
 		}
         }
@@ -2227,7 +2227,7 @@
         if (loop->ret == NULL) goto fail;
         loop->insize = aar->descr->elsize;
         loop->outsize = loop->ret->descr->elsize;
-        loop->bufptr[1] = loop->ret->data;
+        loop->bufptr[0] = loop->ret->data;
 
 	if (loop->meth == ZERO_EL_REDUCELOOP) {
 		loop->size = PyArray_SIZE(loop->ret);
@@ -2254,7 +2254,7 @@
         loop->size = loop->it->size;
 
 	if (operation == UFUNC_REDUCE) {
-		loop->steps[1] = 0;
+		loop->steps[0] = 0;
 	}
 	else {
 		loop->rit = (PyArrayIterObject *)			\
@@ -2270,17 +2270,17 @@
 		loop->rit->backstrides[axis] = 0;
 
 		if (operation == UFUNC_ACCUMULATE)
-			loop->steps[1] = loop->ret->strides[axis];
+			loop->steps[0] = loop->ret->strides[axis];
 		else
-			loop->steps[1] = 0;
+			loop->steps[0] = 0;
 	}
-	loop->steps[2] = loop->steps[1];
-	loop->bufptr[2] = loop->bufptr[1] + loop->steps[2];
+	loop->steps[2] = loop->steps[0];
+	loop->bufptr[2] = loop->bufptr[0] + loop->steps[2];
 
 
 	if (loop->meth == BUFFER_UFUNCLOOP) {
 		int _size;
-		loop->steps[0] = loop->outsize;
+		loop->steps[1] = loop->outsize;
                 if (otype != aar->descr->type_num) {
 			_size=loop->bufsize*(loop->outsize +		\
 					     aar->descr->elsize);
@@ -2289,7 +2289,7 @@
 			if (loop->obj) memset(loop->buffer, 0, _size);
                         loop->castbuf = loop->buffer + \
                                 loop->bufsize*aar->descr->elsize;
-                        loop->bufptr[0] = loop->castbuf;
+                        loop->bufptr[1] = loop->castbuf;
                         loop->cast = PyArray_GetCastFunc(aar->descr, otype);
 			if (loop->cast == NULL) goto fail;
                 }
@@ -2298,7 +2298,7 @@
                         loop->buffer = PyDataMem_NEW(_size);
                         if (loop->buffer == NULL) goto fail;
 			if (loop->obj) memset(loop->buffer, 0, _size);
-                        loop->bufptr[0] = loop->buffer;
+                        loop->bufptr[1] = loop->buffer;
                 }
 	}
 
@@ -2341,8 +2341,8 @@
 		/* fprintf(stderr, "ZERO..%d\n", loop->size); */
 		for(i=0; i<loop->size; i++) {
 			if (loop->obj) Py_INCREF(*((PyObject **)loop->idptr));
-			memmove(loop->bufptr[1], loop->idptr, loop->outsize);
-			loop->bufptr[1] += loop->outsize;
+			memmove(loop->bufptr[0], loop->idptr, loop->outsize);
+			loop->bufptr[0] += loop->outsize;
 		}
                 break;
         case ONE_EL_REDUCELOOP:
@@ -2350,10 +2350,10 @@
                 while(loop->index < loop->size) {
 			if (loop->obj)
 				Py_INCREF(*((PyObject **)loop->it->dataptr));
-                        memmove(loop->bufptr[1], loop->it->dataptr,
+                        memmove(loop->bufptr[0], loop->it->dataptr,
                                loop->outsize);
 			PyArray_ITER_NEXT(loop->it);
-			loop->bufptr[1] += loop->outsize;
+			loop->bufptr[0] += loop->outsize;
 			loop->index++;
 		}
 		break;
@@ -2363,18 +2363,18 @@
 			/* Copy first element to output */
 			if (loop->obj)
 				Py_INCREF(*((PyObject **)loop->it->dataptr));
-                        memmove(loop->bufptr[1], loop->it->dataptr,
+                        memmove(loop->bufptr[0], loop->it->dataptr,
                                loop->outsize);
 			/* Adjust input pointer */
-                        loop->bufptr[0] = loop->it->dataptr+loop->steps[0];
+                        loop->bufptr[1] = loop->it->dataptr+loop->steps[1];
                         loop->function((char **)loop->bufptr,
 				       &(loop->N),
                                        loop->steps, loop->funcdata);
 			UFUNC_CHECK_ERROR(loop);
 
                         PyArray_ITER_NEXT(loop->it)
-                        loop->bufptr[1] += loop->outsize;
-                        loop->bufptr[2] = loop->bufptr[1];
+                        loop->bufptr[0] += loop->outsize;
+                        loop->bufptr[2] = loop->bufptr[0];
                         loop->index++;
                 }
                 break;
@@ -2405,11 +2405,11 @@
 					   1, NULL, NULL);
 				if (loop->obj)
 					Py_INCREF(*((PyObject **)loop->castbuf));
-				memcpy(loop->bufptr[1], loop->castbuf,
+				memcpy(loop->bufptr[0], loop->castbuf,
 				       loop->outsize);
 			}
 			else { /* Simple copy */
-				arr->descr->f->copyswap(loop->bufptr[1],
+				arr->descr->f->copyswap(loop->bufptr[0],
 							loop->inptr,
 							loop->swap, NULL);
 			}
@@ -2435,13 +2435,13 @@
                                 loop->function((char **)loop->bufptr,
                                                &i,
 					       loop->steps, loop->funcdata);
-				loop->bufptr[1] += loop->steps[1]*i;
+				loop->bufptr[0] += loop->steps[0]*i;
 				loop->bufptr[2] += loop->steps[2]*i;
 				UFUNC_CHECK_ERROR(loop);
                         }
                         PyArray_ITER_NEXT(loop->it);
-                        loop->bufptr[1] += loop->outsize;
-                        loop->bufptr[2] = loop->bufptr[1];
+                        loop->bufptr[0] += loop->outsize;
+                        loop->bufptr[2] = loop->bufptr[0];
                         loop->index++;
                 }
         }
@@ -2485,8 +2485,8 @@
 		for(i=0; i<loop->size; i++) {
 			if (loop->obj)
 				Py_INCREF(*((PyObject **)loop->idptr));
-			memcpy(loop->bufptr[1], loop->idptr, loop->outsize);
-			loop->bufptr[1] += loop->outsize;
+			memcpy(loop->bufptr[0], loop->idptr, loop->outsize);
+			loop->bufptr[0] += loop->outsize;
 		}
                 break;
         case ONE_EL_REDUCELOOP: /* Accumulate */
@@ -2494,10 +2494,10 @@
                 while(loop->index < loop->size) {
 			if (loop->obj)
 				Py_INCREF(*((PyObject **)loop->it->dataptr));
-                        memcpy(loop->bufptr[1], loop->it->dataptr,
+                        memcpy(loop->bufptr[0], loop->it->dataptr,
                                loop->outsize);
 			PyArray_ITER_NEXT(loop->it);
-			loop->bufptr[1] += loop->outsize;
+			loop->bufptr[0] += loop->outsize;
 			loop->index++;
 		}
 		break;
@@ -2507,10 +2507,10 @@
 			/* Copy first element to output */
 			if (loop->obj)
 				Py_INCREF(*((PyObject **)loop->it->dataptr));
-                        memcpy(loop->bufptr[1], loop->it->dataptr,
+                        memcpy(loop->bufptr[0], loop->it->dataptr,
                                loop->outsize);
 			/* Adjust input pointer */
-                        loop->bufptr[0] = loop->it->dataptr+loop->steps[0];
+                        loop->bufptr[1] = loop->it->dataptr+loop->steps[1];
                         loop->function((char **)loop->bufptr,
 				       &(loop->N),
                                        loop->steps, loop->funcdata);
@@ -2518,8 +2518,8 @@
 
                         PyArray_ITER_NEXT(loop->it);
 			PyArray_ITER_NEXT(loop->rit);
-                        loop->bufptr[1] = loop->rit->dataptr;
-			loop->bufptr[2] = loop->bufptr[1] + loop->steps[1];
+                        loop->bufptr[0] = loop->rit->dataptr;
+			loop->bufptr[2] = loop->bufptr[0] + loop->steps[0];
                         loop->index++;
                 }
                 break;
@@ -2550,11 +2550,11 @@
 					   1, NULL, NULL);
 				if (loop->obj)
 					Py_INCREF(*((PyObject **)loop->castbuf));
-				memcpy(loop->bufptr[1], loop->castbuf,
+				memcpy(loop->bufptr[0], loop->castbuf,
 				       loop->outsize);
 			}
 			else { /* Simple copy */
-				arr->descr->f->copyswap(loop->bufptr[1],
+				arr->descr->f->copyswap(loop->bufptr[0],
 							loop->inptr,
 							loop->swap,
 							NULL);
@@ -2581,14 +2581,14 @@
                                 loop->function((char **)loop->bufptr,
                                                &i,
 					       loop->steps, loop->funcdata);
-				loop->bufptr[1] += loop->steps[1]*i;
+				loop->bufptr[0] += loop->steps[0]*i;
 				loop->bufptr[2] += loop->steps[2]*i;
 				UFUNC_CHECK_ERROR(loop);
                         }
                         PyArray_ITER_NEXT(loop->it);
 			PyArray_ITER_NEXT(loop->rit);
-                        loop->bufptr[1] = loop->rit->dataptr;
-			loop->bufptr[2] = loop->bufptr[1] + loop->steps[1];
+                        loop->bufptr[0] = loop->rit->dataptr;
+			loop->bufptr[2] = loop->bufptr[0] + loop->steps[0];
                         loop->index++;
                 }
         }
@@ -2669,28 +2669,28 @@
 		while(loop->index < loop->size) {
 			ptr = (intp *)ind->data;
 			for (i=0; i<nn; i++) {
-				loop->bufptr[0] = loop->it->dataptr +	\
+				loop->bufptr[1] = loop->it->dataptr +	\
 					(*ptr)*loop->instrides;
 				if (loop->obj)
-					Py_INCREF(*((PyObject **)loop->bufptr[0]));
-				memcpy(loop->bufptr[1], loop->bufptr[0],
+					Py_INCREF(*((PyObject **)loop->bufptr[1]));
+				memcpy(loop->bufptr[0], loop->bufptr[1],
 				       loop->outsize);
 				mm = (i==nn-1 ? arr->dimensions[axis]-*ptr : \
 				      *(ptr+1) - *ptr) - 1;
 				if (mm > 0) {
-					loop->bufptr[0] += loop->instrides;
-					loop->bufptr[2] = loop->bufptr[1];
+					loop->bufptr[1] += loop->instrides;
+					loop->bufptr[2] = loop->bufptr[0];
 					loop->function((char **)loop->bufptr,
 						       &mm, loop->steps,
 						       loop->funcdata);
 					UFUNC_CHECK_ERROR(loop);
 				}
-				loop->bufptr[1] += loop->ret->strides[axis];
+				loop->bufptr[0] += loop->ret->strides[axis];
 				ptr++;
 			}
 			PyArray_ITER_NEXT(loop->it);
 			PyArray_ITER_NEXT(loop->rit);
-			loop->bufptr[1] = loop->rit->dataptr;
+			loop->bufptr[0] = loop->rit->dataptr;
 			loop->index++;
 		}
 		break;
@@ -2703,7 +2703,7 @@
 			for (i=0; i<nn; i++) {
 				if (loop->obj)
 					Py_INCREF(*((PyObject **)loop->idptr));
-				memcpy(loop->bufptr[1], loop->idptr,
+				memcpy(loop->bufptr[0], loop->idptr,
 				       loop->outsize);
 				n = 0;
 				mm = (i==nn-1 ? arr->dimensions[axis] - *ptr :\
@@ -2728,19 +2728,19 @@
 						loop->cast(loop->buffer,
 							   loop->castbuf,
 							   j, NULL, NULL);
-					loop->bufptr[2] = loop->bufptr[1];
+					loop->bufptr[2] = loop->bufptr[0];
 					loop->function((char **)loop->bufptr,
 						       &j, loop->steps,
 						       loop->funcdata);
 					UFUNC_CHECK_ERROR(loop);
-					loop->bufptr[1] += j*loop->steps[1];
+					loop->bufptr[0] += j*loop->steps[0];
 				}
-				loop->bufptr[1] += loop->ret->strides[axis];
+				loop->bufptr[0] += loop->ret->strides[axis];
 				ptr++;
 			}
 			PyArray_ITER_NEXT(loop->it);
 			PyArray_ITER_NEXT(loop->rit);
-			loop->bufptr[1] = loop->rit->dataptr;
+			loop->bufptr[0] = loop->rit->dataptr;
 			loop->index++;
 		}
 		break;




More information about the Numpy-svn mailing list