<html>
<body>

        
                 
         I will use walkaround but I think you'd better fix the numpy bug:<br />
                <br /> from numpy import ndarray, float64, asanyarray, array<br /> class asdf(ndarray):<br /> &nbsp;&nbsp;&nbsp; __array_priority__ = 10<br /> &nbsp;&nbsp;&nbsp; def __new__(self, vals1, vals2):<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; obj = asanyarray(vals1).view(self)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; obj.vals2 = vals2<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return obj<br /> &nbsp;&nbsp;&nbsp; def __add__(self, other):<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print('add')<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assert not isinstance(other , asdf), 'unimplemented'<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return asdf(self.view(ndarray) + other, self.vals2)<br /> &nbsp;&nbsp;&nbsp; def __radd__(self, other):<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print('radd')<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assert not isinstance(other , asdf), 'unimplemented'<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return asdf(self.view(ndarray) + other, self.vals2)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br /> a = asdf(array((1, 2, 3)), array((10, 20, 30)))<br /> z = float64(1.0)<br />
                <br /> print(a.__array_priority__) # 10<br /> print(z.__array_priority__) # -1000000.0<br />
                <br /> r2 = a + z<br /> print(r2.vals2) # ok, prints 'add' and (10,20,30)<br />
                <br /> r1 = z+a<br /> print(r1.vals2)<br /> &nbsp;# doesn't print "radd" (i.e. doesn't enters asdf.__radd__ function at all)<br /> # raises AttributeError<br /> #"'asdf' object has no attribute 'vals2'"<br />
                <br /> tried in Python2 + numpy 1.6.1 and Python3 + numpy 1.7.0 dev<br />    

</body>
</html>