diff options
author | Stefan van der Walt <stefan@sun.ac.za> | 2006-06-26 08:32:08 +0000 |
---|---|---|
committer | Stefan van der Walt <stefan@sun.ac.za> | 2006-06-26 08:32:08 +0000 |
commit | e70feca6cd7278a7bebc9a49f0cac3b2d071e0bc (patch) | |
tree | b5906dac0b00cb185abdc9eaadc6955a4bc58a82 | |
parent | ff660cb1a45a60128b6d934bc6977773b3ca7e34 (diff) | |
download | numpy-e70feca6cd7278a7bebc9a49f0cac3b2d071e0bc.tar.gz |
Temporarily revert change made in r2665 that breaks dot.
-rw-r--r-- | numpy/core/src/arrayobject.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/numpy/core/src/arrayobject.c b/numpy/core/src/arrayobject.c index 8d9da7567..39483f4f0 100644 --- a/numpy/core/src/arrayobject.c +++ b/numpy/core/src/arrayobject.c @@ -6751,6 +6751,36 @@ PyArray_CastTo(PyArrayObject *out, PyArrayObject *mp) iswap = PyArray_ISBYTESWAPPED(mp); oswap = PyArray_ISBYTESWAPPED(out); + + if (same && mpsize < PyArray_BUFSIZE) { + PyArrayObject *mp2, *out2; + if (!PyArray_ISCARRAY_RO(mp)) { + mp2 = (PyArrayObject *)PyArray_NewCopy(mp, + PyArray_CORDER); + } + else { + mp2 = mp; + Py_INCREF(mp2); + } + if (mp2 == NULL) return -1; + if (!PyArray_ISCARRAY(out)) { + out2 = (PyArrayObject *)PyArray_NewCopy(out, + PyArray_CORDER); + } + else { + out2 = out; + Py_INCREF(out2); + } + if (out2 == NULL) { Py_DECREF(mp2); return -1;} + if (iswap) byte_swap_vector(mp2->data, mpsize, + PyArray_ITEMSIZE(mp2)); + castfunc(mp2->data, out2->data, mpsize, mp2, out2); + if (oswap) byte_swap_vector(out2->data, mpsize, + PyArray_ITEMSIZE(out2)); + Py_DECREF(out2); + Py_DECREF(mp2); + return 0; + } return _broadcast_cast(out, mp, castfunc, iswap, oswap); } |