<div dir="ltr"><div><div>Yes, that is the change I am thinking of. And yes, it hasn't happened yet. But, it has been set to warn for a few years now, and there was a lot of controversy over it when it was first proposed. That said, I do think the way it was handled made sense, and it is a good model to follow for these types of changes.<br><br></div>For all intents and purposes, MaskedArray is "core numpy" for many users. Yes, it has its quirks, but it has been very stable for many years, and users have gotten used to the quirks. While I am all for taking steps to eliminate as many quirks as possible, we need to be mindful of such potentially disruptive changes and give users enough of a heads-up about it.<br><br></div>Ben Root<br><br><div><div><br><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 10, 2017 at 1:00 PM, Allan Haldane <span dir="ltr"><<a href="mailto:allanhaldane@gmail.com" target="_blank">allanhaldane@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 07/18/2017 09:52 AM, Benjamin Root wrote:<br>
> This sort of change seems very similar to the np.diag() change a few years<br>
> ago. Are there lessons we could learn from then that we could apply to here?<br>
><br>
> Why would the returned view not be a masked array?<br>
><br>
> Ben Root<br>
<br>
</span>I am in favor of the proposed change below.<br>
<br>
I'd like to merge it, but before that I want to make sure I understand<br>
your comment.<br>
<br>
Are you referring to the proposed change to make diag return a view<br>
instead of a copy? Note that this has not actually happened yet:<br>
<a href="https://github.com/numpy/numpy/issues/7661" rel="noreferrer" target="_blank">https://github.com/numpy/<wbr>numpy/issues/7661</a><br>
<br>
Also, I think this case is different because it does not change core<br>
numpy, rather this is to make the MaskedArray module act more<br>
consistently with core numpy. Because of that I think it is much less<br>
problematic than the diag changes.<br>
<br>
Cheers,<br>
Allan<br>
<span class=""><br>
<br>
> On Tue, Jul 18, 2017 at 9:37 AM, Eric Wieser <<a href="mailto:wieser.eric%2Bnumpy@gmail.com">wieser.eric+numpy@gmail.com</a>><br>
> wrote:<br>
><br>
>> When using ndarray.squeeze, a view is returned, which means you can do<br>
>> the follow (somewhat-contrived) operation:<br>
>><br>
>>>>> def fill_contrived(a):<br>
>>         a.squeeze()[...] = 2<br>
>>         return a<br>
>>>>> fill_contrived(np.array([1]))<br>
>> array(2)<br>
>><br>
>> However, when tried with a masked array, this can fail, breaking liskov<br>
>> subsitution:<br>
>><br>
>>>>> fill_contrived(np.ma.array([1]<wbr>, mask=[True]))<br>
>> MaskError: Cannot alter the masked element.<br>
>><br>
>> This fails because squeeze breaks the contract of returning a view,<br>
>> instead deciding sometimes to return masked.<br>
>><br>
>> There is a patch that fixes this in gh-9432<br>
</span>>> <<a href="https://github.com/numpy/numpy/pull/9432" rel="noreferrer" target="_blank">https://github.com/numpy/<wbr>numpy/pull/9432</a>> - however, by necessity it<br>
<div class="HOEnZb"><div class="h5">>> breaks any existing code that uses m_arr.squeeze() is np.ma.masked.<br>
>><br>
>> Is this too breaking a change?<br>
>><br>
>> Eric<br>
>> ​<br>
>><br>
>> ______________________________<wbr>_________________<br>
>> NumPy-Discussion mailing list<br>
>> <a href="mailto:NumPy-Discussion@python.org">NumPy-Discussion@python.org</a><br>
>> <a href="https://mail.python.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.python.org/<wbr>mailman/listinfo/numpy-<wbr>discussion</a><br>
>><br>
>><br>
><br>
><br>
><br>
> ______________________________<wbr>_________________<br>
> NumPy-Discussion mailing list<br>
> <a href="mailto:NumPy-Discussion@python.org">NumPy-Discussion@python.org</a><br>
> <a href="https://mail.python.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.python.org/<wbr>mailman/listinfo/numpy-<wbr>discussion</a><br>
><br>
<br>
______________________________<wbr>_________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@python.org">NumPy-Discussion@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.python.org/<wbr>mailman/listinfo/numpy-<wbr>discussion</a><br>
</div></div></blockquote></div><br></div>