summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan van der Walt <stefan@sun.ac.za>2006-06-26 08:32:08 +0000
committerStefan van der Walt <stefan@sun.ac.za>2006-06-26 08:32:08 +0000
commite70feca6cd7278a7bebc9a49f0cac3b2d071e0bc (patch)
treeb5906dac0b00cb185abdc9eaadc6955a4bc58a82
parentff660cb1a45a60128b6d934bc6977773b3ca7e34 (diff)
downloadnumpy-e70feca6cd7278a7bebc9a49f0cac3b2d071e0bc.tar.gz
Temporarily revert change made in r2665 that breaks dot.
-rw-r--r--numpy/core/src/arrayobject.c30
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);
}