This seems odd to me. Unraveling what is going on (so far): Let a = np.complex64(1j) and b = A()
* np.complex64.__add__ is calling np.add * np.add(a, b) needs to search for an "add" loop that matches the input types and it finds one with signature ('O', 'O') -> 'O' * a is converted to an array via the equivalent of a1 = array(a,'O') * b is converted to an array in the same way b1 = array(b, 'O') Somehow a1 as an array of objects is an array of "complex" types instead of "complex64" types Then the equivalent of a1[()] + b1[()] is called. So, the conversion is being done by a1 = array(a, 'O') I don't know why this is. This seems like a regression, but I don't have an old version of NumPy to check. compare: type(a) type(np.array(a,'O')[()]) These should be the same type. But they are not... -Travis On Feb 1, 2012, at 1:26 PM, Andreas Kloeckner wrote: > Hi all, > > here's something I don't understand. Consider the following code snippet: > > --------------------------------------------------- > class A(object): > def __radd__(self, other): > print(type(other)) > > import numpy as np > np.complex64(1j) + A() > --------------------------------------------------- > > In my world, this should print <type 'numpy.complex64'>. > It does print <type 'complex'>. > > Who is casting my sized complex to a built-in complex, and why? > > It can be Python's type coercion, because the behavior is the same in > Python 3.2. (And the docs say Python 3 doesn't support coercion.) > > (Please cc me.) > > Thanks, > Andreas > _______________________________________________ > 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