[Numpy-discussion] possible bug in dtype for records

Travis Oliphant oliphant at ee.byu.edu
Wed Feb 15 11:27:14 EST 2006


Stefan van der Walt wrote:

>Using
>
>In [3]: numpy.__version__
>Out[3]: '0.9.5.2024'
>
>I see the following:
>
>In [4]: import numpy as N
>
>In [5]: ctype = N.dtype({'names': ('x', 'y', 'z'), 'formats' : [N.float32, N.float32, N.float32]})
>
>In [6]: ctype
>Out[6]: dtype([('x', '<f4'), ('y', '<f4'), ('z', '<f4')])
>
>In [7]: N.array([(1,2,3), (4,5,6)], dtype=ctype)
>Segmentation fault
>
>However, when I use a mutable list for defining dtype, i.e.
>
>'names': ['x', 'y', 'z'] instead of
>'names': ('x', 'y', 'z')
>
>it works fine.
>
>Is this expected behaviour?
>  
>

Got it.  Basically, the VOID_setitem code expected the special -1 entry 
in the fields dictionary to be a list, but it was never enforced.  So, 
when you entered a tuple like this problems arose.

I changed it in SVN so that the -1 entry is always a tuple (you can't 
change the fields names anyway unless you define a new data-type) so its 
more aptly described as a tuple.

Thanks again for finding this...

-Travis





More information about the NumPy-Discussion mailing list