As of 1.5.1 this worked: 

>>> numpy.__version__
1.5.1
>>> numpy.uint64(5) & 3
1L


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.  

-Travis
    


On Apr 6, 2012, at 12:45 AM, Charles R Harris wrote:

> 
> 
> On Thu, Apr 5, 2012 at 11:39 PM, Charles R Harris <charlesr.har...@gmail.com> 
> wrote:
> 
> 
> On Thu, Apr 5, 2012 at 11:16 PM, Travis Oliphant <tra...@continuum.io> wrote:
> Which version of NumPy are you using.  This could be an artefact of the new 
> casting rules.     
> 
> This used to work.   So, yes, this is definitely a bug. 
> 
> 
> It's because the '3' is treated as signed, so the uint64 needs to be cast to 
> something of higher precision, of which there is none. You can either use 
> uint64(3) or just stick to int64. I don't know if this used to work or not, 
> mixing signed and unsigned has always led to higher precision in arithmetic 
> operations, even (mistakenly in my opinion) promoting uint64(5) + 3 to lower 
> precision float64.
> 
> 
> In particular, in this case it is because two scalars are used. It works fine 
> for arrays
> 
> In [11]: ones(3, uint64) & 3
> Out[11]: array([1, 1, 1], dtype=uint64)
> 
> Chuck 
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion

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

Reply via email to