[Numpy-discussion] How to include numpy headers in C across versions 1.1, 1.2, and 1.3

David Cournapeau david@ar.media.kyoto-u.ac...
Mon May 11 22:00:58 CDT 2009

Charles R Harris wrote:
> On Mon, May 11, 2009 at 4:49 PM, Peter Wang <pwang@enthought.com
> <mailto:pwang@enthought.com>> wrote:
>     Hey guys,
>     I've got a small C extension that uses isnan() and (in numpy 1.1) had
>     been importing it from ufuncobject.h.  I see that it has now moved
>     into npy_math.h in 1.3.

isnan is a C99 function (more exactly a macro), so we should not have
defined it in the first place in public header, strictly speaking. The
replacement in numpy 1.3 is npy_nan (and for every math function,
replaced with the npy_ prefix).

>     My best idea right now is to simply do a numpy version check in my
>     setup.py, and hard-code some macros at the top of my C extension to
>     #include the appropriate headers for each version.
>     Any help or suggestions would be appreciated!

You could just reproduce the logic used for numpy 1.3: check whether
isnan is declared in math.h, and if not, use a replacement (the
replacement are in npy_math.h - they are guaranteed to work on most
platforms where numpy runs). It avoids hardcoding versions, which is
often problematic if you need to support many platforms.



More information about the Numpy-discussion mailing list