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

Skip to content

Commit f25782f

Browse files
committed
Move towards having get_shared_{x,y}_axes return immutable views.
Directly calling join() on the Groupers is not sufficient to share axes, anyways, so don't let users do that.
1 parent 4e20f15 commit f25782f

File tree

3 files changed

+38
-4
lines changed

3 files changed

+38
-4
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Modifications to the Groupers returned by ``get_shared_x_axes`` and ``get_shared_y_axes``
2+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3+
... are deprecated. In the future, these methods will return immutable views
4+
on the grouper structures. Note that previously, calling e.g. ``join()``
5+
would already fail to set up the correct structures for sharing axes; use
6+
`.Axes.sharex` or `.Axes.sharey` instead.

lib/matplotlib/axes/_base.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4595,9 +4595,9 @@ def twiny(self):
45954595
return ax2
45964596

45974597
def get_shared_x_axes(self):
4598-
"""Return a reference to the shared axes Grouper object for x axes."""
4599-
return self._shared_axes["x"]
4598+
"""Return an immutable view on the shared x-axes Grouper."""
4599+
return cbook.GrouperView(self._shared_axes["x"])
46004600

46014601
def get_shared_y_axes(self):
4602-
"""Return a reference to the shared axes Grouper object for y axes."""
4603-
return self._shared_axes["y"]
4602+
"""Return an immutable view on the shared y-axes Grouper."""
4603+
return cbook.GrouperView(self._shared_axes["y"])

lib/matplotlib/cbook/__init__.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -907,6 +907,34 @@ def get_siblings(self, a):
907907
return [x() for x in siblings]
908908

909909

910+
class GrouperView:
911+
"""Immutable view over a `.Grouper`."""
912+
913+
def __init__(self, grouper):
914+
self._grouper = grouper
915+
916+
class _GrouperMethodForwarder:
917+
def __init__(self, deprecated_kw=None):
918+
self._deprecated_kw = deprecated_kw
919+
920+
def __set_name__(self, owner, name):
921+
wrapped = getattr(Grouper, name)
922+
forwarder = functools.wraps(wrapped)(
923+
lambda self, *args, **kwargs: wrapped(
924+
self._grouper, *args, **kwargs))
925+
if self._deprecated_kw:
926+
forwarder = _api.deprecated(**self._deprecated_kw)(forwarder)
927+
setattr(owner, name, forwarder)
928+
929+
__contains__ = _GrouperMethodForwarder()
930+
__iter__ = _GrouperMethodForwarder()
931+
joined = _GrouperMethodForwarder()
932+
get_siblings = _GrouperMethodForwarder()
933+
clean = _GrouperMethodForwarder(deprecated_kw=dict(since="3.6"))
934+
join = _GrouperMethodForwarder(deprecated_kw=dict(since="3.6"))
935+
remove = _GrouperMethodForwarder(deprecated_kw=dict(since="3.6"))
936+
937+
910938
def simple_linear_interpolation(a, steps):
911939
"""
912940
Resample an array with ``steps - 1`` points between original point pairs.

0 commit comments

Comments
 (0)