Skip to content

Commit cce3f45

Browse files
committed
Backcompat for get_layout_engine
1 parent 8ff5d39 commit cce3f45

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

@@ -144,19 +148,31 @@ def register_colormap(name, cmap):
144148
mpl.cm.register_cmap(name, cmap)
145149

146150

147-
def set_layout_engine(fig, engine):
151+
def set_layout_engine(
152+
fig: Figure,
153+
engine: Literal["constrained", "compressed", "tight", "none"],
154+
) -> None:
148155
"""Handle changes to auto layout engine interface in 3.6"""
149156
if hasattr(fig, "set_layout_engine"):
150157
fig.set_layout_engine(engine)
151158
else:
152159
# _version_predates(mpl, 3.6)
153160
if engine == "tight":
154-
fig.set_tight_layout(True)
161+
fig.set_tight_layout(True) # type: ignore # predates typing
155162
elif engine == "constrained":
156-
fig.set_constrained_layout(True)
163+
fig.set_constrained_layout(True) # type: ignore
157164
elif engine == "none":
158-
fig.set_tight_layout(False)
159-
fig.set_constrained_layout(False)
165+
fig.set_tight_layout(False) # type: ignore
166+
fig.set_constrained_layout(False) # type: ignore
167+
168+
169+
def get_layout_engine(fig: Figure) -> mpl.layout_engine.LayoutEngine | None:
170+
"""Handle changes to auto layout engine interface in 3.6"""
171+
if hasattr(fig, "get_layout_engine"):
172+
return fig.get_layout_engine()
173+
else:
174+
# _version_predates(mpl, 3.6)
175+
return None
160176

161177

162178
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_scale_obj, set_layout_engine
43+
from seaborn._compat import get_layout_engine, set_layout_engine, set_scale_obj
4444
from seaborn.rcmod import axes_style, plotting_context
4545
from seaborn.palettes import color_palette
4646
from seaborn.utils import _version_predates
@@ -1829,7 +1829,7 @@ def _finalize_figure(self, p: Plot) -> None:
18291829
set_layout_engine(self._figure, "tight")
18301830

18311831
if (extent := p._layout_spec.get("extent")) is not None:
1832-
engine = self._figure.get_layout_engine()
1832+
engine = get_layout_engine(self._figure)
18331833
if engine is None:
18341834
self._figure.subplots_adjust(*extent)
18351835
else:

tests/_core/test_plot.py

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

1098+
@pytest.mark.skipif(
1099+
_version_predates(mpl, "3.6"),
1100+
reason="mpl<3.6 does not have get_layout_engine",
1101+
)
10981102
def test_layout_extent(self):
10991103

11001104
p = Plot().layout(extent=(.1, .2, .6, 1)).plot()
11011105
assert p._figure.get_layout_engine().get()["rect"] == [.1, .2, .5, .8]
11021106

1107+
@pytest.mark.skipif(
1108+
_version_predates(mpl, "3.6"),
1109+
reason="mpl<3.6 does not have get_layout_engine",
1110+
)
11031111
def test_constrained_layout_extent(self):
11041112

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

0 commit comments

Comments
 (0)