[Numpy-discussion] 2 bugs related to isinf and isfinite generate crazy warnings
Eric Firing
efiring@hawaii....
Wed Jun 2 20:11:00 CDT 2010
http://www.mail-archive.com/numpy-discussion@scipy.org/msg23912.html
On some systems--but evidently not for most numpy users, or there would
have been a steady stream of screams--the appearance of np.inf in any
call to np.isfinite or np.isinf yields this:
In [1]:import numpy as np
In [2]:np.isinf(np.inf)
Warning: invalid value encountered in isinf
Out[2]:True
This generates streams of warnings if np.isinf or np.isfinite is applied
to an array with many inf values.
The problem is a combination of two bugs:
1) When building with setup.py, but perhaps not with scons (which I
haven't tried yet), NPY_HAVE_DECL_ISFINITE and friends are never
defined, even though they should be--this is all on ubuntu 10.4, in my
case, and isfinite and isinf most definitely are in math.h. It looks to
me like the only mechanism for defining these is in SConstruct.
2) So, with no access to the built-in isinf etc., npy_math.h falls back
on the compact but slow macros that replace the much nicer ones that
were in numpy a year or so ago. Here is the relevant part of npy_math.h:
#ifndef NPY_HAVE_DECL_ISFINITE
#define npy_isfinite(x) !npy_isnan((x) + (-x))
#else
#define npy_isfinite(x) isfinite((x))
#endif
#ifndef NPY_HAVE_DECL_ISINF
#define npy_isinf(x) (!npy_isfinite(x) && !npy_isnan(x))
#else
#define npy_isinf(x) isinf((x))
#endif
isinf calls isfinite, and isfinite calls isnan(x-x). If x is inf, this
generates a nan, so the return value is correct--but generating that nan
set the INVALID flag, hence the warning.
Sorry I don't have a patch to offer.
Eric
More information about the NumPy-Discussion
mailing list