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

Reply via email to