This seems OK to me, so this is minor, but I think I would rather have the step methods test whether q has changed rather than add this logic to `metrop_select`, keeping it simpler.
```
accepted = (q0 == q)
```

I'm pretty sure comparing dict equality is cheap.