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

Travis Oliphant oliphant.travis at ieee.org
Tue Mar 28 03:08:00 CEST 2006


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 instead of trying PySequence_InPlace 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.

-Travis



More information about the Python-Dev mailing list