From df4e23ef739c918570b250ad8d1202ab18f6b896 Mon Sep 17 00:00:00 2001 From: Hassan Kibirige Date: Thu, 2 Jul 2026 17:57:38 +0300 Subject: [PATCH 1/8] feat(facet_wrap): add strip_position parameter --- plotnine/facets/facet_wrap.py | 13 ++++++++++++- tests/test_strip_position.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 tests/test_strip_position.py diff --git a/plotnine/facets/facet_wrap.py b/plotnine/facets/facet_wrap.py index 9f5b5c9d9..94d7f1968 100644 --- a/plotnine/facets/facet_wrap.py +++ b/plotnine/facets/facet_wrap.py @@ -24,6 +24,7 @@ from matplotlib.axes import Axes from plotnine.iapi import layout_details + from plotnine.typing import StripPosition from ..scales.scales import Scales @@ -64,6 +65,9 @@ class facet_wrap(facet): dir : Direction in which to layout the panels. `h` for horizontal and `v` for vertical. + strip_position : + Side of each panel on which to draw the strip. One of + `["top", "bottom", "left", "right"]`{.py}. """ def __init__( @@ -80,6 +84,7 @@ def __init__( as_table: bool = True, drop: bool = True, dir: Literal["h", "v"] = "h", + strip_position: Literal["top", "bottom", "left", "right"] = "top", ): super().__init__( scales=scales, @@ -89,6 +94,12 @@ def __init__( drop=drop, dir=dir, ) + if strip_position not in ("top", "bottom", "left", "right"): + raise PlotnineError( + "strip_position should be one of 'top', 'bottom', " + f"'left' or 'right'. Got {strip_position!r}." + ) + self.strip_position: StripPosition = strip_position self.vars = parse_wrap_facets(facets) self._nrow, self._ncol = check_dimensions(nrow, ncol) @@ -195,7 +206,7 @@ def make_strips(self, layout_info: layout_details, ax: Axes) -> Strips: if not self.vars: return Strips([]) - s = strip(self.vars, layout_info, self, ax, "top") + s = strip(self.vars, layout_info, self, ax, self.strip_position) return Strips([s]) diff --git a/tests/test_strip_position.py b/tests/test_strip_position.py new file mode 100644 index 000000000..4f18ef4bf --- /dev/null +++ b/tests/test_strip_position.py @@ -0,0 +1,28 @@ +import pytest + +from plotnine import aes, facet_wrap, geom_point, ggplot +from plotnine.data import mtcars +from plotnine.exceptions import PlotnineError + +p = ggplot(mtcars, aes("wt", "mpg")) + geom_point() + + +def test_invalid_strip_position(): + with pytest.raises(PlotnineError): + facet_wrap("cyl", strip_position="north") + + +@pytest.mark.parametrize( + "position, target", + [ + ("top", "strip_text_x_top"), + ("bottom", "strip_text_x_bottom"), + ("left", "strip_text_y_left"), + ("right", "strip_text_y_right"), + ], +) +def test_strips_land_on_requested_side(position, target): + plot = p + facet_wrap("cyl", strip_position=position) + plot.draw_test() + strips = getattr(plot.theme.targets, target) + assert len(strips) == 3 # one strip per panel of cyl From bde929fa3d99561cd5b8976829f2c84c4ae65a0d Mon Sep 17 00:00:00 2001 From: Hassan Kibirige Date: Thu, 2 Jul 2026 18:11:41 +0300 Subject: [PATCH 2/8] feat(layout): reserve the facet_wrap strip's gully on its side --- .../_mpl/layout_manager/_plot_side_space.py | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/plotnine/_mpl/layout_manager/_plot_side_space.py b/plotnine/_mpl/layout_manager/_plot_side_space.py index c25d3e0f5..92ab047be 100644 --- a/plotnine/_mpl/layout_manager/_plot_side_space.py +++ b/plotnine/_mpl/layout_manager/_plot_side_space.py @@ -13,7 +13,7 @@ from dataclasses import replace from functools import cached_property -from typing import TYPE_CHECKING, Literal +from typing import TYPE_CHECKING, Literal, cast from plotnine.exceptions import PlotnineError from plotnine.facets import facet_grid, facet_null, facet_wrap @@ -1219,7 +1219,7 @@ def _calculate_panel_spacing_facet_wrap(self) -> tuple[float, float]: """ Calculate spacing parts for facet_wrap """ - facet = self.plot.facet + facet = cast("facet_wrap", self.plot.facet) theme = self.plot.theme ncol = facet.ncol @@ -1229,19 +1229,20 @@ def _calculate_panel_spacing_facet_wrap(self) -> tuple[float, float]: self.sw = theme.getp("panel_spacing_x") self.sh = theme.getp("panel_spacing_y") * self.W / self.H - # A fraction of the strip height - # Effectively slides the strip - # +ve: Away from the panel - # 0: Top of the panel - # -ve: Into the panel - # Where values <= -1, put the strip completely into - # the panel. We do not worry about larger -ves. - strip_align_x = theme.getp("strip_align_x") - - # Only interested in the proportion of the strip that - # does not overlap with the panel - if strip_align_x > -1: - self.sh += self.t.strip_text * (1 + strip_align_x) + # The strip (plus any switch pad) claims space in the gullies on + # the side it is placed. The side space's strip_text folds in + # strip_align_{x,y} and is zero when the strip is fully inside + # the panel. + space = { + "top": self.t, + "bottom": self.b, + "left": self.l, + "right": self.r, + }[facet.strip_position] + if facet.strip_position in ("top", "bottom"): + self.sh += space.strip_text + space.strip_switch_pad + else: + self.sw += space.strip_text + space.strip_switch_pad if facet.free["x"]: for side in ("bottom", "top"): From 14376d75b42bab8e0876b72d87a035a671710fc6 Mon Sep 17 00:00:00 2001 From: Hassan Kibirige Date: Thu, 2 Jul 2026 18:18:48 +0300 Subject: [PATCH 3/8] feat(layout): offset strip-band axes on all four sides --- .../_mpl/layout_manager/_plot_layout_items.py | 63 ++++++++++++------- 1 file changed, 40 insertions(+), 23 deletions(-) diff --git a/plotnine/_mpl/layout_manager/_plot_layout_items.py b/plotnine/_mpl/layout_manager/_plot_layout_items.py index 77a4fca95..52a7f5034 100644 --- a/plotnine/_mpl/layout_manager/_plot_layout_items.py +++ b/plotnine/_mpl/layout_manager/_plot_layout_items.py @@ -551,7 +551,7 @@ def _move_artists(self, spaces: PlotSideSpaces): self._adjust_axis_text_x(justify, spaces) self._adjust_axis_text_y(justify, spaces) - self._position_moved_axes(spaces) + self._position_strip_band_axes(spaces) self._position_strip_backgrounds(spaces) def _adjust_axis_text_x( @@ -572,9 +572,12 @@ def to_vertical_axis_dimensions(value: float, ax: Axes) -> float: if self._is_blank("axis_text_x"): return - # For strip_placement="inside", a top axis sharing its side with a + # For strip_placement="inside", an axis sharing its side with a # strip is pushed past the strip; zero otherwise. - top_offset = spaces.t.strip_band_offset("axis") + band_offsets = { + "bottom": spaces.b.strip_band_offset("axis"), + "top": spaces.t.strip_band_offset("axis"), + } for side in ("bottom", "top"): va_default = "top" if side == "bottom" else "bottom" @@ -590,10 +593,10 @@ def to_vertical_axis_dimensions(value: float, ax: Axes) -> float: ) # bottom labels sit below the panel (axes y 0), top labels # above it (axes y 1) + offset = to_vertical_axis_dimensions(band_offsets[side], ax) if side == "bottom": - low, high = (-row_height, 0) + low, high = (-row_height - offset, -offset) else: - offset = to_vertical_axis_dimensions(top_offset, ax) low, high = (1 + offset, 1 + row_height + offset) for text in texts: height = to_vertical_axis_dimensions( @@ -641,9 +644,12 @@ def to_horizontal_axis_dimensions(value: float, ax: Axes) -> float: if self._is_blank("axis_text_y"): return - # For strip_placement="inside", a right axis sharing its side with a + # For strip_placement="inside", an axis sharing its side with a # strip is pushed past the strip; zero otherwise. - right_offset = spaces.r.strip_band_offset("axis") + band_offsets = { + "left": spaces.l.strip_band_offset("axis"), + "right": spaces.r.strip_band_offset("axis"), + } for side in ("left", "right"): ha_default = "right" if side == "left" else "left" @@ -659,10 +665,10 @@ def to_horizontal_axis_dimensions(value: float, ax: Axes) -> float: ) # left labels sit left of the panel (axes x 0), right labels # to the right of it (axes x 1) + offset = to_horizontal_axis_dimensions(band_offsets[side], ax) if side == "left": - low, high = (-col_width, 0) + low, high = (-col_width - offset, -offset) else: - offset = to_horizontal_axis_dimensions(right_offset, ax) low, high = (1 + offset, 1 + col_width + offset) for text in texts: width = to_horizontal_axis_dimensions( @@ -670,25 +676,32 @@ def to_horizontal_axis_dimensions(value: float, ax: Axes) -> float: ) justify.horizontally(text, ha, low, high, width=width) - def _position_moved_axes(self, spaces: PlotSideSpaces): + def _position_strip_band_axes(self, spaces: PlotSideSpaces): """ - Push a moved axis past the strip for strip_placement="inside" + Push an axis past a strip that shares its side - On a side where a moved axis and a facet strip would otherwise - overlap, the spine and its tick marks shift outward by the strip's - extent so the axis sits beyond the strip. Has no effect when the - side has no shared strip/axis band. + On a side where an axis and a facet strip would otherwise + overlap (`strip_placement="inside"`), the spine and its tick + marks shift outward by the strip's extent so the axis sits + beyond the strip. Has no effect when the side has no shared + strip/axis band. """ fig = self.plot.figure to_points = 72 / fig.dpi - top = spaces.t.strip_band_offset("axis") * fig.bbox.height * to_points - right = spaces.r.strip_band_offset("axis") * fig.bbox.width * to_points + W, H = fig.bbox.width, fig.bbox.height + offsets = { + "top": spaces.t.strip_band_offset("axis") * H, + "bottom": spaces.b.strip_band_offset("axis") * H, + "left": spaces.l.strip_band_offset("axis") * W, + "right": spaces.r.strip_band_offset("axis") * W, + } for ax in self.plot.axs: - if top: - _spine_set_position_outward(ax.spines["top"], ax.xaxis, top) - if right: + for side, offset in offsets.items(): + if not offset: + continue + axis = ax.xaxis if side in ("top", "bottom") else ax.yaxis _spine_set_position_outward( - ax.spines["right"], ax.yaxis, right + ax.spines[side], axis, offset * to_points ) def _strip_breadth_scales( @@ -848,9 +861,13 @@ def _spine_set_position_outward(spine: Spine, axis: Axis, distance: float): spine._position = ("outward", distance) # pyright: ignore[reportAttributeAccessIssue] transform = spine.get_spine_transform() spine.set_transform(transform) - # The outward-facing marks on a top or right spine are tick2. + # The outward-facing marks are tick2 on a top/right spine and + # tick1 on a bottom/left spine. + outer = ( + "tick2line" if spine.spine_type in ("top", "right") else "tick1line" + ) for tick in (*axis.get_major_ticks(), *axis.get_minor_ticks()): - tick.tick2line.set_transform(transform) + getattr(tick, outer).set_transform(transform) spine.stale = True From 44de0df1e82360b42f0c4a560558ab89e9d8b7e2 Mon Sep 17 00:00:00 2001 From: Hassan Kibirige Date: Thu, 2 Jul 2026 18:29:54 +0300 Subject: [PATCH 4/8] test(facet_wrap): pin strip_position rendering --- tests/test_strip_position.py | 50 +++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/tests/test_strip_position.py b/tests/test_strip_position.py index 4f18ef4bf..7b4f45dbd 100644 --- a/tests/test_strip_position.py +++ b/tests/test_strip_position.py @@ -1,6 +1,6 @@ import pytest -from plotnine import aes, facet_wrap, geom_point, ggplot +from plotnine import aes, facet_wrap, geom_point, ggplot, theme from plotnine.data import mtcars from plotnine.exceptions import PlotnineError @@ -26,3 +26,51 @@ def test_strips_land_on_requested_side(position, target): plot.draw_test() strips = getattr(plot.theme.targets, target) assert len(strips) == 3 # one strip per panel of cyl + + +def test_strip_position_top(): + plot = p + facet_wrap("cyl", nrow=2) + assert plot == "strip_position_top" + + +def test_strip_position_bottom(): + plot = p + facet_wrap("cyl", nrow=2, strip_position="bottom") + assert plot == "strip_position_bottom" + + +def test_strip_position_left(): + plot = p + facet_wrap("cyl", nrow=2, strip_position="left") + assert plot == "strip_position_left" + + +def test_strip_position_right(): + plot = p + facet_wrap("cyl", nrow=2, strip_position="right") + assert plot == "strip_position_right" + + +def test_strip_position_bottom_free_x(): + plot = p + facet_wrap( + "cyl", nrow=2, strip_position="bottom", scales="free_x" + ) + assert plot == "strip_position_bottom_free_x" + + +def test_strip_position_left_free_y(): + plot = p + facet_wrap( + "cyl", nrow=2, strip_position="left", scales="free_y" + ) + assert plot == "strip_position_left_free_y" + + +def test_strip_position_bottom_outside(): + plot = ( + p + + facet_wrap("cyl", nrow=2, strip_position="bottom") + + theme(strip_placement="outside") + ) + assert plot == "strip_position_bottom_outside" + + +def test_composition_bottom_strip_title_alignment(): + plot = (p + facet_wrap("cyl", strip_position="bottom")) | p + assert plot == "composition_bottom_strip" From 22a8fd33d4d536d7213816047d21fe4d40a5d249 Mon Sep 17 00:00:00 2001 From: Hassan Kibirige Date: Thu, 2 Jul 2026 18:30:22 +0300 Subject: [PATCH 5/8] doc(changelog): facet_wrap strip_position --- doc/changelog.qmd | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/changelog.qmd b/doc/changelog.qmd index e7443dd5c..5346cc8e1 100644 --- a/doc/changelog.qmd +++ b/doc/changelog.qmd @@ -73,6 +73,10 @@ title: Changelog + theme(strip_placement="outside") ``` +- [](:class:`~plotnine.facet_wrap`) gained a `strip_position` parameter with + which you can place the strip on any side of the panel; `"top"` (default), + `"bottom"`, `"left"` or `"right"`. + ### API Changes - Removed `geom.to_layer()`, `stat.to_layer()`, `annotate.to_layer()`, From 00fe2993523d5a42807ef8bca10792e352206dd9 Mon Sep 17 00:00:00 2001 From: Hassan Kibirige Date: Thu, 2 Jul 2026 20:06:07 +0300 Subject: [PATCH 6/8] fix(layout): shift each strip past its own panel's axis MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For strip_placement="outside" the strips of a group were all shifted by the plot-edge axis band, so a panel that draws no axis on the strip's side (fixed scales, multi-row facets) got its strip floated outward to clear an axis that is not there — and the interior gullies were sized for strips that hug their panels, letting shifted strips overlap the panel below. Each strip now clears exactly the ticks, labels and panel-facing margin its own panel draws on that side (PlotLayoutItems.strip_shift); the side-level strip_band_offset keeps only its axis member, used for strip_placement="inside". --- .../_mpl/layout_manager/_plot_layout_items.py | 109 +++++++++++++----- .../_mpl/layout_manager/_plot_side_space.py | 23 ++-- tests/test_strip_placement.py | 12 ++ 3 files changed, 103 insertions(+), 41 deletions(-) diff --git a/plotnine/_mpl/layout_manager/_plot_layout_items.py b/plotnine/_mpl/layout_manager/_plot_layout_items.py index 52a7f5034..02e8bae75 100644 --- a/plotnine/_mpl/layout_manager/_plot_layout_items.py +++ b/plotnine/_mpl/layout_manager/_plot_layout_items.py @@ -348,21 +348,65 @@ def strip_text_y(self, position: StripPosition) -> float: return max(widths) if widths else 0 - def axis_ticks_x_max_height_at( - self, location: AxesLocation, side: str - ) -> float: + def strip_shift(self, st: StripText) -> float: + """ + Outward shift of one strip past its own panel's axis, figure space + + For `strip_placement="outside"` a strip sits beyond the ticks, + tick labels and panel-facing text margin that its own panel draws + on the strip's side, separated by the strip_switch_pad. A panel + that draws no axis on that side keeps its strip next to the + panel, so within one facet the strips of axis-bearing panels + shift while the others do not. + """ + theme = self.plot.theme + if theme.getp("strip_placement") != "outside": + return 0 + side, ax = st.position, st.ax + W, H = theme.getp("figure_size") + if side in ("top", "bottom"): + g, dim = "x", H + text = self.axis_text_x_max_height(ax, side) + ticks = self.axis_ticks_x_max_height(ax, side) + facing = "b" if side == "top" else "t" + else: + g, dim = "y", W + text = self.axis_text_y_max_width(ax, side) + ticks = self.axis_ticks_y_max_width(ax, side) + facing = "r" if side == "left" else "l" + band = text + ticks + if text: + m = theme.get_margin(f"axis_text_{g}_{side}").fig + band += getattr(m, facing) + if not band: + return 0 + pad_pt = theme.getp(f"strip_switch_pad_{g}") or 0 + return band + (pad_pt / 72) / dim + + def axis_ticks_x_max_height(self, ax: Axes, side: str) -> float: """ Return maximum height[figure space] of visible x ticks on a side """ attr = side_artists(side)[0] heights = [ self.geometry.tight_height(getattr(tick, attr)) - for ax in self._filter_axes(location) for tick in self.axis_ticks_x(ax) if getattr(tick, attr).get_visible() ] return max(heights) if len(heights) else 0 + def axis_ticks_x_max_height_at( + self, location: AxesLocation, side: str + ) -> float: + """ + Return maximum height[figure space] of visible x ticks on a side + """ + heights = [ + self.axis_ticks_x_max_height(ax, side) + for ax in self._filter_axes(location) + ] + return max(heights) if len(heights) else 0 + def axis_text_x_max_height(self, ax: Axes, side: str) -> float: """ Return maximum height[figure space] of x tick labels on a side @@ -385,21 +429,30 @@ def axis_text_x_max_height_at( ] return max(heights) if len(heights) else 0 - def axis_ticks_y_max_width_at( - self, location: AxesLocation, side: str - ) -> float: + def axis_ticks_y_max_width(self, ax: Axes, side: str) -> float: """ Return maximum width[figure space] of visible y ticks on a side """ attr = side_artists(side)[0] widths = [ self.geometry.tight_width(getattr(tick, attr)) - for ax in self._filter_axes(location) for tick in self.axis_ticks_y(ax) if getattr(tick, attr).get_visible() ] return max(widths) if len(widths) else 0 + def axis_ticks_y_max_width_at( + self, location: AxesLocation, side: str + ) -> float: + """ + Return maximum width[figure space] of visible y ticks on a side + """ + widths = [ + self.axis_ticks_y_max_width(ax, side) + for ax in self._filter_axes(location) + ] + return max(widths) if len(widths) else 0 + def axis_text_y_max_width(self, ax: Axes, side: str) -> float: """ Return maximum width[figure space] of y tick labels on a side @@ -552,7 +605,7 @@ def _move_artists(self, spaces: PlotSideSpaces): self._adjust_axis_text_x(justify, spaces) self._adjust_axis_text_y(justify, spaces) self._position_strip_band_axes(spaces) - self._position_strip_backgrounds(spaces) + self._position_strip_backgrounds() def _adjust_axis_text_x( self, justify: TextJustifier, spaces: PlotSideSpaces @@ -575,8 +628,8 @@ def to_vertical_axis_dimensions(value: float, ax: Axes) -> float: # For strip_placement="inside", an axis sharing its side with a # strip is pushed past the strip; zero otherwise. band_offsets = { - "bottom": spaces.b.strip_band_offset("axis"), - "top": spaces.t.strip_band_offset("axis"), + "bottom": spaces.b.strip_band_offset(), + "top": spaces.t.strip_band_offset(), } for side in ("bottom", "top"): @@ -647,8 +700,8 @@ def to_horizontal_axis_dimensions(value: float, ax: Axes) -> float: # For strip_placement="inside", an axis sharing its side with a # strip is pushed past the strip; zero otherwise. band_offsets = { - "left": spaces.l.strip_band_offset("axis"), - "right": spaces.r.strip_band_offset("axis"), + "left": spaces.l.strip_band_offset(), + "right": spaces.r.strip_band_offset(), } for side in ("left", "right"): @@ -690,10 +743,10 @@ def _position_strip_band_axes(self, spaces: PlotSideSpaces): to_points = 72 / fig.dpi W, H = fig.bbox.width, fig.bbox.height offsets = { - "top": spaces.t.strip_band_offset("axis") * H, - "bottom": spaces.b.strip_band_offset("axis") * H, - "left": spaces.l.strip_band_offset("axis") * W, - "right": spaces.r.strip_band_offset("axis") * W, + "top": spaces.t.strip_band_offset() * H, + "bottom": spaces.b.strip_band_offset() * H, + "left": spaces.l.strip_band_offset() * W, + "right": spaces.r.strip_band_offset() * W, } for ax in self.plot.axs: for side, offset in offsets.items(): @@ -718,33 +771,33 @@ def _strip_breadth_scales( largest = max(natural) return [largest / b for b in natural] - def _position_strip_backgrounds(self, spaces: PlotSideSpaces): + def _position_strip_backgrounds(self): """ Fix each strip background at its final bounds and place its text - When `strip_placement="outside"` and a moved axis shares the - strip's side, the strip is shifted outward to clear the axis. + When `strip_placement="outside"`, each strip is shifted outward + to clear the axis its own panel draws on the strip's side. """ theme = self.plot.theme groups = ( - (self.strip_text_x_top or [], spaces.t), - (self.strip_text_x_bottom or [], spaces.b), - (self.strip_text_y_right or [], spaces.r), - (self.strip_text_y_left or [], spaces.l), + self.strip_text_x_top or [], + self.strip_text_x_bottom or [], + self.strip_text_y_right or [], + self.strip_text_y_left or [], ) - for group, space in groups: + for group in groups: if not group: continue - offset = space.strip_band_offset("strip") breadth = StripSpec.make(group[0], theme).breadth scales = self._strip_breadth_scales(group, breadth) for st, scale in zip(group, scales): spec = StripSpec.make(st, theme) x0, y0, w, h = self.strip_patch_bbox(st, scale).bounds + shift = self.strip_shift(st) if spec.axis == "x": - y0 += spec.sign * offset + y0 += spec.sign * shift else: - x0 += spec.sign * offset + x0 += spec.sign * shift st.patch.set_bounds((x0, y0, w, h)) self._position_strip_text(st) diff --git a/plotnine/_mpl/layout_manager/_plot_side_space.py b/plotnine/_mpl/layout_manager/_plot_side_space.py index 92ab047be..63a000e72 100644 --- a/plotnine/_mpl/layout_manager/_plot_side_space.py +++ b/plotnine/_mpl/layout_manager/_plot_side_space.py @@ -171,9 +171,9 @@ def _strip_switch_pad(self, axis: Literal["x", "y"]) -> float: dim = H if axis == "x" else W return (pad_pt / 72) / dim - def strip_band_offset(self, member: Literal["strip", "axis"]) -> float: + def strip_band_offset(self) -> float: """ - Outward offset for one member of a shared strip/axis band + Outward offset of the axis within a shared strip/axis band When a facet strip and an axis occupy the same side, the band is ordered from the panel outward. `strip_placement` chooses the order: @@ -181,23 +181,20 @@ def strip_band_offset(self, member: Literal["strip", "axis"]) -> float: "inside": panel | strip | ticks+labels | title "outside": panel | ticks+labels | strip | title - `member` is `"strip"` (the strip background + text) or `"axis"` (the - ticks and tick labels). The offset is produced here in figure space and - consumed per artist in its own coordinate system: the title in figure - space, the tick labels in axes fractions, the spine in points. + For `"inside"` the axis (ticks and tick labels) clears the strip, + so the offset is the strip breadth; for `"outside"` the axis stays + at the panel and each strip clears its own panel's axis instead + (`PlotLayoutItems.strip_shift`). The offset is produced here in + figure space and consumed per artist in its own coordinate system: + the tick labels in axes fractions, the spine in points. The offset is zero unless the side carries both a strip and an axis. """ strip_breadth: float = self.strip_text # pyright: ignore[reportAttributeAccessIssue] - axis_breadth = self._axis_ticks_and_text - if not (strip_breadth and axis_breadth): + if not (strip_breadth and self._axis_ticks_and_text): return 0 placement = self.items.plot.theme.getp("strip_placement") - if placement == "inside": - return 0 if member == "strip" else strip_breadth - # "outside": the strip clears the axis, plus the switch pad - pad: float = self.strip_switch_pad # pyright: ignore[reportAttributeAccessIssue] - return axis_breadth + pad if member == "strip" else 0 + return strip_breadth if placement == "inside" else 0 class left_space(_plot_side_space): diff --git a/tests/test_strip_placement.py b/tests/test_strip_placement.py index 50eb0ddf8..fa1642403 100644 --- a/tests/test_strip_placement.py +++ b/tests/test_strip_placement.py @@ -36,6 +36,18 @@ def test_facet_wrap_top_outside(): assert p1 == "facet_wrap_top_outside" +def test_facet_wrap_top_outside_two_rows(): + # A panel that draws no axis on the strip's side keeps its strip + # next to the panel; only axis-bearing panels shift theirs. + p1 = ( + p + + facet_wrap("cyl", nrow=2) + + scale_x_continuous(position="top") + + theme(strip_placement="outside") + ) + assert p1 == "facet_wrap_top_outside_two_rows" + + def test_facet_grid_top_inside(): p1 = p + facet_grid("am", "cyl") + scale_x_continuous(position="top") assert p1 == "facet_grid_top_inside" From ca31b485408b91b78e93e819b6be7bc1233ff3a6 Mon Sep 17 00:00:00 2001 From: Hassan Kibirige Date: Thu, 2 Jul 2026 21:12:39 +0300 Subject: [PATCH 7/8] fix(layout): reserve axis text margins in facet gullies The free-scale gully terms added the tick and label extents but not the label margins, though the drawn labels honor them (the margin is applied as the tick pad). With a large margin and small panel_spacing the labels of one panel overlapped the neighbouring panel. --- doc/changelog.qmd | 4 ++++ .../_mpl/layout_manager/_plot_side_space.py | 18 ++++++++++++++---- tests/test_layout.py | 15 +++++++++++++++ 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/doc/changelog.qmd b/doc/changelog.qmd index 5346cc8e1..0128da6a4 100644 --- a/doc/changelog.qmd +++ b/doc/changelog.qmd @@ -108,6 +108,10 @@ title: Changelog ### Bug Fixes +- The space between facet panels now accounts for the margins of the axis + text, so with free scales large margins no longer push the tick labels + into the neighbouring panel. + - Subclass geoms now inherit their parent geom's default parameters, so parameters that a parent geom supports are no longer rejected. [](:class:`~plotnine.geom_step`) accepts `lineend`, `linejoin` and `arrow`, diff --git a/plotnine/_mpl/layout_manager/_plot_side_space.py b/plotnine/_mpl/layout_manager/_plot_side_space.py index 63a000e72..daeeacb3c 100644 --- a/plotnine/_mpl/layout_manager/_plot_side_space.py +++ b/plotnine/_mpl/layout_manager/_plot_side_space.py @@ -1241,16 +1241,26 @@ def _calculate_panel_spacing_facet_wrap(self) -> tuple[float, float]: else: self.sw += space.strip_text + space.strip_switch_pad + # Per-panel axes claim their ticks, labels and label margins in + # the gullies. if facet.free["x"]: for side in ("bottom", "top"): - self.sh += self.items.axis_text_x_max_height_at( + text = self.items.axis_text_x_max_height_at("all", side) + if text: + m = theme.get_margin(f"axis_text_x_{side}").fig + text += m.t + m.b + self.sh += text + self.items.axis_ticks_x_max_height_at( "all", side - ) + self.items.axis_ticks_x_max_height_at("all", side) + ) if facet.free["y"]: for side in ("left", "right"): - self.sw += self.items.axis_text_y_max_width_at( + text = self.items.axis_text_y_max_width_at("all", side) + if text: + m = theme.get_margin(f"axis_text_y_{side}").fig + text += m.l + m.r + self.sw += text + self.items.axis_ticks_y_max_width_at( "all", side - ) + self.items.axis_ticks_y_max_width_at("all", side) + ) # width and height of axes as fraction of figure width & height self.w = (self.panel_width - self.sw * (ncol - 1)) / ncol diff --git a/tests/test_layout.py b/tests/test_layout.py index 12710a3ed..6acd8dc5c 100644 --- a/tests/test_layout.py +++ b/tests/test_layout.py @@ -115,6 +115,21 @@ def test_facet_wrap_scales_free(self): p = self.g + facet_wrap("carb", scales="free") assert p == "facet_wrap_scales_free" + def test_facet_wrap_scales_free_text_margin(self): + # The gullies fit the axis text margins; with zero panel + # spacing the labels touch the neighbouring panel but do not + # overlap it. + p = ( + self.g + + facet_wrap("carb", scales="free") + + theme( + panel_spacing=0, + axis_text_x=element_text(margin={"t": 5}), + axis_text_y=element_text(margin={"r": 5}), + ) + ) + assert p == "facet_wrap_scales_free_text_margin" + def test_plot_margin_aspect_ratio(self): # The margin should be exact in both directions even if # the figure has an aspect ratio != 1. From 800b7623e99de01feec7934cec489a812b0c0916 Mon Sep 17 00:00:00 2001 From: Hassan Kibirige Date: Thu, 2 Jul 2026 21:18:40 +0300 Subject: [PATCH 8/8] test: add baselines for strip_position and facet gully fixes --- .../test_layout/facet_wrap_scales_free.png | Bin 29582 -> 29587 bytes .../facet_wrap_scales_free_text_margin.png | Bin 0 -> 29768 bytes .../facet_wrap_top_outside_two_rows.png | Bin 0 -> 5086 bytes .../composition_bottom_strip.png | Bin 0 -> 6436 bytes .../strip_position_bottom.png | Bin 0 -> 5120 bytes .../strip_position_bottom_free_x.png | Bin 0 -> 5925 bytes .../strip_position_bottom_outside.png | Bin 0 -> 5028 bytes .../strip_position_left.png | Bin 0 -> 5095 bytes .../strip_position_left_free_y.png | Bin 0 -> 5018 bytes .../strip_position_right.png | Bin 0 -> 5132 bytes .../strip_position_top.png | Bin 0 -> 5075 bytes 11 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/baseline_images/test_layout/facet_wrap_scales_free_text_margin.png create mode 100644 tests/baseline_images/test_strip_placement/facet_wrap_top_outside_two_rows.png create mode 100644 tests/baseline_images/test_strip_position/composition_bottom_strip.png create mode 100644 tests/baseline_images/test_strip_position/strip_position_bottom.png create mode 100644 tests/baseline_images/test_strip_position/strip_position_bottom_free_x.png create mode 100644 tests/baseline_images/test_strip_position/strip_position_bottom_outside.png create mode 100644 tests/baseline_images/test_strip_position/strip_position_left.png create mode 100644 tests/baseline_images/test_strip_position/strip_position_left_free_y.png create mode 100644 tests/baseline_images/test_strip_position/strip_position_right.png create mode 100644 tests/baseline_images/test_strip_position/strip_position_top.png diff --git a/tests/baseline_images/test_layout/facet_wrap_scales_free.png b/tests/baseline_images/test_layout/facet_wrap_scales_free.png index faef7a798b38329a44278075b5377b4e732de7a2..f5d7390d13b278579f150c09131db5ccdb85dd32 100644 GIT binary patch delta 24867 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 TsMtpXfW5RH>qDwk5$OK`63eO6 delta 24817 zcmZ_01yoes7dL!|loxOjDm}N-BGUVMu$fHsrR08OTkN$_Z^T1?Ax)fFIfw;>t zZX=(Tz)DFek`XG-Pou|JWEDfr3K_`gtP;6T=$vg1&WtnYRwmhy3O(?Wat5|}to1%% z8+QaT5PCb_bGi52qiK6-e@9>B#E()Wt=HM%sp>3BIw~cCqyp>}2F3~mDFG;#w!yPY zNA;RTfiOYg@Id4P06`JPMyfP`f{Gf*UR^TG6!ioX3#+@U>yBJ{uxY>RlpvL{v9TmR z*jZCxb8}NUw>&3D=7~Rswdr$p*Se`!j~=PM&&#`KB(!2=N=`u$&}{hZ*)u7r0B$O9 z6%}av5|Q$7J7^Vij2s;r*s2=_I2)PH?Voyidk2d2 zwS2JnK#U%E;n(yI6~Y8JdjzW~QG2RBwCKda!GU%|)~;6rc5uu5?j1Q?Lj)U;HVkXA zU61;rBIOZRI<$ilvCzyX7ayqqc4p!g6}267_wf;lm5;rqvEf-U(q3AEF3HHsnwy); z%E;IVB)x-xtz(r0Dc!d4!es(G9E=LP;c%F9F+Y^ryx80ka{)x*_w-t^OGe=VM8RHxbP6sXgg3LzBC%FZU5%Ki3Fj}B9*<}J5odWx1(vxBizFkdLQzGvI^MLH2gJy|ZP9dpWcDfTR1JPIPe zrIp4btf!R<+9t{&er3W8DJla<&;uju-pgmF=v7u${#K7>&*lAlN?ogmG%89GVx|vF&r52 zPrIit>sj#H94W66t&FatInQyvl*ZS(qYJt0M2|uvi5S;@bJsxRYdIq2v0#}Q5pYjj3>b*Tomyg=Eh^^t*y9_H@>>7E`ttvh+%GHv^cbdNQ z*&}!G-R{iN^b&kFEHvqn0AUFu69CmN8t zt53UqKAcAVug#SLu+7#G`(Pv1~;p!L-`rnVkfw&q?B8~lCN0(I(+Z-E9K3k4k zHhi)3)LU2h%^^f?s-4UjrnB9Snu}H%U|CaLJsU9x@h=ITkS*2*jN)PrlHtZucdo(^ zDI?N$@j;(VyK%{|>@U)NMXb_KR|vgAh?{$9f3@ufkqm}IdFlJZLtDMgxRHp6{ChH* zX*sEQc?Pb_?*x;`xh=O-IQQTcr|UVvH2eNA2NOPwV3SjfiND>tt(O>C0)Tsb`_>LZ zf&&*Jz?O^9FGY*AUULmTrSsZ|Q3Bib<3z=_?c*@En{EF6-WKc7V2!olgL*kRz0`2g zqw)Eu#XdbfT_k`X*-k@EO&%Up%@iZ|A9t>@BrZ1P_w%ign@E)b-Q=(k`*`TSWZ zMftx*)4cG`#l3?A7oJ2L;@;lg?%mc_p65L{BLv>#ubbhz`IcrEWF`Pc2 znKr&N1lOPp6YX!ygm6J1=Ft-h=qL{i$Lo1E%hudRE8^6^*#z}f>L2zif~5RM%&zegLbRDr%p16iSI^wESRp(XeoQzP+`jmPh!H52Z+k>gwJNsYUBiPZmy3wV&7P z+Y6E5we#0_(39DY8R6#L|w>FAcd*_V&uO*o%sb!@cr{ynK8X6z?P4HdAExL7uV^ zXwWZqe3x4)B90&Oy2VHcYAEzavC5z@$7l&}*G8SX|GrA(sZ>sOB* zXdVhB2HJjsE25r=CnhI*nt4Q;bX|DN96#J%CwkQrk8Q6^Hsj*wbKctC2KlWa&|59> zmP%K;H*eh|7S(>{OrU8e`acH8{?5X6u{mHbCa(X}1ob~FWPj)RnAwEW+$!!tM!jm- zSIWQohFDUCr1oASCXm(QpSsvdA^g|#@6*{+q!MWB%hj!|xTNEuT(j~TPoD9KiQg)I z^Et`@kPs8MwYB}o(R%gj)tVYdUS6J~qoY$-PtRXV1P&GnZ0KNZ4(2^OJUnEDdo}o( zn7pR@Z|=xm2pIAl9UphfnVIDrgh)wBnp`^kAp&#?z!5E6T3WhHeeu1?^XJbE3}{}c zb8c`aDr#$M-@AA3*RwqG z-yy$MW)FwB3F&Pg>b3MtLhOA~W^WlA-!M(51 zt04&q3I6^F9iIjWj<=>_SXZK>qZ_=BI2tYXj60IFf)J`o@a0U9GEx#$Q%$Jj<%-HHXAaguC=g_2_w) zLN$P`wKcUg{W>=#D$k5wE0L$wz2TAWEpKkO4%L*?UH6T`4)j zp_wJPr~tHyq~d6@ba4?gb`6z-7|_21aMd)*AE?u$4F}!29yTLL3C`7r;pyq9Pu%9C z0_Gm+467^v7ZNPeJ*OcDdOeg6g+@zMMmJjh5yzuu1Lsc#&sV6hrdV;zJ^IqeFyZ^u zhOTkz`8{7=AaW2IL2lLTe5v>}J)?&VuK+=$jM?U?Dv&Vo?vG54Qjk>WT}ATpm@qP3 z_&r0E`p=y{{}cb*QU@9%OgQw<=Kpm$|Cc{6ph*pW#~KpbSmiJON9(vC^+jSbZglUF zt^5p1+dd}zkKWD$6pAuq8IScc4-bEtYKyl1H|&NZEPP4K9acWkC85hvjswh95)%Ebg@W?}*lYrH%>tZZyUZ+%4adRt6*Kwd&` zSpg6@W0w5b3?X3toS%Al$Z_WIn&orN9vhHzl zRcWzf{^RMKHf&&EfXkqfo!PBU^zL2h+yUE}#)k58f`49jhY$|xW}Vw+^ar_P6L0Tx zXcU92u1ZXF^mOW5%1IcvheZKr%yRKOzi9%!-X$yT5V7#x*v#hTy%%v_; z+=|;QSJ%Z;_N!LP5holh&B~E`}_M`dbNC)0dYdzU%q^qp4LCEf14&(mYt3Kcj+Dx z6Yr-8O&A!+{I5(`XU3cEv)jN-@uBjMrb>(gyvv%J#03O2%<|UO);>NTh>dUcIog_f z@!|yq0Re*o2JqLp^zJgN8(G#{e2*0>kXCzr*OY!sg#aJFwyv&NuP#R;yqcbeM@^OR zFs;h_*zS)~p%~gpeNcd1US68c)qnl^b!ElkVePWsa#<+wcmF{t=)DVnQE3APGfq50 zLZACBbWaOkRMqx?=1xlz2K<)3*%~A*aPz~CzV}lZuHxoTfcsCJh?#S1<9^G(`N>^j zKEA=ez7o4Bp&N^4V`UX>IU5=pdUA4-oJ`sArLyves#Tc@d38a7A`=w0c=>0?!JQIm z;nKe6adqbTy@t)6kKD8Zs9AmDyY>N1fE2T)rp9SOfbrj&h=2ViDm56G*mPSx6Y;wk zja4O-j{a}BjeD?S{RY;3&$4?O78al0*UQUniARxBjtR2~3scdh7DXtr4*n6t ztTH?@(pe^}=F6bc-rjDC$`RahYbAaUNu7)s5gNL-zCN((Qsk60kgL)u@bk}X_0@pg zX%54tveAA6HgJRhFI$<-kP2RSEN`@^tE6A;Afa(-nvHzxHAwK_(hWpqbon;&4A97n zX(!-_1PGc%Ogm! z27{(WBNYe%-DU$8d{%m27C;^U>z45#7m;gl&CqE)-^CM&Apzis5{`_FOh-p2%q$gJ z!ZMmL`&55_4&rgt%CchWN`My6)w z7n^wvsNJH&&i05JpsMM}w-T9Zn}kEYCUf*!s0ER#LoVR|XDeq(DlAJ!%NzY%MEW%n znB98nm87F`KK-+sfM1>flqN^dWefd%zj0za6)Wc-0Xy=%({1)bHC2>h(@$0y^o1A5 z9)e;zplgfZHTdI!gy4JXcOU49Y(97#q*W&b1}De%4}^QtDsywOu@Ar{D2OO3c^-*B z6#1@^aLXZJV;vA~xn6Dz^MsTP^>IKsKV3tY=3Z+7D6_dnJfauJt#gkHmE!q7{V{Hh z*gH>b7IOlG1B7X+m?%Su3E}u}h=fc#C~Z!^ATxFgoFgMa`GJvjF?DtFhK(P(b-iwOA&7Fr^@;# zYHDgfCt~OfWPRKTFvtuchlN$sI+ZqKwa{h9S@Hbmo0uCP7nk;R{vjd$ z@0AV2@JLqro*%7xjwl>}Zk9_3mQ7OUb+|_Mg{2}w&Gx>405K(Hf!SM``MH+h8{6p7 zkHB88s;8$%Az-=lAdIRrHQ3h|t-94}+z?f<~ths8N%As|2b?NDkh<$6J*NrwNC00YMr%_8wX09?7Ry?|< ztzZnbr(8aEVQ|!wCLPZGre#J3_e%*bp=v3fH=BaQoA8g^6h#k}7$%V9K7TBgi!}>- zlV`&&8G+zdhxjXd7=0Wob6w@iki;t+yk4&L{F&#*Y z{*USBYV8DnItnC}a#@#fUxT?x<=p*Kk+-_SihTPoOKEwZef|ZZ6h~weLQ{Yg02;sy z4q)G-42>+L8J;+F%D8!=1Mn)Bf?)!BpkI>;>&!72KNyjAoAJiV2k!0TvL4kKD z<;!o8t*%9KVT(l4mzY$HR(lut)2wL>Zh~S!)x@Wx+exjR5vXP?YO=9Aj;A4Ac7_#MC z?MYt)1yA{hom56T?T^!Kgi?shWN1p+F{r}~IOFjuh1`TeW-X);{a-(fJysF~A3AP9_-wngK_z-MT4G=nn+e z=V&}!iPg{(7LwOts)IxTgEKHovpMP^5^*!{+sx#uk())%ba8SvHbIv~X)b(tbtaA) zfvy+0Bd+e^p^b_Uh@K5{qGgW=eq|j((v&1)26cnH)vV`qTFku=65`PxX$KTCyC3Hh+$zAi` zv|-YXGkmjn7eXr-D$m$_^5#v{I~%05x7bYSFX^q`5*7dLQtqS%bj-Fp@fW+J1b@$bdQ#zx_cd@8T2OA;!C zI$2ugz3=So%=UA#kVLgSSc~gPI1?IG{H4b)!3NC8)vK6YhT~|(Ut(>iK&R*L0M7dU zfx*W3xKua3n z=+{`vE7Og{Xe>7c3_RghX(Scneah0eZSOi9~66!Sam zCKZx60Z6wcO3O;@TjM1-UkZ9L)7pr{=JaTvu3v0K7B|&ilx_E3PFXaO0!4@aK)!5~BO>4nS}7=CFIYQ)&BYV~1;7R&Fwa6afXT)efsYRV z`?5zO=kRmp!vdTE%=KV|5`+@bxeNbMK^Efz;3y-5?&@2IgQcZhFO2BV3r{m^bqa?% z{$!WbV&pO>_Kg%o3w({rWZ8YTDg~f$iw4jI5Q5oa%|~xWz8T2y8xH;JOayDW15ZBx z>T$2J?=_u7KpJG1-3Ug7nhcF znxDKDct)ES)2A-`1~)JBf7`QI8~eP>leXjwf+Ro{Wj{*$_aPL?e;3LGU>zxsf#~;O z<{pe0UYjGCaUmQ2d(B!v3`N3sU>SWQBeJwAgaCJG%jxN9oAghP4D@_79i=`ie+_~! zAJT`As9c#WJ{=1Q3ughakjw7x-?g;0(U>^=pF0~G!phG58Ac~3DdUhjUQt5XgM)*4 zd3i@WTKYMa&AIKQ6qx3;nw=aRb~c;7j!@dif2VxYH!FFcmBgukb=A^Cl|`8I+mf=f zvKrLFaI38?Xp*a!eo}?9@?dOCJ45&ZQp{Way^`|je4U_(Tr}si@OpbiMivuW7gsAQ z^x%*_X6Y9{RelCe=PL)1mlNEBKIvH69DKbz?OArgh5l+650U-{my^JfdxWWg)IY)gyg zO!zr<)$YW1Ghc>-Xk&3OsuWV}yVEOn?;hH)<()hHDT2qYz7 z^%)Tv3~jWo-l&>6I@ar1)Y0vksSOVf-chN#TmKN(`5G6uJ$Ml;)_8a%FpVZgyD^+F z;5*_9cJhq(_0ck#_n^;Xo<+Y3;Jss<%```%NIuE6UV))P8R}e_|A78311$rz814c@ zdmXH0Ou*Y^kjSipE-lx6R3DXoSL}BI%70Q+M#}jledih;L=m#~CK4@jNt~ zMjl%&Pc}BT@HadNlwgi}Wf>&b2Z0;b{@%D>s@=lU^1hfU>(}z$dD>?M<((Kffigyq zQSAaC(dLxq>OVfC%NTUWcBj&|~>sqoAO6 z*cOX-cr}-O3PCixi(u@bSDI9=6jQ)&uc_sm5YbE+^mPs{ErxDTm-&Mf==#yg_ISW( zDk0#qSrbnEg-=zz1COdPNBcd*0}-Yj;9)wc%gek9OH72}mk5=IY<_TtM7YX({A(c9WU&8N(KN6I);L+aPptT{6? zEiL08HZqB@30oD~`swtC(45mHMq`5lA?335N9PS6->{2uL!_wdrm#ueyS~?_QJ%Q5 zEOGD=8+Eormr5zOO2=&4vMXBV0GHl(ZiT`h{6wfJghW;)lMA&Bf`|uJc0_7UE%%Gw z8@KN|katvHwz}pn?$lNWMDr#4EOTIJ56i=oOYlob+W0B)f|hjLhG`)&4)SCE8n8ji%4b0mS18&J4f-Qcm#kHnkJM5G{*5eCVI^)hk?yZU zni^?SeQ{EmZTTL2NFd$Z@!|ihOGfI!i6O=ciN~`HY|X1u?^$N;H&pOrXUW>L?J+0Z zf7Aj71HbfP^UqsHe|nb$VfU)GjLl5H#nlVODXz>!fh3}PqF*KPil8F%M;1a_~tx_IM!guFx_ePZX3 z^~Whn5(bTN5TqjT8;juq>B!}fF^Vr4;?cV_OV>37iaSZ4XFI~a`qE1?2mGi&n9BFE zqVV)U7-oF(Isx5!;cF=q=J0E!Pzn0}=N2rwC{XeU+e+s+0cBge^&R;P# zoTwy3NwaG872`_afhjWFV)l7;vCzn>%U;INBju3z9xU0wply4-&PRh$U)^|y*QF_o zkuKU{k2B^*a*+?8J+VP^d@PxX67cC`EOkS5=i<-H@O(>d8z!0!bkipf4J&l+ra$15 zc&7+mU^HXV@-5=bc_j&C<7Z`%mwkXPx{Q+Rt>Bo|>lf209_7A&>wd-z$vpOx`er#b zjTXb^kL(oZpLpk`sznL4EB=QJ6huXh82nf^%6m%DMu5(Q8qK9UgF`dqaBW!Uo{GYk z-Sl@#bO7cN>0BD9ztl@MZcyf?%SA^K51S`-hm;_ z6fsCaU)i`KJ;|R-&qR$c&%Hz8w~d==rWzeB`j*2m>47d@>i+%!rGI92K<;AQKB`f8 zW{#=EOB5di`>&vNT8hdrzw zOycePB+6(2=`nyMmdDDszKEiy&jid_;p}f5UZ*A{&3ElPQwhk#`M-I?0xxER*WdTL z7G^2UrlqIfqyKWsjEjfYky`1(oRcMlg@`nbetwLPhZmV{pa*j_CM6}ccujj(uB@TK z_8xfjM!2B=l0Et{wsX;pRvZV3en=nso;ENuF0{hPQ;T|!r3PbXYD#aaH(e0H$H~b* z$>$lYhEOl>`38O6cQm%RU_u2Ln61^+&ZTfk&}{=LMcBX?G{C#!H(0R2`h%`Lj|wZg!C63y@EwbM1CPTYunX0{dlsb z_&w0Ex91sua87BW$3q%dJB0%$|y6gI^t*vjCyeh!U z+tQzjU}G!tnlP)eQEYnYouMEPk7U>L@5G%9W^ZN;bad$PoSdC`A3wU-hCTE&+YUR+ zX+lJy6?HQ<&LR~yB!1alz1_xPQTK`Hd+}ZQ7*yoZagRG=&aWGS!EjLcV^`4IQW5%~ zk~Oe`4Q}-k)b?b#@6G%+Qgv3=ylu+X*4ELH8#N61gWh||yyw3z5-~SZQ&Srn8s0rr z9!;2|W1 zmdoIoSG6i%(k+o6-2{c}^L?$Iss10IcV_O}AS-K0I4D30$u)wjkRbkmfdxl|6O-;Rpnd72@ubS##8*EJ3Dn1{hYTp$Qs4S|p`N_X& zZTw3Bx{6^?AYiLhmp_&Mc;HiMc&R`woeoA^=qv$?mF=LR^e5boTDNd6EpFF{`GOT1&b41C5+U{=k8sc4qGjg~lBb8L3?t0B2J*}3;L?L|)9 z7r~Eozt*CMf)h0Da6V%bFXToq7QgWh_|?9NM+2o1m)8#GwE|-}dk$Ciq%WU9AQ7y~pw1 zT*k`|r#79T2t&s>HLysatgLJ>_G1%PH*VU2Xfx%m8n>uIZbV) z$d=(~V^g4CQ7C$bQmoo7Z<`NF0y6TJeA{vch<|mhx#wNUSd^cSXb4b4clF29mrPf; zw{dbMv@l3GlliUVeyV*4=IiL_Xo-_H&?z=(va6ctexdi|a@Qh}<0eT6jbMRIOib(> z5ZhWuHvX{A5aqC6L;IY19^v|A=7dYX{*$IHm@78I&JH%3D!5b zD~!HFMEJpCrQjo2>|<@{Diwn%xtg{0I+(kjx^|pLsvgw8yyVK9DdRYkJCxn*!A^6R znhV&gYC73bn#jblx>|8?1tELSC=j^gnGhguwT&J5UQV<7=3YaU((Ix=PviVVmDM9u z?o%oQ>uBAd)$_k723N)o%1m{(%(HxWl3wur3PGgqWwy57X`Lyw>14f7#b+8zoIUdX za=q%2-_aBT$QUarVCm;$TDa3OPMX;DN{ms%lAbqDs@4bfe4?jcQ49~ody^ihSjT@@ zyrUp5|LfPUAOm%3F`tC@?>{Q6V3i!|`qMnWpc%1`zhW;uoi{RA+}y+IemHYaFTs?{ z&_#>@=MxqrL4n{E6v*FX^X=|65Tl_~VK?>aKd3B$Xtj_Gx!MgQ3Y4{d`-b@<4y^L7 zPW1O@*g{{xW$mEkrY{P%7TtejT~9c6E>FGtnPA(a`s^ewD}})#3dc} zpLct~#P`rUxC4S#`JG9CP44UizcstqlV`DDQQ`o~(bBatLVejoUYngFpOKw44CKGB z^7G6&{Y51k);g6g+bWb>vu}+8!XYZ?0B1}3W3rtJW~*~~gLQMb4&h@Q7?|T%df8qA z@o;c>+FQi$E)T3nTQsbIMavgH?|3w>HcjuxoPuD0Depl+Gjg!%a9d`Kd1I^_P{IdI zvN+lp<2CO|zHi(XgheqJdKV8BY*Gp&XaSUOEuS!sd4gpv%H+&kQr|1WaI%g4 zCYE<&v>LOwtwhxKZ%Rv+5P~pbu%Cw&L_=-Z-IoX}^cJ@85_0qKGoVrXuGoi&7vqRY*D|BRpm|CWhN z$p}+=X}-!9KmujgN>}XBK@Z`)fl=MkD(KM*tE;V5d-g0>C9TNp{td$jFkm6b@MqX1 zoKpJw(`BZeOTB4nsi{R0{kOB;(xpNN*HMK|)w+_qR)8gW4#X~&|HdQ*tcku_4&-#F z2**FZA@zm>kR5Ai0)~z=+5!1Vg2z7HE2uK}_5HaMitq}btdW5Ae|s=D5_ zTeQ!--p`$gFawUNf;LxI?{ArznDFuOfdzVKPIh*K$L>qe1g;Mkdby^p`hNGu`6DB; z=nb>lg4JZL=2H~0Irpv=olON|fIl#>OUX_#*@ z6b34=u+5Q$qJvBQF)riA3tm74Fbr=%YMFm9 z7$D|NfEM*#7&bl#55?+j-Z_^2ktG``lTxs|vqreOxq0Zx^M{q7Mzy(m6OxcHGcvx_ zkq{9OIGT@g+FycptHz&$IJOU6mCnmOo$*}WX}>r7X203R?IJ-eg{pn5r|qaF871Xl zeuUjvS?j(@?M+?v=AEGR3ZbCi?L%o!JsWt3qNOnuJnJO@+cAHBCxwOZJHigrHH*mw zn#_Bt)8tx@Hz#uGyv0<^J_sVipuY#Xf^6s=c#L{4cf>IB^G_~!d;#_Ox1k`g_6MxP z`NN%ugLu;KxvzfW<e0ggb){ zS|D%WIS(&ycaZYHfPoT=CfAqajz0noY5|lU5498!JOGBz1jx%gHb(FFrg(kIvXMR0 z$j83>uZ;F%0kNQqAH*whW6US~oSA9z+&5ENdY1YXOxgZ#BO6W_Gdxo>(v2@=wkJiH z{MW6OxK$oB6gX>OV4xLJdu!|A!NDJ#4TuVT<`3C{!{IqfN$(9C>gzAM5_vNOlJu4K zZQaYKPe-CXN5EqCHeJ{NBp z-V!o^02(T13cx`NL04Vfb>Vx|;ra-TxZh+$ftIpz&vb)#Y-bLbE*^ve%9dSt4NJ^F zDsOia=&}XiMrb9=rq6UVdoQJ=r04{3sy`PB{5WD;J(n3fZ_1y-fYYhBuwF{0iAytF zoq=gf6M;8G9=A3q=1ogv@2UHQX2>BKwCOx?U=hji*5cg^3)~o_9D)BqyuO4$LF0TY zNqIN^5b=*T+#07_rMh+VOVEuesLC@QU*HdUx`QE*{>qSEzvE1Uk z{gCLl{M{1Jf&ArWpSo;3Bmiub0Goc!blu-5IY1G)i#r|RpS1n`;soJt0sfe}f8q{F z&;=AZf6Ig!7(~eaUDE=BA=m*xbijs0w7v`o2&l4~a;kyq=Jg~dCQek@gTPaZ4{;ZQ zXJ=5HBKbq8+HExmKVB zx?x!B-a-e#5Qxy!F)-*An^`~90Pi7O6%qESk%8xz-$;}jh1@Ym0AXm}-rnjjOw^AP zc{7`upf6uaR>ViN*j0h0H7ZKVzvF|AmjQP7=*3q>lRm`0AZ+aD>~MW!UqL}ZD&wil z^5yxl0kqL4Zydb*Wk3}?Ik`l`{1*guja7oKG_X)w#7!A4!>g>XuP>0O*ildo;_fc+ zK*Dc@1EeR-Du{}PrZ_JzioXjykMF6;Pk^o=kGamRPA_HNsRm3TStWIwX}iXXpyfGw zdwG5M@L}QNG5z0pZcv%IAB?E5+b11Au4zWLmzR{_Vh2B4KJjTBjQiNy+WK6(01lS# z!Tj^apGz5yf`Ce$Khb4r+4RY`Nnv0qKrjIdgf)r`#@8{##>TFupajgdIewhEqneLu zvR%y{xxKOR-p%dSt&w2D8@o3PEY1emyi*x&=du{)_&>n^n$sV@OR z`j8y4Q5_UlTg5~O{~B(nh15g41Lto$nbJ+ z&I^HEnzm?WW2tdC61)IwBS4Q5vv%o z2TOp&(p+3zNs3I`!N~Aa%$>TZ<|nSEA9ZLhHsgH~i~^cxuX4Z5%|Yj`a)TMwu$)pv zNq`uPo2w?9Zr&4eciMh3;CCV#mXC>mIT`u_AC!~L{JE9Nw2?O* zL4k%Q*JpJrZJxdtIM+Qe#Uri(5{y7kk!%gCI2~&^T5`YCn^<4J(LB(2)_|_UxmkU( zDQ}ow`g73_4(*$*{P*0(OvowgSBuU^tA@$9AZiaJ0bCJC0Gnaju@th+;O4bOCTPZ; zOl4DT2+YIWAd3i49YAczm9NgWsZ?xojP->hI0d*YMNU>jz>J6w-~~?x|3WB`INjg- z(-j1CMWXzb60i&Mt$cRb+<{{v{u2!F3kbtJQ3Sk2sPl)`j?bTo&N+BkS^WU7A(nsL zbi4MVgo41GXQKTU2d!Zw*ue}@PyWYv=9y{D4VdtdVWK2;=XgnGyi?Al0F41DDR)wL zN2JtEJ`33fM00R~w`uwSWG7B@CQ$L3O3gG?bV5CPK=Ov&3mdP(Rv25=*A#a&WHP z)Ntw1)Va`dUYf?>bs9IbUB!+8fSC$R7=&ABmP)#y?!`HD&^%1+e8Yo>`=}go8bwQ8 zohPBaRBK~G#wA-V%JdD=~H$HRleq!#xTq&a*>iQd*tP@9ikj>yg z9$C=u>(VO(v-zaJ(tV18&sJIe>B{j{=~duPyz8zlGUp-d0r@z<*AK};1UrB;-w;0C z{p*`GNcVxoo?hl_0&G%bX5K22jYjpFw?*vMMXsZ`aHM-M>RP1E0W8W)O-Q2Xz+^<0+o;Xj4|*KhrRW{n<6HVW;h2=|bhf9izgvn!Sg z;1{7=4j}zxdgr1o*mb?I4lT=e5mC;;Z+c_^{NFpexgFv;y*T--Dug##!h zx-SqYO=tR9Y<klY?kz zXtHGU6hP4JZ-V%Ky#qZx_{U}taAX18t^^8qf@pC9P*S+6v4f9~ZlOk4;;M^I-t(T` z-WWzu_5V&3HibypaOmBjuT`fn*|+Jo-{?|RRrNo=CX2(I?)mE5I5;~a{^ijq4LqzB zOipDEtO7So1LgtH^W^!ZC(tK7aH+b~aW|w2%b_BuIS3(p2@#}h) zFKmIFwYU|uN+j~l?{x#^A8Yd&3@l+bSBrWW4i8Je{u*|8&5hZ5MNwusP?Q==H~;oeD5gffM-ssb0=+rz?z(!Hq?namC7p|ExJZ)EQ3TU^WwTVLrGJEG zR*U)ZBtA_gZ#FE^DO3w+B7sVPl5nfUV(hTsnMU-YXKpV~T#rmfulxr3*ExEox}Z5E zsUKv+xhBjv0!#Q zmiIZ!K6=9Qt^cu?I}(86eH($-VK^3BdzxVdH6|!jlhfip-)lr*@WnUo<#N2Sivok8n5{OYzGRw8WZioFSz+7lm@oE z?^!oBUGLz-E4LfmAZ%GmkM;|=y5GQ3O^cp6Js9@uD>sP*p)@6trUUXZGL9W>wM4!l z+X@T)C)C7%6UdS*Y7AlG(CKtO*=|LQqsMb|4RZ}MnQ!9sPUkywEosgs6+YunuTJ;P zo3LOY7zMBcCV^^*L%y}{QMD&@f2r1WJ&sfF1J*itjEra3R>M99fzDS6Szz6w)d|A3 z;J!I-ntKA~BFX>jj5w=hHtsI{Dj(&Rh zWI#txJhKQN=DslsF`zQATJ#ah`NG&(Y#=;bPnKI@Gg^{?rIeo!0cRf0grdL;i(Ua6 z7UeU`7X6vhj%FU2AnsgyXJc+_s*Wi{6wDcJff<>&M`@zo!+5#27CL%Zuorh~D?SCL zztA%tTGUl*HW{e$6Ll{)bZ{??odJt1dy!yLm_>%FeZYSjylOV4u{GjM@j*iqaaJar zoZo8jQ$GTd;WEwUWX%9n+7-Mw^rP%1|EMODtDN$gWN&X#VPw^2rcuv^l{Y*E_T67Y z`n>_2`}gt@Fz3?-Jm895WTg{h+B(XM*(dRh><-gDOL|~W8B!1K*qg%ek08aAf(~#g zw`DsYIVT2IMl}+9Y9SYvPOr0rJUfzOX939u+_2}*!q3X%pcRi+t}f4YIZ24(5jj}M zyK5ZhWj=a1)N3M%qYf@!q2WEhcsh-=I6hx+96>F*MwVyyNKdm!caGm`9K6N!qnCSf zRL-J`+0^N4a#MHz=0sH|BA-iE0eA?PM$Zdzi^^Ix3P8o7USZ3ct=?nr-2DXRienZB zD_u&>_#nKP&`)6keG@Y6tM;YU?EPURT=*1yl4>icI{rm(7H4AcMYGcKc!Iy?`08r2 zy?fV4D4YI~P&L>{)N^y3e@#e%&uCjvM08_(n4r`jt&p z?%}L<1MbgET#UsK-<9si#CDJJz-xnA0@|8 zB-gYt?!YRh9^DBZMjc0D4Cs3G0k>a0B;X-s*sq;}_)Pl1&d`i6>uqSGc}H>`T5MQx z*3z1Z(Ogh}T4Zj5{M7dyXaX1fvZNi(X1EG?58OVoaK|B_eY&!ok8$6gen_nz*-Y&n zR-S6Y-9aC4@)&)#-gSL=mg$|~{NClcd*7S9TJ0`EF&WmeK4XOn3WogN@8=&~17)%w zB}{=iHAu`@0&LzJpis)-EUha*$-Qxn40S?JlT*J7D!INx|?5b)}6BxB~&{O*^$YFm`Ug*hG@uh2QQ1_5`Tg*ck%!_ zKTWzaeW{nPQTWvu0yn$@PwV}Nh~G~)S)n|QiNs11Z971Fm7?V%VGcksvJS5jbDUe% zGv;ky)LqzvoNV69I=cA8L^7L{uSyIpUYPo8k@sjtl1!T=X%GqXlDz0lmO$J2RXFkg ztKzGpqUxgdVF-tmAqE(b8M;G4x`*zR&OsD-DQS?QLqKJuL0UjckdS8RmR3@_l?G7( zf7kc-e&1T({p;R!X5DjUpMCbZ=XsvJGbZ==b_2Gx?B_L^t*DX(%q&4QguiUzJvnWm zH$gX!a~EInXG0FFjo8~BNK0o6^pv8F_Ti3vy96#u0r_bS`QY)In>r-Z+V3AnwVGUt z`4v5N?WK5eSt2S^*?l*{s_~Ap3F~e^E|i%Hl*=GGR3uTGDHqG}zFwPNKb?r&YB($B z$iXA)jVvs`d!3Ee*t5yUNNII~KNFcRo^D-8#29vb)d2Dqnv5a%&K;F8G>i_>nTnN- zd)d-^t^NZ5-(RbF?M=PK_1$w3;WIY(@L&k4(k)Go0taU@F|E!!;xMaPr8oBlNQmj* zP3Ipg*GN?IITBGl!FeK zdw9RJ9#q`Kk~{WZz9cR-6&=bTAMjYI`XHo6OWk^S>ZhZw^C^ytIZ3Scvq_1oa=D4N zp7T$3cg=pRdv45*2q}TvaSOt#H8k)S2L)_9tcJKJClp?6G8&~j4GRr9_0M;c%dL<1CDjN+r!DS2 zWt#V`T77Yt+ha*r5|)6&_oiFht>lTNkg-7&PNk3QxT1Ido&Shw1PH_ zHP#r=z(d2-KM(i#-hcLtvIq%wykK#*iK+I?;SpQm75 z$;Eg$So(Dd;Aa@(Fn9$PzWS<*mdj;?NrJmm_YPT{0<23O4HJPYbLsQBmxQBVqd|o1 z2nhBonCe}bi;}8;2$VEc8H-|ys1@~uYuZvW7s@z!M<`42YTU z=x=@2M!t?bdxnw2=VXpCQd&O_T719uLcfZ6J0}|IO=~0?z6gU}0|pesKO;3`akkpU z$3(p8zT#MB8BbQBd`9>PoCMK|zVOUZ5a#y63n|~6vBFWcv$W4QTeE!EYUKt4-yGRSxE|XGG+(m zOX5Ulv|T|ej{V8>9_6(RJlawZpJcd&5IWrnkPI%N+GABo8ef5>%DTpFkKT@bov%Pr zMj412&LAfh@D&yHClrJrI-(FH{>fb$WprP!|1r%aLDU!lo}+RX_KuKw2&oRod|gN# zTxWc)sXd?nsjji#xUrte!{AbvmZN8(kMhx|a?h!M4J<=RGee2hu2gul=G|I;*gF z+G%`&_Qyw^-2~kh;+=#DMx#ND8M7kAqR*d0Ei=W!^%Z1a*I*3G9a4a0Wd9KSw)J3Ip7#DKoYS)JIis z4NyCKq5^O7@&;V`r2r@A6B*(WW^{@-P&}@2W8>ur&EhnL#7@%_ zlYW~-$XuM3Dp)8tVlADz1KQ+Muxm!UmLBC8DJuwcc`h382*{>h#fv_f`1XyDV+x>S zAXQ#IKGgA2Kq`|2#(^pTxV*d!vNjy#WMpNNc-Kx&P6h|T+b?SU0sI2*8EIj9T3Uvl z5nANAZa$fAMH6iPjD@&H{e4|yV?REv2ue8nz64Twas&{`mDGKcm6Wt!_;n^&X%Ks2 zPkg++&EdXj&ojTWk_Tdhuo{a=Nj)#M>*yo@`xlGvond8C;bE*Ej;^i=7tU!3_qVsk z`}$PyuhhabI!m$y`1nvW%bS}hu;(EU8+>xe0;fhLmXC!a!`>0-nIO&|`kD2rQpv0!MOGAzx0hT}NilyG5JKvxF9kvT5 z5L^6NL|#r-c6oljRvAfc2l-h{^X=f^08mODCUeX!kpsS^^1oj8fA7$^&?nR~+rKNY zBO@f^WM^R>N#(aclF0IF;dGtuQ)2s_CBOJra`qcH1qA&F%!c+y; zek1o#Uy-^eHn+qzgXk}>DKnfn0{cR4O)H}JecpgO+S`-EGdxCP<3+5m*4DzK*h{`- zXbq&Po3N;4JYM_6>i1dU%8*fj@1q2xJ98f_!dUI=;zg0EI3TGM58iq2s!tJh^5dA4 zSV@hVt(T^-fTD0VjyPIH^22`OW&RHzzvN?UCMQ%JXHH@0oAp z4{~q(F8f0|h1gk@-v|~BBMazju9T44P-5pBUCvBx!<|gXzS54jWVr?{F@Yj^ zYLw->Wq0L#{NPTW@Ot^|u|^C2ILQ2cKz?2P<&`iuj2VX?pDjLRNf`Q!Y}O@p>^wxy z2u2lE^nzoktU}QmMoM@UFAr25Q*|J0n0FJ-B&8l)cBe(Jqijhoi?D0n_e{n1IB;CfK|^AN@Zm>fj{kQkvRS2T5O4>Yl&RY~w#z4da zZZXjJWac`F;8H?b2l%r#=?@BLUq_yKKBv~14S6G(iTZ>JS&8=P-`}sk#T>oaKP;yV z@*-J)=|dJf6QKORTw$~VR$RerE)!SR=$|5oalWXBX+JuMLavT+8=pqA+q4G})OLvj zCFtyXE7yP{^*4Iq&#nGPpYr58?R#SKyH+*=(%LG;J-#NA(2!Qr5x`SeStyLf_#v%X zP3|Fgu}Q8LWm7q636bz4{E%PgPk8;iXh9F7f2z_Mmn<}SZCrj|d{}9A0-!@_XnfM? zfP3T_bRAywFj5Hk3P3$XuZWe#hGoil2S$+JSN=p0%ExFhNqV#Sc)&j9*lQ(J!b%E+ zgO~)eJvL%8<3;&*-JFz&1E^@fS^aB+hmJ_NNwo2;& zRajBThxP`@VEO3tHmix9j%UB!ms@7*^+P&(f*N80Z#`)LjR#<}r%oijVaEuT^jWgy6lcFtnN;d$F=&E{7 zuxpftu>0;;QGr%ki4W=ygUwHOB2>a*2Sqz;88LxFIb>(r+2A?tX?O?NjN%rpKolTU zpo90YN5ggC#l1H6z^>HFn4JN7AvRGlv8{WOqFanFLJg*E)W8 z+|AWVB+Y6C(Lb*Xx-M9HgelJ7LcM`kL>6plK9}E zm5C$q(juFQX-{wLl7D#5sEzj+pk5zQg=lSH*Y~DN?FqVD_B?Fy`M@Oe9)~1zDpny~ z0K%nsH>in(7DyIooX6_$GF3p4z%OnN#D5SRmjg1FVJ2bA2{*g_H36%d@U9{hJVM8} zDh4njz9O0eiH$&vLO1iTF27q|d3t+eNQR)h=10E)n6D+VVjTo=F0(?Mt`+81V+V%e zrkjhHJvG#swC!0-BVUQUA*2Rz&U}qYZjc>Joq_h&DW%);#*uR8UqE7 zuWiiV-;z^zCJi3`N1j+p?jLhHGiJNl}ZF}_m+EQisKD%(A?Od@PR^zV^gh_*zl zqA(ormOESgNh}9c$)B$?z7LOo+9JBEybTCw{gN0rf7aI}rgBG5ir|X#xB8Dlw=SLp ztyky34cr~(qud&9H-Ysx!Ha0_dS_Is-V44nxA?jVMrn&BPJ4^%oN^9X(q*AhMc7fQ zQOs$Ulv6y`+5k>_gGGTOY5d48LNw?TsKf;*<5vS`k*EsiAz5Mbxufy&!KdY(dSyXj z$nEvdX^=r&$6H7kj`*YIM&(AW-SC8osLNkwz2yr_c3VRF%LKh#g|X&R5hbH(6S7?6 zs#QP$1F}Tx%^x6Zcx9y12mVT0C|we$k`Fu5H>AIQ5zpg zO_%lO<1eq&%O%>>oOl3=0y(~qcOvU@fz$wA6I52u@4y=Io!OZPF0Q-VqoA*)Ms6nydgEyFay{J}iE=b;l+|_eH3%$m+5M z`3?Xl#{PqI89wBz5;>aOCB9XUiR$^28fMV9urO8793N&KD4k%s(ATLmPX6-Mx#cbp zM#*jYDm`-l|A1E*J))fM6gY1EBm{jDL9bB-ys>uoR(lARFyjY7aY>Z!hJV1FiQLf9 zaj@Z~Q;>wY&T(34ZI7w&%b)HpaFWv!8WSP!`oDWsi&6VV<$bAYd##l&iVByh7MIv} zd{6n~96$;=OpkJdPgwmu2d_MQoq?*7#54n}yvi<>C(Nt18rsY@W&nL?l#x=pc~ z(%boi&x}st0$}R=kbV^sKQUS94x(h%=-0u9vcdP(W%B&eYK7mHOtwSP?rpy4DwGK? z;XG8ylB^T#i-`Ge4I+GKK6&*20Y&uDL!R0oFR-pImjFLOUwpveL62ZAF7E=f0>RI?cn zNVA{~fqcVB=?NKIkx9Xre_yj`LeM-lS~V$x}KPP94KXs(yvta`uJ=+ZI0Aqs!6ijzc%!AO#~dCd_ZsT|W^wk7y1P2-vaG zQ@?oml68KY@dN+k5)yhcUVLpYaP{_7-)z=*DNX8sLpClh0Ho&(QkXgW_|&5i?h}ks zK5-Siy`g3}PSBDF*;)bo0Jp_PvQNr@wma-vO)po5I~H+&dcMw?NN!Dv^ozq@=te&} zNjq4PnObWA!0a*aAp(3f0+x-5)ER@=lJBF;i%N;a)-f?L`EzL^%u7yxZf|^;^;2c$ zy8Ldo!GCQe#crn_M>s>EC5e|@(bnu33FtqVgNhUMcdwP1JV8(Yv!+%i(@_C@5sX4lp*<+%R z@V81BJ_~O}O1@EvST~Y+hQR=ph})jnyRn%~KXdb+|Fe&Ghdc$OS;iKJ4kJ*^5CoMd zezKvY_1qu&>}ABELP_VPs`cHbF@k&l3p4JWXh%m!9kg z`&#o*BeWQ$KdsHhtnd#K<#)IgPsIm<{yRnN`Go*qVHqhhc}mr$_u-epSdyk2T+kA3=$BRAm(ZCj;cKYm5`W`mjo&5y3f#-vF zWNY6_GHXc2;svwEm)eI-cg58J2aOQ2U5%oN#f%QQ^&1+OerdbZb(`#=!T-B23rPGf z_LCAo3|$9JxaKwR2Yrb6>$rex1Fhf)1Tcl-|M@xa5b^H^!T+?y0fqsVz%KX?&Si>` U)a@UAYaHOxP|-zJE7?W-KkY;KL;wH) diff --git a/tests/baseline_images/test_layout/facet_wrap_scales_free_text_margin.png b/tests/baseline_images/test_layout/facet_wrap_scales_free_text_margin.png new file mode 100644 index 0000000000000000000000000000000000000000..fdd150f5994223ea7330c285a3e9cd313f2e8e2e GIT binary patch literal 29768 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 literal 0 HcmV?d00001 diff --git a/tests/baseline_images/test_strip_position/composition_bottom_strip.png b/tests/baseline_images/test_strip_position/composition_bottom_strip.png new file mode 100644 index 0000000000000000000000000000000000000000..94fc068501d2b7043c6114b93cb12f4885a5d71f GIT binary patch literal 6436 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 literal 0 HcmV?d00001 diff --git a/tests/baseline_images/test_strip_position/strip_position_bottom_outside.png b/tests/baseline_images/test_strip_position/strip_position_bottom_outside.png new file mode 100644 index 0000000000000000000000000000000000000000..a93f3e6c29ab89daae8637ff1fe7435651a5f273 GIT binary patch literal 5028 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 literal 0 HcmV?d00001 diff --git a/tests/baseline_images/test_strip_position/strip_position_left.png b/tests/baseline_images/test_strip_position/strip_position_left.png new file mode 100644 index 0000000000000000000000000000000000000000..e1dfd827104b24b770b6863762498379e0ec7748 GIT binary patch literal 5095 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 YT0M`P{_e%o2#}ASwvkr;F-q9K0ALv$7ytkO literal 0 HcmV?d00001 diff --git a/tests/baseline_images/test_strip_position/strip_position_left_free_y.png b/tests/baseline_images/test_strip_position/strip_position_left_free_y.png new file mode 100644 index 0000000000000000000000000000000000000000..094359e64acf0b9ed5c618fd6909df891da92269 GIT binary patch literal 5018 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 jJxL850PIl2Cb<&2kP)yMVUPL_;Frefb7~o