[Python-Dev] INPLACE_ADD and INPLACE_MULTIPLY oddities in ceval.c (original) (raw)

Guido van Rossum guido at python.org
Tue Mar 28 03:21:18 CEST 2006


On 3/27/06, Travis Oliphant <oliphant.travis at ieee.org> 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 INPLACEADD and INPLACEMULTIPLY cases in ceval.c use PyNumberInPlace instead of trying PySequenceInPlace 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/)



More information about the Python-Dev mailing list