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:


In [3]:np.ma.arange(3) * [1,2,3]
Out[3]:
masked_array(data = [0 2 6],
              mask = False,
        fill_value = 999999)


In [4]:[1,2,3] * np.ma.arange(3)
Out[4]:
masked_array(data = [0 2 6],
              mask = False,
        fill_value = 999999)


Eric

> addition, etc. Here is a demonstration, observed with svn 6456:
> 
> import numpy as np
> 
> class MyArray(np.ndarray):
> 
>     __array_priority__ = 20
> 
>     def __new__(cls):
>         return np.asarray(1).view(cls).copy()
> 
>     def __array_wrap__(self, obj, context=None):
>         print 'array wrap:', self, obj, context
>         return obj.view(type(self))
> 
>     def __str__(self):
>         return 'MyArray(%s)'%super(MyArray,self).__str__()
> 
> mine = MyArray()
> 
> 
> print 3*mine
> print mine*3
> print [1,2,3]*mine
> print mine*[1,2,3]
> print
> print 3/mine
> print mine/3
> print [1,2,3]*mine
> print mine*[1,2,3]
> print
> print 3+mine
> print mine+3
> print [1,2,3]+mine
> print mine+[1,2,3]
> print
> print 3/mine
> print mine/3
> print [1,2,3]/mine
> print mine/[1,2,3]
> print
> print 3**mine
> print mine**3
> print [1,2,3]**mine
> print mine**[1,2,3]
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Numpy-discussion mailing list
> Numpy-discussion@scipy.org
> http://projects.scipy.org/mailman/listinfo/numpy-discussion

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

Reply via email to