I've also been having issues with __array_priority__ - the following code behaves differently for __mul__ and __rmul__:
""" import numpy as np class TestClass(object): def __init__(self, input_array): self.array = input_array def __mul__(self, other): print "Called __mul__" def __rmul__(self, other): print "Called __rmul__" def __array_wrap__(self, out_arr, context=None): print "Called __array_wrap__" return TestClass(out_arr) def __array__(self): print "Called __array__" return np.array(self.array) """ with output: """ In [7]: a = TestClass([1,2,3]) In [8]: print type(np.array([1,2,3]) * a) Called __array__ Called __array_wrap__ <class '__main__.TestClass'> In [9]: print type(a * np.array([1,2,3])) Called __mul__ <type 'NoneType'> """ Is this also an oversight? I opened a ticket for it a little while ago: https://github.com/numpy/numpy/issues/3164 Any ideas? Cheers, Tom On 10 May 2013 18:34, Charles R Harris <charlesr.har...@gmail.com> wrote: > > > On Fri, May 10, 2013 at 10:08 AM, Frédéric Bastien <no...@nouiz.org> wrote: >> >> Hi, >> >> it popped again on the Theano mailing list that this don't work: >> >> np.arange(10) <= a_theano_vector. >> >> The reason is that __array_priority__ isn't respected for that class of >> operation. >> >> This page explain the problem and give a work around: >> >> >> http://stackoverflow.com/questions/14619449/how-can-i-override-comparisons-between-numpys-ndarray-and-my-type >> >> The work around is to make a python function that will decide witch >> version of the comparator to call and do the call. Then we tell NumPy to use >> that function instead of its current function with: np.set_numeric_ops(...) >> >> But if we do that, when we import theano, we will slow down all normal >> numpy comparison for the user, as when <= is execute, first there will be >> numpy c code executed, that will call the python function to decide witch >> version to do, then if it is 2 numpy ndarray, it will call again numpy c >> code. >> >> That isn't a good solution. We could do the same override in C, but then >> theano work the same when there isn't a c++ compiler. That isn't nice. >> >> What do you think of changing them to check for __array_priority__ before >> doing the comparison? > > > This looks like an oversight and should be fixed. > > Chuck > > _______________________________________________ > 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