diff options
author | Travis Oliphant <oliphant@enthought.com> | 2008-06-05 23:27:52 +0000 |
---|---|---|
committer | Travis Oliphant <oliphant@enthought.com> | 2008-06-05 23:27:52 +0000 |
commit | 8c6fc0248b84e7cf708131ecb4c99160d53f7525 (patch) | |
tree | 0d1050e83fc773f6eee74ff78e3ed9570a3c114c /numpy/core/src/arrayobject.c | |
parent | 222043bf4008d08cb084e984fd413c29ea797291 (diff) | |
download | numpy-8c6fc0248b84e7cf708131ecb4c99160d53f7525.tar.gz |
Fix more in ticket #791.
Diffstat (limited to 'numpy/core/src/arrayobject.c')
-rw-r--r-- | numpy/core/src/arrayobject.c | 49 |
1 files changed, 33 insertions, 16 deletions
diff --git a/numpy/core/src/arrayobject.c b/numpy/core/src/arrayobject.c index 7398a2263..83dd9e8ad 100644 --- a/numpy/core/src/arrayobject.c +++ b/numpy/core/src/arrayobject.c @@ -6641,6 +6641,26 @@ array_base_get(PyArrayObject *self) } } + +static int +_zerofill(PyArrayObject *ret) +{ + intp n; + + if (PyDataType_REFCHK(ret->descr)) { + PyObject *zero = PyInt_FromLong(0); + PyArray_FillObjectArray(ret, zero); + Py_DECREF(zero); + if (PyErr_Occurred()) {Py_DECREF(ret); return -1;} + } + else { + n = PyArray_NBYTES(ret); + memset(ret->data, 0, n); + return 0; + } +} + + /* Create a view of a complex array with an equivalent data-type except it is real instead of complex. */ @@ -6722,29 +6742,26 @@ static PyObject * array_imag_get(PyArrayObject *self) { PyArrayObject *ret; - PyArray_Descr *type; if (PyArray_ISCOMPLEX(self)) { ret = _get_part(self, 1); - return (PyObject *) ret; } else { - type = self->descr; - Py_INCREF(type); - ret = (PyArrayObject *)PyArray_Zeros(self->nd, - self->dimensions, - type, - PyArray_ISFORTRAN(self)); + Py_INCREF(self->descr); + ret = (PyArrayObject *)PyArray_NewFromDescr(self->ob_type, + self->descr, + self->nd, + self->dimensions, + NULL, NULL, + PyArray_ISFORTRAN(self), + (PyObject *)self); + if (ret == NULL) return NULL; + + if (_zerofill(ret) < 0) return NULL; + ret->flags &= ~WRITEABLE; - if (PyArray_CheckExact(self)) - return (PyObject *)ret; - else { - PyObject *newret; - newret = PyArray_View(ret, NULL, self->ob_type); - Py_DECREF(ret); - return newret; - } } + return (PyObject *) ret; } static int |