[Numpy-discussion] 2 bugs related to isinf and isfinite generate crazy warnings

Eric Firing efiring at hawaii.edu
Thu Jun 3 00:02:08 EDT 2010


On 06/02/2010 05:00 PM, David wrote:
> On 06/03/2010 10:11 AM, Eric Firing wrote:
>> 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.
>
> Actually, there is a bug in setup.py to detect those for python>= 2.6,
> I have fixed this.

David,

Thank you.

>
>>
>> 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.
>
> Which one are you thinking about: the ones using fpclassify ? Could you
> show the code where the current version is slower ?

OK, my memory was off as usual.  What I was remembering was actually this:

http://currents.soest.hawaii.edu/hgstage/hgwebdir.cgi/mpl_hg/file/4ab6f2159bea/matplotlib/src/MPL_isnan.h

So the macro versions were in mpl, and derived from numarray, but 
apparently were never in numpy.

In any case, in MPL_isnan.h, isfinite is fast, because it involves only 
a single bitwise-and plus comparison; isnan and isinf are slower, 
because they involve about twice as much work.

Given that the present numpy isfinite macro is broken--it raises an fp 
error--there is not much point in talking about its performance.

What I don't know is whether there is some reason not to use the 
MPL_isnan.h macros as the backups in numpy, for platforms that do not 
have their own isnan, isfinite, and isinf.

I do know (or think...) that two or three years ago I timed numpy.isnan 
and numpy.isfinite, and found that the latter was notably faster than 
the former, consistent with what I would have expected if the 
implementation was as in MPL_isnan.h.  Presumably, at that time my numpy 
build was using the system versions, and maybe they are implemented in a 
similar way.  Looking in /usr/include/bits/*.h, I gave up trying to 
figure out what the system macros really are doing.

Eric


>
> cheers,
>
> David
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion




More information about the NumPy-Discussion mailing list