[NumPy-Tickets] [NumPy] #2093: Casting rule change since 1.6.1

NumPy Trac numpy-tickets@scipy....
Wed Mar 28 17:11:09 CDT 2012


#2093: Casting rule change since 1.6.1
---------------------------+------------------------------------------------
 Reporter:  matthew.brett  |       Owner:  somebody   
     Type:  defect         |      Status:  new        
 Priority:  normal         |   Milestone:  Unscheduled
Component:  Other          |     Version:  devel      
 Keywords:                 |  
---------------------------+------------------------------------------------
Description changed by matthew.brett:

Old description:

> This, in numpy 1.6.1:
>
> In [2]: (np.zeros((2,), dtype=np.uint8) + np.int16(257)).dtype
> Out[2]: dtype('int16')
>
> changed to this in current trunk:
>
> In [2]: (np.zeros((2,), dtype=np.uint8) + np.int16(257)).dtype
> Out[2]: dtype('uint16')
>
> which is different still in previous versions of numpy (e.g. 1.4.1):
>
> In [2]: (np.zeros((2,), dtype=np.uint8) + np.int16(257)).dtype
> Out[2]: dtype('uint8')
>
> (see below for more versions)
>
> My impression had been that the plan was to avoid changes in the
> casting rules if possible.
>
> I assume this change was not intentional?
>
> {{{
> import numpy as np
>
> Adata = np.zeros((2,), dtype=np.uint8)
> Bdata = np.zeros((2,), dtype=np.int16)
> Bzero = np.int16(0)
> Bbig = np.int16(256)
>
> print np.__version__
> print 'Array add', (Adata + Bdata).dtype
> print 'Scalar 0 add', (Adata + Bzero).dtype
> print 'Scalar 256 add', (Adata + Bbig).dtype
> }}}
>
> I get this output:
>
> 1.4.1
> Array add int16
> Scalar 0 add uint8
> Scalar 256 add uint8
>
> 1.5.1
> Array add int16
> Scalar 0 add uint8
> Scalar 256 add uint8
>
> 1.6.1
> Array add int16
> Scalar 0 add uint8
> Scalar 256 add int16
>
> 1.7.0.dev-aae5b0a
> Array add int16
> Scalar 0 add uint8
> Scalar 256 add uint16

New description:

 This, in numpy 1.6.1:

 In [2]: (np.zeros((2,), dtype=np.uint8) + np.int16(257)).dtype
 Out[2]: dtype('int16')

 changed to this in current trunk:

 In [2]: (np.zeros((2,), dtype=np.uint8) + np.int16(257)).dtype
 Out[2]: dtype('uint16')

 which is different still in previous versions of numpy (e.g. 1.4.1):

 In [2]: (np.zeros((2,), dtype=np.uint8) + np.int16(257)).dtype
 Out[2]: dtype('uint8')

 (see below for more versions)

 My impression had been that the plan was to avoid changes in the
 casting rules if possible.

 I assume this change was not intentional?

 Testing with this script:

 {{{
 import numpy as np

 Adata = np.zeros((2,), dtype=np.uint8)
 Bdata = np.zeros((2,), dtype=np.int16)
 Bzero = np.int16(0)
 Bbig = np.int16(256)

 print np.__version__
 print 'Array add', (Adata + Bdata).dtype
 print 'Scalar 0 add', (Adata + Bzero).dtype
 print 'Scalar 256 add', (Adata + Bbig).dtype
 }}}

 Gives the following output:

 {{{
 1.4.1
 Array add int16
 Scalar 0 add uint8
 Scalar 256 add uint8

 1.5.1
 Array add int16
 Scalar 0 add uint8
 Scalar 256 add uint8

 1.6.1
 Array add int16
 Scalar 0 add uint8
 Scalar 256 add int16

 1.7.0.dev-aae5b0a
 Array add int16
 Scalar 0 add uint8
 Scalar 256 add uint16
 }}}

--

-- 
Ticket URL: <http://projects.scipy.org/numpy/ticket/2093#comment:1>
NumPy <http://projects.scipy.org/numpy>
My example project


More information about the NumPy-Tickets mailing list