[Numpy-discussion] Bitwise operations and unsigned types
Fri Apr 6 01:19:06 CDT 2012
On Apr 6, 2012, at 1:01 AM, Charles R Harris wrote:
> On Thu, Apr 5, 2012 at 11:57 PM, Travis Oliphant <firstname.lastname@example.org> wrote:
> As of 1.5.1 this worked:
> >>> numpy.__version__
> >>> numpy.uint64(5) & 3
> So, this is a regression and a bug. It should be fixed so that it doesn't raise an error. I believe the scalars were special cased so that a raw 3 would not be interpreted as a signed int when it is clearly unsigned. The casting rules were well established over a long period. They had issues, but they should not have been changed like this in a 1.X release.
> Fortunately there are work-arounds and these issues arise only in corner cases, but we should strive to do better.
> I disagree, promoting to object kind of destroys the whole idea of bitwise operations. I think we *fixed* a bug.
That is an interesting point of view. I could see that point of view. But, was this discussed as a bug prior to this change occurring?
I just heard from a very heavy user of NumPy that they are nervous about upgrading because of little changes like this one. I don't know if this particular issue would affect them or not, but I will re-iterate my view that we should be very careful of these kinds of changes.
In this particular case, what should the behavior be? It would be ideal if the scalar math did not just re-use the array-math machinery. Let's say that scalars had their own bit-wise operator. What should the output of
numpy.uint64(5) & 3 actually be? I think it should interpret the 3 as unsigned and perform the operation (but not promote to an object).
> NumPy-Discussion mailing list
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the NumPy-Discussion