Hi, I would like to have objects that I can mix with ndarrays in arithmetic expressions but I need my object to have control of the operation even when it is on the right hand side of the equation. I realize from the documentation that the way to do this is to actually subclass ndarray but this is undesirable because I do not need all the heavy machinery of a ndarray and I do not want users to see all of the ndarray methods. Is there a way to somehow achieve these goals?
I would also very much appreciate some clarification of what is happening in the following basic example: import numpy as np class Foo(object): # THE NEXT LINE IS COMMENTED # __array_priority__ = 0 def __add__(self, other): print 'Foo has control over', other return 1 def __radd__(self, other): print 'Foo has control over', other return 1 x = np.arange(3) f = Foo() print f + x print x + f yields Foo has control over [0 1 2] 1 Foo has control over 0 Foo has control over 1 Foo has control over 2 [1 1 1] I see that I have control from the left side as expected and I suspect that what is happening in the second case is that numpy is trying to "broadcast" my object onto the left side as if it was an object array? Now if I uncomment the line __array_priority__ = 0 I do seem to accomplish my goals (see below) but I am not sure why. I am surprised, given what I have read in the documentation, that __array_priority__ does anything in a non subclass of ndarray. Furthermore, I am even more surprised that it does anything when it is 0, which is the same as ndarray.__array_priority__ from what I understand. Any clarification of this would be greatly appreciated. Output with __array_priority__ uncommented: jtaylor@yukon:~$ python foo.py Foo has control over [0 1 2] 1 Foo has control over [0 1 2] 1 Thanks, Jonathan. _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion