This is a different issue then mine. Mine is that array_priority is not implemented for comparison.
Your is that array_priority isn't used when __array__ is defined. Maybe you can make a new mailing list thread? Issue get more attention when there is an associated email. I looked rapidly in numpy code, but didn't find the problem. So you will need to find someone with more time/knowledge about this to look at it or take a look yourself. HTH Fred On Sun, May 12, 2013 at 3:59 AM, Thomas Robitaille < thomas.robitai...@gmail.com> wrote: > 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 >
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion