Skip to content

Commit 5288e0c

Browse files
authored
Merge pull request matplotlib#19898 from QuLogic/remove-backend-deprecations
Remove 3.3 backend deprecations
2 parents fe1acd6 + 95f2e25 commit 5288e0c

File tree

12 files changed

+77
-347
lines changed

12 files changed

+77
-347
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
NavigationToolbar2._init_toolbar
2+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3+
Overriding this method to initialize third-party toolbars is no longer
4+
supported. Instead, the toolbar should be initialized in the ``__init__``
5+
method of the subclass (which should call the base-class' ``__init__`` as
6+
appropriate).
7+
8+
NavigationToolbar2.press and .release
9+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10+
These methods were called when pressing or releasing a mouse button, but *only*
11+
when an interactive pan or zoom was occurring (contrary to what the docs
12+
stated). They are no longer called; if you write a backend which needs to
13+
customize such events, please directly override
14+
``press_pan``/``press_zoom``/``release_pan``/``release_zoom`` instead.
15+
16+
NavigationToolbar2QT.parent and .basedir
17+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
18+
These attributes have been removed. In order to access the parent window, use
19+
``toolbar.canvas.parent()`` or ``toolbar.parent()``. The base directory to the
20+
icons is ``os.path.join(mpl.get_data_path(), "images")``.
21+
22+
NavigationToolbar2QT.ctx
23+
~~~~~~~~~~~~~~~~~~~~~~~~
24+
This attribute has been removed.
25+
26+
NavigationToolbar2Wx attributes
27+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
28+
The ``prevZoomRect``, ``retinaFix``, ``savedRetinaImage``, ``wxoverlay``,
29+
``zoomAxes``, ``zoomStartX``, and ``zoomStartY`` attributes have been removed.
30+
31+
Statusbar classes and attributes
32+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
33+
The ``statusbar`` attribute of `.FigureManagerBase`, as well as
34+
``backend_bases.StatusbarBase`` and all its subclasses, and ``StatusBarWx``,
35+
have been removed, as messages are now displayed in the toolbar instead.
36+
37+
Backend-specific internals
38+
~~~~~~~~~~~~~~~~~~~~~~~~~~
39+
40+
The following module-level classes/variables have been removed:
41+
42+
* ``MODIFIER_KEYS``, ``SUPER``, ``ALT``, ``CTRL``, and ``SHIFT`` of
43+
:mod:`matplotlib.backends.backend_qt5agg` and
44+
:mod:`matplotlib.backends.backend_qt5cairo`
45+
* ``backend_pgf.GraphicsContextPgf``
46+
* ``backend_wx.DEBUG_MSG``
47+
48+
The following parameters have been removed:
49+
50+
* The *dummy* parameter of `.RendererPgf`
51+
52+
The following class attributes have been removed:
53+
54+
* ``RendererCairo.fontweights``, ``RendererCairo.fontangles``
55+
* ``backend_pgf.LatexManager.latex_stdin_utf8``
56+
* ``backend_pgf.PdfPages.metadata``
57+
* ``used_characters`` of `.RendererPdf`, `.PdfFile`, and `.RendererPS`
58+
59+
The following class methods have been removed:
60+
61+
* ``FigureCanvasGTK3._renderer_init``
62+
* ``track_characters`` and ``merge_used_characters`` of `.RendererPdf`,
63+
`.PdfFile`, and `.RendererPS`
64+
* ``RendererWx.get_gc``
65+
66+
Stricter PDF metadata keys in PGF
67+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
68+
Saving metadata in PDF with the PGF backend no longer changes keys to
69+
lowercase. Only the canonically cased keys listed in the PDF specification (and
70+
the `~.backend_pgf.PdfPages` documentation) are accepted.

doc/api/prev_api_changes/api_changes_3.3.0/deprecations.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ PGF backend cleanups
351351
~~~~~~~~~~~~~~~~~~~~
352352
The *dummy* parameter of `.RendererPgf` is deprecated.
353353

354-
`.GraphicsContextPgf` is deprecated (use `.GraphicsContextBase` instead).
354+
``GraphicsContextPgf`` is deprecated (use `.GraphicsContextBase` instead).
355355

356356
``set_factor`` method of :mod:`mpl_toolkits.axisartist` locators
357357
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -575,7 +575,7 @@ This is deprecated; pass keys as a list of strings instead.
575575

576576
Statusbar classes and attributes
577577
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
578-
The ``statusbar`` attribute of `.FigureManagerBase`, `.StatusbarBase` and all
578+
The ``statusbar`` attribute of `.FigureManagerBase`, ``StatusbarBase`` and all
579579
its subclasses, and ``StatusBarWx``, are deprecated, as messages are now
580580
displayed in the toolbar instead.
581581

lib/matplotlib/backend_bases.py

Lines changed: 0 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -2776,8 +2776,6 @@ class FigureManagerBase:
27762776
figure.canvas.manager.button_press_handler_id)
27772777
"""
27782778

2779-
statusbar = _api.deprecated("3.3")(property(lambda self: None))
2780-
27812779
def __init__(self, canvas, num):
27822780
self.canvas = canvas
27832781
canvas.manager = self # store a pointer to parent
@@ -2943,14 +2941,6 @@ def __init__(self, canvas):
29432941
# This cursor will be set after the initial draw.
29442942
self._lastCursor = cursors.POINTER
29452943

2946-
init = _api.deprecate_method_override(
2947-
__class__._init_toolbar, self, allow_empty=True, since="3.3",
2948-
addendum="Please fully initialize the toolbar in your subclass' "
2949-
"__init__; a fully empty _init_toolbar implementation may be kept "
2950-
"for compatibility with earlier versions of Matplotlib.")
2951-
if init:
2952-
init()
2953-
29542944
self._id_press = self.canvas.mpl_connect(
29552945
'button_press_event', self._zoom_pan_handler)
29562946
self._id_release = self.canvas.mpl_connect(
@@ -3012,29 +3002,6 @@ def forward(self, *args):
30123002
self.set_history_buttons()
30133003
self._update_view()
30143004

3015-
@_api.deprecated("3.3", alternative="__init__")
3016-
def _init_toolbar(self):
3017-
"""
3018-
This is where you actually build the GUI widgets (called by
3019-
__init__). The icons ``home.xpm``, ``back.xpm``, ``forward.xpm``,
3020-
``hand.xpm``, ``zoom_to_rect.xpm`` and ``filesave.xpm`` are standard
3021-
across backends (there are ppm versions in CVS also).
3022-
3023-
You just need to set the callbacks
3024-
3025-
home : self.home
3026-
back : self.back
3027-
forward : self.forward
3028-
hand : self.pan
3029-
zoom_to_rect : self.zoom
3030-
filesave : self.save_figure
3031-
3032-
You only need to define the last one - the others are in the base
3033-
class implementation.
3034-
3035-
"""
3036-
raise NotImplementedError
3037-
30383005
def _update_cursor(self, event):
30393006
"""
30403007
Update the cursor after a mouse move event or a tool (de)activation.
@@ -3116,14 +3083,6 @@ def _zoom_pan_handler(self, event):
31163083
elif event.name == "button_release_event":
31173084
self.release_zoom(event)
31183085

3119-
@_api.deprecated("3.3")
3120-
def press(self, event):
3121-
"""Called whenever a mouse button is pressed."""
3122-
3123-
@_api.deprecated("3.3")
3124-
def release(self, event):
3125-
"""Callback for mouse button release."""
3126-
31273086
def pan(self, *args):
31283087
"""
31293088
Toggle the pan/zoom tool.
@@ -3159,12 +3118,6 @@ def press_pan(self, event):
31593118
id_drag = self.canvas.mpl_connect("motion_notify_event", self.drag_pan)
31603119
self._pan_info = self._PanInfo(
31613120
button=event.button, axes=axes, cid=id_drag)
3162-
press = _api.deprecate_method_override(
3163-
__class__.press, self, since="3.3", message="Calling an "
3164-
"overridden press() at pan start is deprecated since %(since)s "
3165-
"and will be removed %(removal)s; override press_pan() instead.")
3166-
if press is not None:
3167-
press(event)
31683121

31693122
def drag_pan(self, event):
31703123
"""Callback for dragging in pan/zoom mode."""
@@ -3183,12 +3136,6 @@ def release_pan(self, event):
31833136
'motion_notify_event', self.mouse_move)
31843137
for ax in self._pan_info.axes:
31853138
ax.end_pan()
3186-
release = _api.deprecate_method_override(
3187-
__class__.press, self, since="3.3", message="Calling an "
3188-
"overridden release() at pan stop is deprecated since %(since)s "
3189-
"and will be removed %(removal)s; override release_pan() instead.")
3190-
if release is not None:
3191-
release(event)
31923139
self._draw()
31933140
self._pan_info = None
31943141
self.push_current()
@@ -3223,12 +3170,6 @@ def press_zoom(self, event):
32233170
self._zoom_info = self._ZoomInfo(
32243171
direction="in" if event.button == 1 else "out",
32253172
start_xy=(event.x, event.y), axes=axes, cid=id_zoom)
3226-
press = _api.deprecate_method_override(
3227-
__class__.press, self, since="3.3", message="Calling an "
3228-
"overridden press() at zoom start is deprecated since %(since)s "
3229-
"and will be removed %(removal)s; override press_zoom() instead.")
3230-
if press is not None:
3231-
press(event)
32323173

32333174
def drag_zoom(self, event):
32343175
"""Callback for dragging in zoom mode."""
@@ -3259,13 +3200,6 @@ def release_zoom(self, event):
32593200
or (abs(event.y - start_y) < 5 and event.key != "x")):
32603201
self._draw()
32613202
self._zoom_info = None
3262-
release = _api.deprecate_method_override(
3263-
__class__.press, self, since="3.3", message="Calling an "
3264-
"overridden release() at zoom stop is deprecated since "
3265-
"%(since)s and will be removed %(removal)s; override "
3266-
"release_zoom() instead.")
3267-
if release is not None:
3268-
release(event)
32693203
return
32703204

32713205
for i, ax in enumerate(self._zoom_info.axes):
@@ -3283,14 +3217,6 @@ def release_zoom(self, event):
32833217
self._zoom_info = None
32843218
self.push_current()
32853219

3286-
release = _api.deprecate_method_override(
3287-
__class__.release, self, since="3.3", message="Calling an "
3288-
"overridden release() at zoom stop is deprecated since %(since)s "
3289-
"and will be removed %(removal)s; override release_zoom() "
3290-
"instead.")
3291-
if release is not None:
3292-
release(event)
3293-
32943220
def push_current(self):
32953221
"""Push the current view limits and position onto the stack."""
32963222
self._nav_stack.push(
@@ -3524,29 +3450,6 @@ def set_message(self, s):
35243450
raise NotImplementedError
35253451

35263452

3527-
@_api.deprecated("3.3")
3528-
class StatusbarBase:
3529-
"""Base class for the statusbar."""
3530-
def __init__(self, toolmanager):
3531-
self.toolmanager = toolmanager
3532-
self.toolmanager.toolmanager_connect('tool_message_event',
3533-
self._message_cbk)
3534-
3535-
def _message_cbk(self, event):
3536-
"""Capture the 'tool_message_event' and set the message."""
3537-
self.set_message(event.message)
3538-
3539-
def set_message(self, s):
3540-
"""
3541-
Display a message on toolbar or in status bar.
3542-
3543-
Parameters
3544-
----------
3545-
s : str
3546-
Message text.
3547-
"""
3548-
3549-
35503453
class _Backend:
35513454
# A backend can be defined by using the following pattern:
35523455
#

lib/matplotlib/backends/_backend_pdf_ps.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import functools
66

77
import matplotlib as mpl
8-
from matplotlib import _api
98
from .. import font_manager, ft2font
109
from ..afm import AFM
1110
from ..backend_bases import RendererBase
@@ -28,15 +27,6 @@ class CharacterTracker:
2827
def __init__(self):
2928
self.used = {}
3029

31-
@_api.deprecated("3.3")
32-
@property
33-
def used_characters(self):
34-
d = {}
35-
for fname, chars in self.used.items():
36-
realpath, stat_key = mpl.cbook.get_realpath_and_stat(fname)
37-
d[stat_key] = (realpath, chars)
38-
return d
39-
4030
def track(self, font, s):
4131
"""Record that string *s* is being typeset using font *font*."""
4232
if isinstance(font, str):

lib/matplotlib/backends/_backend_tk.py

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from matplotlib import _api, backend_tools, cbook, _c_internal_utils
1616
from matplotlib.backend_bases import (
1717
_Backend, FigureCanvasBase, FigureManagerBase, NavigationToolbar2,
18-
StatusbarBase, TimerBase, ToolContainerBase, cursors, _Mode)
18+
TimerBase, ToolContainerBase, cursors, _Mode)
1919
from matplotlib._pylab_helpers import Gcf
2020
from matplotlib.figure import Figure
2121
from matplotlib.widgets import SubplotTool
@@ -771,24 +771,6 @@ def set_message(self, s):
771771
self._message.set(s)
772772

773773

774-
@_api.deprecated("3.3")
775-
class StatusbarTk(StatusbarBase, tk.Frame):
776-
def __init__(self, window, *args, **kwargs):
777-
StatusbarBase.__init__(self, *args, **kwargs)
778-
xmin, xmax = self.toolmanager.canvas.figure.bbox.intervalx
779-
height, width = 50, xmax - xmin
780-
tk.Frame.__init__(self, master=window,
781-
width=int(width), height=int(height),
782-
borderwidth=2)
783-
self._message = tk.StringVar(master=self)
784-
self._message_label = tk.Label(master=self, textvariable=self._message)
785-
self._message_label.pack(side=tk.RIGHT)
786-
self.pack(side=tk.TOP, fill=tk.X)
787-
788-
def set_message(self, s):
789-
self._message.set(s)
790-
791-
792774
class SaveFigureTk(backend_tools.SaveFigureBase):
793775
def trigger(self, *args):
794776
NavigationToolbar2Tk.save_figure(

lib/matplotlib/backends/backend_cairo.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,6 @@ def attr(field):
123123

124124

125125
class RendererCairo(RendererBase):
126-
fontweights = _api.deprecated("3.3")(property(lambda self: {*_f_weights}))
127-
fontangles = _api.deprecated("3.3")(property(lambda self: {*_f_angles}))
128126
mathtext_parser = _api.deprecated("3.4")(
129127
property(lambda self: MathTextParser('Cairo')))
130128

lib/matplotlib/backends/backend_gtk3.py

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from matplotlib._pylab_helpers import Gcf
1010
from matplotlib.backend_bases import (
1111
_Backend, FigureCanvasBase, FigureManagerBase, NavigationToolbar2,
12-
StatusbarBase, TimerBase, ToolContainerBase, cursors)
12+
TimerBase, ToolContainerBase, cursors)
1313
from matplotlib.figure import Figure
1414
from matplotlib.widgets import SubplotTool
1515

@@ -133,19 +133,6 @@ def __init__(self, figure=None):
133133
style_ctx.add_provider(css, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
134134
style_ctx.add_class("matplotlib-canvas")
135135

136-
renderer_init = _api.deprecate_method_override(
137-
__class__._renderer_init, self, allow_empty=True, since="3.3",
138-
addendum="Please initialize the renderer, if needed, in the "
139-
"subclass' __init__; a fully empty _renderer_init implementation "
140-
"may be kept for compatibility with earlier versions of "
141-
"Matplotlib.")
142-
if renderer_init:
143-
renderer_init()
144-
145-
@_api.deprecated("3.3", alternative="__init__")
146-
def _renderer_init(self):
147-
pass
148-
149136
def destroy(self):
150137
#Gtk.DrawingArea.destroy(self)
151138
self.close_event()
@@ -443,9 +430,6 @@ def resize(self, width, height):
443430

444431

445432
class NavigationToolbar2GTK3(NavigationToolbar2, Gtk.Toolbar):
446-
ctx = _api.deprecated("3.3")(property(
447-
lambda self: self.canvas.get_property("window").cairo_create()))
448-
449433
def __init__(self, canvas, window):
450434
self.win = window
451435
GObject.GObject.__init__(self)
@@ -666,18 +650,6 @@ def set_message(self, s):
666650
self._message.set_label(s)
667651

668652

669-
@_api.deprecated("3.3")
670-
class StatusbarGTK3(StatusbarBase, Gtk.Statusbar):
671-
def __init__(self, *args, **kwargs):
672-
StatusbarBase.__init__(self, *args, **kwargs)
673-
Gtk.Statusbar.__init__(self)
674-
self._context = self.get_context_id('message')
675-
676-
def set_message(self, s):
677-
self.pop(self._context)
678-
self.push(self._context, s)
679-
680-
681653
class RubberbandGTK3(backend_tools.RubberbandBase):
682654
def draw_rubberband(self, x0, y0, x1, y1):
683655
NavigationToolbar2GTK3.draw_rubberband(

0 commit comments

Comments
 (0)