This is one of the more unusual and interesting design decisions in this project, I think. 
Before I read the code, I expected to see something like 
```
 def draw(self, image, xform = None):
     if xform is None: xform = identity()
     this_xform = xform * self.transform
     for node in self.nodes:
          node.draw(image, this_xform)
```
Your approach is very clever, and it's worth talking about the pros/cons of it. 

In particular, it appears to be the reason that the `transform` function on `Shape` returns a new shape instead of modifying `self` (which also seem unusual). If `transform` modified `self`, then each time you called `draw` on the scene, the nodes would be transformed again.

It took me a few times reading through the code and some modifications of the tests before I grokked this relationship. I think that it would be valuable to explain the decision in the chapter.