On Sun, Nov 9, 2008 at 11:44 AM, David Cournapeau <[EMAIL PROTECTED]>wrote:

> On Mon, Nov 10, 2008 at 2:40 AM, Charles R Harris
> <[EMAIL PROTECTED]> wrote:
> >
> >
> > Let me see if I understand this correctly. For Python < 2.5 the list
> indices
> > and such are ints, while for later versions they are Py_ssize_t, which is
> > larger on 64 bit systems. Meanwhile, Py_intptr_t is large enough to hold
> a
> > pointer.
>
> yes
>
> > So why are these two numbers being mixed?
>
> It is note that they are being mixed, but that cython does not support
> this configuration: it has a internal check which raise an exception
> in such a case. See around line 55:
>
> http://hg.cython.org/cython/file/764f1578df40/Cython/Includes/numpy.pxd
>
> As I understand, this means you can't use cython for such a
> configuration, but I just wanted to confirm whether there were known
> workarounds.
>

Lessee,

cdef extern from "Python.h":
     ctypedef int Py_intptr_t

cdef extern from "numpy/arrayobject.h":
     ctypedef Py_intptr_t npy_intp

So they are screwing with the npy_intp type. They should hang. Numpy is
numpy, Python is python, and never the two should meet. Note that none of
this crap is in the c_numpy.pxd included with numpy, BTW. I'd send the
cython folks a note and tell them to knock it off, the Py_* values are
irrelevant to numpy.

In any case, for Python <  2.5, this should be something like

cdef extern from "Python.h":
     ctypedef int Py_ssize_t

 cdef extern from "numpy/arrayobject.h":
     ctypedef npy_intp Py_intptr_t

But for Python >= 2.5 this can be a problem because cython doesn't actually
read the include files and there will be a conflict with Py_ssize_t. There
needs to be an #ifndef somewhere and it probably needs to be in a *.h file.

Chuck
_______________________________________________
Numpy-discussion mailing list
[email protected]
http://projects.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to