From 17c38aa318ea48aaff5253c58867641765ca078e Mon Sep 17 00:00:00 2001 From: Sonja Stockhaus Date: Thu, 26 Jun 2025 12:18:38 +0200 Subject: [PATCH 1/8] add shapes parameter to render shapes as hex/circle/square --- src/spatialdata_plot/pl/basic.py | 8 +- src/spatialdata_plot/pl/render.py | 11 ++- src/spatialdata_plot/pl/render_params.py | 1 + src/spatialdata_plot/pl/utils.py | 116 ++++++++++++++++++++++- 4 files changed, 129 insertions(+), 7 deletions(-) diff --git a/src/spatialdata_plot/pl/basic.py b/src/spatialdata_plot/pl/basic.py index 2dd9019f..6171ac5f 100644 --- a/src/spatialdata_plot/pl/basic.py +++ b/src/spatialdata_plot/pl/basic.py @@ -5,7 +5,7 @@ from collections import OrderedDict from copy import deepcopy from pathlib import Path -from typing import Any +from typing import Any, Literal import matplotlib.pyplot as plt import numpy as np @@ -170,6 +170,7 @@ def render_shapes( method: str | None = None, table_name: str | None = None, table_layer: str | None = None, + shape: Literal["circle", "hex", "square"] | None = None, **kwargs: Any, ) -> sd.SpatialData: """ @@ -232,6 +233,9 @@ def render_shapes( table_layer: str | None Layer of the table to use for coloring if `color` is in :attr:`sdata.table.var_names`. If None, the data in :attr:`sdata.table.X` is used for coloring. + shape: Literal["circle", "hex", "square"] | None + If None (default), the shapes are rendered as they are. Else, if either of "circle", "hex" or "square" is + specified, the shapes are converted to a circle/hexagon/square before rendering. **kwargs : Any Additional arguments for customization. This can include: @@ -276,6 +280,7 @@ def render_shapes( scale=scale, table_name=table_name, table_layer=table_layer, + shape=shape, method=method, ds_reduction=kwargs.get("datashader_reduction"), ) @@ -304,6 +309,7 @@ def render_shapes( transfunc=kwargs.get("transfunc"), table_name=param_values["table_name"], table_layer=param_values["table_layer"], + shape=param_values["shape"], zorder=n_steps, method=param_values["method"], ds_reduction=param_values["ds_reduction"], diff --git a/src/spatialdata_plot/pl/render.py b/src/spatialdata_plot/pl/render.py index 52297005..d33bbfe0 100644 --- a/src/spatialdata_plot/pl/render.py +++ b/src/spatialdata_plot/pl/render.py @@ -35,6 +35,7 @@ ) from spatialdata_plot.pl.utils import ( _ax_show_and_transform, + _convert_shapes, _create_image_from_datashader_result, _datashader_aggregate_with_function, _datashader_map_aggregate_to_color, @@ -160,6 +161,12 @@ def _render_shapes( trans, trans_data = _prepare_transformation(sdata_filt.shapes[element], coordinate_system) shapes = gpd.GeoDataFrame(shapes, geometry="geometry") + # convert shapes if necessary + if render_params.shape is not None: + current_type = shapes["geometry"].type + if not (render_params.shape == "circle" and (current_type == "Point").all()): + logger.info(f"Converting {shapes.shape[0]} shapes to {render_params.shape}.") + shapes = _convert_shapes(shapes, render_params.shape) # Determine which method to use for rendering method = render_params.method @@ -188,9 +195,7 @@ def _render_shapes( # apply transformations to the individual points element_trans = get_transformation(sdata_filt.shapes[element], to_coordinate_system=coordinate_system) tm = _get_transformation_matrix_for_datashader(element_trans) - transformed_element = sdata_filt.shapes[element].transform( - lambda x: (np.hstack([x, np.ones((x.shape[0], 1))]) @ tm)[:, :2] - ) + transformed_element = shapes.transform(lambda x: (np.hstack([x, np.ones((x.shape[0], 1))]) @ tm)[:, :2]) transformed_element = ShapesModel.parse( gpd.GeoDataFrame( data=sdata_filt.shapes[element].drop("geometry", axis=1), diff --git a/src/spatialdata_plot/pl/render_params.py b/src/spatialdata_plot/pl/render_params.py index b44175c3..d446a5a5 100644 --- a/src/spatialdata_plot/pl/render_params.py +++ b/src/spatialdata_plot/pl/render_params.py @@ -90,6 +90,7 @@ class ShapesRenderParams: zorder: int = 0 table_name: str | None = None table_layer: str | None = None + shape: Literal["circle", "hex", "square"] | None = None ds_reduction: Literal["sum", "mean", "any", "count", "std", "var", "max", "min"] | None = None diff --git a/src/spatialdata_plot/pl/utils.py b/src/spatialdata_plot/pl/utils.py index a2e8f767..4d2afa9e 100644 --- a/src/spatialdata_plot/pl/utils.py +++ b/src/spatialdata_plot/pl/utils.py @@ -1,5 +1,6 @@ from __future__ import annotations +import math import os import warnings from collections import OrderedDict @@ -51,6 +52,7 @@ from scanpy.plotting._tools.scatterplots import _add_categorical_legend from scanpy.plotting._utils import add_colors_for_categorical_sample_annotation from scanpy.plotting.palettes import default_20, default_28, default_102 +from scipy.spatial import ConvexHull from skimage.color import label2rgb from skimage.morphology import erosion, square from skimage.segmentation import find_boundaries @@ -1709,6 +1711,14 @@ def _type_check_params(param_dict: dict[str, Any], element_type: str) -> dict[st if size < 0: raise ValueError("Parameter 'size' must be a positive number.") + if element_type == "shapes" and (shape := param_dict.get("shape")) is not None: + if not isinstance(shape, str): + raise TypeError("Parameter 'shape' must be a String from ['circle', 'hex', 'square'] if not None.") + if shape not in ["circle", "hex", "square"]: + raise ValueError( + f"'{shape}' is not supported for 'shape', please choose from[None, 'circle', 'hex', 'square']." + ) + table_name = param_dict.get("table_name") table_layer = param_dict.get("table_layer") if table_name and not isinstance(param_dict["table_name"], str): @@ -1920,6 +1930,7 @@ def _validate_shape_render_params( scale: float | int, table_name: str | None, table_layer: str | None, + shape: Literal["circle", "hex", "square"] | None, method: str | None, ds_reduction: str | None, ) -> dict[str, dict[str, Any]]: @@ -1939,6 +1950,7 @@ def _validate_shape_render_params( "scale": scale, "table_name": table_name, "table_layer": table_layer, + "shape": shape, "method": method, "ds_reduction": ds_reduction, } @@ -1959,6 +1971,7 @@ def _validate_shape_render_params( element_params[el]["norm"] = param_dict["norm"] element_params[el]["scale"] = param_dict["scale"] element_params[el]["table_layer"] = param_dict["table_layer"] + element_params[el]["shape"] = param_dict["shape"] element_params[el]["color"] = param_dict["color"] @@ -2086,7 +2099,7 @@ def _validate_image_render_params( def _get_wanted_render_elements( sdata: SpatialData, sdata_wanted_elements: list[str], - params: (ImageRenderParams | LabelsRenderParams | PointsRenderParams | ShapesRenderParams), + params: ImageRenderParams | LabelsRenderParams | PointsRenderParams | ShapesRenderParams, cs: str, element_type: Literal["images", "labels", "points", "shapes"], ) -> tuple[list[str], list[str], bool]: @@ -2243,7 +2256,7 @@ def _create_image_from_datashader_result( def _datashader_aggregate_with_function( - reduction: (Literal["sum", "mean", "any", "count", "std", "var", "max", "min"] | None), + reduction: Literal["sum", "mean", "any", "count", "std", "var", "max", "min"] | None, cvs: Canvas, spatial_element: GeoDataFrame | dask.dataframe.core.DataFrame, col_for_color: str | None, @@ -2307,7 +2320,7 @@ def _datashader_aggregate_with_function( def _datshader_get_how_kw_for_spread( - reduction: (Literal["sum", "mean", "any", "count", "std", "var", "max", "min"] | None), + reduction: Literal["sum", "mean", "any", "count", "std", "var", "max", "min"] | None, ) -> str: # Get the best input for the how argument of ds.tf.spread(), needed for numerical values reduction = reduction or "sum" @@ -2478,3 +2491,100 @@ def _hex_no_alpha(hex: str) -> str: return "#" + hex_digits[:6] raise ValueError("Invalid hex color length: must be either '#RRGGBB' or '#RRGGBBAA'") + + +def _convert_shapes(shapes: GeoDataFrame, target_shape: str) -> GeoDataFrame: + """Convert the shapes stored in a GeoDataFrame (geometry column) to the target_shape.""" + + # define individual conversion methods + def _circle_to_hexagon(center: shapely.Point, radius: float) -> tuple[shapely.Polygon, None]: + vertices = [ + (center.x + radius * math.cos(math.radians(angle)), center.y + radius * math.sin(math.radians(angle))) + for angle in range(0, 360, 60) + ] + return shapely.Polygon(vertices), None + + def _circle_to_square(center: shapely.Point, radius: float) -> tuple[shapely.Polygon, None]: + vertices = [ + (center.x + radius * math.cos(math.radians(angle)), center.y + radius * math.sin(math.radians(angle))) + for angle in range(45, 360, 90) + ] + return shapely.Polygon(vertices), None + + def _circle_to_circle(center: shapely.Point, radius: float) -> tuple[shapely.Point, float]: + return center, radius + + def _polygon_to_hexagon(polygon: shapely.Polygon) -> tuple[shapely.Polygon, None]: + center, radius = _polygon_to_circle(polygon) + return _circle_to_hexagon(center, radius) + + def _polygon_to_square(polygon: shapely.Polygon) -> tuple[shapely.Polygon, None]: + center, radius = _polygon_to_circle(polygon) + return _circle_to_square(center, radius) + + def _polygon_to_circle(polygon: shapely.Polygon) -> tuple[shapely.Point, float]: + coords = np.array(polygon.exterior.coords) + circle_points = coords[ConvexHull(coords).vertices] + center = np.mean(circle_points, axis=0) + radius = max(np.linalg.norm(p - center) for p in circle_points) + assert isinstance(radius, float) # shut up mypy + return shapely.Point(center), radius + + def _multipolygon_to_hexagon(multipolygon: shapely.MultiPolygon) -> tuple[shapely.Polygon, None]: + center, radius = _multipolygon_to_circle(multipolygon) + return _circle_to_hexagon(center, radius) + + def _multipolygon_to_square(multipolygon: shapely.MultiPolygon) -> tuple[shapely.Polygon, None]: + center, radius = _multipolygon_to_circle(multipolygon) + return _circle_to_square(center, radius) + + def _multipolygon_to_circle(multipolygon: shapely.MultiPolygon) -> tuple[shapely.Point, float]: + coords = [] + for polygon in multipolygon.geoms: + coords.extend(polygon.exterior.coords) + points = np.array(coords) + circle_points = points[ConvexHull(points).vertices] + center = np.mean(circle_points, axis=0) + radius = max(np.linalg.norm(p - center) for p in circle_points) + assert isinstance(radius, float) # shut up mypy + return shapely.Point(center), radius + + # define dict with all conversion methods + if target_shape == "circle": + conversion_methods = { + "Point": _circle_to_circle, + "Polygon": _polygon_to_circle, + "Multipolygon": _multipolygon_to_circle, + } + pass + elif target_shape == "hex": + conversion_methods = { + "Point": _circle_to_hexagon, + "Polygon": _polygon_to_hexagon, + "Multipolygon": _multipolygon_to_hexagon, + } + else: + conversion_methods = { + "Point": _circle_to_square, + "Polygon": _polygon_to_square, + "Multipolygon": _multipolygon_to_square, + } + + # convert every shape + for i in range(shapes.shape[0]): + if shapes["geometry"][i].type == "Point": + converted, radius = conversion_methods["Point"](shapes["geometry"][i], shapes["radius"][i]) # type: ignore + elif shapes["geometry"][i].type == "Polygon": + converted, radius = conversion_methods["Polygon"](shapes["geometry"][i]) # type: ignore + elif shapes["geometry"][i].type == "MultiPolygon": + converted, radius = conversion_methods["Multipolygon"](shapes["geometry"][i]) # type: ignore + else: + error_type = shapes["geometry"][i].type + raise ValueError(f"Converting shape {error_type} to {target_shape} is not supported.") + shapes["geometry"][i] = converted + if radius is not None: + if "radius" not in shapes.columns: + shapes["radius"] = np.nan + shapes["radius"][i] = radius + + return shapes From 51f053e891edabe7e99ebe1b5c5d0dd463e7e860 Mon Sep 17 00:00:00 2001 From: Sonja Stockhaus Date: Fri, 27 Jun 2025 16:17:49 +0200 Subject: [PATCH 2/8] fix datashader Point behavior --- src/spatialdata_plot/pl/render.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/spatialdata_plot/pl/render.py b/src/spatialdata_plot/pl/render.py index d33bbfe0..520ba8e8 100644 --- a/src/spatialdata_plot/pl/render.py +++ b/src/spatialdata_plot/pl/render.py @@ -186,19 +186,23 @@ def _render_shapes( if method == "datashader": _geometry = shapes["geometry"] is_point = _geometry.type == "Point" + filtered_shapes_element = sdata_filt.shapes[element] # Handle circles encoded as points with radius if is_point.any(): + filtered_shapes_element = sd.deepcopy(filtered_shapes_element) scale = shapes[is_point]["radius"] * render_params.scale - sdata_filt.shapes[element].loc[is_point, "geometry"] = _geometry[is_point].buffer(scale.to_numpy()) + filtered_shapes_element.loc[is_point, "geometry"] = _geometry[is_point].buffer(scale.to_numpy()) # apply transformations to the individual points - element_trans = get_transformation(sdata_filt.shapes[element], to_coordinate_system=coordinate_system) + element_trans = get_transformation(filtered_shapes_element, to_coordinate_system=coordinate_system) tm = _get_transformation_matrix_for_datashader(element_trans) - transformed_element = shapes.transform(lambda x: (np.hstack([x, np.ones((x.shape[0], 1))]) @ tm)[:, :2]) + transformed_element = filtered_shapes_element.transform( + lambda x: (np.hstack([x, np.ones((x.shape[0], 1))]) @ tm)[:, :2] + ) transformed_element = ShapesModel.parse( gpd.GeoDataFrame( - data=sdata_filt.shapes[element].drop("geometry", axis=1), + data=filtered_shapes_element.drop("geometry", axis=1), geometry=transformed_element, ) ) From 6815ceaa62bc054599a8fb87ccde232d9936fa5e Mon Sep 17 00:00:00 2001 From: Sonja Stockhaus Date: Fri, 27 Jun 2025 16:53:38 +0200 Subject: [PATCH 3/8] update datashader test image --- ...hapes_datashader_can_transform_circles.png | Bin 26128 -> 25315 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/_images/Shapes_datashader_can_transform_circles.png b/tests/_images/Shapes_datashader_can_transform_circles.png index 60cde0732ba5cffcbb69f84532e3d1783117286e..a67f9daa271ddb8a6fcd0a4c68ecab96cc354387 100644 GIT binary patch literal 25315 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 KIp@FXn|}b_nsW63 From 67a7761d8f1833b61580ecd614813aef9ac1b973 Mon Sep 17 00:00:00 2001 From: Sonja Stockhaus Date: Mon, 30 Jun 2025 17:02:47 +0200 Subject: [PATCH 4/8] fix mypy error --- src/spatialdata_plot/pl/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/spatialdata_plot/pl/utils.py b/src/spatialdata_plot/pl/utils.py index 4d2afa9e..901a646c 100644 --- a/src/spatialdata_plot/pl/utils.py +++ b/src/spatialdata_plot/pl/utils.py @@ -2526,7 +2526,7 @@ def _polygon_to_circle(polygon: shapely.Polygon) -> tuple[shapely.Point, float]: coords = np.array(polygon.exterior.coords) circle_points = coords[ConvexHull(coords).vertices] center = np.mean(circle_points, axis=0) - radius = max(np.linalg.norm(p - center) for p in circle_points) + radius = max(float(np.linalg.norm(p - center)) for p in circle_points) assert isinstance(radius, float) # shut up mypy return shapely.Point(center), radius From 7641a69cd175f57b78cd3bc92511736deafada27 Mon Sep 17 00:00:00 2001 From: Sonja Stockhaus Date: Mon, 30 Jun 2025 17:07:33 +0200 Subject: [PATCH 5/8] fix mypy error 2 --- src/spatialdata_plot/pl/utils.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/spatialdata_plot/pl/utils.py b/src/spatialdata_plot/pl/utils.py index 901a646c..3b2cf0f3 100644 --- a/src/spatialdata_plot/pl/utils.py +++ b/src/spatialdata_plot/pl/utils.py @@ -2363,15 +2363,15 @@ def _prepare_transformation( def _get_datashader_trans_matrix_of_single_element( trans: Identity | Scale | Affine | MapAxis | Translation, -) -> npt.NDArray[Any]: +) -> ArrayLike: flip_matrix = np.array([[1, 0, 0], [0, -1, 0], [0, 0, 1]]) - tm: npt.NDArray[Any] = trans.to_affine_matrix(("x", "y"), ("x", "y")) + tm: ArrayLike = trans.to_affine_matrix(("x", "y"), ("x", "y")) if isinstance(trans, Identity): return np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) if isinstance(trans, (Scale | Affine)): # idea: "flip the y-axis", apply transformation, flip back - flip_and_transform: npt.NDArray[Any] = flip_matrix @ tm @ flip_matrix + flip_and_transform: ArrayLike = flip_matrix @ tm @ flip_matrix return flip_and_transform if isinstance(trans, MapAxis): # no flipping needed @@ -2382,7 +2382,7 @@ def _get_datashader_trans_matrix_of_single_element( def _get_transformation_matrix_for_datashader( trans: Scale | Identity | Affine | MapAxis | Translation | SDSequence, -) -> npt.NDArray[Any]: +) -> ArrayLike: """Get the affine matrix needed to transform shapes for rendering with datashader.""" if isinstance(trans, SDSequence): tm = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) @@ -2545,7 +2545,7 @@ def _multipolygon_to_circle(multipolygon: shapely.MultiPolygon) -> tuple[shapely points = np.array(coords) circle_points = points[ConvexHull(points).vertices] center = np.mean(circle_points, axis=0) - radius = max(np.linalg.norm(p - center) for p in circle_points) + radius = max(float(np.linalg.norm(p - center)) for p in circle_points) assert isinstance(radius, float) # shut up mypy return shapely.Point(center), radius From 2fd6668a73aec674d859f5ae01fba814535b3941 Mon Sep 17 00:00:00 2001 From: Sonja Stockhaus Date: Thu, 3 Jul 2025 16:25:52 +0200 Subject: [PATCH 6/8] add user warning and tests --- src/spatialdata_plot/pl/render.py | 5 +++- src/spatialdata_plot/pl/utils.py | 23 ++++++++++++++- tests/pl/test_render_shapes.py | 48 +++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 2 deletions(-) diff --git a/src/spatialdata_plot/pl/render.py b/src/spatialdata_plot/pl/render.py index 520ba8e8..d39051ee 100644 --- a/src/spatialdata_plot/pl/render.py +++ b/src/spatialdata_plot/pl/render.py @@ -166,7 +166,10 @@ def _render_shapes( current_type = shapes["geometry"].type if not (render_params.shape == "circle" and (current_type == "Point").all()): logger.info(f"Converting {shapes.shape[0]} shapes to {render_params.shape}.") - shapes = _convert_shapes(shapes, render_params.shape) + max_extent = np.max( + [shapes.total_bounds[2] - shapes.total_bounds[0], shapes.total_bounds[3] - shapes.total_bounds[1]] + ) + shapes = _convert_shapes(shapes, render_params.shape, max_extent) # Determine which method to use for rendering method = render_params.method diff --git a/src/spatialdata_plot/pl/utils.py b/src/spatialdata_plot/pl/utils.py index 3b2cf0f3..90d202c4 100644 --- a/src/spatialdata_plot/pl/utils.py +++ b/src/spatialdata_plot/pl/utils.py @@ -2493,8 +2493,16 @@ def _hex_no_alpha(hex: str) -> str: raise ValueError("Invalid hex color length: must be either '#RRGGBB' or '#RRGGBBAA'") -def _convert_shapes(shapes: GeoDataFrame, target_shape: str) -> GeoDataFrame: +def _convert_shapes( + shapes: GeoDataFrame, target_shape: str, max_extent: float, warn_above_extent_fraction: float = 0.5 +) -> GeoDataFrame: """Convert the shapes stored in a GeoDataFrame (geometry column) to the target_shape.""" + # NOTE: possible follow-up: when converting equally sized shapes to hex, automatically scale resulting hexagons + # so that they are perfectly adjacent to each other + + if warn_above_extent_fraction < 0.0 or warn_above_extent_fraction > 1.0: + warn_above_extent_fraction = 0.5 # set to default if the value is outside [0, 1] + warn_shape_size = False # define individual conversion methods def _circle_to_hexagon(center: shapely.Point, radius: float) -> tuple[shapely.Polygon, None]: @@ -2528,6 +2536,9 @@ def _polygon_to_circle(polygon: shapely.Polygon) -> tuple[shapely.Point, float]: center = np.mean(circle_points, axis=0) radius = max(float(np.linalg.norm(p - center)) for p in circle_points) assert isinstance(radius, float) # shut up mypy + if 2 * radius > max_extent * warn_above_extent_fraction: + nonlocal warn_shape_size + warn_shape_size = True return shapely.Point(center), radius def _multipolygon_to_hexagon(multipolygon: shapely.MultiPolygon) -> tuple[shapely.Polygon, None]: @@ -2547,6 +2558,9 @@ def _multipolygon_to_circle(multipolygon: shapely.MultiPolygon) -> tuple[shapely center = np.mean(circle_points, axis=0) radius = max(float(np.linalg.norm(p - center)) for p in circle_points) assert isinstance(radius, float) # shut up mypy + if 2 * radius > max_extent * warn_above_extent_fraction: + nonlocal warn_shape_size + warn_shape_size = True return shapely.Point(center), radius # define dict with all conversion methods @@ -2587,4 +2601,11 @@ def _multipolygon_to_circle(multipolygon: shapely.MultiPolygon) -> tuple[shapely shapes["radius"] = np.nan shapes["radius"][i] = radius + if warn_shape_size: + logger.info( + f"When converting the shapes, the size of at least one target shape extends " + f"{warn_above_extent_fraction * 100}% of the original total bound of the shapes. The conversion" + " might not give satisfying results in this scenario." + ) + return shapes diff --git a/tests/pl/test_render_shapes.py b/tests/pl/test_render_shapes.py index 953eb843..9bcc01ab 100644 --- a/tests/pl/test_render_shapes.py +++ b/tests/pl/test_render_shapes.py @@ -562,3 +562,51 @@ def test_plot_can_annotate_shapes_with_table_layer(self, sdata_blobs: SpatialDat sdata_blobs["circle_table"].layers["normalized"] = RNG.random((nrows, ncols)) sdata_blobs.pl.render_shapes("blobs_circles", color="feature0", table_layer="normalized").pl.show() + + def test_plot_can_render_circles_to_hex(self, sdata_blobs: SpatialData): + sdata_blobs.pl.render_shapes(element="blobs_circles", shape="hex").pl.show() + + def test_plot_can_render_circles_to_square(self, sdata_blobs: SpatialData): + sdata_blobs.pl.render_shapes(element="blobs_circles", shape="square").pl.show() + + def test_plot_can_render_polygons_to_hex(self, sdata_blobs: SpatialData): + sdata_blobs.pl.render_shapes(element="blobs_polygons", shape="hex").pl.show() + + def test_plot_can_render_polygons_to_square(self, sdata_blobs: SpatialData): + sdata_blobs.pl.render_shapes(element="blobs_polygons", shape="square").pl.show() + + def test_plot_can_render_polygons_to_circle(self, sdata_blobs: SpatialData): + sdata_blobs.pl.render_shapes(element="blobs_polygons", shape="circle").pl.show() + + def test_plot_can_render_multipolygons_to_hex(self, sdata_blobs: SpatialData): + sdata_blobs.pl.render_shapes(element="blobs_multipolygons", shape="hex").pl.show() + + def test_plot_can_render_multipolygons_to_square(self, sdata_blobs: SpatialData): + sdata_blobs.pl.render_shapes(element="blobs_multipolygons", shape="square").pl.show() + + def test_plot_can_render_multipolygons_to_circle(self, sdata_blobs: SpatialData): + sdata_blobs.pl.render_shapes(element="blobs_multipolygons", shape="circle").pl.show() + + def test_plot_datashader_can_render_circles_to_hex(self, sdata_blobs: SpatialData): + sdata_blobs.pl.render_shapes(element="blobs_circles", shape="hex", method="datashader").pl.show() + + def test_plot_datashader_can_render_circles_to_square(self, sdata_blobs: SpatialData): + sdata_blobs.pl.render_shapes(element="blobs_circles", shape="square", method="datashader").pl.show() + + def test_plot_datashader_can_render_polygons_to_hex(self, sdata_blobs: SpatialData): + sdata_blobs.pl.render_shapes(element="blobs_polygons", shape="hex", method="datashader").pl.show() + + def test_plot_datashader_can_render_polygons_to_square(self, sdata_blobs: SpatialData): + sdata_blobs.pl.render_shapes(element="blobs_polygons", shape="square", method="datashader").pl.show() + + def test_plot_datashader_can_render_polygons_to_circle(self, sdata_blobs: SpatialData): + sdata_blobs.pl.render_shapes(element="blobs_polygons", shape="circle", method="datashader").pl.show() + + def test_plot_datashader_can_render_multipolygons_to_hex(self, sdata_blobs: SpatialData): + sdata_blobs.pl.render_shapes(element="blobs_multipolygons", shape="hex", method="datashader").pl.show() + + def test_plot_datashader_can_render_multipolygons_to_square(self, sdata_blobs: SpatialData): + sdata_blobs.pl.render_shapes(element="blobs_multipolygons", shape="square", method="datashader").pl.show() + + def test_plot_datashader_can_render_multipolygons_to_circle(self, sdata_blobs: SpatialData): + sdata_blobs.pl.render_shapes(element="blobs_multipolygons", shape="circle", method="datashader").pl.show() From 1cf3f4ed1353e65b37640130c0f25081acd90c81 Mon Sep 17 00:00:00 2001 From: Sonja Stockhaus Date: Thu, 3 Jul 2025 16:51:10 +0200 Subject: [PATCH 7/8] datashader fix --- src/spatialdata_plot/pl/render.py | 12 ++++-------- .../Shapes_can_render_circles_to_hex.png | Bin 0 -> 14064 bytes .../Shapes_can_render_circles_to_square.png | Bin 0 -> 10222 bytes ...hapes_can_render_multipolygons_to_circle.png | Bin 0 -> 10782 bytes .../Shapes_can_render_multipolygons_to_hex.png | Bin 0 -> 10768 bytes ...hapes_can_render_multipolygons_to_square.png | Bin 0 -> 10223 bytes .../Shapes_can_render_polygons_to_circle.png | Bin 0 -> 14186 bytes .../Shapes_can_render_polygons_to_hex.png | Bin 0 -> 13321 bytes .../Shapes_can_render_polygons_to_square.png | Bin 0 -> 10100 bytes 9 files changed, 4 insertions(+), 8 deletions(-) create mode 100644 tests/_images/Shapes_can_render_circles_to_hex.png create mode 100644 tests/_images/Shapes_can_render_circles_to_square.png create mode 100644 tests/_images/Shapes_can_render_multipolygons_to_circle.png create mode 100644 tests/_images/Shapes_can_render_multipolygons_to_hex.png create mode 100644 tests/_images/Shapes_can_render_multipolygons_to_square.png create mode 100644 tests/_images/Shapes_can_render_polygons_to_circle.png create mode 100644 tests/_images/Shapes_can_render_polygons_to_hex.png create mode 100644 tests/_images/Shapes_can_render_polygons_to_square.png diff --git a/src/spatialdata_plot/pl/render.py b/src/spatialdata_plot/pl/render.py index d39051ee..f280da3f 100644 --- a/src/spatialdata_plot/pl/render.py +++ b/src/spatialdata_plot/pl/render.py @@ -189,23 +189,19 @@ def _render_shapes( if method == "datashader": _geometry = shapes["geometry"] is_point = _geometry.type == "Point" - filtered_shapes_element = sdata_filt.shapes[element] # Handle circles encoded as points with radius if is_point.any(): - filtered_shapes_element = sd.deepcopy(filtered_shapes_element) scale = shapes[is_point]["radius"] * render_params.scale - filtered_shapes_element.loc[is_point, "geometry"] = _geometry[is_point].buffer(scale.to_numpy()) + shapes.loc[is_point, "geometry"] = _geometry[is_point].buffer(scale.to_numpy()) # apply transformations to the individual points - element_trans = get_transformation(filtered_shapes_element, to_coordinate_system=coordinate_system) + element_trans = get_transformation(sdata_filt.shapes[element], to_coordinate_system=coordinate_system) tm = _get_transformation_matrix_for_datashader(element_trans) - transformed_element = filtered_shapes_element.transform( - lambda x: (np.hstack([x, np.ones((x.shape[0], 1))]) @ tm)[:, :2] - ) + transformed_element = shapes.transform(lambda x: (np.hstack([x, np.ones((x.shape[0], 1))]) @ tm)[:, :2]) transformed_element = ShapesModel.parse( gpd.GeoDataFrame( - data=filtered_shapes_element.drop("geometry", axis=1), + data=shapes.drop("geometry", axis=1), geometry=transformed_element, ) ) diff --git a/tests/_images/Shapes_can_render_circles_to_hex.png b/tests/_images/Shapes_can_render_circles_to_hex.png new file mode 100644 index 0000000000000000000000000000000000000000..026fdd1ea06df31c03357bab13aaafb5368e9984 GIT binary patch literal 14064 zcmbVz1yoi0y6>U{1PMVwx&#Cy6zLWzK?wz8NJ&)X~Mz-V~)|=xA$c<7oNZh|by6-r>28^=(cbZqC~rbY_l@whlsE zTvq@52B(evGp?uCOGDu*xVCan98f6y2gn~ZZ{6uQ{yHD2TZDYGN zwhVFO41<4azFFnkcha}{1R6nU%QtJ|nAex9y}7%He)jWrb;#S-r7X_$CDjNXCC5eT zce@Yb&|?M%2VY>7UPc86vvTwJ5)ntq#!JZEq4E5!@`~b)c|*bd`}gm9dDUqc9WHQr z5uG(?V}~nbl-c= zz2>)FOm<;lX1-u&XBRKz#P;pmx0)9r(q8wn9Z}MgTZvOA7b3*Z1Zcbt4LS5`$fvx| zMK|itz2u??7A?+xXNw#5XUdcFS(1Alb?T#|h6?l}I$~Jn2)z$6US6X7#qno3JEh5} z$e{D>%?h_YHn07Xl$lBQ&3pImVf}U!MNJ3MdP#VBiK(io^-WHOM@L^)d@pjX{`_>4 z$L+V-lY$gEVn0@#@fVB9v+d$%MV&?EQ(oFABCfi_bRwx>S(+Epuc!q3k4|p)h%hQL z#}sPibsKBs>k!LisF0G93Pfam_z+rH$gQHLHYeh|GcS)OVL4G%I_xSWEPPK^Ht4V~ z!iz~gUuRjQ&S_O0P2!QdI>9gdkQ4O8Le^>d=ztiOhel^7N1W~FGqh(j9}51g

n5 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�M*C5 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 P?~p5s>I!-Crh)$hA@<;i literal 0 HcmV?d00001 diff --git a/tests/_images/Shapes_can_render_multipolygons_to_circle.png b/tests/_images/Shapes_can_render_multipolygons_to_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..fe5a17e78b62382b88d04920359be06d3727dd81 GIT binary patch literal 10782 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 e{>y~qgp?eoH0`VkUdUh@4Y>r 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 d9e+KD7gXRTgOcfk{{z?yy=DLa literal 0 HcmV?d00001 diff --git a/tests/_images/Shapes_can_render_polygons_to_circle.png b/tests/_images/Shapes_can_render_polygons_to_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..fc3e39062f112408aa45b4ad4dfc9ce0985d2718 GIT binary patch literal 14186 zcmb8W1yodDy9YdUNJ=Bp;1B|$Qqs~OB_bjnigXJ|3?y5Cx#Yg~?J;_P$w-p})^iPF_pB`0MjMWImS>S{{*C=^a2{1qf7 zgd?lf^KI~tl&7+h=XIAmp7$-?ZBf@OJzX7LJRR>@v3uLPd)#wzz9@7-MChU*yPc<} ztA~`Zu+x9NL&(MbuJ9e6s%ZEY5?8fb9w-!fCu?=w*VEue z4$=DBi^gPw8zrxABx`gj#^7JEvSVHIa&D5~g+)gCx1pX!Zgk2WQ%g!pezC8rIXOPqSgoE^ z%!7fmPb|G7Km+y(CyqmFm)ID~{KtUKf1!I65Wdhb7lT#<&-Ek%_TLQ6 zE)SJ=HttNs?C$z-b8}nlu1`z2&qd0KC!q__1wxoEHrb=!*QGZ)Xna;)b&3S+dmgU0 zQ)Y`3$w-JyriQ+RcG5NrFQ7D0%WgTChUfmeKKgq$x)!zR{CupDMkTMHNN|1$Z#*iUr!>{&D)Un}xyxEO5E$uZ7& zAg6ky67|%?gEhLKy&iMF@tq%;F43rt`JVI`EIPXK&ZpA{+sg~Shl@qI^p~0AjILjw ztzG+CsEIW$r9XA*l+4cdV!vu^R1~$adDBYmT1ONOCkh$d>RZ;Lem*G{ijB9U&NK|? zjpu4l;4mFd#8j+Y^(M zXKIBnU#4q+NZy`q9=JH@{k_6cO-t+dm=GE*@9ixX&nmN2yY{m$AGzYBtSqu{MVvzY zD7L^|9J#~wtHN*N(ViFN(JQ7+{!H3MH0tW=W;^G2c@=r2QtnE3vQ^~Zw zy=}I`bMD;zd+Eu^Axlg4sG+)Yl{n_`Z{G|ZzgOUx2k!C2pS|+%%31>r+{7kFdcCe$ zM&j_sf&y+dEvZS9|M2oLOiatF_vE^-NWnH=wIV3!P zCf<}77#Nt^>XqwEB0MFWjK`ljF`ozCzo~6wBjr8{q`4&o*KTm;P>0k z|8S#o_h){B2t2pD#4Ko1^W{ZppIt}B1#4tnhYLZ+=Z@j5tgtOIWCNs77IR%miQP8H z%B^sjlx;ZrGm0Gl+TV}YxTutDiP2Ts-7XJ`3p&{e>VzqbieU94=HcP_UgO4PBE&#O zc(uB>yQ`~(!Q3CGaya%@<(+9{qr&Gm=F`pnvfECfW;+u)-`wjL2|D&a?3X*D+5fW| z1Gms8UgB5HEJXwC%-zY8BXg}R32K+7J>KJ4xnsP5gFocEZ)wz(sg$)Bw3F@)m6ZadvDYByQ5ff zPok0mQDnDG+wsvsp-_IOqu7}N`>FxkFtSp^n3peKI)`>RSI>TYd{Nw#Va_mYR<`%! z$1t<<^g6QKN2#eCa&qQNqRvt8tdi>RyTjIQ(qd1BCMM#eqoaj5rrm3GZ`~SRUMIeJ z$2f$wFaLHDR@7aLG% ztoDB|8r6C7<@n5y=wx!K##_vEM0NG{c9xmeug|6ESoL9*ciY*Hr?!pZj6Q#c?;<-vq>^wXKv+v`snwn-09V+X{Y}0CJXy{(Qj#sEplKF`cmS-nh5DT0RRd%+F zftHq?iwp0H_exEnpT54nM5J~#_t;LY7Vp)`rhupV#RWq1XS>@_gyl2-kf866r z=@xMsxwJA`P3c`P({fvp)@;mKT*$1Ut4wfHpqr?#d3Wa2a|8alA3tVbMO2Kg{+w)X zzM0w3AdPA%zFvev&Ck!HzBpaU{PeK$ZZF|eckKGtk&zE>9Ge2_cm)j&EJ$<8lJv+M zT9!F_v$3&Zw(2Q$cFtWA7CFXYS*vH>9a@}k)v`%vUFBJ7-xsB&^LoU4aW)L6&1&5V zQh2W^!sWiQA1ui`{5UgX)tf=$>eO=CL}!a^sIL7M_lgIcd9CR{Xs%rUz61+eKp>@# zY@Z| zOET(~mK>zeaH_BC>$kaETpARf-mU`U;$Na42~{qJ%Pu}pGGncr0W z{QMPndszz#3w>F8K79(;DBO(o@~jK|n7_65Yor+N+uR(!J56NUllEzOP0g4ATU~r& zdrXaqko0C3mxT8UqxY||sKBFrUzsu}kX9YUjuQ>TFLK|$c|!|DK9q=(5H%Kbas;*G z`vDJeNVeIZX1e-N1+9)-n?mXuHNdQ-`3C-=KlEMgQBgiZFRy~X&)+RoOmc?S7@dQ zD){R-S9%Aytb@Ynt3<;|?i4&SD>hs;&Iye@BUZmxe2D4%L2Vr!W9^WoqaFHsv? zfHSITYp2!4I*0c&s$DWyV;pqAUX=f7s5~P(WM9?w=~F7ac0s=Fs$Fi6suE8B#KeRx z=XGq31%^ubg4tv3##R(Zv{h+oDcl9iSR6&#cO#>tg+jq?jCf(_=;75r&rLVe{Sx4X z`5I@bJ*Y;s^PHB+YRQD~`UlBu?PAS5k$3PN?qpP(bjYy{E5(035fnt8{KaZWu@#Yz zjO;o`MukP6OWCl-__yDu(0g>9KNUIi-|wZ3&MR}gMh#$)cAk-aPJoaYUN1KIuh-ug zmk#jgW>_IZ4_9mz65M1$2D$Mw)Grhnxs{bw!M{hoxb26G>^+Q3pFcJFu7zGXoFDs0 zyC{^MSU+9i@3j`r%+4a$$^u_QdauejCs?@=`Gg{Giu%%NG%oUqSQDX$R*S?svS^gv zS#}or0=q|vi7l7qyM(d(rrha0@OkueT2g}3G&F@mp`1u(U?={v=n3bby##PZdY`>H zYX82zu`zRk5}N<{pgl!SiaEh$dD;D+Tv|EOOphNwj*N7I3*Fx4?p^EgIxm?r^`r5Z>#;F~q{ z@>b}}mx3?N8kza{_>f|iCS)4@`n9OzSWREQcA@?>Ae0@yvSG(Rbpdl-)JR9}FVg88 zsd8|G{|XwvAtnvSJw-40Q_qwz6elh&4m!b~fZ0ezBP%P;bK2a^r|dB+-(TUub>)n< zM^HwfqmAA=K0arFaj>S@0ql6q++qGhD$)k(*P2c#P>J~Ox|-B^k_Z^SY#FQdcxu4! zQY)lDm6(?H5Ki1a@4oleO^HLJP@h9m^45|l8keBz)N`DA;7jW=9@r@Q7Z#_~1|)tIM0xo%r~1cd!R3arfj6bN>wj1AaPp4-c80 z;Z^T~f&%%cx_K^>O-5DrsY6Mvk1yV}s2=TW4hkwC`q0yZhsu)j`cPzSWo@05miD9H zBT6ypomH?(eiBT(ZgQFJEi<$D?d2is&smZ=UL;a@vt{+aLPl4iJYHEp-0Gc$y5MuL zT8)DOn2M^?CM@b-WKZw0tTGNL>$VYnnxCJ4vs{6eG&v=uc7llDkqwUf{0BO%CzrZu z7_(Uee(RNcTfdJDZnbC;C~pXP7sJ4H?p)_W?ky9OSfpaFzJIR*z`<+u+oGo;t#WRV zVcsyn5Y0%b={LQ$qD=Po_Rs{my!d3@Bv`}`#|yr2sADdPi(A7~LBj!jN(EQuG7`8n zQ0%iepYAr(K>~HP#qJU=3aRG}Wj*tC)3v|C!^6>ng1^V!8VSM-uDvboU+k#$SWw)& z+J2`}q0~^*RKL?{eE&77#LXe=E%q}d;B~M zhuQ<>d`a}1o|zd1%JjX8|5IHwz>rULqv)3zTF)vdDM{HB$f?qM!c|#)@jK(swtvpP z(pPTYeB00L-aS5ig%;t!jZ>(hvgcmf{oU)7PwP?yR6gdRbENSQrd`Awl?(o_YNa;#bMWj{0oQ&1E8-Z zB_&b26)kzk2S;Lw0qE3^10uzNMYcD(>is}Ql?opy4)RFV=$&MaF6Xx)|N^oh&*}nOrCL~03+eFutwa8mzekYohs{%$GuuWw165^+4V2Jqs z-RRQg%TLS7glx2*B=*b$MU9Otv>P2Ag-zP`4g} zSF^(GwpfVd)z#JY+zX=(bheGU35fWy*2AnU7KvQX2vvPFyV6R900b0#KIMzX&z@TfWyrEDl}=k?3PGKvTeIQ|oA# z2(q<@W@EJJNC}{Q%3M^aA9wcj^z<<;n(~wa{vyqm6~Zpho8oJlpJ%}TbkH8pFCfG~ zN=nLgW9D6=3{xw^r%#`Dm(5S22L=o}Iy)uhS%`9Gm+jd{kE}HLNth6bk_H_+&4sXTA-%wBGI8XOgBj ztl{e=0Hn2awzuKn6);E*xfZRbBqz5y6U)6Cc9eMV$FVEda$YC9M<#5v8|U~vYLTGS z@Kk6kyBE{IRpz*dG?e@5nwqCR!?qP2`iP%`j@G*pu6~YCO&IhCO;gv{1U{lD--zS)!T#i@`vq*up8;GxOi!buqD-!@VtPxd{dFPSi#ybfJo7eFBIwl?Rz>;<8Wr~hOh%g3f-CuL&0MC_)*K-bUOt0 zD9CLvtjHM`LljgMn>%+ltu9C15~LT>8#$G2dXwc+(HTn&ex%`xaD>FhK2Occ`nag! z*KJ?r-X>qiN2rEkA|vGH;ZZkL8JG@SlPT(t0&S(ZCy%NVMIsVNLm>o2`S)*6Z?->Q zLB*<_;XUFeRKt*jpkm(PW^14G;-l8d?_(Dbhzb4CXj6^sQNUJhsG$B3SXiK`g{JHh zBpR2h7#bQX2~nSMOsd1O@3G-=t4Znb%_l{k-201_u0EY2{nTh%J(?ew#9ik_mdL&& zeR?`0@&u~Z!w9xl%h7%zIHzs0Ig&Fn&|Z9&y%r+uSFU7^8wSpJ*Xx;^3wtrqs_a%> z!wq3?aTL3n-?y%Ko~^K;fc?USq`SBG^k6-n(=1@M#HgWVWm)a3nEy@7Y3OZ4nFQ%i z)#Kn{#%~T>UujFuFnpox>@4&bqVmlBLu^E(aa*Qc*GoK>F0clNq5kPICXIe{piQlO zT~Yze1&F~nP8Dh9u<*j4<{gVU55Fd$lwL;x-ULY~DJ3Pet*uQ6?|%LLH5CPg;Dz5G z|4*8)B2OHGfwKR5bu?X-OYW=hfTdU_6Dv*!io+a#Tl}kil@+LWyR&R3ks#kp0m*-V zu-2Twcm0{q2#cgUJ`i@Lz(85=)sgUXx&EhP=+C#Y9j_CW5Ah2Ly|3(*jRCM=1wu~E zZ2T1w%QpNh2{+D+%(?q;XNHG|MKV9>$;p3|C#R?$jY~_Thvgu`9eH{uyf^C_~DtWT<+L z>EfLh`>L7s>2?&Ry!n`!oSZyE%;`x{oEC38C}4=d_I>rwl(P~BD8G>)J=|$={xXZT z2DFHPfIvYT*Vn4*YGfw))NwoJ-2oWlbtbTNg5+|+c}(JeX#@xVmquVI5Tcsjm#32} z3qnqO*DsbT<2cy70O?#MEl5P9h@d#D2-UXfgl_32TUL^ai10Lv%93G zp`i#HeSdp70xH~3&$*K{7 z%FM4{^%>(-$XKNrTdKGiLR&G{GR3BU)vpn{uHN1Su}Q>!01eBk`|UYeV3AN>Ir#WU zpf!TrZRg^m3YP&*_Df&i^iXb*esSKQy-d(0X7amTxZ|C4MYVI zodFq}d#}vS6l}j1s39oSty{NtS6zZ)+S(L#B#=8YTJ6%A%%iERuO9-a;iYjE=_v-G z-+rZcb9@O=>-)>)`E_;7fb_pN1zh=6yO3kytZ$UuZ37D%csK_JN3oG(FZHKB>9#B@Y;L< zIOcrStOlt^$qW`P@^O6lcmpgcSba!QhC6^2g2p2$M-Oe8nA!_id(xvv+|UhY;Hw5o z!BR2H))t4cW1au@?6xw&Iu3Z}c%n+aTYepsD=?~(f-2`3ZhA;uLI6$MCG zC={-Uj5sh^@u_^SY=Fctr!UD;y=70@d7r6ZqQs00VpweeU1{m*u}w`A{dd67qr!jM zlM5j4zHj4r{r!B{pv-ZE&{d48olQl=BhV#qT~KfljDaQoL0M^B$|&Z@NPpfKA2!lj z^9d_r%H5v~h&Vdfd4LFu{>OU@X1$j)Kbci0utkIbfT zP}Gxha}(g43?b}@r&!~;c-ru#Q829V*Uf2Yd9Wyy^pw23s(?#%aIbw?$&wwJb{*UF zfHwDMZ88DWVZZErS?l*?Mx}-nZYlBi;H6DIRX_JRoK$#A8C_)GedC7KkzCT0j2%l{HaL(6Mip%maFt z<|8qb58-&Zxy-eqeg&cQcKa&AyH_KzS*;crpgy*?JXzXB1M~Rf+t!tRD#<8G5F$oK zM%IsZCT9!N&Dz39XpoNCHSaFH|1;mrsWX-d4`%D8nJ+;MgRqLWc6_f~bxjQ;2>Lmr zAVz^Uy|uSpFatf~^)J`=0muDW+UJz?evdAL9Marq$d0CselGV|J{iR%;mVGh0<);I zB^b|bGGJ#qMMt*v5#RMXCpoVrgNDP+9tpP@e0O(uX$QJXmoE8KIXF8%L{yO1S^rA~ zIU*#0YIMu!+u6@Gy+Kca%{n=qFEeW#Ssr>l?5GQn|M`a#=(K|LnqA)*w2~>YU_8iE z;b+MP?4KL;{!{hi#}CCqeJ`eEw6HJ{M#!2=iPi`BRB>@JV#8<@CfBhv)8ONPUc;ysE_u(NqdA+8sKQe|=O=-44%8Q0Sg5>|?2mu? zQHiOk;giRIsu88h|L4idT{)1z&-}Mq((q@*Aw%3HXUKv4|El|BKX|G8t^tS#>EQVBkk?$G{bqb*1!b79*>sB=oH2q?mAp;aN zC$tU7HGlO2!f{l>^gmMk|FT2jZGRQ||317dkLHg0t2srqPuIG>+?sjyc~9;yh})|3 z(JD4jEH&K1UcjIXos#0+4B!6-&@Jm2& zh(h%3+mGrYI%R4QCd?dk;EI24`@usP-XIT(J-fpiHWW~F+|jTlkmIf8_!RZJ{?8i~@Okd;Z=r&V7ve2@vr!I3&U_sP0s@DX_u0gsx=YHk_%!5>L+WSph&yu zgRj{5!@J&XV@4T-1P#;ZNhBfxSPwB4k{Q_t1RyR!M@L6}#4$QHwsI>5;FN|bgOjc^nUyH>6R#JaLO)Xm88y}czRg-F zUBF&W?JNbN{&3DH;b14MFuDnm*hoN0&!skNa>kuI!%s2zc+)G(03K3CzPRKK*oRQ4s218on5?rBZ*0qgaiY;*du-u;yvVP+ zl7Kyf7Z#X|jz&7;m~-_&VHk@ZEpo;25xNFem@hgd<>jh>UB9rGZ{LamHNLSV3Y+aK z%1tU82wVh|Mo8i`vR(;1lz2$S6as1-Sc#U4Ukk@`r1ronV;2^t1fT%O5LhIM;htXW zq9^v*GnFM#MKibpgm&0c5u_I2ybe6_gOCV>P2ip~O1g9Z_LF(*G8vCJf8~vTm~#UD z+$#6J{noM7Izi^)#%!lG5Z%AQ301ZLT7ajN-*}Z8deVg}mzU^0wRzQPuW@IddQnnB ziU1FAjN>6W;VbjjZ`&R=;q+{R9OA&22W|_1{cQ=#n9&2Alyck9T0H`yyt@F&o4p= zt7Ek^fa*g)yB!mU#1i;QU{VmZROLScf!cE9%{{Z;Z17UFbEKm_eE87fEKmFV#f#Y~ zSIWU}-!x2d^}eXNauW$fk}P%pz(Wca&kGaa+nNCAbb}N3LF%i zJk9!l)739UI=S*riX9#jESA++3pA8N5S3>2h?T?h*n&YSv^YN8Givfjyv}-QGjnrF z6v(%0n;DSA@hl#Dp514MkMeH(eR?N%t!52vjDJKt2T>Dfm2KB`Waw7d;=mLE0pNkN zxR@9g{H~u~zth^MiG9Yki&DmK4%H5xB7E`UMZJt<7+}MR*?|WNkGYN>IXt#BF@D^LBUp{WUm3WCv4NYDzBbKZ_4Z@QQ7K1xfo zYQf;J$nPYLuKsYW5BxGRLYm&g~6aoP* zbHIxKDF28)RZ7P>Z^FUBA*Bu7~!`%Xc%>*zc ziZ$6u8R5Ws`{$Dy9lqoX@?D|hH;+M9N1R*>@SR(a{Z3|O3)R30rYw8D5Hwaq+l?G{ z={fEU&`1L2#G2*TegXzl`AShFupr97FVuQE&^&QtTeXr9E88N3T@Ch-JZLeYY@Wfb zM;gdsR?_e}4+j;NU)Q5;z%AEBtZyo}e-C0Z?I_{k5hqyM(z{N>{~p^_#CB8cnEuyz z5c!IPI^tjN8?e7@Bih7ssGi@4oUUcPKSUZ|VTve+4Fpg^QRPcb_1&5#CRqbKN@Tw@ zqdnoI*#5-=Ar327bNvEqOd>;^O1lHYp}bH!7cVaq#YiM>WQMPRLDEXG72q&Q5Ya13 z6B2t-BV3ZiG67a64qjLt_!81*UNFD_z*z)s7Ci+$1dytlnpz@!&{p*E_W)(RU>wD9 zQARTGTcGHBgC<&EjI1n+f<+NfDPG+5rq1A(w*mkPZoJfW4@lrKYF) z^?pPDA|h9Uj~Kxg__Ou|5}x4wn;yrq$u;#ju*e0nTzyEU0C?i-*RK_j;E>4vY~ifZ z(QjV`fB^7fVk#K@%d%*Gbt%QVf7-*|!-OEn;+c)(s^s@AZ@>mZ^b|ynMS2A|+Ov=E z<|qI%`&MRprlKxi55^5h$D(q$K!~RR#2fGc)JzGJxVcXymXz?nG^sreGNRO-PfrG& zGQs1|`1IpU6Oyo^2G1%%?wApJSM&a0IY6a{03@tolZpojZO4LsrlLX!4#lbJ(eqxC z912wUkZG-0j>e|htR2GswSq7f_?gdp%U^jcXd_Ou!${m>e^L9iE8@@|qf-KvKw;RMpkuW{)w`O+rHTbn6rtltj?l9G;ok4cn3xzn5G8BJ zAxH>Gh+H#G4T=aZ?j`S96TQo#hM0j>^ z5I`YW(3UEp;`i_0pYcAW1=kCOrxiS25y$T$y-BJdWv0Ic=YQO6;D(V=Bs7g)r*=9z7Ekj2FBYKv&$J%n z=JyeU!;R!vQ6k_~6%-Yn%sF@-Z^GF*FJ7$dF;WHK^3u>D{T215+}|h#J>8ZZ#0(x1 z^?8N(;fuOX$+JlNd|7UK@`PC{Q;ZyHbo+C?eCOSr@L4LgOINnKg8;8GHgob#)Tfz+Fp-t5N|vcn|GN1iX4s zrU@M?iHD9|2JJ5c4(7VUi>ft=2OR~t57J=u)34IHE4r8cf-^Nhgto?KgA*9f>&nWF zF^^sZHkqvgiC-VSoBOn)f(nADs{a1cNQ(hEM8m+>6E^eD(Q0A9n|v454E z_lql0zz?}fd!G`4PXiFQ0CJpdmY7#C)#*Z}r1kmKFc2_Kh0b||waX@OPrqqy-}dNW z+ue@FRV*KZa!HsjZ2oZ2o;>CiH2@(nsad_K#yO9l>9&Ap23N)jHnNwO*LaTmSyCxs zvbnl*N;2)Jrx-{yRTv4XX=!x~zPO2uYL6fi3?}fNz_Z)BMZE`VnL<7!Hgj?)Akp~n zA)!&}w>%xn$y#>{xVZX~NI$+3qP{_UFC(Ex13)QiY9xw#BKgM_TIsY84j?qCSFf#Y zK%`a^{i9O0pe=yaWNdOeSYVopI!OogJEb`qLN&(yjo3C?7WmA&qqD3Mgo;W^veVT6 zisHj_@U&L)6J*;!;6*$cz|~}oA}EKUvheolb^B_-g|wh@Kn1yS<;?Q8(&azf(J?Ve z+1ccADxnIYgudSriyYoM4u=r2`kVAhJvM~W%>=e+GadZhdDuZ28|u?#&5rs z-HlmBKq26cA;};Rn!T?uEfBH!V_@Dv*qfW5e+puT(R}~5Qt|+l4gn}SHw4e0r=w(% zU~d8k0t@!^-OpKz_qINXPewwX2%>XoKCliqQg5131Bt7#Y$q%qGOqV7eXfh{xbea; ziim=R3O>SDV!*!v=Wm^OnYjJ=%35Tv+(|_*n&=1%!*_%DagNy7WH5y7 znfn~YVo)8hmwJyDK4;Tx`!z~{dE*B1%M4@&`Cy+$gN9_*d$K#5pp2TqD#vtyi4oZ= zy%kF=Klaw?c7=GjlAaAl?IonndjcS=f+d!JSzJu5tVav3mjDIxB{k3b@fdC;{`0QYZMq|5<&Y~HFOsKr1 zvH>i<7sA=>g=m45vGJ4dP{C_mpxk2hi)jHN!w&=2Ce0zK_uE;|Bbpgygs=B)tV;&4Zn_PLK;5(+m*S@J|AZ47Cf&JESKt_xhjtj(~81l$(P; ztD%t3SWgQRPU*%+xk|8%P2#+9omPajS)ap=KJ6>_e|5l*38XczlNPH3sXYe>`2`t)>rvINI+Rb$cB7EuV3x@k+4S_TyTE251wK~yw z=E2S{Wj#H;^iI$Skf^n-`IAp~AdYl;Gr$7L^Bd!M(Pj z2j3Hx9ZGuj=abL(#vnucUshYo(ODEw^$fWn*)(DEc!(|wB~04o;tl;-NZ9eczgp8< z*p4FMxLIb>3U}g5wTn4e8X8OPoFh-KMywCsG@mZ5o=}81DCDG32z0+iz4+f0h{ua> z?yd_t)Z(jPA|!dlgrjtGwRkI}lQ^5TlUa%3Odh zF$UW7E=0AZ$2rC(kM(Zdih_!iUr>M#j2?vn&kTNJQ3kq&j4JJTsnIQS^R=qpE2EGD zC>KNR)YAIkpT_;4!7nvU%`NG)%uML)gM~pm`^QtCo9i9Gj7m&Nq3OCt>_9+3K!uM3 z9pK0DpGx?JPb;{qA0F|EFvr2827F)~6ojBv{QRVlDBk18Fgu|AwAoipe3d=fn5C5_ zqlyBdztb0@z^p7FmiOOy$M6pD-N>?zwRJu^8tb#WZmIWF zHxiIt4Jfw?8!*#!bfn=m&f`+$Lm<4IPSq&fU3yU-{kJ%Mdcwn>sgdTpzjSRJC2#Bf@p3~&@D#`y#R z68+Bbr86L;E2nDk{DGemnN;4nR$YG6zbKZfqxL^gu zgOP#Z+=N@_*%|0cGM3{}2UlF{PEkQIgWn58HXqIlE5ibX{kH*@-Ihtsp7j}VXIl6% z(>W;0ugseRXAlSY<<~{2tk2muq*LS|Ez;crA|)ju-6bgq z-?KdL`+noz@!db}xOa@>ID0P^bFDSkoX@Ww!qimc2=S@$Q79DQeR*jO6bd5-{;}iY zz>$rLg=YAlkc*7A%L99J7k6W)$0%iE7Y7@A7aJ=R2Disf&Q|tzcR9GZIPS7DSh~14 zI16!d+WzMZ4tpmHPV*b(FJKfr2l+?NC=`JT@(;t$J%Sm9y6bvhTJoVs^2Vf>%d5w! z7q{&bdGBv2+uzTS;1rN|w7$dqf|(#5BM>9-k=_Ne_O|EiC=NF>=?l+>|H@Xou)o}& z@|TDk8;uMH^8yovt8~?dK%A`>wqk6~O3)sT?JM4=2gL7Uzmh2=&UY=G2?_gpLB|6RSe=hBlV zKFxfu_U9L2HC8e%>PWgVy4e4m92)w)8I_T~lPmrk@9o>Sp`oFTqKDs~7d4zw>lBdZ zYZk2T-pf@HtnC1h@`sG+^_8CG5O zxwHmuCWFI>zIzx96t5CpclK)y(_g#FDTf3dD(Jizih+eAkm@%Z#uBKRe^oZCe`hr4 z5=EeF7U}Wvaa6~z{WTUQW@Z^%+k&~0S1hXdsM(E*X}3qJUS2iDIt8;9;wNvlOU=UO zb}FWQbx|aL{q>jVm_AcOqoOw1whiAkl~j?iTMym|h@PpQ@2QUXOfIGQMUgVgN)(L< z(J~^2nP9bP~Tqn0Y0X6m zZ=z7^lQk5|%F0K}S<%T~9#-Su$~0=cOM>sAkaPL@MdJ2@jfoVx^X(SmqLXUlmf#=T zKU!3N81Yi?tmLMdj20WK*b>u=MTApu3e}%)ouAo1eE4t%))pq}drt0eI)}#lxBv@Hb7x^2S{LYsAW|2AkeK;MRnaN}` zRZGQ}MCj<~$YD5`t4i;EFlNC;Nsw^Yg2?x<2 zN|N(k&hvn?-zTPUfvCGt6LvL(TlFU#XNP|06tM2vVMRxs|0+61pP&7%tKX6?WeuEh z*(6Jb7t3Ybe1S&Ho3i28aFJQO6qySp0~s0hwQD6XH4)VJ@ZnaD7L)9^>CboQk^LJ* zFHRJMW~`CUOm9)wCL?QZX>mMQeW!a25IT}H!+*iBbL1KDk{Mwm>U}#rQI28YHV>MDI=e0;VW)1heVvhRTnJm z51RRd`oGUUeELLgUiQe1N+Zz4AJ*zz2fbhGSeb?6@$TcX1(&2Tn_$_jSp8ttTV(iq zThr5~Cq6%#u@jWu*;O1anHKh2er@nOPsfiP7|@uXpYP~EEggY~iJwY4I!WX#OWj9P*T zIV!ZYwL>E!2;dL_oe1U0!A4D<=enC$ZkqC0!QX%XE%%$ex3^dFX}eX~n4XHD>bx>s z!FBDMWLCe?#(4SB(OfjQ^P&>FVLc7h#rIjgu+q4n?wY}KrDtbfh!#Dde8c`IK+E81 zo0V=*P>{!JUM`p4nfL40uV+3@*tKNef90?{-(@%ATvyK2DZW4N6gg=}{JAWe=;o`i zaIIL?<2{u!DkbTYuR{HOY2utU1h>3Bahz;DP>nN9&oT6< zuA1^CAwwypiA}B$8-4rm2$q|G(>yL}rkk@tT1pDbyeHv@1( zuDt9@>At6#Uq1LEsA+k3q1)2V?u|Z95bjFKa+=Qp)sXeQ($Z3g#U3hcc5(t5fvR;+3#HeQ0S5H-0W3jr=8Ct`phQqh!B{c^tc@Usy7+!RV7^>Ek1+qpSNkUQ)6r z7sI4%Y#VCqEYy$DIxl`40?L`aTG_0o_v%^2u4|gPibQQ~ZC_VhD1}^DQ8TGto058Z zG@oq7W-XZm8{gc~MQFwQVe9F2l4AsS;`sx=eft)CIyoj0J zp9pTX6>sO0HS^JF1ceEZs+U{3e2Q~yajIak;6!E873aBRT1%lW&+ckbM=w6R&| z8yBBW(yaddQa)YR2~^xIzi#jSe(zNCV}i*=srNQ}#r zm`luf{e&)hg?RHn@~1R(b-SskJLdod9&+eaHsWFHlb|a_i7C~!kV67NawC8Z&z;!3 zUWQnds?!kxtZqnC}~jQ(9pxwpa;#_$5BJTRK!C`K;t7%*D{^$hkNPL^CqJheVo{l;)ZCENDQaA(NS%9J)b$A zcitATiAN4y4MH~=*O9%Rott~wcjYM!);u*SDQT^6e1L+sHf6}hOD!%5y{~Kg>z3K+ zvB}9j7)mjjk`{fZnID^wzzVmlK@h`n{rdH7^V|3yG@lfwTBkp7 z1O^3_NTp!vK*cpNF@Xn`jKFZB<>uxNjf#TljMatvsD=B$61kKi@j503RiJqrhH@f^ zx%SnPcReuMKl34*Aa0;{0LB0z>;}DqSD3O23iuD%;$Y%09Pvts9nD}Vr3hX1IXRFq zGrNvMNFBJpHqv5UE;Rl@ryL(YD06V6Ip~tGt$kmrD4@l2&3qYHqI@=^GjY{%3ODRq zGyP%5#l*xgz=cW0ekYXLO$ue_=9&Tk!jmIK{|%>M6refKrLlgM0?j!fcCMZq z@3y)V5X&rw#(j46wx$3YyOM`xcoMktq-}vg9krmKpa(GA3^i6R&?tJ94j7di5&ZBu8wn!w|!9qAI6xl}@Mm_DmDX{}KgghN_JhLMl&+wF;)t9bC{7jQe5vfVTNfcB~74|jh4>?C4dqMbgn zmZ6acB*yQBgW+ZZLA6r;pp+0wa*J*ObH{9@hosfVF3>)T- zTO-8!bzGeBTzg~!zkTZ5D<3(d?~Wa`#SJ zz9jH;_d3tryR>Vryu7?Fs0Pbd~~D_?`Wp^$@GgWcBb0 zkA|Zow~G*MFcIx)+^?ec1$(T)VRx&GzX&s-6ai&?4XlML&7fJQ*a+j3{dCk)suvMR z1w)_xxVftJb(_}qb|y|v;xdcA_JWEj{G{Gs{TjC)@DW+3v8kz>mgnnbeI`fSKN5u9 zIn4V~BTYM^ew2?GNJ&aQ>-)9?myq`M_Rdwbnok?DcFpZhdgl3@6$*~H8ZQ08h1}fS ztkTkf1?LbV+Gfz5T<{)f#C>T%>!NW9D7jFerP~6qFA3d=c{pnkzI=Ik=*mqT4f;@)DLKqI)jkQ} z7hWxVx}R)T4i13YM1$%)OwUZcL`*E_Z{?lg$kfy(|C22!;y=JV zpo+(Hdlp|Tq6EbsME|2lk7%rKsoU7FQ)swR7xh$BN2e-Cw-De-do z#+r`{SJ3Hy|E=IgMQ6(M)MTD*J|i$$1 zbSEI8N7j{|Uh+CmfPu8MbnfG*t_s*%90s+3P(>v=1(ODW>||UL-t)4~-0FRfqlMnG zS?X?h23lHL7xRbNY6uz{Q9H3wkG#5sD=S}mgF5;{;e$uUHV)F)=NvC$wT8g!6?jra z;Q+sk4vi5wSq5h9|K<((*kkz))J{fmF;{*6Q%QLE=Z{K(fK=ame4im7*wwLd9o%7f zWaL5)Iq~eQ!fts*MaX>0I7~fbL-IYW)((LWBW1{C;lUV%Ki(TUK_A7lNJ>jz00U#4 z2h+gJEW7*Omo9gN|9Bq2(sUcUA>W3Il`b0j`O29X9!IZ-{WFpMK>+mfzzu47;ie+VFeD>rsxXcK87tpUx z@k{+$k63rpD_GK>phk0eyIg_g8J`!|V_ly4>64}#)%-T~z0nfBOTQN*ob4i?r0*Y$p$LR-8tFy(`TFCMw^|l+=48bVT z4mwUFl}ZKPz=0XXZ7;gEqjv80_xC4HudwM9y!jb?AK2L0aXyc^#}v8W_-h)VagM!&7YBf)hV+o1Gn@y>JMJm@WdC$gv5(Hxtm6?A$dY zzZma~PfB+tMW94?nIXk&8!pZsr2} z>4RR?W%BSFtYUR+Wccwuj9|nZ%EV|54-Ls*BF3lD5bC$(y9T?%VYU_T15hdCfi*SB zza$G{fjE7Jby29i@5>h))a&?oATggmqZ%IzmyJcx`yMr2^pYe?{!gvIM`?VK0GGIb zbQBjwDeT7n$!-!K74>EB=*T1Y00=BNNKxhSU|wcCWD}13x>9M#@Os4Z=IX64?lO}% zZb%S;JqR_y8`uu=eB4$8*Vm^Trq{$PfS~kSVCub{$o=?nXia=%@Pp=!Jw! zjHioH&ShilH5aNeZehGkO1gxq1n7-PN(!&ps=r3>vllz3FHje<79HiMU;Y3nVNcJV|}^ z_YQU-3H$(j=l_W1yelul!$J9Qxh$)pw7%#8M=5^XO)hth@d8NZ05A?OwBfQd8Cu)h z%PA{I0(EaZ+PnM>3{5W2Jxc;=UR>%(9KVx^X*D%9f7k#@Z+Wm$+y7?*!AuF85@F>a zXhDczyH7o3;j^EL0AuV&B>&X*0tYEJHsI{$wv|5t70-pOx8ZDz00FHKnXvn2Yw6=|#Eb`(h7ew4ZI6F@r7DJp@&L)M{?}hYz<1WaS6z_`CfGqn zt_7v9GKfd&8nP$c|9JOMxWDEyK5g~cP3`C^5=>y{mR44=`Y&EdtV$Cv2>0h4J|l@0 zLFz9B9hm?kL?Z^{)Kn1_n((jEhJ(%eM`p5;$tx?zfy_j{hK9d*f&PPKtSD}YP+ZTt z)F*v|%AjjWhpfxH%Pm3+K^04*{O9M*-ai}|NytJqqZpY`TAKU3lmwuM|9lOptQ7c1 z^kH7W3Jj$I4Q+=5ACdtcU34@PJFnv4lDcM&tdWwpS6r+XI}0XJXMuX~kKR2Ngr8Oc z$L|~#U8#n9pT8WkKM)D`{$3GLaW7uH)WM{sO+_8wgJ`*-YeGO%C^0eMd-$8ZLnh z(*(mLnQ&27p5DPQ@+aw620u(*NeLMe0~wN+!%qV!aIKS!iSn+;*)Jl-QiStcJ_5kUTQGjnZUjR&Jx83(kuX-vAkFA@S|B}Vxr7~ zcz1UZjcG~j1gqa~x&uK9CSQH_<5_COp|@??ZV z@W zy*D?bI}U-$u->`j>g83cUGUBSgK*4F!Zc0Ijm1Ck~ZTN`5i${-r)TCX<%3!W>iS~ETx-pxB8sA`WN&i%bmLmBr={~SW;7;Ha z`_WHXEh2v)q56TL+@nWSD3{f1j7-yDyI=a7XdjA7aLAtdP^Qlg_{qq~7+6>?K6s~u;jj>42B}8n{x@BCJ}~(?YT;voxStsK_p}q9 zU|eu}A35}-2vZxc1yyCe&@o94`fti2~cvNLO~HCtqOuN_`d{L|9=jr z6^5x~EP>(t2c2Xqp#Gq0sOF*)lxVUJ}d+%NsN7jVUYGimgC{uNbnH%i8 z_>31IEHaCC9E5ac-K}PwClnJCE3kHUwk;g?XK8n(6$H{i!lBgu8L1MK$guY0J;C)r|9(p--?7uC{xNdppFU;Q*BiJ|iGCX$rR2)$2sJbI zkLkED!E*Tb-)y*yfDQ8%lnnFSfT5M%$ED!fyelui3M(HORu_iFt(l~IXhBa4x*XOC za(+CVPYQP=Dd?0}S4RtXft;&IK(fl6KTJJjUrNDgU}lILdkKz|z)hw5KEH~-uvcux zWN+-R77gA(ptM{W>=)S1$ar8#&wr9g+4`(c^G$JH$=d&8MFlggQv4vyt%mdZL1(0( zff^uzOb$TC_;`20(%ydSW8~qK7ctoCfJ2>MzR0Sp#}<7iehRm4X=@9TrVk1ycwb|W zNsbBgFiIWgWaCqcEc#O0mix1ioFGNmeRj+utqnq_h}=}q&v}!dY$vwCMKhgk4P(7^ ztI6K?=QWYNuTrB`&bdWyjAmmtd=Is>x;a{wAZpa}jbX%>8Tf`J=yxWfS!58YW$1I& zd9laQ(+Pg^kSt&0w?`_U|kgN9S(aIz(t})R2>|Busj~yo9 z@i6t*Q(oVV5%oGSg2eOaV8Y&*FDWJUiItV)OFYQ*44S4(F3_x51?Gq*opW`?s@XBWJGOzXEg_TU!rK$!(@aXqfDPr|_C2R6h%B4%T5mwo-_&9B<1)KZ;-fmJ(ud*ZRO=qG(|RMW%=;}mrGP1If;3#&{n4NjkdCPOAy zMn)#;k*=^<@28I+(@RSF9c6#4E`9{530^wtXhkV2BLf3UxQZ=GU|j#szf-fpfq|G; zuLgh8{wx7!`j%^w(oHamo0h~!=wV4&@+PW8Un9V|e&fdd_pFs&zi4xl<^~nDft!NP zOW?Dm2H61r*){xjLp4H8=&y0N2Xi(#7 zT8`S{AgZgkw+*Ubay=A%4AgDS4-)t9dI8R?t^>Z)3dr;yp~Za zc&5nj_Zp$0ID~mUsiG6ta!3maCKlK~@_!o`2zdAIW@}qp7e`R1#py0V;OTP+!Slx4 zygpm%_LS|wh^i&qiEZuAUYh}s-dZ=D2Tzw9$!d?O%}`%L;wdL z>g)G*bK8-i9ke--1Fi$(xZU_zw- z9Wi0t78IlcL4uqu1dorTL`dKe;eUmWE(&-hQanN0=xIO)8KQe|1)xR1*!Z+8^K0X@ z%c_Qw62U(P6c=P}5Sl~4#FS?2|J9X>0Eb9s<0jEWj#>*UV+}+_?Yn70kS_m-hFy>~ zlWJh&h3p&1K^i7kpe}FX|CR7ooWj(I11;D)Kv$8w0*&Mvu97=%(M7vz zb1u~|fwdO+og4xNa4BHXD}g!tPtG{cpN%6AS%{O9Q#!D;vy&}hI=`h9claXYqns>I zGRUWrEbt6Eofv`U*Lm(YL;3Fq`?q@%*UGa_%h)PjxbvD?McKR*5f@;I*oyI=PaXZ+PGb$$IiHDpB^ zY;lk|A=7tz0COHf1EihKz-Rw2;QSqrlWJ>g*L+uXYuxT+W@YUFYe(k~&yF;l-2)S` z*kwfnR8wFYrO$P4Zc>n82nkW#!H-kGu9-w~&<5s>@fIK_NUsV3z1a5++x35d$T4x= z9$KbgkB!#27qNWKw!=Lzu4}5bmlkEbA%Qf|fO`l0ai)61$=MmKoqlMGI^Bu(lYa69 z^aL0x4>dJSW*VQV6me4$fWI#B^l6orHOmOBuz=F%f;>DgfBKQSHZ8>$L+vSc_<=?o zE6CdgpfKd}A;Ei<(~ZsQH4Xp|8X*^4M9hsC`bENJF;GyAFd7$F8B$a(zUrFqolJk? zLa-+4^XucfhRBN+x3KEPpQxulf+(QbVF%1R_c3$O9hCfb$#W+l2(t_ud?9$FL!2jQ z+pF9!1Fo*Ft-X9y50WM)C&$iK@n-(;YK7~B&8PGgP6&uwpp}BSu_5{?*X#}v0ob1Z zjY&YXcu)`n;5Ei6YJh^#H{eJR^ASSKL?mHq4JD1b8yy@RtYQluScgUfymK(GV3PEzm9n%8uAaMe2%-vhR{9Z+XJJ9 z*#s7doCitl6ERV&e}fa7!3kwTV=m13d zgWNEg?~FZyemr3PkKs5a$hmvJo;Xv{UL$ zzyAJ=O>2K?2B=t!&hDb>sz(c%L`eGuY|3rF^Fu#aqMej3d1Ks7eQJ2WoWNg3Z5E4v7mHA1vu-hv6Q z>Dd*5ZB9i+1&1g_Jc>;TpH`cIky8nj9CGFhk+RQ0{es-fs;{5Qqm8a`|9{~0xliz3 zu0jLoWw1affaT0WAK5H4%TnkRXd;B5e=)zP{xZOr33$ZzQA|7h+8@f;+9Kppl+ zsI9YrHqvGzE?iV*W##COhm1^6Xk_G7FuzH_rJ#U@>1uH5E`u+uQiSxhVxth2@3=i9 zxikL?`h-oOfwz9@>SZ*S#Pxhg{`N+l`$Sn#xLN(Ifg~oUM>{6aUeIh;Av_LllRWTJ z-0(K0K$6UY0_E0@j&PP#kLLb%^Rh75v-+?&`@6kJN2k1hDq~1MwZvzH8(e@MN;0ro zOnxr*reMw+p6?qX8TX&6S_1eG4&?xx)&&n6sI4ZeLwPC_DZExMD>pt()HYxZ;c*(@ zU$kb6YkGbW3k97*DDdpDE)p62+FMasd)V`z9tRB6{}dX4?@mu1-q!7Pxf0Aq6iPEc zu45vcoYNqp>lKS|0o%ASO?RNh0k zME^q5J5fpPPJR1>Cq_pa(z*kPmS>^Uu;JZXW@ro?GM0Ti2?XMMgYk)B|x z7QM69hDXnWvHwwQb+r)UzW+Ws>`1)##4P^G5P~P1^+%Y{eTD;(2^S<8@GxVKv2!R4 zJTR=wslmCbT-WGqsbtDXgS50ATI#@JayZ&HhDwBSv@-aYl$2EN0d$f${x--RgiOda z5vOMEfv%izH4{HS1CtD5lh=zuj*bkMg!x^G# z;2J4~TLxaDm2-w#h_wolUR~8Cj62Z802)45HEnU{p!mfLd{9qHNqoH}wL4&k5}}ap z1<%9H$oKDA!8ENHEcx&c_I%@R`1N#`7AF+?BMG4=mjN=hsL2|4(?)*`mA)su)JQio zOnXqJ^>`@&&$5dU5;ru)sSW^v8!deto)t-g38JV8FbeS8r%VcC`Hz`~34iJ!GDY_W zA|I&`B0-<46ckt}1jHctLp1`pAOZ)LlAwVuGF ze|vw_nrCn&;STGd^HM^Qz#JzZ0S=_pLr+~037SUGNg71jPA7A8C|oEk-oW!dd@q4S zGuQSi8CfW7$(;d3&M?5W7sy{9z<0;JWpzBS#kBS)+S>-6D>ruH8%||ldl`a|)dUa- zhwKLQc@T-n)Rd;WdjE=83~Z=SfF?v`?R2rEh4N2%NI`RIxZg>IpR?!2w*p;k)XvZY z)iC59#Lsr3G5tqB*(OCF1_aJT1`a@NP(?W$yFwSETn)@``1kL684xbR^R+_bBGmZw zbcsDU3Cd+`QqpY@fZiWjo+19r?2`C-6__0407qR>IEyt@2Xk6rB zcDfDEG@v^g{sN&Dpmw9u@uxLtKXNP_0upGsgH98P+LO(idbX6prj_pq@~vYrGBH&^ na`A5zguiO}17FDDQ}NGQqeCU}vh(m)IjH+GD$<2$qk#Vcsji_Q literal 0 HcmV?d00001 diff --git a/tests/_images/Shapes_can_render_polygons_to_square.png b/tests/_images/Shapes_can_render_polygons_to_square.png new file mode 100644 index 0000000000000000000000000000000000000000..02bf5e039f983872600951ff94834f520e4a4ddb GIT binary patch literal 10100 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 literal 0 HcmV?d00001 From cfe9efeef5aac2b35d4e0290294f6b86b8423951 Mon Sep 17 00:00:00 2001 From: Sonja Stockhaus Date: Thu, 3 Jul 2025 17:03:48 +0200 Subject: [PATCH 8/8] add test images --- ...pes_datashader_can_render_circles_to_hex.png | Bin 0 -> 14404 bytes ..._datashader_can_render_circles_to_square.png | Bin 0 -> 10192 bytes ...hader_can_render_multipolygons_to_circle.png | Bin 0 -> 10911 bytes ...tashader_can_render_multipolygons_to_hex.png | Bin 0 -> 10848 bytes ...hader_can_render_multipolygons_to_square.png | Bin 0 -> 10232 bytes ...datashader_can_render_polygons_to_circle.png | Bin 0 -> 13701 bytes ...es_datashader_can_render_polygons_to_hex.png | Bin 0 -> 13570 bytes ...datashader_can_render_polygons_to_square.png | Bin 0 -> 10025 bytes 8 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/_images/Shapes_datashader_can_render_circles_to_hex.png create mode 100644 tests/_images/Shapes_datashader_can_render_circles_to_square.png create mode 100644 tests/_images/Shapes_datashader_can_render_multipolygons_to_circle.png create mode 100644 tests/_images/Shapes_datashader_can_render_multipolygons_to_hex.png create mode 100644 tests/_images/Shapes_datashader_can_render_multipolygons_to_square.png create mode 100644 tests/_images/Shapes_datashader_can_render_polygons_to_circle.png create mode 100644 tests/_images/Shapes_datashader_can_render_polygons_to_hex.png create mode 100644 tests/_images/Shapes_datashader_can_render_polygons_to_square.png diff --git a/tests/_images/Shapes_datashader_can_render_circles_to_hex.png b/tests/_images/Shapes_datashader_can_render_circles_to_hex.png new file mode 100644 index 0000000000000000000000000000000000000000..d6aebef8e574b2d01c304538be0a670282da76f5 GIT binary patch literal 14404 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 YL=)}@Nw)>U5BgB@GK$jqk_LYN2dMzD6aWAK literal 0 HcmV?d00001 diff --git a/tests/_images/Shapes_datashader_can_render_circles_to_square.png b/tests/_images/Shapes_datashader_can_render_circles_to_square.png new file mode 100644 index 0000000000000000000000000000000000000000..c5776d4ab07ab41828506a8cef4ecf38dd6e4f21 GIT binary patch literal 10192 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 S88}>r$jc~7f0WdF@_zuJg6TE@ literal 0 HcmV?d00001 diff --git a/tests/_images/Shapes_datashader_can_render_multipolygons_to_circle.png b/tests/_images/Shapes_datashader_can_render_multipolygons_to_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..ee543dc1ef36e32c8c00ab96d42fb75bcae4d22d GIT binary patch literal 10911 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 literal 0 HcmV?d00001 diff --git a/tests/_images/Shapes_datashader_can_render_multipolygons_to_hex.png b/tests/_images/Shapes_datashader_can_render_multipolygons_to_hex.png new file mode 100644 index 0000000000000000000000000000000000000000..7028fc4c3f2e2d9e8108d8d7aa952a595876dc31 GIT binary patch literal 10848 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 LsbR7ei~|1y*N#eG literal 0 HcmV?d00001 diff --git a/tests/_images/Shapes_datashader_can_render_multipolygons_to_square.png b/tests/_images/Shapes_datashader_can_render_multipolygons_to_square.png new file mode 100644 index 0000000000000000000000000000000000000000..907019001bcc09f629bcbd9d9483e22b371cf2e4 GIT binary patch literal 10232 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Ⓢl{;1vyh?Uyr|N~Bz&y=4enK;c387?#rE0>hv2fv? zbUpD$;KuzNhX2C+c&!2yb9ppnZr_!lvxw-Kf4StH|bN(x;9!x8b`&Hlu-PtBpoVn#I6kie*XoG8< zdOWUcYXiA(02{Ziv$OL@$)APZ-`D2^1iEZ@u)UoCBv9Gx%}=HYarN~WA3*m%^?Ni3 zF(sh&c&h@0S@lfs>r2ri^YalP=F9p7PMuQH)~1KKzUZw#o|Jusi4_%>JjkRWSU!vc zJbKE0uaT94p*~2WpLZOpb@|WIe%XESr+n{)0|j!$8JhfanPokPjGUe$1eNsj1o&)Z zZjb*}<;g8)GGQPMVdXw|?%P5U1qH>(^fUyk?I-@{DzaPu3o;))1LJA_J z`As~Y)JaGj1#XUUauTUL*s*0~WPAnFHplX15+Gk4Q7LG&UJc?5*ZAjPf0>1h5CnW+ z+06l0Xk;+!(7vgvN(_?`yTTD)K1WAK*!8!D#Wdg(1#4&2L!|OtCpBKbe!X_%@aoCy ziG^})&Um{K6_4lTe`A~xRadHgCakXX-K7Kl6LBFJ&P+^v|L)$O@XhXmsVO&bQ#2aw zG*TUSz;Yq?{T*Z7T;sv{l(j_vgS&AXbMXqvfdS!DKkw4h)ny9ls9)|WinqFfoWZCC zf8YWJ1+jf+<61nYQ)BaBaD-7+H3LqGpE|=>fDVNkP3QT;ytNz&P*1G|H}dTlYBI9C zz9Q@aj)dxQI;mli9f|KMl@RYX0^RK z*_u*O!NG9yN?s-{IXMCHQqG$R(Zu_=gI{k5GIjOzY}WC64G(gb4*w&3c39j)Q6D!V z-gKb{ci!9uhscc-E?z(c4%&zY#JsflFkhCh48f(%zGZ-Q1cGfUFp z4MS5QdRD5j%zwY8WS^%LL@>NdBu%okOF=7$qQ`N_bd;I;a9@811cWq!-yCb+=Bz_CX> zD){46F!Zh)dvi4oqeN%d_a0vuN94c!@74Tw=G-CaC;jk}7!js%IE05>Qq{oZD4PcT E2Lg@8`v3p{ literal 0 HcmV?d00001 diff --git a/tests/_images/Shapes_datashader_can_render_polygons_to_circle.png b/tests/_images/Shapes_datashader_can_render_polygons_to_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..01f93369ab2e35aa4c6ccdd564deca6392cd12e0 GIT binary patch literal 13701 zcmbt*1yof1y7#6-x}{4%loF-8qy#}lL`ema?oL4&Kw1T*K}1DLM5Mb!N=1;AkZwd6 zsqfjo=bU@rd+zt$yVkdsEQgt4&wu~pd44sK7xm7QlQNSc2tuxMa+_B>HvUYR7D;Y%V zYX$PxuL$zqGAGvI91^?l)yQx^4<{SPl8^}Jp4U3(=a8^Fcc_&uJ?O68?eqIN|5Jcn zoH~|UN5}Y~T) zzG`P@yf%?aB?Ns6P<;y|Xs4FqoH@XSq6BIY!eQ z!4X8Pm3Yz2Y+PuM$B>4Wn3}rs-ar2YXIek_H|?j-pQ&kR?hKaUwa>c#b9;@!-Bh}R0EatUr4A10@y|W)IQg?GZqoSfBYWGDTO(Agj2X=dDaQbj> z?fk7yyo6z8EzH^;{1`ZEP}Hq^{wTzWhD@3?JOj`TFfIFXf9`f1n#$ z`E|W+b|1UNbmkUuVp7t^WCRB;V)WWLG+Q-dsyO)I6g>IkUGU*nCN(2t1UZXD*2|Y9 zA~ox{>_NMh4<9~MDj2{;f)25_Kc>qvzI^$z#Q1baZ*O~Fw(3SRrJ_Yc2oAe^5VtyU z4&rijuoG>5uy|E?WZZX-4M(YFf3r)4n9HX7>4`IE&dkhZ2L8HcDaxeg>swi~@+nV8 zrFbxUbo7SrbvwIP#N_1kgGHuE6>N$@HxMe0fOX~Sjkj;#5~p_a{oY>UXAm;sbw2tY zMv0HOVmE&ju?i>Xf2U%=%2$uYPPfP1{Pavqc;sjy^Kju^@!o8zv#7(6XiHn$hmoo2 zX)$;lu+=Ro>#C&}>WvsLMPcVjh$xN}sS{$gTc zeYR)cd#ya}`V|#LD#aRmy{^YWV*10QQ;zSFlarerB&r>%{kH8=y{;DBXq4X>#Y2W_ z{Uz<}?KiM{qNr!!-PAt zYid}{1Gnk#lO3P>^b4MPA9PT)zZ-nC6Kr5&61BHh&w=y}4Z&8PxhsPNY!6)Bh0Bl0 zpXSbN$5+9z{PxCr_t%KCnER~m@^~!^i-beN({uJ&{kBfh54Pd6U@33@obTU-hwBUZ znO5*vl!?svy-T*v^|Egd#BR1(EPXB9T{}8--k(-HI1Z#^)**UBZC2YO{Dg?&rg+7XkN(8}@ty%ZMj5^?C`#|&w5 zzHhGoS}UHDlb2`9&d%13=)a?`uHNzCgQ3g=3N3AILmB*5d{5l$27@bC?%lsn_;YoP zC6PC~s*3r?k006*>U4d^c-bM}U8MRxeVW?b^(vqyjD}5o`RdhEY=i^?#eDHFv2;oN z`Wo8Wq$;YaVlLm6UYk}kNThb>jTMg*Aql)%sbERe7$giin6%*7|MVZM0~} zQVuJ*-OKLGN{B6a{+#cugv2{veS(7FVUsUkzvjGrskLxX0P#H+`ubWKpOCX&yZENATI9_)2LVArI1W{K>NJ|BrfhAoY|*o`Hmq_!RF;;O$l-X{du-Kq zRh7)pikI&&b=fyEXb``D`z4!U%81+x7PQ>l-4jw%PbtR6#B6spy{KpOI56N$cQ5<4 zyk%d$cZpg)#W#?+%dUJX;XHdI99gtf@bdC@^lroMmr2(v@{}68vE_1DQR^j>PO-4C zkRgZ9U2jt{Vp(eZkRl8>%Frx0;?`NS%>TA$AykOOmS*b5}2as|SY~n+-eu;p4}fbySOI ziYY9+Qza>{S2(qvDz3qW`&z3%G7AzG7pK+8r536ENpqiqE$Um@?VGb7pGdjQ5RV7# zIleZlHPIu3BLW+zHSvT_U)gQ_QUA5tq4%yldTCOj-V=d?sS#>wbZ=|?cq~m!m_K~@ zFdVqr5Q@hn;lPAsm6TBFJU*@L>M90}wA7*zcmHsw-gyg(|JUz@72{2?pAw!tiG;nx zMya^(5-~j)6aK{@)T`%&mP#DEJQY3tk0g1o;8&seTQT9vwR|$P#GaS4GPa2-#>uv*;!`t z%Ys4p@q19MNmcC1nGb$%-^9%po~(`#(9}wN=0Q9&_pcjK)=1=iF<_V1oP{(n6C1>f zJ<-+F)t#YY@I3C%sfNDFN4dzLoUXKcUagUjn;Z8}6;{UKei2c^t94g9?{4$tMHxEo zVoYqThOu$VC(DZ=#Ea}0lR}MvfSOO1RMgnKtkqD2wJqm+mQg`MS{hkcW0r>iol?y( z9u|6ynD6GTXV0E-o;^#4M?}#wTyAe!_H9O@D_JBtIzaO9W2Rz#_o3Iy@V&G&RwgpS zpNj*>piM7%=)%_KOM0o(u0GS1wzg4HB5GErGxniCJ|5PcQ%Hy$3a*NS!)XdOneaTF z0^9*!({$e`FkxHu*{+TAx`cimDqO^O3KMn%z%EyK!yD_anP<3f zDNf0+H{ex_4Mx$Qiihe>sj!PA@>=e$Prmn9paF0l3+Gm)V8BaCxZEV>!2_~~j~->$ z)s5GN@oF?6VRv^olc+^VSKS$L zaUA5ti4#t(G&D3#+&l#MT8RJ|sMy(icFy`f$hm4s&&YTa_EL)YZHfmPJV*!0bcX+G zC{*lNHre&5Xc4p*q3{Snu3Wi-gmiRhCLgG)sVNm20igJ_lH%h`jFr_&%o?yuc=)iT zfUGl@PUj!RH8D*zjXikZHQ5VpE);6bQgMB3YcwN|y!_b8#FOOYh?*KXtm}mf==2syR9akI6a~@(-DMg8 zrFV_E7hq*zi7zlB=V}MsWsT1bsOj0JeJ7YXnU5Mo4aW(i3m$s z%tr;Kvz^_a?0g)1YfrjtLPA1+_8>hSol+w2{$_GLJ_3Vyz$Av7D(UQ1>71LDh1irG z4f}M$A5yj*uPe^k6F>uU2rb*Kt?CnIrE9lAssk;eGQd37KX{7$=Cmkjk4*{Fr zjF>0lx2FIb`|Pb$lmb(6I^ZFtq&%;oL8zA@*V!b4eFl3G%l^v3(8OfXFj-q)|Mpr} z7w=^2+w{ke?*mZr%9M5aj@$>n17v1uzCTw$L?nU=_xSPSDf0djFvP*<{1=UlF(-5$ zXThv(Y-|{pSl|R5?M-+~WxxX6c<(Y9yOMS;0oZ7EX=!Qm-VR;x@iFbwI6u*x*o|^Z@nA+~W>T&eN0F5EJolo{3sejY_gh-j@>CbjM7Q3BzMkwTkxC9d zbgKhPK}qSYrE5~iz{SO7I(%D{KRzonrb0Z8R+iAUhg=h7Z!o8@t#KM|M+l}*6kXs; zGN-&o!ZlN$4NXmWtYYBW_V%{$XL{-69nUGdnDl1+Pb86%kw79)vh#@IUe%K=QogM6 z`~`dW94KW!7d{h(9Em7flp0?&F(E~wf{zyz7OIEX#bv?z zqv^c*OD``&eGhN6aKX+Vr=`UM^udKMY*zDPKH^3|fZU(n@yOhqTp+vwswSK&%Zib} z=gHnTor!G=3#95f+ge&Ye0@&!iG^P5a~qd+-Acxtiz%dtz$-5=cadT(`Q|_jyFgVn z>^!YD^aC9^joi{p;yQcG(XHIQix;n7UpkYYj)Ek&8p1FfAt9l7-k06=$I7j6UGbJU z86fDvnGqHF|P;mGo)1(L-O46+D!1#oO z$u|vb@b?S6bAep>dg+@_oTPjswDVNzgARrRi%Ls39w)z;I4vPzlo6X>J2AQDB*z%K zuHH52@_nW=2{Ac3Og9(AkUaaGR<@lOeC*gU_obka>p~e|j@m zY@Qr(fE&5x!_30sI@v@3m}}h~(dBeo3P_ob`Go)rL`CO3a{ zX-8xW@Wl%Q83Qf{73tom?2G)nd-C*k4Zh~*0|Nv5PEh146>Pl^3syHp_wo9=3p5J~ zx35LGg^_`^jA2W^Ti3HxVf)KPRCI!)Fa^!{lmn?&23gFe8jG)t-5}db21AH zyURkWDG9d>RV_%7Kt1aW6PZHU?i0G9-!jd}3kvdqIQK)Lrb+RdKFf9N5MAh_0b_}DGJvZ>%7ez%z zGHD@6j~}<4Dyr%PE@r%wMRAj|MJMeXHASfh2aE(b-B-D)gfXW%d5$lZFxLKGMtVV!_MAP7(__qm>v zEb*C^-MM?;R=m=r-S3yJ80L$H3aEhqXM2Iq)zuYbBIfoCXC67Z8)gbA=O}xj9F0X2~Ke9jvWhvnl4=`H`iPT3F&HQ=K zpP%vdxd`Slw2}0%)l97Y#rU*j_!j?|4X)hzrCfUCCj`% zXnwFbQ?7;nHO#>e_r^!;kpW3pX*I2_PoN!1@nAt86|piv4-EL(e?H}mb=2rAK)e(w zS8nKCXkW_D3}TLE5NhH$+C85f2#I4YU1+45 z|5-WzGZ!BpA@nL`Y_}}jfJUx?0%O{@lnzNPmC2wb(758H-Dk62zb1pejp{il@&JzZ zfrIt`&DQ;GK`sQDv=r1@ii6d^x?|(b_OEPDQ&SC$jP66D^2GoxCmdy-V2;rcevqG+ zhrL1h8es9YYu7+}p&l3*P}uSQuD`YcO5@O6PiBRH8D3;m6mFj%0cOCiwJvZ^)N}E2 zvU9q)%||7eCqUNt$nI+O8Z1!EozKrZ9WM*g14q0M+bE~9@>@00q%wf?z`bAOyOwF7 zY5rUpVT9kdD`%9|Rxa^|0{=BW&A=+_MRv;Qb;Ent>Aq@jXV_N%#H2cVA3y3MN?KYZ z2nqm@VaMC$Ca%AhuZghU^M<|gfun>uhL4jb%B(m!E|QUo3d^A`JiXGNOJrwfhafO- zZGa+hl!Tv8)KFde7vKNkWmj%eC(_V~<(hF|)O6BiO5{a%6O=#Dtx(nRZh~i;d!;#l zjK;KNGhHZ1r=(E5wIh^+v=i{%*1s!**fZ765!_NxTo*+`%ZKWM>_@e}zP@hV_y~OX z#mkpxHYP^K93)b^QtWkfqPw>0yriGIOMQ~o_2mgZF8l7ALlD-ilGfbpY}C&4T?J4I zyu2j-Fl{w>!0z)MC*Tk}w|Q}(`%=c>z(6Cw^=+EJO9j&o-esUo&&-r0s1_o$R!UJ%pnqQJ$mKt=EkW-qnD`= z1LIf9|D65o89s>A$s?nGlmqx}XWYM7M>buLzgL|80ZJTxt&G_0K~n-1LGE|8s)|bd z!-rpNWb@g$NOhz5RIC0=M-T^oAniNT z(!f2h)7ReMW3gChXYHVTm%2=D+$~jNYxX9k?u3H#7ZaZ0hqq|* zY0=noeX)cK%>cD+vOO!vMu^3MtGH1!Ge<#90!Z{rWBwhy_XYVQ?R!B7zg^2!s)XPj zc8tYsIkJfIvFoRKIDMhQqp5^;H>H$L^) zV?Y^zY4!AGT^K6+1lSO2tb$e|6*V)>!%ihGj)1WJc*ZwM&me^Nochn+osK}qg(t}Ur+dMJ8d-J*kEf%vGqlk{2_(G|r!g64b_#<&0HDgcx(_~C z#>cJOQ9c8Oy!k$PbB=oSKV)^Q)+qYjCG(>wsBoPtz`N^yFP=&sY-??;lv4=U73I@Q z!=T#l%5b?9{0e3fKEN1)V+=k&d@z{1PoT4bH}+%GXQ%`WC^D2}qm~v(BZ%#au;Twp zP4HWm!rZ;42|8+piGe}mcgp@+lhEK%R+lF-K#F}z2Q9!bIJ zsc6?yD}*BstRDUW4W*)?$??#PGAJ0(j>r;FrvbSzqSdMqx=V>wE9nCkNeZa(k29VB zM^zz6{2!{qxHQORjI^|2LqkJZY2rGG&$8+TFC-L{po;&~r_4wL5WrI3EgP)#?WXs0 z8UCQzm)vZpsM(#0mh%5~8V;{K5+A(^$V7NA27?I!fyvrB&zm9~gCg0(gS}}0^FTmQ zs!Kvb0*ncT!|F60jbTLnLqiyj;C*UT3g^>J34y_@6dFx$v~zghk+u2Al%mU5bNGA7 zxW-2eT%WN+w334gp2RWu z$jCjJig8I_X zL!g|G>hT#B(EHWa$*L}$32Wrkcg;*o`zX6LiKqS(SiELpIH+0^rG@Tk<=$)KpaMAB zvHj7@pG&ByjZ?F+#Q>^&2L90H&})gjKbOBi0HmpIV)C@6IN8jPL^Xn<6_h2^ z*khG;!-v61zy-h;nCoul&hY}Iucofv8Et4<<79a{^Efa8xFQNTLW1b@(wxVF5Oc{L-wYK)JcGeDJSt_hxv0^V({UmyDj5{B;`69aK}< zZNK0H)&+{Rm}E@N2Mf`x;G@IMo4}mow0%-LZ-L)_cR!{1GROidYGyxPpOiXIMhHe^ z)!UP&PK5!!*3r?aI2cb!Ns-t#NY`V$cs1IW1@z~W06)8Syrk0=gW17?NPo(+rl-qC zOGc<#u@VQ>xZ}L%I|k+P{M|rQ+5Rso_kY`(CIdNVE>+pvN$6=Q&-m(c&WNLDp*!-H zL@G54%ZSh(cg`=d(0D5c2^K*?!I^fzR$~%72BxN_spb5WE_=Oin2!V$E>xI5q>K~kZA zbadI>-cpv8Li+jAU~z6y5d}~^Sd-TYRGw5|0Lb26$$t5=^X9qO)yvnfA48zW0QrPn zCHN@n98Hd_1#Y&}iEt$VR?A-1pRzrkHc!Ue^Mc6%z@7BG+RTU#zl>*UTbo9jjOPcD zr1oy$JsXhD=$^YjjtL;~=lpU)h4=>ep`e^dq!wOJ=Dd;!yU5*L9EJQKo#r)jZEC^9 zO3Xz#!1-4Sy2PlGm6L;OQusB$h?8fN9$tHgUSHN*Z$VUU75G2S6VAx0sB=_qU0`{j z0tHY;=7{FTr^NjiQj}g?3a0|+PY?!D?KmzNJo!3uR8F1LpkxZfe&eh`xz(Arr=Z*4 z2P!7R%dK8Yq{8+UvH?&;h^#l?_oLU`m{QMc<}_rbB~D-g5d^&*SvAECsp8yl7Mk3Mz7*TxW!l)X1JA| z*nsg-ax&3?yqKCESa#t2g8HhQ$Q!WP$uHc?1`I*%D*TtIaGwGT8YsB> zL`kN>H;Jp4o`AO1j+0UNMgxfa>tC-sTYi0gO}Mwvq?{C3KAJPI5M^2iNWcsOL3<1I z{BYpoNCN~*P}}1*yb}=(*mVJ$n?|H=mm4s`{Ps<5Zc@IeZ6yZb8yIl>t>*i(9WzEM z-T6_#3uWFpRUuFY&Xw2NIC)livZ0~jT_9hTHD2HfNV!hogODiakKnArhrAEKzWHRi zOV5Q5{P|R|izeMX-9qT{aQQL+U(1a^6D-S3Of&2q9MrB|J5ET(^!<&zurLM8puowK zI0zjhBc4*K*OMntkdVYg8t4>$i&VH~oP{fs7mNxXNirJtt@}~7Se05F?qhwhKa#0A zI3{MXuU-ivw%*hn&>mnYBk#na$8lEV_E4)d*p!tr>8g3pY_oUR7uOPk0B}3Qw{4`J z`M>nrC0CC}-8NgcqszW;*Jj5z3&922?|nxUWh2M zi#Wl3fOa*SYr9r72cv+lfV1nbp9^6CEiEl!N2FuL>0xRrn&-i~8XD37jjsx_Ff#(K zR{DO$OE&2D0>9Y>588qO(ps~L?02B!!a9Ol`qSldXjjsj>!Jd*GeIGtd$124p1cGi z1!zfVUIq_A^>9#y0Xc(usSXCLX{8$hpewiTX6!`j$k;0hl^G#8=gqbB+`+R0_=)N1 zF<^JS->0LaLlD%Shy8}29Js`BL?T)GJ}D_FL{~)pe%c}^4DG8A4hG+~^M^P5fyMWR z(9>Dfjgv0;W84O6GYVk4s%vOiK_3$yNwc@RZDV8A5zmE$s7Et!DJpWrDf|{dcN3iC zn~;)8k#x?`nLL;{I+)n#J=*U@w#MWb>d%nAHayitJ#{wcjN;Rsx})WH0pU5>BHS@Dr>6Qx3gzWKsA%&!d|mcP+ak z(&XA{22?3Z{%NRmDL`Tzq%f~z?_kb24(Eao=VFV&gW|L4Nn42Q!;H?lNI~WI5yK@o zoB1bjvUc;2S1OKoG%IrF3FH_Z}PyaAzxX3KxKJE5r)|({{J#rkq}5kfhr`x zMo5jN)_bmrgv7^F_1sfeOK)QTTUrh!W#r)?#_MF`L z=_e0I5^VO4T&ZyNGvKHI&DppvPVEVU?Bvz5+T_fkfZJNM0m1Dro-^b6IyC+m7-N5I ztVa~B&fD|-cs6C%7DO>}vGP=I5I;gO6)M-Na&dFCvlExYQ^vT|7<2Fh)(=v7&zd zJkOakhUkar^|OOTbPP@v2n!0>8Cu^x5RwG+3tXprcQ>X-mZyhGZ=w-Dh}i&Z3_(rV zyu8-b2!tnD5csdb)VA%gxmS!eg*KpW}7lgFagJ? z`NmMI8`S>&2DK&BRGY5M%6i^W9SpQ{sO&Z+K-<6(FCY#OodQ#CtqzEQoe1SCL+(M=bE5)?1yas?RAs%2 zl(I(wWX)U{F)45SpqW282z;PSeiRx(g&Oc~6FA~nrD@>yPy&ml(JY(qS8i8tZEnUV zC-W;7y?m)`V32Tq&oB`ReB}E-Q8DF9l%*zx;O5=^WQk8;?i=@c1r!;m`IZB(u0WC# z+$20C>)ksBrKR}G05Wv>E>#z&1Cs*c5QZjLpzyi%LY=R=Fai}Sxu7ELpAi~8ZEY1J zBO}JR4|`x72k<#@;X|3v4>4D4u_>DbdCEZMLDrUr`sxT{HnI?=LT>z-G82=6{w5r@1J*0Uw=ooHQTKU`HTvR zXe2x$LKPf(aHtrfTZ@;tK~#sW4TiLX#Fn9H&h_=q$`Z&1psC!csn%!^^ydc(7|nbp z2~L~U4CR^n`N`DnZ|Z;yX$3JxI1epoYXF(x9yg^ExG|dg`a641HDSl*J8>-{TDx0U zTZJLKwb@l*7f{akAD@CUb~aPOJY*^xQvn(h3>u&!2AM%3_&O&REwf_ zRbteD{n#g`>hdvsh#Uo`U`7o(1Y|adxm;I$L5o?cl<&=rR>LqMZucMI#ujse ztt%YblhQlF8O}!yL2~~ob3GN|lxC1p69#|gQ+I%8|0hlK>ra~UpFyB|fv`za z5=Jw?!y5tq8h@+P$#dZH--jG7T9`mO0nPMIwPZ@r{ziMp$B$qYD}k~JLBU#jg)!au zoYnfHATclk3@%>e{IxbAVivf41r)0m2+Z~2V z8m-M?qtk=;@cKrj;qpYiIm8Su&3nkWE)R)0b3E?#gKTyyM8pN&IgJTIUE-8*7~%wV zh)d%E6IaC~_E#DNdoX~Xag+c9b&LSlz1MF`2Ps=x|D9F(wVJJ1;$z2XK|T>KMzh8E zNGa_7(%_?@jZybr5(LFI;|g>%DqvVGFAfwqzN_8*a0)jBQU{DG#Avo%%(jmc;)631 zko}>8{sAV&HDa#tRx4^?np4mj9*uxyfdam0uyy=*1@=cErpAw8-n==(h2L9|pQadW z2B8j242$GDEzYCg#YcibSkyoosBwhl15q>zpi|cfKy6Mw{fy-|6Cl2$R#Dd$k&>ee zv5w`+g}gH`3gnOZUT#wAJfWbQE;C^LbmO?VO%{lb5fp5=NB|50%)d4WPtHidk@@`m zLNjC}QBpg}vtbTHN08L+wyhQAe{>{MBYMx_zbFK+$OUo)kYEHD1*>D#IB$#0OrVXp z^@M&6PNn77+Z`Ad54}s$LKJwgJqV)F{8+VQPnvWX7)WGHq78W$U^5_D;13`dZ`>e5 zR^CB)7X-T3jNCgM;Nvkw6F_LB85of$l(!6LN=Q{P{#yPP2E?ht7tDBSIO&c()_*lH z8IPXO`lFHf9nsL;l)nWvA4XTBQr`-Qk*Lyr?HUOJ=IC9MLML&Y^luJ?NF`hOA~-!D ziMT-Ih#S-y$ifgJ@QD!rPf-k3Fbl$3`-YaXj4h_&70zw7xsRL4X1M==Pl^W-4b`5Y z(lmmW|A>M=iw(k=6G3}IKoQcv+BqA8xg zhl*g&;jQmDUj_Tjad-q0o%`bs63tE(6;B99u!Y^H&`8R2&4?47#(#bhTt0k?hfk8JIQ^U>)nT-!<<7A)8lAD)9H& zUT?`$|1)*T>#nSE`#}n+SXqxA=YWiw2og0*Sk^fCUre#=@=@us-eC4O|M0Cfi=*bz zuz)@yT(Ao=VS|Ij&Gqk%h)KN`6k4DvT24IS4d4c%Ul8#h$3RV~FNdW-_K^qciG)M@vEK4}0uz;KP$NrrFCA+UWNJ2mxWugl&G@s9_xA0~J z{k{WV=?b1`5aG zT*HMHF!akGZ($P$?3Uo3pH0<>V;4f-zcHtHbZvR8`YNoDHn0N>D3*W@?or82WEh#4 z49_aWgX4q&&?*+R@3ZkE**pq7q^r71Y9cr0ux7zEuO1AG8lknn2NlJLf6mq=IVaOB*G`>+ltOaKHKHww%Tw1Er2 zmuC3Uc8zW8W^o*SZ*c3@En=|s;QKBu=Q#pr3i}rL(t5y?8f{|!H?s4eqN;}+j=~w` VuULIZ;2Tkhmb#u=k&4CL{{tRXR>S}R literal 0 HcmV?d00001 diff --git a/tests/_images/Shapes_datashader_can_render_polygons_to_hex.png b/tests/_images/Shapes_datashader_can_render_polygons_to_hex.png new file mode 100644 index 0000000000000000000000000000000000000000..8f460b6c6f2893d1bc41d86fe0280da91b79b592 GIT binary patch literal 13570 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 literal 0 HcmV?d00001 diff --git a/tests/_images/Shapes_datashader_can_render_polygons_to_square.png b/tests/_images/Shapes_datashader_can_render_polygons_to_square.png new file mode 100644 index 0000000000000000000000000000000000000000..2ae09482883ffdce44f1c53be9231db8a09e0a18 GIT binary patch literal 10025 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