Thanks to visit codestin.com
Credit goes to github.com

Skip to content

MNT: Use a context manager to change the norm in colorbar code #22523

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 8, 2022

Conversation

greglucas
Copy link
Contributor

PR Summary

This removes a deepcopy of the norm in Colorbar, instead updating
the vmin/vmax via the context manager and ignoring any
callback updates in the process.

xref: #22313

PR Checklist

Tests and Styling

  • [N/A] Has pytest style unit tests (and pytest passes).
  • Is Flake 8 compliant (install flake8-docstrings and run flake8 --docstring-convention=all).

Documentation

  • New features are documented, with examples if plot related.
  • New features have an entry in doc/users/next_whats_new/ (follow instructions in README.rst there).
  • API changes documented in doc/api/next_api_changes/ (follow instructions in README.rst there).
  • Documentation is sphinx and numpydoc compliant (the docs should build without error).

@greglucas greglucas added this to the v3.6.0 milestone Feb 21, 2022
@greglucas greglucas mentioned this pull request Feb 21, 2022
6 tasks
return (X, Y, extendlen)
else:
return (Y, X, extendlen)
with self.norm.callbacks.blocked(), \
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess maybe we should move this inside the else below? Also why do you need to use setattr_cm here? Maybe a comment?

I guess I am still confused why we need a deepcopy here versus just a shallow copy.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good call on moving this to within the else. I just did that and added some more verbose comments.

The reason we don't want a copy is that there are signals attached to the norm to keep it in sync with the scalar mappable and autoscale_None machinery, so doing a temporary update would fire those signals and potentially propagate some unwanted changes or double update some features. The context manager is a nice way of doing the temporary update without needing to make a full copy.

This removes a deepcopy of the norm in Colorbar, instead updating
the vmin/vmax via the context manager and ignoring any
callback updates in the process.
@greglucas greglucas force-pushed the cbar-rm-norm-deepcopy branch from 7d35771 to fdb4ad3 Compare February 22, 2022 13:53
@timhoffm timhoffm merged commit 23cd7dd into matplotlib:main Mar 8, 2022
@greglucas greglucas deleted the cbar-rm-norm-deepcopy branch March 8, 2022 15:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants