[Numpy-discussion] __array_priority__ don't work for gt, lt, ... operator
nouiz at nouiz.org
Wed May 15 13:56:27 EDT 2013
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.
On Sun, May 12, 2013 at 3:59 AM, Thomas Robitaille <
thomas.robitaille at 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 : a = TestClass([1,2,3])
> In : print type(np.array([1,2,3]) * a)
> Called __array__
> Called __array_wrap__
> <class '__main__.TestClass'>
> In : 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:
> Any ideas?
> On 10 May 2013 18:34, Charles R Harris <charlesr.harris at gmail.com> wrote:
> > On Fri, May 10, 2013 at 10:08 AM, Frédéric Bastien <nouiz at nouiz.org>
> >> 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:
> >> 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:
> >> 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
> >> numpy c code executed, that will call the python function to decide
> >> 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__
> >> doing the comparison?
> > This looks like an oversight and should be fixed.
> > Chuck
> > _______________________________________________
> > NumPy-Discussion mailing list
> > NumPy-Discussion at scipy.org
> > http://mail.scipy.org/mailman/listinfo/numpy-discussion
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the NumPy-Discussion