From 8f136148920593a93171919f44752363c7faea3e Mon Sep 17 00:00:00 2001 From: jack-volantautonomy Date: Mon, 19 Oct 2026 10:09:03 +0100 Subject: [PATCH 01/13] First few fixes --- stubs/shapely/shapely/constructive.pyi | 24 ++++++++++++++++++++++++ stubs/shapely/shapely/coordinates.pyi | 19 +++++++++++++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/stubs/shapely/shapely/constructive.pyi b/stubs/shapely/shapely/constructive.pyi index e3d21dedb46d..f7b15524f0dd 100644 --- a/stubs/shapely/shapely/constructive.pyi +++ b/stubs/shapely/shapely/constructive.pyi @@ -27,6 +27,7 @@ __all__ = [ "minimum_bounding_circle", "minimum_clearance_line", "minimum_rotated_rectangle", + "minimum_width", "node", "normalize", "offset_curve", @@ -40,6 +41,7 @@ __all__ = [ "segmentize", "simplify", "snap", + "split", "voronoi_polygons", ] @@ -452,6 +454,15 @@ def snap( geometry: OptGeoArrayLike, reference: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], **kwargs: Unpack[UFuncKwargs] ) -> GeoArray: ... +@overload +def split(geometry: Geometry | None, reference: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... +@overload +def split(geometry: OptGeoArrayLikeSeq, reference: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... +@overload +def split(geometry: OptGeoArrayLike, reference: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... +@overload +def split(geometry: OptGeoArrayLike, reference: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... + @overload def voronoi_polygons( geometry: Geometry, @@ -609,6 +620,19 @@ def minimum_bounding_circle(geometry: Geometry | None, **kwargs: Unpack[UFuncKwa @overload def minimum_bounding_circle(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... +@overload +def minimum_width(geometry: Point, **kwargs: Unpack[UFuncKwargs]) -> LineString: ... +@overload +def minimum_width(geometry: LineString | Polygon | BaseMultipartGeometry, **kwargs: Unpack[UFuncKwargs]) -> LineString: ... +@overload +def minimum_width(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> LineString: ... +@overload +def minimum_width(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... +@overload +def minimum_width(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> LineString | None: ... +@overload +def minimum_width(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> LineString: ... + @overload def maximum_inscribed_circle( geometry: Polygon | MultiPolygon, tolerance: float | None = None, **kwargs: Unpack[UFuncKwargs] diff --git a/stubs/shapely/shapely/coordinates.pyi b/stubs/shapely/shapely/coordinates.pyi index fd3d1284c10f..88a1da8388bd 100644 --- a/stubs/shapely/shapely/coordinates.pyi +++ b/stubs/shapely/shapely/coordinates.pyi @@ -6,7 +6,7 @@ from numpy.typing import NDArray from ._typing import ArrayLikeSeq, GeoArray, GeoT, OptGeoArrayLike, OptGeoArrayLikeSeq, OptGeoT -__all__ = ["transform", "count_coordinates", "get_coordinates", "set_coordinates"] +__all__ = ["transform", "count_coordinates", "get_coordinates", "set_coordinates", "transform_coordseq"] @overload def transform( @@ -24,7 +24,22 @@ def transform( *, interleaved: bool = True, ) -> GeoArray: ... - +@overload +def transform_coordseq( + geometry: OptGeoT, + transformation: Callable[[NDArray[np.float64]], NDArray[np.float64]], + include_z: bool | None = False, + *, + interleaved: bool = True, +) -> OptGeoT: ... +@overload +def transform_coordseq( + geometry: OptGeoArrayLikeSeq, + transformation: Callable[[NDArray[np.float64]], NDArray[np.float64]], + include_z: bool | None = False, + *, + interleaved: bool = True, +) -> GeoArray: ... def count_coordinates(geometry: OptGeoArrayLike) -> int: ... @overload From e9b8144ab656cc50a4e1e98ade6531633fe179a9 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 19 Oct 2026 09:13:11 +0000 Subject: [PATCH 02/13] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stubs/shapely/shapely/coordinates.pyi | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stubs/shapely/shapely/coordinates.pyi b/stubs/shapely/shapely/coordinates.pyi index 88a1da8388bd..69634f3607a0 100644 --- a/stubs/shapely/shapely/coordinates.pyi +++ b/stubs/shapely/shapely/coordinates.pyi @@ -24,6 +24,7 @@ def transform( *, interleaved: bool = True, ) -> GeoArray: ... + @overload def transform_coordseq( geometry: OptGeoT, @@ -40,6 +41,7 @@ def transform_coordseq( *, interleaved: bool = True, ) -> GeoArray: ... + def count_coordinates(geometry: OptGeoArrayLike) -> int: ... @overload From 7351f3adb54061f36f35d82d81f9f01ad6214e55 Mon Sep 17 00:00:00 2001 From: jack-volantautonomy Date: Mon, 19 Oct 2026 10:52:46 +0100 Subject: [PATCH 03/13] Remove overload --- stubs/shapely/shapely/constructive.pyi | 2 -- 1 file changed, 2 deletions(-) diff --git a/stubs/shapely/shapely/constructive.pyi b/stubs/shapely/shapely/constructive.pyi index f7b15524f0dd..93e223fa38fe 100644 --- a/stubs/shapely/shapely/constructive.pyi +++ b/stubs/shapely/shapely/constructive.pyi @@ -454,8 +454,6 @@ def snap( geometry: OptGeoArrayLike, reference: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], **kwargs: Unpack[UFuncKwargs] ) -> GeoArray: ... -@overload -def split(geometry: Geometry | None, reference: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload def split(geometry: OptGeoArrayLikeSeq, reference: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... @overload From 84d2fa0cec4337b50572fba0708b65a894c57bff Mon Sep 17 00:00:00 2001 From: jack-volantautonomy Date: Mon, 19 Oct 2026 11:29:26 +0100 Subject: [PATCH 04/13] Upgrade version --- stubs/shapely/METADATA.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/shapely/METADATA.toml b/stubs/shapely/METADATA.toml index 326a70f2733c..1a322ea8ac0b 100644 --- a/stubs/shapely/METADATA.toml +++ b/stubs/shapely/METADATA.toml @@ -1,4 +1,4 @@ -version = "2.1.*" +version = "2.2.*" upstream-repository = "https://github.com/shapely/shapely" # Requires a version of numpy with a `py.typed` file dependencies = ["numpy>=1.20"] From b4222da1b1ada2ed2120c1d07e33faab70466f62 Mon Sep 17 00:00:00 2001 From: jack-volantautonomy Date: Mon, 19 Oct 2026 14:08:18 +0100 Subject: [PATCH 05/13] More work in progress --- stubs/shapely/shapely/_geometry.pyi | 14 +++++++++ stubs/shapely/shapely/constructive.pyi | 7 ++--- stubs/shapely/shapely/coordinates.pyi | 2 +- stubs/shapely/shapely/lib.pyi | 40 ++++++++++++++++++++++++++ 4 files changed, 58 insertions(+), 5 deletions(-) diff --git a/stubs/shapely/shapely/_geometry.pyi b/stubs/shapely/shapely/_geometry.pyi index 7e9b64f1a71d..0c338a980d63 100644 --- a/stubs/shapely/shapely/_geometry.pyi +++ b/stubs/shapely/shapely/_geometry.pyi @@ -28,6 +28,7 @@ __all__ = [ "get_point", "get_precision", "get_rings", + "get_segments", "get_srid", "get_type_id", "get_x", @@ -184,6 +185,19 @@ def get_precision(geometry: Geometry | None, **kwargs) -> np.float64: ... @overload def get_precision(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ... +@overload +def get_segments( + geometry: OptGeoArrayLike, *, include_z: bool = False, return_index: Literal[False] = False, **kwargs +) -> GeoArray: ... +@overload +def get_segments( + geometry: OptGeoArrayLike, *, include_z: bool = False, return_index: Literal[True], **kwargs +) -> tuple[GeoArray, NDArray[np.int64]]: ... +@overload +def get_segments( + geometry: OptGeoArrayLike, *, include_z: bool = False, return_index: bool, **kwargs +) -> GeoArray | tuple[GeoArray, NDArray[np.int64]]: ... + class SetPrecisionMode(ParamEnum): valid_output = 0 pointwise = 1 diff --git a/stubs/shapely/shapely/constructive.pyi b/stubs/shapely/shapely/constructive.pyi index 93e223fa38fe..02f051461d26 100644 --- a/stubs/shapely/shapely/constructive.pyi +++ b/stubs/shapely/shapely/constructive.pyi @@ -455,12 +455,11 @@ def snap( ) -> GeoArray: ... @overload -def split(geometry: OptGeoArrayLikeSeq, reference: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... +def split(geometry: OptGeoArrayLikeSeq, splitter: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... @overload -def split(geometry: OptGeoArrayLike, reference: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... +def split(geometry: OptGeoArrayLike, splitter: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... @overload -def split(geometry: OptGeoArrayLike, reference: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... - +def split(geometry: OptGeoArrayLike, splitter: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... @overload def voronoi_polygons( geometry: Geometry, diff --git a/stubs/shapely/shapely/coordinates.pyi b/stubs/shapely/shapely/coordinates.pyi index 69634f3607a0..5f4861a5de39 100644 --- a/stubs/shapely/shapely/coordinates.pyi +++ b/stubs/shapely/shapely/coordinates.pyi @@ -29,8 +29,8 @@ def transform( def transform_coordseq( geometry: OptGeoT, transformation: Callable[[NDArray[np.float64]], NDArray[np.float64]], - include_z: bool | None = False, *, + include_z: bool | None = False, interleaved: bool = True, ) -> OptGeoT: ... @overload diff --git a/stubs/shapely/shapely/lib.pyi b/stubs/shapely/shapely/lib.pyi index ea224928eab6..fc335262ab99 100644 --- a/stubs/shapely/shapely/lib.pyi +++ b/stubs/shapely/shapely/lib.pyi @@ -180,3 +180,43 @@ def get_coordinates( ) -> NDArray[np.float64] | tuple[NDArray[np.float64], NDArray[np.int64]]: ... def set_coordinates(geoms: NDArray[np.object_], coords: NDArray[np.float64], /) -> NDArray[np.object_]: ... +def contains_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... +def covered_by_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... +def covers_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... +def crosses_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... +def disjoint_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... +def equals_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... +def get_coordinate_dimension_scalar(a: Geometry | None, /) -> int: ... +def get_dimensions_scalar(a: Geometry | None, /) -> int: ... +def get_exterior_ring_scalar(a: Geometry | None, /) -> Geometry | None: ... +def get_geometry_scalar(a: Geometry | None, index: int, /) -> Geometry | None: ... +def get_interior_ring_scalar(a: Geometry | None, index: int, /) -> Geometry | None: ... +def get_m_scalar(a: Geometry | None, /) -> float: ... +def get_num_coordinates_scalar(a: Geometry | None, /) -> int: ... +def get_num_geometries_scalar(a: Geometry | None, /) -> int: ... +def get_num_interior_rings_scalar(a: Geometry | None, /) -> int: ... +def get_num_points_scalar(a: Geometry | None, /) -> int: ... +def get_point_scalar(a: Geometry | None, index: int, /) -> Geometry | None: ... +def get_precision_scalar(a: Geometry | None, /) -> float: ... +def get_srid_scalar(a: Geometry | None, /) -> int: ... +def get_type_id_scalar(a: Geometry | None, /) -> int: ... +def get_x_scalar(a: Geometry | None, /) -> float: ... +def get_y_scalar(a: Geometry | None, /) -> float: ... +def get_z_scalar(a: Geometry | None, /) -> float: ... +def intersects_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... +def is_ccw_scalar(a: Geometry | None, /) -> bool: ... +def is_closed_scalar(a: Geometry | None, /) -> bool: ... +def is_empty_scalar(a: Geometry | None, /) -> bool: ... +def is_geometry_scalar(a: object, /) -> bool: ... +def is_missing_scalar(a: object, /) -> bool: ... +def is_prepared_scalar(a: object, /) -> bool: ... +def is_ring_scalar(a: Geometry | None, /) -> bool: ... +def is_simple_scalar(a: Geometry | None, /) -> bool: ... +def is_valid_input_scalar(obj: object, /) -> bool: ... +def is_valid_reason_scalar(a: Geometry | None, /) -> str | None: ... +def is_valid_scalar(a: Geometry | None, /) -> bool: ... +def overlaps_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... +def touches_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... +def union_prec_scalar(a: Geometry | None, b: Geometry | None, grid_size: float, /) -> Geometry | None: ... +def union_scalar(a: Geometry | None, b: Geometry | None, /) -> Geometry | None: ... +def within_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... From 7f06bace4f9d9b74cdfdc6e4b1e81d008b2b693a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 19 Oct 2026 13:10:29 +0000 Subject: [PATCH 06/13] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stubs/shapely/shapely/constructive.pyi | 1 + 1 file changed, 1 insertion(+) diff --git a/stubs/shapely/shapely/constructive.pyi b/stubs/shapely/shapely/constructive.pyi index 02f051461d26..05fa83845534 100644 --- a/stubs/shapely/shapely/constructive.pyi +++ b/stubs/shapely/shapely/constructive.pyi @@ -460,6 +460,7 @@ def split(geometry: OptGeoArrayLikeSeq, splitter: OptGeoArrayLike, **kwargs: Unp def split(geometry: OptGeoArrayLike, splitter: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... @overload def split(geometry: OptGeoArrayLike, splitter: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... + @overload def voronoi_polygons( geometry: Geometry, From b0c4ca4f4b880e80519bb5e6590d4aeb0e956cd1 Mon Sep 17 00:00:00 2001 From: jack-volantautonomy Date: Wed, 21 Oct 2026 09:07:57 +0100 Subject: [PATCH 07/13] More changes --- stubs/shapely/shapely/coordinates.pyi | 2 +- stubs/shapely/shapely/lib.pyi | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/stubs/shapely/shapely/coordinates.pyi b/stubs/shapely/shapely/coordinates.pyi index 5f4861a5de39..d3cd9a045e3f 100644 --- a/stubs/shapely/shapely/coordinates.pyi +++ b/stubs/shapely/shapely/coordinates.pyi @@ -37,8 +37,8 @@ def transform_coordseq( def transform_coordseq( geometry: OptGeoArrayLikeSeq, transformation: Callable[[NDArray[np.float64]], NDArray[np.float64]], - include_z: bool | None = False, *, + include_z: bool | None = False, interleaved: bool = True, ) -> GeoArray: ... diff --git a/stubs/shapely/shapely/lib.pyi b/stubs/shapely/shapely/lib.pyi index fc335262ab99..efa2795b9c7d 100644 --- a/stubs/shapely/shapely/lib.pyi +++ b/stubs/shapely/shapely/lib.pyi @@ -216,7 +216,16 @@ def is_valid_input_scalar(obj: object, /) -> bool: ... def is_valid_reason_scalar(a: Geometry | None, /) -> str | None: ... def is_valid_scalar(a: Geometry | None, /) -> bool: ... def overlaps_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... +def shared_paths_scalar(a: Geometry | None, b: Geometry | None, /) -> Geometry | None: ... +def shortest_line_scalar(a: Geometry | None, b: Geometry | None, /) -> Geometry | None: ... +def simplify_preserve_topology_scalar(geometry: Geometry | None, tolerance: float, /) -> Geometry | None: ... +def simplify_scalar(geometry: Geometry | None, tolerance: float, /) -> Geometry | None: ... +def snap_scalar(a: Geometry | None, b: Geometry | None, tolerance: float, /) -> Geometry | None: ... +def symmetric_difference_prec_scalar(a: Geometry | None, b: Geometry | None, grid_size: float, /) -> Geometry | None: ... +def symmetric_difference_scalar(a: Geometry | None, b: Geometry | None, /) -> Geometry | None: ... def touches_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... +def unary_union_scalar(a: Geometry | None, /) -> Geometry | None: ... +def unary_union_prec_scalar(a: Geometry | None, grid_size: float, /) -> Geometry | None: ... def union_prec_scalar(a: Geometry | None, b: Geometry | None, grid_size: float, /) -> Geometry | None: ... def union_scalar(a: Geometry | None, b: Geometry | None, /) -> Geometry | None: ... def within_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... From 1f296a68325d88616c22885444f0f4e5df4589e7 Mon Sep 17 00:00:00 2001 From: jack-volantautonomy Date: Wed, 28 Oct 2026 15:33:06 +0000 Subject: [PATCH 08/13] Allowlist scalar functions --- stubs/shapely/@tests/stubtest_allowlist.txt | 1 + stubs/shapely/shapely/lib.pyi | 49 --------------------- 2 files changed, 1 insertion(+), 49 deletions(-) diff --git a/stubs/shapely/@tests/stubtest_allowlist.txt b/stubs/shapely/@tests/stubtest_allowlist.txt index fd759a27a630..1ea674aef196 100644 --- a/stubs/shapely/@tests/stubtest_allowlist.txt +++ b/stubs/shapely/@tests/stubtest_allowlist.txt @@ -2,3 +2,4 @@ shapely\.conftest shapely\.tests.* shapely\._typing # stubs only module +shapely\.lib\..*_scalar # internal fast paths \ No newline at end of file diff --git a/stubs/shapely/shapely/lib.pyi b/stubs/shapely/shapely/lib.pyi index efa2795b9c7d..ea224928eab6 100644 --- a/stubs/shapely/shapely/lib.pyi +++ b/stubs/shapely/shapely/lib.pyi @@ -180,52 +180,3 @@ def get_coordinates( ) -> NDArray[np.float64] | tuple[NDArray[np.float64], NDArray[np.int64]]: ... def set_coordinates(geoms: NDArray[np.object_], coords: NDArray[np.float64], /) -> NDArray[np.object_]: ... -def contains_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... -def covered_by_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... -def covers_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... -def crosses_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... -def disjoint_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... -def equals_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... -def get_coordinate_dimension_scalar(a: Geometry | None, /) -> int: ... -def get_dimensions_scalar(a: Geometry | None, /) -> int: ... -def get_exterior_ring_scalar(a: Geometry | None, /) -> Geometry | None: ... -def get_geometry_scalar(a: Geometry | None, index: int, /) -> Geometry | None: ... -def get_interior_ring_scalar(a: Geometry | None, index: int, /) -> Geometry | None: ... -def get_m_scalar(a: Geometry | None, /) -> float: ... -def get_num_coordinates_scalar(a: Geometry | None, /) -> int: ... -def get_num_geometries_scalar(a: Geometry | None, /) -> int: ... -def get_num_interior_rings_scalar(a: Geometry | None, /) -> int: ... -def get_num_points_scalar(a: Geometry | None, /) -> int: ... -def get_point_scalar(a: Geometry | None, index: int, /) -> Geometry | None: ... -def get_precision_scalar(a: Geometry | None, /) -> float: ... -def get_srid_scalar(a: Geometry | None, /) -> int: ... -def get_type_id_scalar(a: Geometry | None, /) -> int: ... -def get_x_scalar(a: Geometry | None, /) -> float: ... -def get_y_scalar(a: Geometry | None, /) -> float: ... -def get_z_scalar(a: Geometry | None, /) -> float: ... -def intersects_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... -def is_ccw_scalar(a: Geometry | None, /) -> bool: ... -def is_closed_scalar(a: Geometry | None, /) -> bool: ... -def is_empty_scalar(a: Geometry | None, /) -> bool: ... -def is_geometry_scalar(a: object, /) -> bool: ... -def is_missing_scalar(a: object, /) -> bool: ... -def is_prepared_scalar(a: object, /) -> bool: ... -def is_ring_scalar(a: Geometry | None, /) -> bool: ... -def is_simple_scalar(a: Geometry | None, /) -> bool: ... -def is_valid_input_scalar(obj: object, /) -> bool: ... -def is_valid_reason_scalar(a: Geometry | None, /) -> str | None: ... -def is_valid_scalar(a: Geometry | None, /) -> bool: ... -def overlaps_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... -def shared_paths_scalar(a: Geometry | None, b: Geometry | None, /) -> Geometry | None: ... -def shortest_line_scalar(a: Geometry | None, b: Geometry | None, /) -> Geometry | None: ... -def simplify_preserve_topology_scalar(geometry: Geometry | None, tolerance: float, /) -> Geometry | None: ... -def simplify_scalar(geometry: Geometry | None, tolerance: float, /) -> Geometry | None: ... -def snap_scalar(a: Geometry | None, b: Geometry | None, tolerance: float, /) -> Geometry | None: ... -def symmetric_difference_prec_scalar(a: Geometry | None, b: Geometry | None, grid_size: float, /) -> Geometry | None: ... -def symmetric_difference_scalar(a: Geometry | None, b: Geometry | None, /) -> Geometry | None: ... -def touches_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... -def unary_union_scalar(a: Geometry | None, /) -> Geometry | None: ... -def unary_union_prec_scalar(a: Geometry | None, grid_size: float, /) -> Geometry | None: ... -def union_prec_scalar(a: Geometry | None, b: Geometry | None, grid_size: float, /) -> Geometry | None: ... -def union_scalar(a: Geometry | None, b: Geometry | None, /) -> Geometry | None: ... -def within_scalar(a: Geometry | None, b: Geometry | None, /) -> bool: ... From 8594e375dfe90c6acda76e4a2df816c6757baea8 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 28 Oct 2026 15:36:16 +0000 Subject: [PATCH 09/13] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stubs/shapely/@tests/stubtest_allowlist.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/shapely/@tests/stubtest_allowlist.txt b/stubs/shapely/@tests/stubtest_allowlist.txt index 1ea674aef196..b08ce5bd3952 100644 --- a/stubs/shapely/@tests/stubtest_allowlist.txt +++ b/stubs/shapely/@tests/stubtest_allowlist.txt @@ -2,4 +2,4 @@ shapely\.conftest shapely\.tests.* shapely\._typing # stubs only module -shapely\.lib\..*_scalar # internal fast paths \ No newline at end of file +shapely\.lib\..*_scalar # internal fast paths From a1ecf689f29c164a87b79590f68614fe9bf7df26 Mon Sep 17 00:00:00 2001 From: jack-volantautonomy Date: Wed, 28 Oct 2026 16:08:41 +0000 Subject: [PATCH 10/13] Remaining changes --- stubs/shapely/shapely/_coverage.pyi | 13 ++++++++++--- stubs/shapely/shapely/_enum.pyi | 2 ++ stubs/shapely/shapely/_version.pyi | 7 +------ stubs/shapely/shapely/constructive.pyi | 17 +++++------------ stubs/shapely/shapely/geometry/base.pyi | 5 ++--- stubs/shapely/shapely/geometry/collection.pyi | 4 ++-- stubs/shapely/shapely/geometry/linestring.pyi | 2 +- .../shapely/geometry/multilinestring.pyi | 2 +- stubs/shapely/shapely/geometry/multipoint.pyi | 2 +- stubs/shapely/shapely/geometry/multipolygon.pyi | 2 +- stubs/shapely/shapely/geometry/point.pyi | 9 ++++----- stubs/shapely/shapely/geometry/polygon.pyi | 4 ++-- stubs/shapely/shapely/lib.pyi | 3 ++- 13 files changed, 34 insertions(+), 38 deletions(-) diff --git a/stubs/shapely/shapely/_coverage.pyi b/stubs/shapely/shapely/_coverage.pyi index fefc40e02d48..b4bc08ba73f9 100644 --- a/stubs/shapely/shapely/_coverage.pyi +++ b/stubs/shapely/shapely/_coverage.pyi @@ -1,12 +1,19 @@ -from typing import overload +from typing import Literal, overload import numpy as np -from ._typing import ArrayLike, GeoArray, GeoArrayLikeSeq, OptGeoArrayLike +from ._typing import ArrayLike, GeoArray, GeoArrayLikeSeq, OptGeoArrayLike, OptGeoArrayLikeSeq from .geometry import Polygon -__all__ = ["coverage_invalid_edges", "coverage_is_valid", "coverage_simplify"] +__all__ = ["coverage_clean", "coverage_invalid_edges", "coverage_is_valid", "coverage_simplify"] +def coverage_clean( + geometry: OptGeoArrayLikeSeq, + *, + gap_width: float = 0.0, + snapping_distance: float = -1, + merge_strategy: Literal["longest_border", "max_area", "min_area", "min_index"] = "longest_border", +) -> GeoArray: ... def coverage_is_valid(geometry: OptGeoArrayLike, gap_width: float = 0.0, **kwargs) -> np.bool_: ... def coverage_invalid_edges(geometry: OptGeoArrayLike, gap_width: float = 0.0, **kwargs) -> GeoArray: ... diff --git a/stubs/shapely/shapely/_enum.pyi b/stubs/shapely/shapely/_enum.pyi index c36e15fed401..7c290fba4915 100644 --- a/stubs/shapely/shapely/_enum.pyi +++ b/stubs/shapely/shapely/_enum.pyi @@ -3,3 +3,5 @@ from enum import IntEnum class ParamEnum(IntEnum): # type: ignore[misc] # Enum with no members @classmethod def get_value(cls, item: str) -> int: ... + @classmethod + def has_value(cls, value: int) -> bool: ... diff --git a/stubs/shapely/shapely/_version.pyi b/stubs/shapely/shapely/_version.pyi index 249ab567c82e..e56ffedce963 100644 --- a/stubs/shapely/shapely/_version.pyi +++ b/stubs/shapely/shapely/_version.pyi @@ -1,6 +1 @@ -from typing import TypedDict - -version_json: str -_Versions = TypedDict("_Versions", {"date": str, "dirty": bool, "error": None, "full-revisionid": str, "version": str}) - -def get_versions() -> _Versions: ... +__git_version__: str diff --git a/stubs/shapely/shapely/constructive.pyi b/stubs/shapely/shapely/constructive.pyi index 05fa83845534..38e32d25e4e8 100644 --- a/stubs/shapely/shapely/constructive.pyi +++ b/stubs/shapely/shapely/constructive.pyi @@ -455,12 +455,11 @@ def snap( ) -> GeoArray: ... @overload -def split(geometry: OptGeoArrayLikeSeq, splitter: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... +def split(geometry: OptGeoArrayLikeSeq, splitter: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload -def split(geometry: OptGeoArrayLike, splitter: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... +def split(geometry: OptGeoArrayLike, splitter: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload -def split(geometry: OptGeoArrayLike, splitter: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... - +def split(geometry: Geometry, splitter: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... @overload def voronoi_polygons( geometry: Geometry, @@ -617,20 +616,14 @@ def minimum_bounding_circle(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> No def minimum_bounding_circle(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> Polygon | Point | None: ... @overload def minimum_bounding_circle(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... - -@overload -def minimum_width(geometry: Point, **kwargs: Unpack[UFuncKwargs]) -> LineString: ... -@overload -def minimum_width(geometry: LineString | Polygon | BaseMultipartGeometry, **kwargs: Unpack[UFuncKwargs]) -> LineString: ... @overload def minimum_width(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> LineString: ... @overload def minimum_width(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def minimum_width(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> LineString | None: ... +def minimum_width(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload -def minimum_width(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> LineString: ... - +def minimum_width(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> LineString | None: ... @overload def maximum_inscribed_circle( geometry: Polygon | MultiPolygon, tolerance: float | None = None, **kwargs: Unpack[UFuncKwargs] diff --git a/stubs/shapely/shapely/geometry/base.pyi b/stubs/shapely/shapely/geometry/base.pyi index e4138123166b..be6c8eaf6f55 100644 --- a/stubs/shapely/shapely/geometry/base.pyi +++ b/stubs/shapely/shapely/geometry/base.pyi @@ -36,9 +36,8 @@ class BaseGeometry(Geometry): "Directly calling 'BaseGeometry()' is deprecated. To create an empty geometry, " "use one of the subclasses instead, for example 'GeometryCollection()'." ) - def __new__(self) -> GeometryCollection: ... + def __new__(cls) -> GeometryCollection: ... def __bool__(self) -> bool: ... - def __nonzero__(self) -> bool: ... def __format__(self, format_spec: str) -> str: ... @overload @@ -323,4 +322,4 @@ class EmptyGeometry(BaseGeometry): "The 'EmptyGeometry()' constructor is deprecated. Use one of the " "geometry subclasses instead, for example 'GeometryCollection()'." ) - def __new__(self) -> GeometryCollection: ... # type: ignore[misc] + def __new__(cls) -> GeometryCollection: ... # type: ignore[misc] diff --git a/stubs/shapely/shapely/geometry/collection.pyi b/stubs/shapely/shapely/geometry/collection.pyi index abc1b7e42af1..6086f54d73f6 100644 --- a/stubs/shapely/shapely/geometry/collection.pyi +++ b/stubs/shapely/shapely/geometry/collection.pyi @@ -11,10 +11,10 @@ class GeometryCollection(BaseMultipartGeometry[_GeoT_co]): @overload def __new__( - self, geoms: BaseMultipartGeometry[_GeoT_co] | GeometrySequence[BaseMultipartGeometry[_GeoT_co]] | Collection[_GeoT_co] + cls, geoms: BaseMultipartGeometry[_GeoT_co] | GeometrySequence[BaseMultipartGeometry[_GeoT_co]] | Collection[_GeoT_co] ) -> Self: ... @overload - def __new__(self, geoms: OptGeoArrayLike = None) -> Self: ... + def __new__(cls, geoms: OptGeoArrayLike = None) -> Self: ... # more precise base overrides @property diff --git a/stubs/shapely/shapely/geometry/linestring.pyi b/stubs/shapely/shapely/geometry/linestring.pyi index 54649d1e6963..502ef9d8503e 100644 --- a/stubs/shapely/shapely/geometry/linestring.pyi +++ b/stubs/shapely/shapely/geometry/linestring.pyi @@ -16,7 +16,7 @@ _ConvertibleToLineString: TypeAlias = LineString | ArrayLikeSeq[float] | Iterabl class LineString(BaseGeometry): __slots__: list[str] = [] - def __new__(self, coordinates: _ConvertibleToLineString | None = None) -> Self: ... + def __new__(cls, coordinates: _ConvertibleToLineString | None = None) -> Self: ... def svg(self, scale_factor: float = 1.0, stroke_color: str | None = None, opacity: float | None = None) -> str: ... # type: ignore[override] def offset_curve( self, diff --git a/stubs/shapely/shapely/geometry/multilinestring.pyi b/stubs/shapely/shapely/geometry/multilinestring.pyi index ec0f6c53857c..2ef594a9487a 100644 --- a/stubs/shapely/shapely/geometry/multilinestring.pyi +++ b/stubs/shapely/shapely/geometry/multilinestring.pyi @@ -10,7 +10,7 @@ __all__ = ["MultiLineString"] class MultiLineString(BaseMultipartGeometry[LineString]): __slots__: list[str] = [] - def __new__(self, lines: BaseMultipartGeometry | Collection[_ConvertibleToLineString] | None = None) -> Self: ... + def __new__(cls, lines: BaseMultipartGeometry | Collection[_ConvertibleToLineString] | None = None) -> Self: ... def svg(self, scale_factor: float = 1.0, stroke_color: str | None = None, opacity: float | None = None) -> str: ... # type: ignore[override] # more precise base overrides @property diff --git a/stubs/shapely/shapely/geometry/multipoint.pyi b/stubs/shapely/shapely/geometry/multipoint.pyi index c931c474d165..b70921721445 100644 --- a/stubs/shapely/shapely/geometry/multipoint.pyi +++ b/stubs/shapely/shapely/geometry/multipoint.pyi @@ -15,7 +15,7 @@ class MultiPoint(BaseMultipartGeometry[Point]): # like np.ndarray, pd.Index, pd.Series, ... # I went with Collection as false negatives seem better to me than false positives in this case __slots__: list[str] = [] - def __new__(self, points: MultiPoint | Collection[_PointLike] | None = None) -> Self: ... + def __new__(cls, points: MultiPoint | Collection[_PointLike] | None = None) -> Self: ... def svg(self, scale_factor: float = 1.0, fill_color: str | None = None, opacity: float | None = None) -> str: ... # type: ignore[override] # more precise base overrides @property diff --git a/stubs/shapely/shapely/geometry/multipolygon.pyi b/stubs/shapely/shapely/geometry/multipolygon.pyi index 0c60c5fa7da9..a2c8f39808fc 100644 --- a/stubs/shapely/shapely/geometry/multipolygon.pyi +++ b/stubs/shapely/shapely/geometry/multipolygon.pyi @@ -11,7 +11,7 @@ __all__ = ["MultiPolygon"] class MultiPolygon(BaseMultipartGeometry[Polygon]): __slots__: list[str] = [] def __new__( - self, + cls, polygons: ( BaseMultipartGeometry | Collection[Polygon | tuple[_PolygonShellLike] | tuple[_PolygonShellLike, _PolygonHolesLike] | None] diff --git a/stubs/shapely/shapely/geometry/point.pyi b/stubs/shapely/shapely/geometry/point.pyi index 5f37e65a7b93..9f716f99b092 100644 --- a/stubs/shapely/shapely/geometry/point.pyi +++ b/stubs/shapely/shapely/geometry/point.pyi @@ -14,14 +14,13 @@ class Point(BaseGeometry): __slots__: list[str] = [] @overload # no args: empty point - def __new__(self) -> Self: ... + def __new__(cls) -> Self: ... @overload # one arg: (x, y[, z]) tuple or a Point instance - def __new__(self, coords: _PointLike, /) -> Self: ... + def __new__(cls, coords: _PointLike, /) -> Self: ... @overload # two args: (x, y) tuple - def __new__(self, x: float, y: float, /) -> Self: ... + def __new__(cls, x: float, y: float, /) -> Self: ... @overload # three args: (x, y, z) tuple - def __new__(self, x: float, y: float, z: float, /) -> Self: ... - + def __new__(cls, x: float, y: float, z: float, /) -> Self: ... @property def x(self) -> float: ... @property diff --git a/stubs/shapely/shapely/geometry/polygon.pyi b/stubs/shapely/shapely/geometry/polygon.pyi index e52857a88946..2ccb10672820 100644 --- a/stubs/shapely/shapely/geometry/polygon.pyi +++ b/stubs/shapely/shapely/geometry/polygon.pyi @@ -14,7 +14,7 @@ _PolygonHolesLike: TypeAlias = Collection[_ConvertibleToLinearRing | None] | Non class LinearRing(LineString): __slots__: list[str] = [] - def __new__(self, coordinates: _ConvertibleToLinearRing | None = None) -> Self: ... + def __new__(cls, coordinates: _ConvertibleToLinearRing | None = None) -> Self: ... @property def is_ccw(self) -> bool: ... @property @@ -33,7 +33,7 @@ class InteriorRingSequence: class Polygon(BaseGeometry): __slots__: list[str] = [] - def __new__(self, shell: _PolygonShellLike = None, holes: _PolygonHolesLike = None) -> Self: ... + def __new__(cls, shell: _PolygonShellLike = None, holes: _PolygonHolesLike = None) -> Self: ... @property def exterior(self) -> LinearRing: ... @property diff --git a/stubs/shapely/shapely/lib.pyi b/stubs/shapely/shapely/lib.pyi index ea224928eab6..4a05d35136a5 100644 --- a/stubs/shapely/shapely/lib.pyi +++ b/stubs/shapely/shapely/lib.pyi @@ -18,6 +18,7 @@ contains: np.ufunc contains_properly: np.ufunc contains_xy: np.ufunc convex_hull: np.ufunc +coverage_clean: np.ufunc coverage_invalid_edges: np.ufunc coverage_is_valid: np.ufunc coverage_simplify: np.ufunc @@ -92,13 +93,13 @@ line_merge: np.ufunc line_merge_directed: np.ufunc linearrings: np.ufunc linestrings: np.ufunc -make_valid: np.ufunc make_valid_with_params: np.ufunc maximum_inscribed_circle: np.ufunc minimum_bounding_circle: np.ufunc minimum_bounding_radius: np.ufunc minimum_clearance: np.ufunc minimum_clearance_line: np.ufunc +minimum_width: np.ufunc node: np.ufunc normalize: np.ufunc offset_curve: np.ufunc From 0d47cff75ca65c2b1d87056f51fb0240adc5ec9b Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 28 Oct 2026 16:11:28 +0000 Subject: [PATCH 11/13] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stubs/shapely/shapely/constructive.pyi | 3 +++ stubs/shapely/shapely/geometry/point.pyi | 1 + 2 files changed, 4 insertions(+) diff --git a/stubs/shapely/shapely/constructive.pyi b/stubs/shapely/shapely/constructive.pyi index 38e32d25e4e8..8a265a8bc050 100644 --- a/stubs/shapely/shapely/constructive.pyi +++ b/stubs/shapely/shapely/constructive.pyi @@ -460,6 +460,7 @@ def split(geometry: OptGeoArrayLikeSeq, splitter: OptGeoArrayLike, **kwargs: Unp def split(geometry: OptGeoArrayLike, splitter: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload def split(geometry: Geometry, splitter: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... + @overload def voronoi_polygons( geometry: Geometry, @@ -616,6 +617,7 @@ def minimum_bounding_circle(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> No def minimum_bounding_circle(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> Polygon | Point | None: ... @overload def minimum_bounding_circle(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... + @overload def minimum_width(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> LineString: ... @overload @@ -624,6 +626,7 @@ def minimum_width(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... def minimum_width(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload def minimum_width(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> LineString | None: ... + @overload def maximum_inscribed_circle( geometry: Polygon | MultiPolygon, tolerance: float | None = None, **kwargs: Unpack[UFuncKwargs] diff --git a/stubs/shapely/shapely/geometry/point.pyi b/stubs/shapely/shapely/geometry/point.pyi index 9f716f99b092..24d2d4a46034 100644 --- a/stubs/shapely/shapely/geometry/point.pyi +++ b/stubs/shapely/shapely/geometry/point.pyi @@ -21,6 +21,7 @@ class Point(BaseGeometry): def __new__(cls, x: float, y: float, /) -> Self: ... @overload # three args: (x, y, z) tuple def __new__(cls, x: float, y: float, z: float, /) -> Self: ... + @property def x(self) -> float: ... @property From eb2284003561b44b2e3d6a87c7189e4a2f35edb5 Mon Sep 17 00:00:00 2001 From: jack-volantautonomy Date: Fri, 30 Oct 2026 09:24:23 +0000 Subject: [PATCH 12/13] Comments --- stubs/shapely/@tests/stubtest_allowlist.txt | 2 +- stubs/shapely/METADATA.toml | 3 ++- stubs/shapely/shapely/_coverage.pyi | 6 +++--- stubs/shapely/shapely/constructive.pyi | 3 +-- stubs/shapely/shapely/creation.pyi | 5 ++--- stubs/shapely/shapely/decorators.pyi | 2 ++ stubs/shapely/shapely/ops.pyi | 3 ++- 7 files changed, 13 insertions(+), 11 deletions(-) diff --git a/stubs/shapely/@tests/stubtest_allowlist.txt b/stubs/shapely/@tests/stubtest_allowlist.txt index b08ce5bd3952..e97da8f2ad3c 100644 --- a/stubs/shapely/@tests/stubtest_allowlist.txt +++ b/stubs/shapely/@tests/stubtest_allowlist.txt @@ -2,4 +2,4 @@ shapely\.conftest shapely\.tests.* shapely\._typing # stubs only module -shapely\.lib\..*_scalar # internal fast paths +shapely\.lib\..*_scalar # internal fast paths diff --git a/stubs/shapely/METADATA.toml b/stubs/shapely/METADATA.toml index 1a322ea8ac0b..2d551eee3c5e 100644 --- a/stubs/shapely/METADATA.toml +++ b/stubs/shapely/METADATA.toml @@ -1,4 +1,5 @@ version = "2.2.*" upstream-repository = "https://github.com/shapely/shapely" # Requires a version of numpy with a `py.typed` file -dependencies = ["numpy>=1.20"] +dependencies = ["numpy>=1.26"] +requires-python = ">=3.11" diff --git a/stubs/shapely/shapely/_coverage.pyi b/stubs/shapely/shapely/_coverage.pyi index b4bc08ba73f9..e3d5471c2650 100644 --- a/stubs/shapely/shapely/_coverage.pyi +++ b/stubs/shapely/shapely/_coverage.pyi @@ -2,17 +2,17 @@ from typing import Literal, overload import numpy as np -from ._typing import ArrayLike, GeoArray, GeoArrayLikeSeq, OptGeoArrayLike, OptGeoArrayLikeSeq +from ._typing import ArrayLike, GeoArray, GeoArrayLikeSeq, OptGeoArrayLike from .geometry import Polygon __all__ = ["coverage_clean", "coverage_invalid_edges", "coverage_is_valid", "coverage_simplify"] def coverage_clean( - geometry: OptGeoArrayLikeSeq, + geometry: OptGeoArrayLike, *, gap_width: float = 0.0, snapping_distance: float = -1, - merge_strategy: Literal["longest_border", "max_area", "min_area", "min_index"] = "longest_border", + merge_strategy: Literal["longest_border", "max_area", "min_area", "min_index"] | int = "longest_border", ) -> GeoArray: ... def coverage_is_valid(geometry: OptGeoArrayLike, gap_width: float = 0.0, **kwargs) -> np.bool_: ... def coverage_invalid_edges(geometry: OptGeoArrayLike, gap_width: float = 0.0, **kwargs) -> GeoArray: ... diff --git a/stubs/shapely/shapely/constructive.pyi b/stubs/shapely/shapely/constructive.pyi index 8a265a8bc050..5e2ba6d641f4 100644 --- a/stubs/shapely/shapely/constructive.pyi +++ b/stubs/shapely/shapely/constructive.pyi @@ -459,8 +459,7 @@ def split(geometry: OptGeoArrayLikeSeq, splitter: OptGeoArrayLike, **kwargs: Unp @overload def split(geometry: OptGeoArrayLike, splitter: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload -def split(geometry: Geometry, splitter: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... - +def split(geometry: Geometry, splitter: Geometry, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... @overload def voronoi_polygons( geometry: Geometry, diff --git a/stubs/shapely/shapely/creation.pyi b/stubs/shapely/shapely/creation.pyi index a51ff551071d..23da7893c49a 100644 --- a/stubs/shapely/shapely/creation.pyi +++ b/stubs/shapely/shapely/creation.pyi @@ -323,9 +323,8 @@ def geometrycollections( out: NDArray[np.object_] | None = None, **kwargs: Unpack[UFuncKwargsNoOut], ) -> GeometryCollection | GeoArray: ... - -def prepare(geometry: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargsNoOut]) -> None: ... -def destroy_prepared(geometry: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargsNoOut]) -> None: ... +def prepare(geometry: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargsNoOut]) -> bool: ... +def destroy_prepared(geometry: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargsNoOut]) -> bool: ... def empty( shape: SupportsIndex | Sequence[SupportsIndex], geom_type: GeometryType | int | None = None, order: Literal["C", "F"] = "C" ) -> NDArray[np.object_]: ... diff --git a/stubs/shapely/shapely/decorators.pyi b/stubs/shapely/shapely/decorators.pyi index fe5131950cec..d85c9470d837 100644 --- a/stubs/shapely/shapely/decorators.pyi +++ b/stubs/shapely/shapely/decorators.pyi @@ -1,5 +1,6 @@ from collections.abc import Callable, Container from typing import TypeVar +from typing_extensions import deprecated _F = TypeVar("_F", bound=Callable[..., object]) @@ -8,5 +9,6 @@ class requires_geos: def __init__(self, version: str) -> None: ... def __call__(self, func: _F) -> _F: ... +@deprecated("'multithreading_enabled' is deprecated and will be removed in a future version.") def multithreading_enabled(func: _F) -> _F: ... def deprecate_positional(should_be_kwargs: Container[str], category: type[Warning] = ...) -> Callable[..., object]: ... diff --git a/stubs/shapely/shapely/ops.pyi b/stubs/shapely/shapely/ops.pyi index 206f91861b3e..65bcc7032f5d 100644 --- a/stubs/shapely/shapely/ops.pyi +++ b/stubs/shapely/shapely/ops.pyi @@ -1,5 +1,6 @@ from collections.abc import Callable, Iterable from typing import Any, Literal, overload +from typing_extensions import deprecated from ._typing import GeoT, OptGeoArrayLike, SupportsGeoInterface from .algorithms.polylabel import polylabel as polylabel @@ -87,7 +88,7 @@ def validate(geom: None) -> None: ... def validate(geom: Geometry) -> str: ... @overload def validate(geom: Geometry | None) -> str | None: ... - +@deprecated("Function 'ops.transform' is deprecated. Use 'shapely.transform' or 'shapely.transform_coordseq' instead.") def transform(func: Callable[[float, float, float | None], tuple[float, ...]], geom: GeoT) -> GeoT: ... def nearest_points(g1: Geometry, g2: Geometry) -> tuple[Point, Point]: ... def snap(g1: GeoT, g2: Geometry, tolerance: float) -> GeoT: ... From 4fa6d4cab529964c866c38700cf5adcd3229b0c7 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 30 Oct 2026 09:27:03 +0000 Subject: [PATCH 13/13] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stubs/shapely/shapely/constructive.pyi | 1 + stubs/shapely/shapely/creation.pyi | 1 + stubs/shapely/shapely/ops.pyi | 1 + 3 files changed, 3 insertions(+) diff --git a/stubs/shapely/shapely/constructive.pyi b/stubs/shapely/shapely/constructive.pyi index 5e2ba6d641f4..0b12980e4700 100644 --- a/stubs/shapely/shapely/constructive.pyi +++ b/stubs/shapely/shapely/constructive.pyi @@ -460,6 +460,7 @@ def split(geometry: OptGeoArrayLikeSeq, splitter: OptGeoArrayLike, **kwargs: Unp def split(geometry: OptGeoArrayLike, splitter: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload def split(geometry: Geometry, splitter: Geometry, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... + @overload def voronoi_polygons( geometry: Geometry, diff --git a/stubs/shapely/shapely/creation.pyi b/stubs/shapely/shapely/creation.pyi index 23da7893c49a..cc82889fe86c 100644 --- a/stubs/shapely/shapely/creation.pyi +++ b/stubs/shapely/shapely/creation.pyi @@ -323,6 +323,7 @@ def geometrycollections( out: NDArray[np.object_] | None = None, **kwargs: Unpack[UFuncKwargsNoOut], ) -> GeometryCollection | GeoArray: ... + def prepare(geometry: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargsNoOut]) -> bool: ... def destroy_prepared(geometry: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargsNoOut]) -> bool: ... def empty( diff --git a/stubs/shapely/shapely/ops.pyi b/stubs/shapely/shapely/ops.pyi index 65bcc7032f5d..b215786ab282 100644 --- a/stubs/shapely/shapely/ops.pyi +++ b/stubs/shapely/shapely/ops.pyi @@ -88,6 +88,7 @@ def validate(geom: None) -> None: ... def validate(geom: Geometry) -> str: ... @overload def validate(geom: Geometry | None) -> str | None: ... + @deprecated("Function 'ops.transform' is deprecated. Use 'shapely.transform' or 'shapely.transform_coordseq' instead.") def transform(func: Callable[[float, float, float | None], tuple[float, ...]], geom: GeoT) -> GeoT: ... def nearest_points(g1: Geometry, g2: Geometry) -> tuple[Point, Point]: ...