<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">The framework for catching errors relies on hardware flags getting set and our C code making the right calls to detect those flags.<div><br></div><div>This has usually worked correctly in the past --- but it is an area where changes in compilers or platforms could create problems. </div><div><br></div><div>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 <a href="http://docs.python.org/library/warnings.html">http://docs.python.org/library/warnings.html</a>)</div><div><br></div><div><div class="highlight-python" style="color: rgb(0, 0, 0); font-family: sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); position: relative; "><div class="highlight" style="background-color: rgb(238, 255, 204); position: static; z-index: auto; "><pre style="overflow-x: auto; overflow-y: hidden; padding: 5px; background-color: rgb(238, 255, 204); color: rgb(51, 51, 51); line-height: 15.199999809265137px; border-top-width: 1px; border-bottom-width: 1px; border-style: solid none; border-top-color: rgb(170, 204, 153); border-bottom-color: rgb(170, 204, 153); "><span class="kn" style="color: rgb(0, 112, 32); font-weight: bold; ">import</span> <span class="nn" style="color: rgb(14, 132, 181); font-weight: bold; ">warnings</span>

<span class="k" style="color: rgb(0, 112, 32); font-weight: bold; ">def</span> <span class="nf" style="color: rgb(6, 40, 126); ">fxn</span><span class="p">():</span>
    <span class="n">warnings</span><span class="o" style="color: rgb(102, 102, 102); ">.</span><span class="n">warn</span><span class="p">(</span><span class="s" style="color: rgb(64, 112, 160); ">"deprecated"</span><span class="p">,</span> <span class="ne" style="color: rgb(0, 112, 32); ">DeprecationWarning</span><span class="p">)</span>

<span class="k" style="color: rgb(0, 112, 32); font-weight: bold; ">with</span> <span class="n">warnings</span><span class="o" style="color: rgb(102, 102, 102); ">.</span><span class="n">catch_warnings</span><span class="p">(</span><span class="n">record</span><span class="o" style="color: rgb(102, 102, 102); ">=</span><span class="bp" style="color: rgb(0, 112, 32); ">True</span><span class="p">)</span> <span class="k" style="color: rgb(0, 112, 32); font-weight: bold; ">as</span> <span class="n">w</span><span class="p">:</span>
    <span class="c" style="color: rgb(64, 128, 144); font-style: italic; "># Cause all warnings to always be triggered.</span>
    <span class="n">warnings</span><span class="o" style="color: rgb(102, 102, 102); ">.</span><span class="n">simplefilter</span><span class="p">(</span><span class="s" style="color: rgb(64, 112, 160); ">"always"</span><span class="p">)</span>
    <span class="c" style="color: rgb(64, 128, 144); font-style: italic; "># Trigger a warning.</span>
    <span class="n">fxn</span><span class="p">()</span>
    <span class="c" style="color: rgb(64, 128, 144); font-style: italic; "># Verify some things</span>
    <span class="k" style="color: rgb(0, 112, 32); font-weight: bold; ">assert</span> <span class="nb" style="color: rgb(0, 112, 32); ">len</span><span class="p">(</span><span class="n">w</span><span class="p">)</span> <span class="o" style="color: rgb(102, 102, 102); ">==</span> <span class="mi" style="color: rgb(32, 128, 80); ">1</span>
    <span class="k" style="color: rgb(0, 112, 32); font-weight: bold; ">assert</span> <span class="nb" style="color: rgb(0, 112, 32); ">issubclass</span><span class="p">(</span><span class="n">w</span><span class="p">[</span><span class="o" style="color: rgb(102, 102, 102); ">-</span><span class="mi" style="color: rgb(32, 128, 80); ">1</span><span class="p">]</span><span class="o" style="color: rgb(102, 102, 102); ">.</span><span class="n">category</span><span class="p">,</span> <span class="ne" style="color: rgb(0, 112, 32); ">DeprecationWarning</span><span class="p">)</span>
    <span class="k" style="color: rgb(0, 112, 32); font-weight: bold; ">assert</span> <span class="s" style="color: rgb(64, 112, 160); ">"deprecated"</span> <span class="ow" style="color: rgb(0, 112, 32); font-weight: bold; ">in</span> <span class="nb" style="color: rgb(0, 112, 32); ">str</span><span class="p">(</span><span class="n">w</span><span class="p">[</span><span class="o" style="color: rgb(102, 102, 102); ">-</span><span class="mi" style="color: rgb(32, 128, 80); ">1</span><span class="p">]</span><span class="o" style="color: rgb(102, 102, 102); ">.</span><span class="n">message</span><span class="p">)</span>
</pre><div><span class="p"><br></span></div></div></div></div><div><br></div><div><br></div><div>-Travis</div><div><br></div><div><br></div><div><br></div><div><div><div>On Sep 4, 2012, at 10:49 PM, Ondřej Čertík wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>On Tue, Sep 4, 2012 at 8:38 PM, Travis Oliphant <<a href="mailto:travis@continuum.io">travis@continuum.io</a>> wrote:<br><blockquote type="cite"><br></blockquote><blockquote type="cite">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.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">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.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Alternatively, the error context can be set before the test runs and then restored afterwords:<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">olderr = np.seterr(invalid='ignore')<br></blockquote><blockquote type="cite">abs(a)<br></blockquote><blockquote type="cite">np.seterr(**olderr)<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">or, using an errstate context ---<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">with np.errstate(invalid='ignore'):<br></blockquote><blockquote type="cite">      abs(a)<br></blockquote><br>I see --- so abs([nan]) should emit a warning, but in the test we<br>should suppress it.<br>I'll work on that.<br><br>The only thing that I don't understand is why it only happens on some<br>platforms and doesn't on some other platforms (apparently). But it's<br>clear how to fix it now.<br><br>Thanks for the information.<br><br>Ondrej<br>_______________________________________________<br>NumPy-Discussion mailing list<br><a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>http://mail.scipy.org/mailman/listinfo/numpy-discussion<br></div></blockquote></div><br></div></body></html>