On 3/27/06, Travis Oliphant <[EMAIL PROTECTED]> wrote: > > If you have Numeric or numpy installed try this: > > #import Numeric as N > import numpy as N > > a = range(10) > b = N.arange(10) > > a.__iadd__(b) > > print a > > Result: > > [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] > > > Contrast the returned output with > > import numpy as N > > a = range(10) > b = N.arange(10) > > a += b > > print a > > Result: > > [ 0 2 4 6 8 10 12 14 16 18] > > > Having "a+=b" and "a.__iadd__(b)" do different things seems like an > unfortunate bug. > > It seems to me that the problem is that the INPLACE_ADD and > INPLACE_MULTIPLY cases in ceval.c use PyNumber_InPlace<YYY> instead of > trying PySequence_InPlace<YYY> when the object doesn't support the > in-place number protocol. > > I could submit a patch if there is agreement that this is a problem.
Well how is the interpreter to know whether += meanse numeric add or sequence add in any particular case? Shouldn't it be numpy's responsibility to implement both operations identically? (It's a design bug in Python that the + operation has two implementation slots. But it's difficult to fix that until Python 3000. It *will* be fixed there.) -- --Guido van Rossum (home page: http://www.python.org/~guido/) _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com