From 6315c4c27eaeca7f2080ea585b1901e2b683b3ff Mon Sep 17 00:00:00 2001 From: Travis Oliphant Date: Fri, 6 Jan 2006 10:14:10 +0000 Subject: Added new feature to .view method so that if the argument is a sub-type of the ndarray, an object is returned with all the information of the array. --- numpy/core/src/arraymethods.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'numpy/core/src/arraymethods.c') diff --git a/numpy/core/src/arraymethods.c b/numpy/core/src/arraymethods.c index 0760e7af1..15d8eb3fe 100644 --- a/numpy/core/src/arraymethods.c +++ b/numpy/core/src/arraymethods.c @@ -157,17 +157,29 @@ array_squeeze(PyArrayObject *self, PyObject *args) -static char doc_view[] = "a.view() return a new view of array with same data."; +static char doc_view[] = "a.view() return a new view of array with same data. type can be either a new sub-type object or a data-descriptor object"; static PyObject * array_view(PyArrayObject *self, PyObject *args) { + PyObject *otype=NULL; PyArray_Descr *type=NULL; - if (!PyArg_ParseTuple(args, "|O&", - PyArray_DescrConverter, &type)) - return NULL; - return _ARET(PyArray_View(self, type)); + if (!PyArg_ParseTuple(args, "|O", &otype)) return NULL; + + if (otype) { + if (PyType_Check(otype) && \ + PyType_IsSubtype((PyTypeObject *)otype, + &PyBigArray_Type)) { + return _ARET(PyArray_View(self, NULL, + (PyTypeObject *)otype)); + } + else { + if (PyArray_DescrConverter(otype, &type) == PY_FAIL) + return NULL; + } + } + return _ARET(PyArray_View(self, type, NULL)); } static char doc_argmax[] = "a.argmax(axis=None)"; @@ -1522,7 +1534,7 @@ array_newbyteorder(PyArrayObject *self, PyObject *args) new = PyArray_DescrNewByteorder(self->descr, endian); if (!new) return NULL; - return _ARET(PyArray_View(self, new)); + return _ARET(PyArray_View(self, new, NULL)); } -- cgit v1.2.1