Cleanup PerMachine classes, especially nullability #14019
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The main thing I wanted to fix is that currently calling
PerMachineDefaultable[T].default_missing()
returns aPerMachine[T | None]
, according to it's annotations and is possible according to its implementation but we universally expect that it should returnPerMachine[T]
. I've added asserts to ensure that this is the case, but we could write this as a return ofPerMachine[T] | None
, and then have the callers do a check to ensure that they're not getting a None. But I didn't like that.Anyway, I've also ported these over to be a dataclass, as that simplifies the initializer logic and allows us to remove custom
__repr__
methods, leading a net win on LOC and copying ourselves.