summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPauli Virtanen <pav@iki.fi>2013-10-07 21:08:59 +0300
committerPauli Virtanen <pav@iki.fi>2013-10-07 23:24:21 +0300
commit694ce0e5c939a6eab80e4fe083aedf1a19ceb845 (patch)
treeff4835c3781a56d0f17e6921f00c0f301ea14d75
parentf2ce6351314c228a3b80cced2e2f1746596d1ddc (diff)
downloadnumpy-694ce0e5c939a6eab80e4fe083aedf1a19ceb845.tar.gz
BUG: linalg: use correct BLAS incx convention in xCOPY
-rw-r--r--numpy/linalg/umath_linalg.c.src28
1 files changed, 22 insertions, 6 deletions
diff --git a/numpy/linalg/umath_linalg.c.src b/numpy/linalg/umath_linalg.c.src
index 3d9157dd9..5c2bfd447 100644
--- a/numpy/linalg/umath_linalg.c.src
+++ b/numpy/linalg/umath_linalg.c.src
@@ -819,9 +819,17 @@ linearize_@TYPE@_matrix(void *dst_in,
(fortran_int)(data->column_strides/sizeof(@typ@));
fortran_int one = 1;
for (i=0; i< data->rows; i++) {
- FNAME(@copy@)(&columns,
- (void*)src, &column_strides,
- (void*)dst, &one);
+ if (column_strides >= 0) {
+ FNAME(@copy@)(&columns,
+ (void*)src, &column_strides,
+ (void*)dst, &one);
+ }
+ else {
+ FNAME(@copy@)(&columns,
+ (void*)((@typ@*)src + (columns-1)*column_strides),
+ &column_strides,
+ (void*)dst, &one);
+ }
src += data->row_strides/sizeof(@typ@);
dst += data->columns;
}
@@ -847,9 +855,17 @@ delinearize_@TYPE@_matrix(void *dst_in,
(fortran_int)(data->column_strides/sizeof(@typ@));
fortran_int one = 1;
for (i=0; i < data->rows; i++) {
- FNAME(@copy@)(&columns,
- (void*)src, &one,
- (void*)dst, &column_strides);
+ if (column_strides >= 0) {
+ FNAME(@copy@)(&columns,
+ (void*)src, &one,
+ (void*)dst, &column_strides);
+ }
+ else {
+ FNAME(@copy@)(&columns,
+ (void*)src, &one,
+ (void*)((@typ@*)dst + (columns-1)*column_strides),
+ &column_strides);
+ }
src += data->columns;
dst += data->row_strides/sizeof(@typ@);
}