[Numpy-discussion] Should abs([nan]) be supported?

Travis Oliphant travis@continuum...
Wed Sep 5 00:06:43 CDT 2012


The framework for catching errors relies on hardware flags getting set and our C code making the right calls to detect those flags.

This has usually worked correctly in the past --- but it is an area where changes in compilers or platforms could create problems. 

We should test to be sure that the correct warnings are issued, I would think.    Perhaps using a catch_warnings context would be helpful (from http://docs.python.org/library/warnings.html)

import warnings

def fxn():
    warnings.warn("deprecated", DeprecationWarning)

with warnings.catch_warnings(record=True) as w:
    # Cause all warnings to always be triggered.
    warnings.simplefilter("always")
    # Trigger a warning.
    fxn()
    # Verify some things
    assert len(w) == 1
    assert issubclass(w[-1].category, DeprecationWarning)
    assert "deprecated" in str(w[-1].message)



-Travis



On Sep 4, 2012, at 10:49 PM, Ondřej Čertík wrote:

> On Tue, Sep 4, 2012 at 8:38 PM, Travis Oliphant <travis@continuum.io> wrote:
>> 
>> There is an error context that controls how floating point signals are handled.   There is a separate control for underflow, overflow, divide by zero, and invalid.   IIRC, it was decided on this list a while ago to make the default ignore for underflow and warning for  overflow, invalid and divide by zero.
>> 
>> However, an oversight pushed versions of NumPy where all the error handlers where set to "ignore" and this test was probably written then.    I think the test should be changed to check for RuntimeWarning on some of the cases.   This might take a little work as it looks like the code uses generators across multiple tests and would have to be changed to handle expecting warnings.
>> 
>> Alternatively, the error context can be set before the test runs and then restored afterwords:
>> 
>> olderr = np.seterr(invalid='ignore')
>> abs(a)
>> np.seterr(**olderr)
>> 
>> 
>> or, using an errstate context ---
>> 
>> with np.errstate(invalid='ignore'):
>>      abs(a)
> 
> I see --- so abs([nan]) should emit a warning, but in the test we
> should suppress it.
> I'll work on that.
> 
> The only thing that I don't understand is why it only happens on some
> platforms and doesn't on some other platforms (apparently). But it's
> clear how to fix it now.
> 
> Thanks for the information.
> 
> Ondrej
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.scipy.org/pipermail/numpy-discussion/attachments/20120905/31a857d9/attachment-0001.html 


More information about the NumPy-Discussion mailing list