diff options
author | Pauli Virtanen <pav@iki.fi> | 2013-10-07 21:08:59 +0300 |
---|---|---|
committer | Pauli Virtanen <pav@iki.fi> | 2013-10-07 23:24:21 +0300 |
commit | 694ce0e5c939a6eab80e4fe083aedf1a19ceb845 (patch) | |
tree | ff4835c3781a56d0f17e6921f00c0f301ea14d75 | |
parent | f2ce6351314c228a3b80cced2e2f1746596d1ddc (diff) | |
download | numpy-694ce0e5c939a6eab80e4fe083aedf1a19ceb845.tar.gz |
BUG: linalg: use correct BLAS incx convention in xCOPY
-rw-r--r-- | numpy/linalg/umath_linalg.c.src | 28 |
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@); } |