Skip to content

Remove custom backend_nbagg.show(), putting logic in manager show. #23100

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
Jun 24, 2022

Conversation

anntzer
Copy link
Contributor

@anntzer anntzer commented May 22, 2022

The _Backend class machinery can autogenerate a backend_module.show()
function, which (in short) calls manager.show() on all managers and then
calls the optionally-provided mainloop() function.

backend_nbagg currently completely bypasses this autogeneration because
it wants to additionally fiddle with callbacks and Gcf (it doesn't need
any mainloop()), but that logic can just as well go to
FigureManagerNbAgg.show() instead. This way it benefits from the
default-generated show; moreover, it seems a bit strange that figures
shown with manager.show() (instead of plt.show()) do indeed get
displayed, but just don't have their callbacks/Gcf-ness adjusted.

This is also related to the move towards putting show()-generating
information on the canvas class for inheritability (#23090).

PR Summary

PR Checklist

Tests and Styling

  • 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).

The _Backend class machinery can autogenerate a backend_module.show()
function, which (in short) calls manager.show() on all managers and then
calls the optionally-provided mainloop() function.

backend_nbagg currently completely bypasses this autogeneration because
it wants to additionally fiddle with callbacks and Gcf (it doesn't need
any mainloop()), but that logic can just as well go to
FigureManagerNbAgg.show() instead.  This way it benefits from the
default-generated show; moreover, it seems a bit strange that figures
shown with manager.show() (instead of plt.show()) do indeed get
displayed, but just don't have their callbacks/Gcf-ness adjusted.

This is also related to the move towards putting show()-generating
information on the canvas class for inheritability.
# one. Disable this behaviour, as it results in figures being put as
# the active figure after they have been shown, even in non-interactive
# mode.
if hasattr(self, '_cidgcf'):
Copy link
Member

Choose a reason for hiding this comment

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

Is there any way to add tests to argue that this is working as expected?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Actually, there was previously no test coverage for the corresponding old code paths (as can be checked e.g. via pytest --cov --pyargs matplotlib.tests.test_backend_nbagg && coverage html: the entire show() function was untested), so I'll ask for an out there and just point out that I simply moved some code around (also, my understanding of nbagg is on the weaker side...).

Copy link
Member

Choose a reason for hiding this comment

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

fair.

@tacaswell tacaswell added this to the v3.6.0 milestone Jun 24, 2022
@tacaswell tacaswell merged commit 3522217 into matplotlib:main Jun 24, 2022
@anntzer anntzer deleted the nbucs branch June 25, 2022 05:57
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