I'm a bit worried about this method (but I haven't had a deep look at how it works).

I think at least some of this should be done in `__cinit__` because it allocates C structures (init isn't even guaranteed to be called, or may be called more than once). On the other hand it's also calling several self methods, which may not be properly initialized at the time (maybe cdef methods work fine in cinit?). See the [cython docs](http://docs.cython.org/src/userguide/special_methods.html#initialisation-methods-cinit-and-init) for some more information.