[Cython] porting mpi4py to PyPy runtime
Stefan Behnel
stefan_ml at behnel.de
Tue Nov 6 20:22:44 CET 2012
Lisandro Dalcin, 02.10.2012 17:06:
> After successfully porting mpi4py to PyPy 1.9, I want to share a few
> issues I've encountered. The most serious onesare on PyPy's side, but
> Cython do require a cuple of very minor fixes.
> [...]
> 4) mpi4py uses @classmethod decorator for many methods in cdef
> classes. I really do not know what's going on, but method lookups do
> not return the classmethod, but the original "unwrapped" method. I've
> found a way to trick it, but again, I have no idea why it is working.
> Basically, I have to execute hasattr() (in Python code, not Cython
> code) on every class method: The hack reduces to adding the following
> code at the very end of Cython code (note that I'm using "exec"):
>
> if PYPY: exec """
> def _pypy_setup():
> for klass in (
> Status,
> Datatype,
> Request,
> Message,
> Op,
> Group,
> Info,
> Errhandler,
> Comm,
> Win,
> File,
> ):
> for name in klass.__dict__:
> meth = klass.__dict__[name]
> if (isinstance(meth, classmethod) or
> isinstance(meth, staticmethod)):
> hasattr(klass, name)
> _pypy_setup()
> del _pypy_setup
> """
>
> I think (1) and (3) can be trivially handled in Cython, (3) is not an
> issue for Cython as PyBuffer_FillInfo() is not directly used. And
> about (4), we really need help from PyPy folks, they implement
> PyType_Modified() as a non-op
> (https://bitbucket.org/pypy/pypy/src/release-1.9/pypy/module/cpyext/typeobject.py#cl-726)
> but that is not playing well with Cython.
https://bugs.pypy.org/issue1106
I had already opened a ticket for this one a while ago.
Stefan
More information about the cython-devel
mailing list