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 :) _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion