Re: [Numpy-discussion] chararray behavior

2008-07-08 Thread Travis E. Oliphant
Alan McIntyre wrote:
 Since chararray doesn't currently have any tests, I'm writing some,
 and I ran across a couple of things that didn't make sense to me:

 1. The code for __mul__ is exactly the same as that for __rmul__; is
 there any reason __rmul__ shouldn't just call __mul__?
   
Just additional function call overhead, but it's probably fine to just 
call __mul__.

 1.5. __radd__ seems like it doesn't do anything fundamentally
 different from __add__, is there a reason to have a separate
 implementation of __radd__?
   
Possibly.   I'm not sure.

 2. The behavior of __mul__ seems odd:
   
What is odd about this?

It is patterned after

  'a' * 3
  'a' * 4
  'a' * 5

for regular python strings.



-Travis

___
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion


Re: [Numpy-discussion] chararray behavior

2008-07-08 Thread Alan McIntyre
On Tue, Jul 8, 2008 at 1:29 PM, Travis E. Oliphant
[EMAIL PROTECTED] wrote:
 Alan McIntyre wrote:
 Since chararray doesn't currently have any tests, I'm writing some,
 and I ran across a couple of things that didn't make sense to me:

 1. The code for __mul__ is exactly the same as that for __rmul__; is
 there any reason __rmul__ shouldn't just call __mul__?

 Just additional function call overhead, but it's probably fine to just
 call __mul__.

 1.5. __radd__ seems like it doesn't do anything fundamentally
 different from __add__, is there a reason to have a separate
 implementation of __radd__?

 Possibly.   I'm not sure.

I'll probably leave them alone; I was just curious, mostly.

 2. The behavior of __mul__ seems odd:

 What is odd about this?

 It is patterned after

   'a' * 3
   'a' * 4
   'a' * 5

 for regular python strings.

That's what I would have expected, but for N = 4, Q*N is the same as Q*4.
___
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion


Re: [Numpy-discussion] chararray behavior

2008-07-08 Thread Anne Archibald
2008/7/8 Alan McIntyre [EMAIL PROTECTED]:
 On Tue, Jul 8, 2008 at 1:29 PM, Travis E. Oliphant
 [EMAIL PROTECTED] wrote:
 Alan McIntyre wrote:
 2. The behavior of __mul__ seems odd:

 What is odd about this?

 It is patterned after

   'a' * 3
   'a' * 4
   'a' * 5

 for regular python strings.

 That's what I would have expected, but for N = 4, Q*N is the same as Q*4.

In particular, the returned type is always string of length four,
which is very peculiar - why four?  I realize that variable-length
strings are a problem (object arrays, I guess?), as is returning
arrays of varying dtypes (strings of length N), but this definitely
violates the principle of least surprise...

Anne
___
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion


Re: [Numpy-discussion] chararray behavior

2008-07-08 Thread Alan McIntyre
On Tue, Jul 8, 2008 at 3:30 PM, Anne Archibald
[EMAIL PROTECTED] wrote:
 In particular, the returned type is always string of length four,
 which is very peculiar - why four?  I realize that variable-length
 strings are a problem (object arrays, I guess?), as is returning
 arrays of varying dtypes (strings of length N), but this definitely
 violates the principle of least surprise...

Hmm..__mul__ calculates the required size of the result array, but the
result of the calculation is a numpy.int32.  So ndarray__new__ is
given this int32 as the itemsize argument, and it looks like the
itemsize of the argument (rather than its contained value) is used as
the itemsize of the new array:

 np.chararray((1,2), itemsize=5)
chararray([[';f', '\x00\x00\x00@']],
  dtype='|S5')
 np.chararray((1,2), itemsize=np.int32(5))
chararray([['{5', '']],
  dtype='|S4')
 np.chararray((1,2), itemsize=np.int16(5))
chararray([['{5', '']],
  dtype='|S2')

Is this expected behavior?  I can fix this particular case by forcing
the calculated size to be a Python int, but this treatment of the
itemsize argument seems like it might be an easy way to cause subtle
bugs.
___
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion


[Numpy-discussion] chararray behavior

2008-07-07 Thread Alan McIntyre
Since chararray doesn't currently have any tests, I'm writing some,
and I ran across a couple of things that didn't make sense to me:

1. The code for __mul__ is exactly the same as that for __rmul__; is
there any reason __rmul__ shouldn't just call __mul__?
1.5. __radd__ seems like it doesn't do anything fundamentally
different from __add__, is there a reason to have a separate
implementation of __radd__?
2. The behavior of __mul__ seems odd:

 Q=np.chararray((2,2),itemsize=1,buffer='abcd')
 Q
chararray([['a', 'b'],
   ['c', 'd']],
  dtype='|S1')
 Q*3
chararray([['aaa', 'bbb'],
   ['ccc', 'ddd']],
  dtype='|S4')
 Q*4
chararray([['', ''],
   ['', '']],
  dtype='|S4')
 Q*5
chararray([['', ''],
   ['', '']],
  dtype='|S4')

Is it supposed to work this way?

Thanks,
Alan
___
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion