On 30 March 2012 21:40, mark florisson <markflorisso...@gmail.com> wrote: > On 30 March 2012 21:38, mark florisson <markflorisso...@gmail.com> wrote: >> On 30 March 2012 19:53, Chris Barker <chris.bar...@noaa.gov> wrote: >>> On Fri, Mar 30, 2012 at 10:57 AM, mark florisson >>> <markflorisso...@gmail.com> wrote: >>>> Although the segfault was caused by a bug in NumPy, you should >>>> probably also consider using Cython, which can make a lot of this pain >>>> and boring stuff go away. >>> >>> Is there a good demo/sample somewhere of an ndarray subclass in Cython? >>> >>> Some quick googling turned up a number of people asking about it, but >>> I didn't find (quickly) a wiki page or demo about it. >>> >>> -Chris >>> >>> -- >>> >>> Christopher Barker, Ph.D. >>> Oceanographer >>> >>> Emergency Response Division >>> NOAA/NOS/OR&R (206) 526-6959 voice >>> 7600 Sand Point Way NE (206) 526-6329 fax >>> Seattle, WA 98115 (206) 526-6317 main reception >>> >>> chris.bar...@noaa.gov >>> _______________________________________________ >>> NumPy-Discussion mailing list >>> NumPy-Discussion@scipy.org >>> http://mail.scipy.org/mailman/listinfo/numpy-discussion >> >> It's not common to do, I tried the following: >> >> cimport numpy >> >> cdef extern from "Python.h": >> ctypedef struct PyTypeObject: >> void *tp_alloc >> >> object PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems) >> >> cdef myalloc(PyTypeObject *type, Py_ssize_t nitems): >> print "allocating" >> return PyType_GenericAlloc(type, nitems) >> >> cdef class MyClass(numpy.ndarray) : >> cdef int array[10000000] >> >> (<PyTypeObject *> MyClass).tp_alloc = <void *> myalloc # This works >> around the NumPy bug >> cdef MyClass obj = MyClass((10,)) >> obj.array[999999] = 20 >> >> The array attribute is quite large here to cause a segfault if our >> trick to replace the tp_alloc isn't working. It's kind of a hack, but >> the only alternative is to use composition instead. > > (So remove the array attribute, it's just for demonstration :)
And you can also directly assign PyType_GenericAlloc instead of writing your own (again, demonstration to see if it works). _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion