Skip to content

Commit 094f9c4

Browse files
committed
Backcompat for get_layout_engine
1 parent 258de08 commit 094f9c4

File tree

3 files changed

+31
-7
lines changed

3 files changed

+31
-7
lines changed

seaborn/_compat.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1+
from __future__ import annotations
2+
from typing import Literal
3+
14
import numpy as np
25
import matplotlib as mpl
6+
from matplotlib.figure import Figure
37
from seaborn.utils import _version_predates
48

59

@@ -84,19 +88,31 @@ def register_colormap(name, cmap):
8488
mpl.cm.register_cmap(name, cmap)
8589

8690

87-
def set_layout_engine(fig, engine):
91+
def set_layout_engine(
92+
fig: Figure,
93+
engine: Literal["constrained", "compressed", "tight", "none"],
94+
) -> None:
8895
"""Handle changes to auto layout engine interface in 3.6"""
8996
if hasattr(fig, "set_layout_engine"):
9097
fig.set_layout_engine(engine)
9198
else:
9299
# _version_predates(mpl, 3.6)
93100
if engine == "tight":
94-
fig.set_tight_layout(True)
101+
fig.set_tight_layout(True) # type: ignore # predates typing
95102
elif engine == "constrained":
96-
fig.set_constrained_layout(True)
103+
fig.set_constrained_layout(True) # type: ignore
97104
elif engine == "none":
98-
fig.set_tight_layout(False)
99-
fig.set_constrained_layout(False)
105+
fig.set_tight_layout(False) # type: ignore
106+
fig.set_constrained_layout(False) # type: ignore
107+
108+
109+
def get_layout_engine(fig: Figure) -> mpl.layout_engine.LayoutEngine | None:
110+
"""Handle changes to auto layout engine interface in 3.6"""
111+
if hasattr(fig, "get_layout_engine"):
112+
return fig.get_layout_engine()
113+
else:
114+
# _version_predates(mpl, 3.6)
115+
return None
100116

101117

102118
def share_axis(ax0, ax1, which):

seaborn/_core/plot.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
)
4141
from seaborn._core.exceptions import PlotSpecError
4242
from seaborn._core.rules import categorical_order
43-
from seaborn._compat import set_layout_engine
43+
from seaborn._compat import get_layout_engine, set_layout_engine
4444
from seaborn.rcmod import axes_style, plotting_context
4545
from seaborn.palettes import color_palette
4646

@@ -1811,7 +1811,7 @@ def _finalize_figure(self, p: Plot) -> None:
18111811
set_layout_engine(self._figure, "tight")
18121812

18131813
if (extent := p._layout_spec.get("extent")) is not None:
1814-
engine = self._figure.get_layout_engine()
1814+
engine = get_layout_engine(self._figure)
18151815
if engine is None:
18161816
self._figure.subplots_adjust(*extent)
18171817
else:

tests/_core/test_plot.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,11 +1091,19 @@ def test_layout_size(self):
10911091
p = Plot().layout(size=size).plot()
10921092
assert tuple(p._figure.get_size_inches()) == size
10931093

1094+
@pytest.mark.skipif(
1095+
_version_predates(mpl, "3.6"),
1096+
reason="mpl<3.6 does not have get_layout_engine",
1097+
)
10941098
def test_layout_extent(self):
10951099

10961100
p = Plot().layout(extent=(.1, .2, .6, 1)).plot()
10971101
assert p._figure.get_layout_engine().get()["rect"] == [.1, .2, .5, .8]
10981102

1103+
@pytest.mark.skipif(
1104+
_version_predates(mpl, "3.6"),
1105+
reason="mpl<3.6 does not have get_layout_engine",
1106+
)
10991107
def test_constrained_layout_extent(self):
11001108

11011109
p = Plot().layout(engine="constrained", extent=(.1, .2, .6, 1)).plot()

0 commit comments

Comments
 (0)