[Numpy-discussion] possible bug: __array_wrap__ is not called during arithmetic operations in some cases

Pierre GM pgmdevlist@gmail....
Sun Feb 22 17:28:56 CST 2009


On Feb 22, 2009, at 6:21 PM, Eric Firing wrote:

> Darren Dale wrote:
>> Does anyone know why __array_wrap__ is not called for subclasses  
>> during
>> arithmetic operations where an iterable like a list or tuple  
>> appears to
>> the right of the subclass? When I do "mine*[1,2,3]", array_wrap is  
>> not
>> called and I get an ndarray instead of a MyArray. "[1,2,3]*mine" is
>> fine, as is "mine*array([1,2,3])". I see the same issue with  
>> division,
>
> The masked array subclass does not show this behavior:

Because MaskedArray.__mul__ and others are redefined.

Darren, you can fix your problem by redefining MyArray.__mul__ as:

     def __mul__(self, other):
         return np.ndarray.__mul__(self, np.asanyarray(other))

forcing the second term to be a ndarray (or a subclass of). You can do  
the same thing for the other functions (__add__, __radd__, ...)


More information about the Numpy-discussion mailing list