Just a couple of suggestions:

1. Name your methods for what the return, not what they do. `make_districts` could be `districts`, which makes using these methods make a bit more sense `Atlas.districts.each....`
2. In the future to make this class library agnostic, you could allow the districts to be passed in as an argument. This way it's just a tool that can take in any object that has `bounds` and apply the Pip logic.