Introduce new slots-based Proxy implementation
#539
Merged
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.
Description
This PR replaces use of
lazy_object_proxy.slots.Proxywith a new custom slots-basedProxyimplementation. Compared to the priorProxyimplementation with extendedlazy_object_proxy.slots.Proxyto add different pickling mechanics, the newproxystore.proxy.Proxyhas better handling for__module__access, a simpler MRO hierarchy (i.e., less inheritance), correct support for__annotations__, and drops magic methods deprecated in Python 3.Of these changes, the most important is that
__module__now behaves differently if accessed onProxydirectly or an instance ofProxy.This change addresses many long-standing headaches related to using proxies:
help(proxystore.proxy)works correctly and no longer raises a vagueTypeError: '<' not supported between instances of 'str' and 'property'.__module__attribute of object types no longer fail (as in Parsl and Dask).Internally, this required a lot of changes. Most importantly is that
lazy_object_proxy.slots.Proxyneeded to be modified so that source has been copied into ProxyStore's source and modified. The license forlazy-object-proxyis now included inTHIRD_PARTY_LICENSESand included in the relevant source files containing the third-party code.Fixes
Proxyclass #517Type of Change
Testing
Added a lot of new tests.
Pull Request Checklist
Please confirm the PR meets the following requirements.
pre-commit(e.g., mypy, ruff, etc.).