# TypeError: unsupported operand type(s) for +: 'int' and 'IntervalMap'

Got the goal of adding functionalities to an existent project - IntervalMap project !. As the internal operators ( `__add__` , `__mul__` , etc.) aren't implemented yet, need to subscribe them.

This is the code I've implemented at `__add__` builtin to perform intervalmap addition.

``````# ...

"""
a = x + y
"""

aux = intervalmap()

if isinstance(other, self.__class__):

ruler = self._bounds + other._bounds
ruler = map(ruler.sort(), ruler)

for i, x in enumerate(ruler):

if i > 0:
_slice = slice(ruler[i-1], x, None)
point = (_slice.start + _slice.stop) / 2.0

if self[point] is None:
aux.__setitem__(_slice, other[point])
elif other[point] is None:
aux.__setitem__(_slice, self[point])
else:
aux.__setitem__(_slice, self[point] + other[point])

if isinstance(other, (int,float)):

for i, x in enumerate(self._bounds):

if i > 0:
point = (self._bounds[i-1] + x) / 2
aux[self._bounds[i-1]:x] = self[point] + other

return aux

# ...

if __name__ == '__main__':
x = intervalmap()
y = intervalmap()

x[1:2] = 6
x[4:5] = 1
x[7:8] = 5

y[0:3] = 4
y[3:6] = 2
y[6:9] = 11

print x
print y
``````

Output

``````>>> {[1, 2] => 6, [4, 5] => 1, [7, 8] => 5}

>>> {[0, 3] => 4, [3, 6] => 2, [6, 9] => 11}

a = x + y
b = y + x
print a
print b

>>> {[0, 1] => 4, [1, 2] => 10, [2, 3] => 4, [3, 4] => 2, [4, 5] => 3, [5, 6] => 2, [6, 7] => 11, [7, 8] => 16, [8, 9] => 11}

>>> {[0, 1] => 4, [1, 2] => 10, [2, 3] => 4, [3, 4] => 2, [4, 5] => 3, [5, 6] => 2, [6, 7] => 11, [7, 8] => 16, [8, 9] => 11}

a = y + 2
print a
b = 2 + y
print b

>>> {[0, 3] => 6, [3, 6] => 4, [6, 9] => 13}

Traceback (most recent call last): File "/home/pc/workspace/simulador-mti/source/y.py", line 73, in <module> b = 2 + y

TypeError: unsupported operand type(s) for +: 'int' and 'IntervalMap'
``````

Want to be abble to add a constant number to an intervalmap object no matter the position, right or left operand. How can I add a number as left operand?

By the way, do anyone see a way to do this in a generic way? like passing to an update function `x.update(y, lambda x,y: x+y)` to perform the same thing.

You can define `__radd__` method in addition to `__add__` .

To paraphrase a documentation :

```__radd__ is only called if the left operand does not support the add operation
and the operands are of different types. [2]
For instance, to evaluate the expression x + y, where y is an instance of a class

It should look like this:

``````class X(object):
def __init__(self, val):
self.val = val

if isinstance(other, X):
return X(self.val + other.val)
else:
return X(self.val + other)