A General Architecture comment:
Shape is an Abstract Base Class. I would usually expect the base class to contain all of the functions and fields that are common between sub classes.
For example, `Shape.draw` uses `self.signed_distance_bound`, `self.contains` and `self.bounds` but doesn't define them.

I would find it easier to know what `Shape` means if all common `Shape` elements were added to this class. They can be set to `None` for fields or use `raise NotImplementedError` for methods (as per [http://docs.python.org/2/library/exceptions.html#exceptions.NotImplementedError](http://docs.python.org/2/library/exceptions.html#exceptions.NotImplementedError) )