<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Oct 8, 2016 at 4:40 AM, Nathaniel Smith <span dir="ltr"><<a href="mailto:njs@pobox.com" target="_blank">njs@pobox.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Fri, Oct 7, 2016 at 6:12 PM, Charles R Harris<br>
<<a href="mailto:charlesr.harris@gmail.com">charlesr.harris@gmail.com</a>> wrote:<br>
> Hi All,<br>
><br>
> The time for NumPy 1.12.0 approaches and I like to have a final decision on<br>
> the treatment of integers to negative integer powers with the `**` operator.<br>
> The two alternatives looked to be<br>
><br>
> Raise an error for arrays and numpy scalars, including 1 and -1 to negative<br>
> powers.<br>
><br>
> Pluses<br>
><br>
> Backward compatible<br>
> Allows common powers to be integer, e.g., arange(3)**2<br>
> Consistent with inplace operators<br>
> Fixes current wrong behavior.<br>
> Preserves type<br>
><br>
><br>
> Minuses<br>
><br>
> Integer overflow<br>
> Computational inconvenience<br>
> Inconsistent with Python integers<br>
><br>
><br>
> Always return a float<br>
><br>
> Pluses<br>
><br>
> Computational convenience<br>
><br>
><br>
> Minuses<br>
><br>
> Loss of type<br>
> Possible backward incompatibilities<br>
> Not applicable to inplace operators<br>
<br>
</div></div>I guess I could be wrong, but I think the backwards incompatibilities<br>
are going to be *way* too severe to make option 2 possible in<br>
practice.<br>
<span class="HOEnZb"><font color="#888888"><br></font></span></blockquote><div><br></div><div>Backwards compatibility is also a major concern for me.  Here are my current thoughts<br><br></div><ul><li>Add an fpow ufunc that always converts to float, it would not accept object arrays.</li><li>Raise errors in current power ufunc (**), for ints to negative ints.</li></ul><div>The power ufunc will change in the following ways<br><br></div><ul><li>+1, -1 to negative ints will error, currently they work</li><li>n > 1 ints to negative ints will error, currently warn and return zero</li><li>0 to negative ints will error, they currently return the minimum integer</li></ul><div>The `**` operator currently calls the power ufunc, leave that as is for backward almost compatibility. The remaining question is numpy scalars, which we can make either compatible with Python, or with NumPy arrays. I'm leaning towards NumPy array compatibility mostly on account of type preservation and the close relationship between zero dimensionaly arrays and scalars.<br><br><br></div><div>The fpow function could be backported to NumPy 1.11 if that would be helpful going forward.<br></div><div><br></div><div>Chuck<br></div><div><br></div><div><br></div><br></div></div></div>