Skip to content

Commit ca2c0ff

Browse files
committed
Deprecate cbook.Stack.
It's really not something we need to provide as public API.
1 parent a861b8a commit ca2c0ff

File tree

9 files changed

+67
-8
lines changed

9 files changed

+67
-8
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
``cbook.Stack`` is deprecated
2+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3+
... with no replacement.

lib/matplotlib/backend_bases.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2835,7 +2835,7 @@ class NavigationToolbar2:
28352835
def __init__(self, canvas):
28362836
self.canvas = canvas
28372837
canvas.toolbar = self
2838-
self._nav_stack = cbook.Stack()
2838+
self._nav_stack = cbook._Stack()
28392839
# This cursor will be set after the initial draw.
28402840
self._last_cursor = tools.Cursors.POINTER
28412841

lib/matplotlib/backend_tools.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -479,8 +479,8 @@ def add_figure(self, figure):
479479
"""Add the current figure to the stack of views and positions."""
480480

481481
if figure not in self.views:
482-
self.views[figure] = cbook.Stack()
483-
self.positions[figure] = cbook.Stack()
482+
self.views[figure] = cbook._Stack()
483+
self.positions[figure] = cbook._Stack()
484484
self.home_views[figure] = WeakKeyDictionary()
485485
# Define Home
486486
self.push_current(figure)

lib/matplotlib/backends/_backend_gtk.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ def zoom(self, *args):
301301

302302
def set_history_buttons(self):
303303
can_backward = self._nav_stack._pos > 0
304-
can_forward = self._nav_stack._pos < len(self._nav_stack._elements) - 1
304+
can_forward = self._nav_stack._pos < len(self._nav_stack) - 1
305305
if 'Back' in self._gtk_ids:
306306
self._gtk_ids['Back'].set_sensitive(can_backward)
307307
if 'Forward' in self._gtk_ids:

lib/matplotlib/backends/_backend_tk.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -891,7 +891,7 @@ def save_figure(self, *args):
891891
def set_history_buttons(self):
892892
state_map = {True: tk.NORMAL, False: tk.DISABLED}
893893
can_back = self._nav_stack._pos > 0
894-
can_forward = self._nav_stack._pos < len(self._nav_stack._elements) - 1
894+
can_forward = self._nav_stack._pos < len(self._nav_stack) - 1
895895

896896
if "Back" in self._buttons:
897897
self._buttons['Back']['state'] = state_map[can_back]

lib/matplotlib/backends/backend_qt.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -798,7 +798,7 @@ def save_figure(self, *args):
798798

799799
def set_history_buttons(self):
800800
can_backward = self._nav_stack._pos > 0
801-
can_forward = self._nav_stack._pos < len(self._nav_stack._elements) - 1
801+
can_forward = self._nav_stack._pos < len(self._nav_stack) - 1
802802
if 'back' in self._actions:
803803
self._actions['back'].setEnabled(can_backward)
804804
if 'forward' in self._actions:

lib/matplotlib/backends/backend_webagg_core.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,7 @@ def zoom(self):
418418

419419
def set_history_buttons(self):
420420
can_backward = self._nav_stack._pos > 0
421-
can_forward = self._nav_stack._pos < len(self._nav_stack._elements) - 1
421+
can_forward = self._nav_stack._pos < len(self._nav_stack) - 1
422422
self.canvas.send_event('history_buttons',
423423
Back=can_backward, Forward=can_forward)
424424

lib/matplotlib/backends/backend_wx.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1136,7 +1136,7 @@ def set_message(self, s):
11361136

11371137
def set_history_buttons(self):
11381138
can_backward = self._nav_stack._pos > 0
1139-
can_forward = self._nav_stack._pos < len(self._nav_stack._elements) - 1
1139+
can_forward = self._nav_stack._pos < len(self._nav_stack) - 1
11401140
if 'Back' in self.wx_ids:
11411141
self.EnableTool(self.wx_ids['Back'], can_backward)
11421142
if 'Forward' in self.wx_ids:

lib/matplotlib/cbook.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -562,6 +562,7 @@ def flatten(seq, scalarp=is_scalar_or_string):
562562
yield from flatten(item, scalarp)
563563

564564

565+
@_api.deprecated("3.8")
565566
class Stack:
566567
"""
567568
Stack of elements with a movable cursor.
@@ -668,6 +669,61 @@ def remove(self, o):
668669
self.push(elem)
669670

670671

672+
class _Stack:
673+
"""
674+
Stack of elements with a movable cursor.
675+
676+
Mimics home/back/forward in a web browser.
677+
"""
678+
679+
def __init__(self):
680+
self._pos = -1
681+
self._elements = []
682+
683+
def clear(self):
684+
"""Empty the stack."""
685+
self._pos = -1
686+
self._elements = []
687+
688+
def __call__(self):
689+
"""Return the current element, or None."""
690+
return self._elements[self._pos] if self._elements else None
691+
692+
def __len__(self):
693+
return len(self._elements)
694+
695+
def __getitem__(self, ind):
696+
return self._elements[ind]
697+
698+
def forward(self):
699+
"""Move the position forward and return the current element."""
700+
self._pos = min(self._pos + 1, len(self._elements) - 1)
701+
return self()
702+
703+
def back(self):
704+
"""Move the position back and return the current element."""
705+
self._pos = max(self._pos - 1, 0)
706+
return self()
707+
708+
def push(self, o):
709+
"""
710+
Push *o* to the stack after the current position, and return *o*.
711+
712+
Discard all later elements.
713+
"""
714+
self._elements[self._pos + 1:] = [o]
715+
self._pos = len(self._elements) - 1
716+
return o
717+
718+
def home(self):
719+
"""
720+
Push the first element onto the top of the stack.
721+
722+
The first element is returned.
723+
"""
724+
return self.push(self._elements[0]) if self._elements else None
725+
726+
671727
def safe_masked_invalid(x, copy=False):
672728
x = np.array(x, subok=True, copy=copy)
673729
if not x.dtype.isnative:

0 commit comments

Comments
 (0)