From 8f136148920593a93171919f44752363c7faea3e Mon Sep 17 00:00:00 2001 From: jack-volantautonomy Date: Mon, 19 Oct 2026 10:09:03 +0100 Subject: [PATCH 1/6] 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 2/6] [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 3/6] 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 4/6] 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 5/6] 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 6/6] [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,