Prepare for rcParams.copy() returning a new RcParams instance in the future #21015
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.
This would then allow
rcParams.update(<previously-copied-rcParams-instance>)
to not emita deprecation warning (by checking the type of the input) even if the
copied RcParams instance contains a deprecated rc entry, because we'll
know that it will already have gone through the validator when being set
on the copied rcParams instance.
This is a proposed fix for (some use cases of) #13118/#15781/#20249, because looking at them and at linked issues from other repos, it looks like most relevant use cases are third-parties wanting to copy the state of all rcParams at a given point, and then later restore them (something like rc_context, but where
__enter__
and__exit__
may be e.g. different functions). This PR would then (together with typechecking in RcParams.update) allow them to use the normalstashed_state = rcParams.copy(); <do whatever>; rcParams.update(stashed_state)
even in the presence of deprecated rcParams. (Admittedly, the whole thing is a bit abstract right now because there are no deprecated rcParams currently.)OTOH, perhaps a solution like this would also require #11509 being fixed first, because we wouldn't want assignments to the copied rcParams instance (not the global one) to affect the actual global state.
PR Summary
PR Checklist
pytest
passes).flake8
on changed files to check).flake8-docstrings
and runflake8 --docstring-convention=all
).doc/users/next_whats_new/
(follow instructions in README.rst there).doc/api/next_api_changes/
(follow instructions in README.rst there).