Avoid overwrite of compiled module wrapper attributes #5549
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.
Fix overwriting of the compiled wrapper class attributes by those of the wrapped class itself: Copy only those attributes which are not already present in the wrapper.
In the current implementation of the
CompiledModuleWrapper
the wrapper attributes (egforward
method) are overwritten byself._dict_ = module._dict_.copy()
:This causes the
wrapper
'sforward
method not being called and, consequently, the wrapped module not compiled. Instead, the wrapped moduleforward
method is being called as illustrated in the diagram below (a real scenario from Deespeed-Chat):The proposed fix copies only those attributes which are not present in the wrapper class, thus implementing the desired inheritance quality of the wrapper.
Attached is a simple reproducer of the problem.
compiled_module_wrapper_bug.zip