This maybe isn't too important, but  maybe we should wrap `expected_fields` and `ignored_fields` in a `set()` here, since this operand wouldn't work if a tuple or list was passed in for those args. I'm happy with it remaining like this though, wrapping it in a `set()` might be overkill, and it maybe makes sense to require them to be passed in as sets.