This sort of change seems very similar to the np.diag() change a few years ago. Are there lessons we could learn from then that we could apply to here?

Why would the returned view not be a masked array?

Ben Root

On Tue, Jul 18, 2017 at 9:37 AM, Eric Wieser <> wrote:

When using ndarray.squeeze, a view is returned, which means you can do the follow (somewhat-contrived) operation:

>>> def fill_contrived(a):
        a.squeeze()[...] = 2
        return a

>>> fill_contrived(np.array([1]))

However, when tried with a masked array, this can fail, breaking liskov subsitution:

>>> fill_contrived([1], mask=[True]))
MaskError: Cannot alter the masked element.

This fails because squeeze breaks the contract of returning a view, instead deciding sometimes to return masked.

There is a patch that fixes this in gh-9432 - however, by necessity it breaks any existing code that uses m_arr.squeeze() is

Is this too breaking a change?



NumPy-Discussion mailing list