Hi, I'm writing to report what looks like a two bugs in the handling of strings of length 0.  (I'm using 1.4.0.dev7746, on Mac OSX 10.5.8.   The problems below occur both for python 2.5 compiled 32-bit as well as python2.6 compiled 64-bit). <br>
<br><br>Bug #1:  <br>A problem arises when you try to create a record array passing a type of '|S0'.<br><br>>>> Cols = [['test']*10,['']*10]<br><br>When not passing any dtype, this is created into a recarray with no problem:<br>
<br>>>> np.rec.fromarrays(Cols)<br>rec.array([('test', ''), ('test', ''), ('test', ''), ('test', ''),<br>       ('test', ''), ('test', ''), ('test', ''), ('test', ''),<br>
       ('test', ''), ('test', '')], <br>      dtype=[('f0', '|S4'), ('f1', '|S1')])<br><br>However, trouble arises when I try to pass a length-0 dtype explicitly.<br>
<br>>>> d = np.dtype([('A', '|S4'), ('B', '|S')])<br>>>> np.rec.fromarrays(Cols,dtype=d) <br>rec.array([('test', ''), ('\x00est', ''), ('\x00est', ''), ('\x00est', ''),<br>
       ('\x00est', ''), ('\x00est', ''), ('\x00est', ''), ('\x00est', ''),<br>       ('\x00est', ''), ('\x00est', '')], <br>      dtype=[('A', '|S4'), ('B', '|S0')])<br>
<br>The same thing occurs if I cast to np arrays before passing to np.rec.fromarrays:<br><br>>>> _arrays = [np.array(Cols[0],'|S4'),np.array(Cols[1],'|S')]<br>[array(['test', 'test', 'test', 'test', 'test', 'test', 'test', 'test',<br>
       'test', 'test'], <br>      dtype='|S4'),<br> array(['', '', '', '', '', '', '', '', '', ''], <br>      dtype='|S1')]<br>
<br>>>> np.rec.fromarrays(_arrays,dtype=d)<br>rec.array([('test', ''), ('\x00est', ''), ('\x00est', ''), ('\x00est', ''),<br>       ('\x00est', ''), ('\x00est', ''), ('\x00est', ''), ('\x00est', ''),<br>
       ('\x00est', ''), ('\x00est', '')], <br>      dtype=[('A', '|S4'), ('B', '|S0')])<br><br>(Btw, why does np.array(['',''],'|S')) return an array with dtype '|S1'?  Why not '|S0'?  Are length-0 arrays being avoided explicitly? If so, why?)<br>
<br><br>Bug #2:  I'm not sure this is a bug, but it is annoying: np.dtype won't accept '|S0' as a type argument.<br><br>>>> np.dtype('|S0')<br>TypeError: data type not understood<br><br>I have to do something like this:<br>
<br>>>> d = np.dtype('|S')<br>>>> d<br>dtype('|S0')<br><br>to get what I want.   Is this intended?  Regardless, this inconsistency also means that things like:<br><br>>>> np.dtype(d.descr)<br>
<br>can fail even when d is a properly constructed dtype object with a '|S0' type, which seems a little perverse. <br><br><br> Am I just not supposed to be working with length-0 string columns, period? <br><br><br>
<br>Thanks,<br>Dan<br>