Probably this will cause a lot of groans, but I've definitely written code 
modifying `broadcast_to` outputs, intentionally. As such I am -1 on this whole 
endeavour. My preference on making arrays read-only is to have a very light 
touch if any. As an example, at some point `np.diag` started returning 
read-only views. Setting or modifying the diagonal of a matrix is a common 
operation, so this decision uglified my code (grab the diagonal, make it 
writeable, write to it, instead of `np.diag(M) = x`.

I'll admit that the times that I modified the `broadcast_to` output I felt 
rather hacky and sheepish, but the point is that it's unlikely that someone who 
is using this function doesn't know what they're doing, isn't it? I wouldn't 
have even thought to look for this function before I understood what 
broadcasting and 0-strides were. In fact, I use it *specifically* to save 
memory and use zero strides.

Matti, could you comment a bit on the motivation behind this change and why you 
feel it's necessary?

Thanks,

Juan.


> On 25 Dec 2018, at 10:26 pm, Hameer Abbasi <einstein.edi...@gmail.com> wrote:
> 
> Hi!
> 
> Broadcasting almost always returns a repeated output 
> (except when all arrays are the same shape), that’s the entire point. I 
> suspect this function is in fairly widespread use and will therefore cause a 
> lot of downstream issues when repeating, so I’m -0.5 on a DeprecationWarning. 
> A FutureWarning might be more appropriate, in which case I’m +0.2.
> 
> As for making the output read-only, that might break code, but most likely 
> the code was erroneous anyway. But breaking backward-compatibility without a 
> grace period is unheard of in this community. I’m +0.5 on it anyway. 🤷🏻‍♂️
> 
> Overall, a kind of hairy problem with no clear solution.
> 
> Best Regards,
> Hameer Abbasi
> 
> On Tuesday, Dec 25, 2018 at 12:13 PM, Matti Picus <matti.pi...@gmail.com 
> <mailto:matti.pi...@gmail.com>> wrote:
> In PR 12609 https://github.com/numpy/numpy/pull/12609 I added code to 
> emit a DepricationWarning when broadcast_arrays returns an array where 
> the output is repeated. While this is a minimal fix to the problem, 
> perhaps we should consider making the output readonly immediately instead? 
> 
> 
> - A deprecation cycle requires two changes to downstream user's code: 
> one to filter the deprecation warning, and another when we actually make 
> the change 
> 
> - Writing to the repeated data will cause errors now. 
> 
> 
> What do you think, should we change the behaviour at all, and if so 
> should we depricate it over two releases or change it immediately? 
> 
> 
> The original issue is here https://github.com/numpy/numpy/issues/2705 
> 
> 
> Matti 
> 
> _______________________________________________ 
> NumPy-Discussion mailing list 
> NumPy-Discussion@python.org 
> https://mail.python.org/mailman/listinfo/numpy-discussion 
> 
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@python.org
> https://mail.python.org/mailman/listinfo/numpy-discussion

_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@python.org
https://mail.python.org/mailman/listinfo/numpy-discussion

Reply via email to