So there are two unrelated issues here. First, that currently you can do shape + shape and the result is never desirable. We should fix that by not using namedtuple while still allowing to destructure shapes using width, signed = shape. (Is that possible? I think we can override __iter__ to do it...)
Second, the idea of overloading the + operation on shapes to do something not really related to addition. It doesn't seem like a good idea to me, but we can discuss it in a different issue.