OpenFreeEnergy/gufe

Add `__module_version__` to special items in `GufeTokenizable` dict representation

dotsdl opened this issue · 1 comments

dotsdl commented

We currently include __qualname__ and __module__ in the dict, shallow_dict, and keyed_dict representations of any GufeTokenizable. These are necessary for re-instantiating a GufeTokenizable from these forms, identifying the class and source module to use.

In discussion with @ianmkenney this morning, we thought it may be useful for a variety of downstream uses to also include a __module_version__ item in these *dict forms, giving the version of the __module__ that created this form of the object. This would give a gufe-supported way to e.g. check for version mismatches between a serialized Protocol and the version of the corresponding module on a remote executor (such as in alchemiscale).

We could not think of any substantial drawbacks to including __module_version__, other than slightly increasing the size of these objects and their serialized forms.

@ianmkenney can you elaborate on your thinking here as well?

Note that there's already a _schema_version for each object. See #227. This is an object-specific version, specifically with the idea that it will handle serialization migrations. I can imagine use cases where __module_version__ provides other/easier to use information (might be harder to map the integer _schema_version to versions of software). However, let's try to avoid maintaining two mechanisms to solve the same problem.