diff --git a/lib/matplotlib/pyplot.py b/lib/matplotlib/pyplot.py index 2376c6243929..4a0256b31619 100644 --- a/lib/matplotlib/pyplot.py +++ b/lib/matplotlib/pyplot.py @@ -49,16 +49,13 @@ import threading import time from typing import TYPE_CHECKING, cast, overload - -from cycler import cycler # noqa: F401 import matplotlib import matplotlib.colorbar import matplotlib.image from matplotlib import _api from matplotlib import ( # noqa: F401 Re-exported for typing. - cm as cm, get_backend as get_backend, rcParams as rcParams, style as style) + cm as cm, get_backend as get_backend, rcParams as rcParams) from matplotlib import _pylab_helpers -from matplotlib import interactive # noqa: F401 from matplotlib import cbook from matplotlib import _docstring from matplotlib.backend_bases import ( @@ -68,16 +65,16 @@ from matplotlib import rcsetup, rcParamsDefault, rcParamsOrig from matplotlib.artist import Artist from matplotlib.axes import Axes -from matplotlib.axes import Subplot # noqa: F401 from matplotlib.backends import BackendFilter, backend_registry from matplotlib.projections import PolarAxes from matplotlib import mlab # for detrend_none, window_hanning -from matplotlib.scale import get_scale_names # noqa: F401 from matplotlib.cm import _colormaps from matplotlib.colors import _color_sequences, Colormap import numpy as np +import matplotlib.backends +import PIL.Image if TYPE_CHECKING: from collections.abc import Callable, Hashable, Iterable, Sequence @@ -129,15 +126,7 @@ from matplotlib.colors import Normalize from matplotlib.lines import Line2D, AxLine from matplotlib.text import Text, Annotation -from matplotlib.patches import Arrow, Circle, Rectangle # noqa: F401 from matplotlib.patches import Polygon -from matplotlib.widgets import Button, Slider, Widget # noqa: F401 - -from .ticker import ( # noqa: F401 - TickHelper, Formatter, FixedFormatter, NullFormatter, FuncFormatter, - FormatStrFormatter, ScalarFormatter, LogFormatter, LogFormatterExponent, - LogFormatterMathtext, Locator, IndexLocator, FixedLocator, NullLocator, - LinearLocator, LogLocator, AutoLocator, MultipleLocator, MaxNLocator) _log = logging.getLogger(__name__) @@ -657,10 +646,14 @@ def ioff() -> AbstractContextManager: context manager object, which is not intended to be stored or accessed by the user. """ + # Cache value to avoid repeated lookups + current_mode = isinteractive() stack = ExitStack() - stack.callback(ion if isinteractive() else ioff) - matplotlib.interactive(False) - uninstall_repl_displayhook() + # Avoid registering unnecessary callback if we're switching off and already off + stack.callback(ion if current_mode else ioff) + if current_mode: + matplotlib.interactive(False) + uninstall_repl_displayhook() return stack