On 30 March 2012 21:38, mark florisson <[email protected]> wrote: > On 30 March 2012 19:53, Chris Barker <[email protected]> wrote: >> On Fri, Mar 30, 2012 at 10:57 AM, mark florisson >> <[email protected]> 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 >> >> [email protected] >> _______________________________________________ >> NumPy-Discussion mailing list >> [email protected] >> 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 :) _______________________________________________ NumPy-Discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
