From 0bdca604ea47578379932ab6597a19e183f2f638 Mon Sep 17 00:00:00 2001 From: jack-volantautonomy Date: Tue, 2 Jun 2026 14:15:38 +0100 Subject: [PATCH 1/5] Next approach on typing kwargs --- stubs/shapely/shapely/_typing.pyi | 24 +- stubs/shapely/shapely/constructive.pyi | 362 +++++++++++++---------- stubs/shapely/shapely/creation.pyi | 106 ++++--- stubs/shapely/shapely/io.pyi | 67 +++-- stubs/shapely/shapely/predicates.pyi | 255 ++++++++-------- stubs/shapely/shapely/set_operations.pyi | 113 ++++--- 6 files changed, 517 insertions(+), 410 deletions(-) diff --git a/stubs/shapely/shapely/_typing.pyi b/stubs/shapely/shapely/_typing.pyi index 931dc2e7cc59..952b2251b383 100644 --- a/stubs/shapely/shapely/_typing.pyi +++ b/stubs/shapely/shapely/_typing.pyi @@ -1,10 +1,10 @@ import sys from _typeshed import SupportsWrite as SupportsWrite from collections.abc import Sequence -from typing import Any, Protocol, TypeAlias, TypeVar, type_check_only +from typing import Any, Literal, Protocol, TypeAlias, TypedDict, TypeVar, type_check_only import numpy as np -from numpy.typing import NDArray +import numpy.typing as npt from .lib import Geometry @@ -44,7 +44,7 @@ OptGeoArrayLike: TypeAlias = ArrayLike[Geometry | None] # There is no way to pronounce "array of BaseGeometry" currently because of the restriction on # NDArray type variable to np.dtype and because np.object_ is not generic. # Note the use of `BaseGeometry` instead of `Geometry` as the alias is used in return types. -GeoArray: TypeAlias = NDArray[np.object_] +GeoArray: TypeAlias = npt.NDArray[np.object_] @type_check_only class SupportsGeoInterface(Protocol): @@ -55,3 +55,21 @@ class SupportsGeoInterface(Protocol): @type_check_only class SupportsRead(Protocol[_T_co]): def read(self) -> _T_co: ... + +CastingKind = Literal["no", "equiv", "safe", "same_kind", "unsafe"] +OrderKind = Literal["K", "A", "C", "F"] + +@type_check_only +class _UFuncKwargsBase(TypedDict, total=False): + where: npt.ArrayLike + casting: CastingKind + order: OrderKind + dtype: np.dtype[Any] | type[Any] + subok: bool + +@type_check_only +class UFuncKwargs(_UFuncKwargsBase, total=False): + out: npt.NDArray[Any] | tuple[npt.NDArray[Any], ...] + +@type_check_only +class UFuncKwargsNoOut(_UFuncKwargsBase, total=False): ... diff --git a/stubs/shapely/shapely/constructive.pyi b/stubs/shapely/shapely/constructive.pyi index 80ff27d36add..67fe61a3cadd 100644 --- a/stubs/shapely/shapely/constructive.pyi +++ b/stubs/shapely/shapely/constructive.pyi @@ -1,8 +1,8 @@ from collections.abc import Sequence -from typing import Any, Literal, SupportsIndex, overload +from typing import Any, Literal, SupportsIndex, Unpack, overload from ._enum import ParamEnum -from ._typing import ArrayLike, ArrayLikeSeq, GeoArray, OptGeoArrayLike, OptGeoArrayLikeSeq, OptGeoT +from ._typing import ArrayLike, ArrayLikeSeq, GeoArray, OptGeoArrayLike, OptGeoArrayLikeSeq, OptGeoT, UFuncKwargs from .geometry import GeometryCollection, LineString, MultiLineString, MultiPoint, MultiPolygon, Point, Polygon from .geometry.base import BaseGeometry, BaseMultipartGeometry from .lib import Geometry @@ -53,18 +53,17 @@ class BufferJoinStyle(ParamEnum): bevel = 3 @overload -def boundary(geometry: Point | MultiPoint, **kwargs) -> GeometryCollection: ... +def boundary(geometry: Point | MultiPoint, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... @overload -def boundary(geometry: LineString | MultiLineString, **kwargs) -> MultiPoint: ... +def boundary(geometry: LineString | MultiLineString, **kwargs: Unpack[UFuncKwargs]) -> MultiPoint: ... @overload -def boundary(geometry: Polygon | MultiPolygon, **kwargs) -> MultiLineString: ... +def boundary(geometry: Polygon | MultiPolygon, **kwargs: Unpack[UFuncKwargs]) -> MultiLineString: ... @overload -def boundary(geometry: GeometryCollection | None, **kwargs) -> None: ... +def boundary(geometry: GeometryCollection | None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def boundary(geometry: Geometry, **kwargs) -> BaseMultipartGeometry | Any: ... +def boundary(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> BaseMultipartGeometry | Any: ... @overload -def boundary(geometry: OptGeoArrayLikeSeq, **kwargs) -> GeoArray: ... - +def boundary(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload def buffer( geometry: Geometry, @@ -74,7 +73,7 @@ def buffer( join_style: BufferJoinStyle | Literal["round", "mitre", "bevel"] = "round", mitre_limit: float = 5.0, single_sided: bool = False, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> Polygon: ... @overload def buffer( @@ -85,7 +84,7 @@ def buffer( join_style: BufferJoinStyle | Literal["round", "mitre", "bevel"] = "round", mitre_limit: float = 5.0, single_sided: bool = False, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> None: ... @overload def buffer( @@ -96,7 +95,7 @@ def buffer( join_style: BufferJoinStyle | Literal["round", "mitre", "bevel"] = "round", mitre_limit: float = 5.0, single_sided: bool = False, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> Polygon | None: ... @overload def buffer( @@ -107,7 +106,7 @@ def buffer( join_style: BufferJoinStyle | Literal["round", "mitre", "bevel"] = "round", mitre_limit: float = 5.0, single_sided: bool = False, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... @overload def buffer( @@ -118,9 +117,8 @@ def buffer( join_style: BufferJoinStyle | Literal["round", "mitre", "bevel"] = "round", mitre_limit: float = 5.0, single_sided: bool = False, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... - @overload def offset_curve( geometry: Geometry, @@ -128,7 +126,7 @@ def offset_curve( quad_segs: SupportsIndex = 8, join_style: BufferJoinStyle | Literal["round", "mitre", "bevel"] = "round", mitre_limit: float = 5.0, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> LineString | MultiLineString: ... @overload def offset_curve( @@ -137,7 +135,7 @@ def offset_curve( quad_segs: SupportsIndex = 8, join_style: BufferJoinStyle | Literal["round", "mitre", "bevel"] = "round", mitre_limit: float = 5.0, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> None: ... @overload def offset_curve( @@ -146,7 +144,7 @@ def offset_curve( quad_segs: SupportsIndex = 8, join_style: BufferJoinStyle | Literal["round", "mitre", "bevel"] = "round", mitre_limit: float = 5.0, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> LineString | MultiLineString | None: ... @overload def offset_curve( @@ -155,7 +153,7 @@ def offset_curve( quad_segs: SupportsIndex = 8, join_style: BufferJoinStyle | Literal["round", "mitre", "bevel"] = "round", mitre_limit: float = 5.0, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... @overload def offset_curve( @@ -164,244 +162,272 @@ def offset_curve( quad_segs: SupportsIndex = 8, join_style: BufferJoinStyle | Literal["round", "mitre", "bevel"] = "round", mitre_limit: float = 5.0, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... - @overload -def centroid(geometry: Geometry, **kwargs) -> Point: ... +def centroid(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> Point: ... @overload -def centroid(geometry: None, **kwargs) -> None: ... +def centroid(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def centroid(geometry: Geometry | None, **kwargs) -> Point | None: ... +def centroid(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> Point | None: ... @overload -def centroid(geometry: OptGeoArrayLikeSeq, **kwargs) -> GeoArray: ... - +def centroid(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload -def clip_by_rect(geometry: Geometry, xmin: float, ymin: float, xmax: float, ymax: float, **kwargs) -> BaseGeometry: ... +def clip_by_rect( + geometry: Geometry, xmin: float, ymin: float, xmax: float, ymax: float, **kwargs: Unpack[UFuncKwargs] +) -> BaseGeometry: ... @overload -def clip_by_rect(geometry: None, xmin: float, ymin: float, xmax: float, ymax: float, **kwargs) -> None: ... +def clip_by_rect(geometry: None, xmin: float, ymin: float, xmax: float, ymax: float, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload def clip_by_rect( - geometry: Geometry | None, xmin: float, ymin: float, xmax: float, ymax: float, **kwargs + geometry: Geometry | None, xmin: float, ymin: float, xmax: float, ymax: float, **kwargs: Unpack[UFuncKwargs] ) -> BaseGeometry | None: ... @overload -def clip_by_rect(geometry: OptGeoArrayLikeSeq, xmin: float, ymin: float, xmax: float, ymax: float, **kwargs) -> GeoArray: ... - +def clip_by_rect( + geometry: OptGeoArrayLikeSeq, xmin: float, ymin: float, xmax: float, ymax: float, **kwargs: Unpack[UFuncKwargs] +) -> GeoArray: ... @overload -def concave_hull(geometry: Geometry, ratio: float = 0.0, allow_holes: bool = False, **kwargs) -> BaseGeometry: ... +def concave_hull( + geometry: Geometry, ratio: float = 0.0, allow_holes: bool = False, **kwargs: Unpack[UFuncKwargs] +) -> BaseGeometry: ... @overload -def concave_hull(geometry: None, ratio: float = 0.0, allow_holes: bool = False, **kwargs) -> None: ... +def concave_hull(geometry: None, ratio: float = 0.0, allow_holes: bool = False, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def concave_hull(geometry: Geometry | None, ratio: float = 0.0, allow_holes: bool = False, **kwargs) -> BaseGeometry | None: ... +def concave_hull( + geometry: Geometry | None, ratio: float = 0.0, allow_holes: bool = False, **kwargs: Unpack[UFuncKwargs] +) -> BaseGeometry | None: ... @overload -def concave_hull(geometry: OptGeoArrayLikeSeq, ratio: float = 0.0, allow_holes: bool = False, **kwargs) -> GeoArray: ... - +def concave_hull( + geometry: OptGeoArrayLikeSeq, ratio: float = 0.0, allow_holes: bool = False, **kwargs: Unpack[UFuncKwargs] +) -> GeoArray: ... @overload -def convex_hull(geometry: Geometry, **kwargs) -> BaseGeometry: ... +def convex_hull(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry: ... @overload -def convex_hull(geometry: None, **kwargs) -> None: ... +def convex_hull(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def convex_hull(geometry: Geometry | None, **kwargs) -> BaseGeometry | None: ... +def convex_hull(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry | None: ... @overload -def convex_hull(geometry: OptGeoArrayLikeSeq, **kwargs) -> GeoArray: ... - +def convex_hull(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload def delaunay_triangles( - geometry: Geometry, tolerance: float = 0.0, only_edges: Literal[False] = False, **kwargs + geometry: Geometry, tolerance: float = 0.0, only_edges: Literal[False] = False, **kwargs: Unpack[UFuncKwargs] ) -> GeometryCollection: ... @overload -def delaunay_triangles(geometry: Geometry, tolerance: float, only_edges: Literal[True], **kwargs) -> MultiLineString: ... +def delaunay_triangles( + geometry: Geometry, tolerance: float, only_edges: Literal[True], **kwargs: Unpack[UFuncKwargs] +) -> MultiLineString: ... @overload -def delaunay_triangles(geometry: Geometry, tolerance: float = 0.0, *, only_edges: Literal[True], **kwargs) -> MultiLineString: ... +def delaunay_triangles( + geometry: Geometry, tolerance: float = 0.0, *, only_edges: Literal[True], **kwargs: Unpack[UFuncKwargs] +) -> MultiLineString: ... @overload def delaunay_triangles( - geometry: Geometry, tolerance: float = 0.0, only_edges: bool = False, **kwargs + geometry: Geometry, tolerance: float = 0.0, only_edges: bool = False, **kwargs: Unpack[UFuncKwargs] ) -> GeometryCollection | MultiLineString: ... @overload -def delaunay_triangles(geometry: None, tolerance: float = 0.0, only_edges: bool = False, **kwargs) -> None: ... +def delaunay_triangles( + geometry: None, tolerance: float = 0.0, only_edges: bool = False, **kwargs: Unpack[UFuncKwargs] +) -> None: ... @overload def delaunay_triangles( - geometry: Geometry | None, tolerance: float = 0.0, only_edges: bool = False, **kwargs + geometry: Geometry | None, tolerance: float = 0.0, only_edges: bool = False, **kwargs: Unpack[UFuncKwargs] ) -> GeometryCollection | MultiLineString | None: ... @overload def delaunay_triangles( - geometry: OptGeoArrayLike, tolerance: ArrayLike[float], only_edges: ArrayLikeSeq[bool], **kwargs + geometry: OptGeoArrayLike, tolerance: ArrayLike[float], only_edges: ArrayLikeSeq[bool], **kwargs: Unpack[UFuncKwargs] ) -> GeoArray: ... @overload def delaunay_triangles( - geometry: OptGeoArrayLike, tolerance: ArrayLike[float] = 0.0, *, only_edges: ArrayLikeSeq[bool], **kwargs + geometry: OptGeoArrayLike, tolerance: ArrayLike[float] = 0.0, *, only_edges: ArrayLikeSeq[bool], **kwargs: Unpack[UFuncKwargs] ) -> GeoArray: ... @overload def delaunay_triangles( - geometry: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], only_edges: ArrayLike[bool] = False, **kwargs + geometry: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], only_edges: ArrayLike[bool] = False, **kwargs: Unpack[UFuncKwargs] ) -> GeoArray: ... @overload def delaunay_triangles( - geometry: OptGeoArrayLikeSeq, tolerance: ArrayLike[float] = 0.0, only_edges: ArrayLike[bool] = False, **kwargs + geometry: OptGeoArrayLikeSeq, + tolerance: ArrayLike[float] = 0.0, + only_edges: ArrayLike[bool] = False, + **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... - @overload -def constrained_delaunay_triangles(geometry: Geometry, **kwargs) -> GeometryCollection: ... +def constrained_delaunay_triangles(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... @overload -def constrained_delaunay_triangles(geometry: None, **kwargs) -> None: ... +def constrained_delaunay_triangles(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def constrained_delaunay_triangles(geometry: Geometry | None, **kwargs) -> GeometryCollection | None: ... +def constrained_delaunay_triangles(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection | None: ... @overload -def constrained_delaunay_triangles(geometry: OptGeoArrayLikeSeq | OptGeoArrayLike, **kwargs) -> GeoArray: ... - +def constrained_delaunay_triangles(geometry: OptGeoArrayLikeSeq | OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload -def envelope(geometry: Point, **kwargs) -> Point: ... +def envelope(geometry: Point, **kwargs: Unpack[UFuncKwargs]) -> Point: ... @overload -def envelope(geometry: Geometry, **kwargs) -> BaseGeometry: ... +def envelope(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry: ... @overload -def envelope(geometry: None, **kwargs) -> None: ... +def envelope(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def envelope(geometry: Geometry | None, **kwargs) -> BaseGeometry | None: ... +def envelope(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry | None: ... @overload -def envelope(geometry: OptGeoArrayLikeSeq, **kwargs) -> GeoArray: ... - +def envelope(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload -def extract_unique_points(geometry: Geometry, **kwargs) -> MultiPoint: ... +def extract_unique_points(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> MultiPoint: ... @overload -def extract_unique_points(geometry: None, **kwargs) -> None: ... +def extract_unique_points(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def extract_unique_points(geometry: Geometry | None, **kwargs) -> MultiPoint | None: ... +def extract_unique_points(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> MultiPoint | None: ... @overload -def extract_unique_points(geometry: OptGeoArrayLikeSeq, **kwargs) -> GeoArray: ... - +def extract_unique_points(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload -def build_area(geometry: Geometry, **kwargs) -> BaseGeometry: ... +def build_area(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry: ... @overload -def build_area(geometry: None, **kwargs) -> None: ... +def build_area(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def build_area(geometry: Geometry | None, **kwargs) -> BaseGeometry | None: ... +def build_area(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry | None: ... @overload -def build_area(geometry: OptGeoArrayLikeSeq, **kwargs) -> GeoArray: ... +def build_area(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... # make_valid with `method="linework"` only accepts `keep_collapsed=True` @overload def make_valid( - geometry: Geometry, *, method: Literal["linework"] = "linework", keep_collapsed: Literal[True] = True, **kwargs + geometry: Geometry, + *, + method: Literal["linework"] = "linework", + keep_collapsed: Literal[True] = True, + **kwargs: Unpack[UFuncKwargs], ) -> BaseGeometry: ... @overload def make_valid( - geometry: None, *, method: Literal["linework"] = "linework", keep_collapsed: Literal[True] = True, **kwargs + geometry: None, + *, + method: Literal["linework"] = "linework", + keep_collapsed: Literal[True] = True, + **kwargs: Unpack[UFuncKwargs], ) -> None: ... @overload def make_valid( - geometry: Geometry | None, *, method: Literal["linework"] = "linework", keep_collapsed: Literal[True] = True, **kwargs + geometry: Geometry | None, + *, + method: Literal["linework"] = "linework", + keep_collapsed: Literal[True] = True, + **kwargs: Unpack[UFuncKwargs], ) -> BaseGeometry | None: ... @overload def make_valid( - geometry: OptGeoArrayLikeSeq, *, method: Literal["linework"] = "linework", keep_collapsed: Literal[True] = True, **kwargs + geometry: OptGeoArrayLikeSeq, + *, + method: Literal["linework"] = "linework", + keep_collapsed: Literal[True] = True, + **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... @overload -def make_valid(geometry: Geometry, *, method: Literal["structure"], keep_collapsed: bool = True, **kwargs) -> BaseGeometry: ... +def make_valid( + geometry: Geometry, *, method: Literal["structure"], keep_collapsed: bool = True, **kwargs: Unpack[UFuncKwargs] +) -> BaseGeometry: ... @overload -def make_valid(geometry: None, *, method: Literal["structure"], keep_collapsed: bool = True, **kwargs) -> None: ... +def make_valid( + geometry: None, *, method: Literal["structure"], keep_collapsed: bool = True, **kwargs: Unpack[UFuncKwargs] +) -> None: ... @overload def make_valid( - geometry: Geometry | None, *, method: Literal["structure"], keep_collapsed: bool = True, **kwargs + geometry: Geometry | None, *, method: Literal["structure"], keep_collapsed: bool = True, **kwargs: Unpack[UFuncKwargs] ) -> BaseGeometry | None: ... @overload def make_valid( - geometry: OptGeoArrayLikeSeq, *, method: Literal["structure"], keep_collapsed: bool = True, **kwargs + geometry: OptGeoArrayLikeSeq, *, method: Literal["structure"], keep_collapsed: bool = True, **kwargs: Unpack[UFuncKwargs] ) -> GeoArray: ... - @overload -def minimum_clearance_line(geometry: Point, **kwargs) -> Point: ... +def minimum_clearance_line(geometry: Point, **kwargs: Unpack[UFuncKwargs]) -> Point: ... @overload -def minimum_clearance_line(geometry: LineString | Polygon | BaseMultipartGeometry, **kwargs) -> Polygon: ... +def minimum_clearance_line(geometry: LineString | Polygon | BaseMultipartGeometry, **kwargs: Unpack[UFuncKwargs]) -> Polygon: ... @overload -def minimum_clearance_line(geometry: Geometry, **kwargs) -> Polygon | Point: ... +def minimum_clearance_line(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> Polygon | Point: ... @overload -def minimum_clearance_line(geometry: None, **kwargs) -> None: ... +def minimum_clearance_line(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def minimum_clearance_line(geometry: Geometry | None, **kwargs) -> Polygon | Point | None: ... +def minimum_clearance_line(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> Polygon | Point | None: ... @overload -def minimum_clearance_line(geometry: OptGeoArrayLikeSeq, **kwargs) -> GeoArray: ... - +def minimum_clearance_line(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload -def normalize(geometry: OptGeoT, **kwargs) -> OptGeoT: ... +def normalize(geometry: OptGeoT, **kwargs: Unpack[UFuncKwargs]) -> OptGeoT: ... @overload -def normalize(geometry: OptGeoArrayLikeSeq, **kwargs) -> GeoArray: ... - +def normalize(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload -def point_on_surface(geometry: Geometry, **kwargs) -> Point: ... +def point_on_surface(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> Point: ... @overload -def point_on_surface(geometry: None, **kwargs) -> None: ... +def point_on_surface(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def point_on_surface(geometry: Geometry | None, **kwargs) -> Point | None: ... +def point_on_surface(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> Point | None: ... @overload -def point_on_surface(geometry: OptGeoArrayLikeSeq, **kwargs) -> GeoArray: ... - +def point_on_surface(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload -def node(geometry: Geometry, **kwargs) -> MultiLineString: ... +def node(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> MultiLineString: ... @overload -def node(geometry: None, **kwargs) -> None: ... +def node(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def node(geometry: Geometry | None, **kwargs) -> MultiLineString | None: ... +def node(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> MultiLineString | None: ... @overload -def node(geometry: OptGeoArrayLikeSeq, **kwargs) -> GeoArray: ... - +def node(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload -def polygonize(geometries: Sequence[Geometry | None], **kwargs) -> GeometryCollection: ... +def polygonize(geometries: Sequence[Geometry | None], **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... @overload -def polygonize(geometries: Sequence[Sequence[Geometry | None]], **kwargs) -> GeoArray: ... +def polygonize(geometries: Sequence[Sequence[Geometry | None]], **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload -def polygonize(geometries: OptGeoArrayLikeSeq, **kwargs) -> GeometryCollection | GeoArray: ... - +def polygonize(geometries: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection | GeoArray: ... @overload def polygonize_full( - geometries: Sequence[Geometry | None], **kwargs + geometries: Sequence[Geometry | None], **kwargs: Unpack[UFuncKwargs] ) -> tuple[GeometryCollection, GeometryCollection, GeometryCollection, GeometryCollection]: ... @overload def polygonize_full( - geometries: Sequence[Sequence[Geometry | None]], **kwargs + geometries: Sequence[Sequence[Geometry | None]], **kwargs: Unpack[UFuncKwargs] ) -> tuple[GeoArray, GeoArray, GeoArray, GeoArray]: ... @overload def polygonize_full( - geometries: OptGeoArrayLikeSeq, **kwargs + geometries: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs] ) -> ( tuple[GeometryCollection, GeometryCollection, GeometryCollection, GeometryCollection] | tuple[GeoArray, GeoArray, GeoArray, GeoArray] ): ... - @overload -def remove_repeated_points(geometry: OptGeoT, tolerance: float = 0.0, **kwargs) -> OptGeoT: ... +def remove_repeated_points(geometry: OptGeoT, tolerance: float = 0.0, **kwargs: Unpack[UFuncKwargs]) -> OptGeoT: ... @overload -def remove_repeated_points(geometry: OptGeoArrayLikeSeq, tolerance: float = 0.0, **kwargs) -> GeoArray: ... - +def remove_repeated_points(geometry: OptGeoArrayLikeSeq, tolerance: float = 0.0, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload -def reverse(geometry: OptGeoT, **kwargs) -> OptGeoT: ... +def reverse(geometry: OptGeoT, **kwargs: Unpack[UFuncKwargs]) -> OptGeoT: ... @overload -def reverse(geometry: OptGeoArrayLikeSeq, **kwargs) -> GeoArray: ... - +def reverse(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload -def segmentize(geometry: OptGeoT, max_segment_length: float, **kwargs) -> OptGeoT: ... +def segmentize(geometry: OptGeoT, max_segment_length: float, **kwargs: Unpack[UFuncKwargs]) -> OptGeoT: ... @overload -def segmentize(geometry: OptGeoArrayLike, max_segment_length: ArrayLikeSeq[float], **kwargs) -> GeoArray: ... +def segmentize(geometry: OptGeoArrayLike, max_segment_length: ArrayLikeSeq[float], **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload -def segmentize(geometry: OptGeoArrayLikeSeq, max_segment_length: ArrayLike[float], **kwargs) -> GeoArray: ... - +def segmentize(geometry: OptGeoArrayLikeSeq, max_segment_length: ArrayLike[float], **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload -def simplify(geometry: OptGeoT, tolerance: float, preserve_topology: bool = True, **kwargs) -> OptGeoT: ... +def simplify(geometry: OptGeoT, tolerance: float, preserve_topology: bool = True, **kwargs: Unpack[UFuncKwargs]) -> OptGeoT: ... @overload -def simplify(geometry: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], preserve_topology: bool = True, **kwargs) -> GeoArray: ... +def simplify( + geometry: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], preserve_topology: bool = True, **kwargs: Unpack[UFuncKwargs] +) -> GeoArray: ... @overload -def simplify(geometry: OptGeoArrayLikeSeq, tolerance: ArrayLike[float], preserve_topology: bool = True, **kwargs) -> GeoArray: ... - +def simplify( + geometry: OptGeoArrayLikeSeq, tolerance: ArrayLike[float], preserve_topology: bool = True, **kwargs: Unpack[UFuncKwargs] +) -> GeoArray: ... @overload -def snap(geometry: OptGeoT, reference: Geometry, tolerance: float, **kwargs) -> OptGeoT: ... +def snap(geometry: OptGeoT, reference: Geometry, tolerance: float, **kwargs: Unpack[UFuncKwargs]) -> OptGeoT: ... @overload -def snap(geometry: Geometry | None, reference: None, tolerance: float, **kwargs) -> None: ... +def snap(geometry: Geometry | None, reference: None, tolerance: float, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def snap(geometry: OptGeoArrayLikeSeq, reference: OptGeoArrayLike, tolerance: ArrayLike[float], **kwargs) -> GeoArray: ... +def snap( + geometry: OptGeoArrayLikeSeq, reference: OptGeoArrayLike, tolerance: ArrayLike[float], **kwargs: Unpack[UFuncKwargs] +) -> GeoArray: ... @overload -def snap(geometry: OptGeoArrayLike, reference: OptGeoArrayLikeSeq, tolerance: ArrayLike[float], **kwargs) -> GeoArray: ... +def snap( + geometry: OptGeoArrayLike, reference: OptGeoArrayLikeSeq, tolerance: ArrayLike[float], **kwargs: Unpack[UFuncKwargs] +) -> GeoArray: ... @overload -def snap(geometry: OptGeoArrayLike, reference: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], **kwargs) -> GeoArray: ... - +def snap( + geometry: OptGeoArrayLike, reference: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], **kwargs: Unpack[UFuncKwargs] +) -> GeoArray: ... @overload def voronoi_polygons( geometry: Geometry, @@ -409,11 +435,16 @@ def voronoi_polygons( extend_to: Geometry | None = None, only_edges: Literal[False] = False, ordered: bool = False, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> GeometryCollection[Polygon]: ... @overload def voronoi_polygons( - geometry: Geometry, tolerance: float, extend_to: Geometry | None, only_edges: Literal[True], ordered: bool = False, **kwargs + geometry: Geometry, + tolerance: float, + extend_to: Geometry | None, + only_edges: Literal[True], + ordered: bool = False, + **kwargs: Unpack[UFuncKwargs], ) -> LineString | MultiLineString: ... @overload def voronoi_polygons( @@ -423,7 +454,7 @@ def voronoi_polygons( *, only_edges: Literal[True], ordered: bool = False, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> LineString | MultiLineString: ... @overload def voronoi_polygons( @@ -432,7 +463,7 @@ def voronoi_polygons( extend_to: Geometry | None = None, only_edges: bool = False, ordered: bool = False, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> GeometryCollection[Polygon] | LineString | MultiLineString: ... @overload def voronoi_polygons( @@ -441,7 +472,7 @@ def voronoi_polygons( extend_to: Geometry | None = None, only_edges: bool = False, ordered: bool = False, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> None: ... @overload def voronoi_polygons( @@ -450,7 +481,7 @@ def voronoi_polygons( extend_to: Geometry | None = None, only_edges: bool = False, ordered: bool = False, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> GeometryCollection[Polygon] | LineString | MultiLineString | None: ... @overload # `geometry` as sequence-like def voronoi_polygons( @@ -459,7 +490,7 @@ def voronoi_polygons( extend_to: OptGeoArrayLike = None, only_edges: ArrayLike[bool] = False, ordered: ArrayLike[bool] = False, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... @overload # `tolerance` as sequence-like def voronoi_polygons( @@ -468,7 +499,7 @@ def voronoi_polygons( extend_to: OptGeoArrayLike = None, only_edges: ArrayLike[bool] = False, ordered: ArrayLike[bool] = False, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... @overload def voronoi_polygons( # `extend_to` as positional sequence-like @@ -477,7 +508,7 @@ def voronoi_polygons( # `extend_to` as positional sequence-like extend_to: OptGeoArrayLikeSeq, only_edges: ArrayLike[bool] = False, ordered: ArrayLike[bool] = False, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... @overload # `extend_to` as keyword sequence-like def voronoi_polygons( @@ -487,7 +518,7 @@ def voronoi_polygons( extend_to: OptGeoArrayLikeSeq, only_edges: ArrayLike[bool] = False, ordered: ArrayLike[bool] = False, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... @overload def voronoi_polygons( # `only_edges` as positional sequence-like @@ -496,7 +527,7 @@ def voronoi_polygons( # `only_edges` as positional sequence-like extend_to: OptGeoArrayLike, only_edges: ArrayLikeSeq[bool], ordered: ArrayLike[bool] = False, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... @overload def voronoi_polygons( # `only_edges` as keyword sequence-like @@ -506,7 +537,7 @@ def voronoi_polygons( # `only_edges` as keyword sequence-like *, only_edges: ArrayLikeSeq[bool], ordered: ArrayLike[bool] = False, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... @overload # `ordered` as positional sequence-like def voronoi_polygons( @@ -515,7 +546,7 @@ def voronoi_polygons( extend_to: OptGeoArrayLike, only_edges: ArrayLike[bool], ordered: ArrayLikeSeq[bool], - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... @overload # `ordered` as keyword sequence-like def voronoi_polygons( @@ -525,49 +556,52 @@ def voronoi_polygons( *, only_edges: ArrayLike[bool] = False, ordered: ArrayLikeSeq[bool], - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... - @overload -def oriented_envelope(geometry: Point, **kwargs) -> Point: ... +def oriented_envelope(geometry: Point, **kwargs: Unpack[UFuncKwargs]) -> Point: ... @overload -def oriented_envelope(geometry: Geometry, **kwargs) -> BaseGeometry: ... +def oriented_envelope(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry: ... @overload -def oriented_envelope(geometry: None, **kwargs) -> None: ... +def oriented_envelope(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def oriented_envelope(geometry: Geometry | None, **kwargs) -> BaseGeometry | None: ... +def oriented_envelope(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry | None: ... @overload -def oriented_envelope(geometry: OptGeoArrayLikeSeq, **kwargs) -> GeoArray: ... +def oriented_envelope(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... minimum_rotated_rectangle = oriented_envelope @overload -def minimum_bounding_circle(geometry: Point, **kwargs) -> Point: ... +def minimum_bounding_circle(geometry: Point, **kwargs: Unpack[UFuncKwargs]) -> Point: ... @overload -def minimum_bounding_circle(geometry: LineString | Polygon | BaseMultipartGeometry, **kwargs) -> Polygon: ... +def minimum_bounding_circle(geometry: LineString | Polygon | BaseMultipartGeometry, **kwargs: Unpack[UFuncKwargs]) -> Polygon: ... @overload -def minimum_bounding_circle(geometry: Geometry, **kwargs) -> Polygon | Point: ... +def minimum_bounding_circle(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> Polygon | Point: ... @overload -def minimum_bounding_circle(geometry: None, **kwargs) -> None: ... +def minimum_bounding_circle(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def minimum_bounding_circle(geometry: Geometry | None, **kwargs) -> Polygon | Point | None: ... +def minimum_bounding_circle(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> Polygon | Point | None: ... @overload -def minimum_bounding_circle(geometry: OptGeoArrayLikeSeq, **kwargs) -> GeoArray: ... - +def minimum_bounding_circle(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload -def maximum_inscribed_circle(geometry: Polygon | MultiPolygon, tolerance: float | None = None, **kwargs) -> LineString: ... +def maximum_inscribed_circle( + geometry: Polygon | MultiPolygon, tolerance: float | None = None, **kwargs: Unpack[UFuncKwargs] +) -> LineString: ... @overload -def maximum_inscribed_circle(geometry: None, tolerance: float | None = None, **kwargs) -> None: ... +def maximum_inscribed_circle(geometry: None, tolerance: float | None = None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload def maximum_inscribed_circle( - geometry: Polygon | MultiPolygon | None, tolerance: float | None = None, **kwargs + geometry: Polygon | MultiPolygon | None, tolerance: float | None = None, **kwargs: Unpack[UFuncKwargs] ) -> LineString | None: ... @overload -def maximum_inscribed_circle(geometry: OptGeoArrayLikeSeq, tolerance: ArrayLike[float] | None = None, **kwargs) -> GeoArray: ... +def maximum_inscribed_circle( + geometry: OptGeoArrayLikeSeq, tolerance: ArrayLike[float] | None = None, **kwargs: Unpack[UFuncKwargs] +) -> GeoArray: ... @overload -def maximum_inscribed_circle(geometry: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], **kwargs) -> GeoArray: ... - +def maximum_inscribed_circle( + geometry: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], **kwargs: Unpack[UFuncKwargs] +) -> GeoArray: ... @overload -def orient_polygons(geometry: OptGeoT, *, exterior_cw: bool = False, **kwargs) -> OptGeoT: ... +def orient_polygons(geometry: OptGeoT, *, exterior_cw: bool = False, **kwargs: Unpack[UFuncKwargs]) -> OptGeoT: ... @overload -def orient_polygons(geometry: OptGeoArrayLikeSeq, *, exterior_cw: bool = False, **kwargs) -> GeoArray: ... +def orient_polygons(geometry: OptGeoArrayLikeSeq, *, exterior_cw: bool = False, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... diff --git a/stubs/shapely/shapely/creation.pyi b/stubs/shapely/shapely/creation.pyi index d9631df85d80..e575edf5e87e 100644 --- a/stubs/shapely/shapely/creation.pyi +++ b/stubs/shapely/shapely/creation.pyi @@ -1,12 +1,12 @@ from collections.abc import Sequence -from typing import Literal, SupportsIndex, TypeAlias, overload +from typing import Literal, SupportsIndex, TypeAlias, Unpack, overload import numpy as np from numpy.typing import NDArray from ._enum import ParamEnum from ._geometry import GeometryType -from ._typing import ArrayLike, ArrayLikeSeq, GeoArray, OptGeoArrayLike, OptGeoArrayLikeSeq +from ._typing import ArrayLike, ArrayLikeSeq, GeoArray, OptGeoArrayLike, OptGeoArrayLikeSeq, UFuncKwargsNoOut from .geometry import GeometryCollection, LinearRing, LineString, MultiLineString, MultiPoint, MultiPolygon, Point, Polygon from .lib import Geometry @@ -41,7 +41,7 @@ def points( *, handle_nan: _HandleNaN = ..., out: None = None, - **kwargs, # acts as x + **kwargs: Unpack[UFuncKwargsNoOut], # acts as x ) -> Point: ... @overload def points( @@ -52,7 +52,7 @@ def points( *, handle_nan: _HandleNaN = ..., out: None = None, - **kwargs, # acts as x, y[, z] + **kwargs: Unpack[UFuncKwargsNoOut], # acts as x, y[, z] ) -> Point: ... @overload def points( @@ -63,7 +63,7 @@ def points( *, handle_nan: _HandleNaN = ..., out: NDArray[np.object_] | None = None, - **kwargs, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> GeoArray: ... @overload def points( @@ -74,7 +74,7 @@ def points( *, handle_nan: _HandleNaN = ..., out: NDArray[np.object_] | None = None, - **kwargs, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> GeoArray: ... @overload def points( @@ -85,7 +85,7 @@ def points( *, handle_nan: _HandleNaN = ..., out: NDArray[np.object_] | None = None, - **kwargs, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> Point | GeoArray: ... @overload def points( @@ -96,9 +96,8 @@ def points( *, handle_nan: _HandleNaN = ..., out: NDArray[np.object_] | None = None, - **kwargs, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> Point | GeoArray: ... - @overload def linestrings( coords: Sequence[float], # acts as (x1, x2, ...) @@ -108,7 +107,7 @@ def linestrings( *, handle_nan: _HandleNaN = ..., out: None = None, - **kwargs, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> LineString: ... @overload def linestrings( @@ -119,7 +118,7 @@ def linestrings( *, handle_nan: _HandleNaN = ..., out: None = None, - **kwargs, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> LineString: ... @overload def linestrings( @@ -130,7 +129,7 @@ def linestrings( *, handle_nan: _HandleNaN = ..., out: NDArray[np.object_] | None = None, - **kwargs, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> GeoArray: ... @overload def linestrings( @@ -141,9 +140,8 @@ def linestrings( *, handle_nan: _HandleNaN = ..., out: NDArray[np.object_] | None = None, - **kwargs, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> LineString | GeoArray: ... - @overload def linearrings( coords: Sequence[float], # acts as (x1, x2, ...) @@ -153,7 +151,7 @@ def linearrings( *, handle_nan: _HandleNaN = ..., out: None = None, - **kwargs, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> LinearRing: ... @overload def linearrings( @@ -164,7 +162,7 @@ def linearrings( *, handle_nan: _HandleNaN = ..., out: None = None, - **kwargs, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> LinearRing: ... @overload def linearrings( @@ -175,7 +173,7 @@ def linearrings( *, handle_nan: _HandleNaN = ..., out: NDArray[np.object_] | None = None, - **kwargs, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> GeoArray: ... @overload def linearrings( @@ -186,9 +184,8 @@ def linearrings( *, handle_nan: _HandleNaN = ..., out: NDArray[np.object_] | None = None, - **kwargs, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> LinearRing | GeoArray: ... - @overload def polygons( geometries: LinearRing | Sequence[Sequence[float]] | None, @@ -196,7 +193,7 @@ def polygons( indices: None = None, *, out: None = None, - **kwargs, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> Polygon: ... @overload def polygons( @@ -205,7 +202,7 @@ def polygons( indices: ArrayLikeSeq[int] | None = None, *, out: NDArray[np.object_] | None = None, - **kwargs, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> GeoArray: ... @overload def polygons( @@ -214,11 +211,10 @@ def polygons( indices: ArrayLikeSeq[int] | None = None, *, out: NDArray[np.object_] | None = None, - **kwargs, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> Polygon | GeoArray: ... - @overload -def box(xmin: float, ymin: float, xmax: float, ymax: float, ccw: bool = True, **kwargs) -> Polygon: ... +def box(xmin: float, ymin: float, xmax: float, ymax: float, ccw: bool = True, **kwargs: Unpack[UFuncKwargsNoOut]) -> Polygon: ... @overload def box( xmin: ArrayLikeSeq[float], @@ -226,12 +222,15 @@ def box( xmax: ArrayLikeSeq[float], ymax: ArrayLikeSeq[float], ccw: bool = True, - **kwargs, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> GeoArray: ... - @overload def multipoints( - geometries: Sequence[Point | Sequence[float] | None], indices: None = None, *, out: None = None, **kwargs + geometries: Sequence[Point | Sequence[float] | None], + indices: None = None, + *, + out: None = None, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> MultiPoint: ... @overload def multipoints( @@ -239,16 +238,23 @@ def multipoints( indices: ArrayLikeSeq[int] | None = None, *, out: NDArray[np.object_] | None = None, - **kwargs, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> GeoArray: ... @overload def multipoints( - geometries: OptGeoArrayLikeSeq, indices: ArrayLikeSeq[int] | None = None, *, out: NDArray[np.object_] | None = None, **kwargs + geometries: OptGeoArrayLikeSeq, + indices: ArrayLikeSeq[int] | None = None, + *, + out: NDArray[np.object_] | None = None, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> MultiPoint | GeoArray: ... - @overload def multilinestrings( - geometries: Sequence[LineString | Sequence[Sequence[float]] | None], indices: None = None, *, out: None = None, **kwargs + geometries: Sequence[LineString | Sequence[Sequence[float]] | None], + indices: None = None, + *, + out: None = None, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> MultiLineString: ... @overload def multilinestrings( @@ -256,16 +262,23 @@ def multilinestrings( indices: ArrayLikeSeq[int] | None = None, *, out: NDArray[np.object_] | None = None, - **kwargs, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> GeoArray: ... @overload def multilinestrings( - geometries: OptGeoArrayLikeSeq, indices: ArrayLikeSeq[int] | None = None, *, out: NDArray[np.object_] | None = None, **kwargs + geometries: OptGeoArrayLikeSeq, + indices: ArrayLikeSeq[int] | None = None, + *, + out: NDArray[np.object_] | None = None, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> MultiLineString | GeoArray: ... - @overload def multipolygons( - geometries: Sequence[Polygon | Sequence[Sequence[float]] | None], indices: None = None, *, out: None = None, **kwargs + geometries: Sequence[Polygon | Sequence[Sequence[float]] | None], + indices: None = None, + *, + out: None = None, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> MultiPolygon: ... @overload def multipolygons( @@ -273,31 +286,36 @@ def multipolygons( indices: ArrayLikeSeq[int] | None = None, *, out: NDArray[np.object_] | None = None, - **kwargs, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> GeoArray: ... @overload def multipolygons( - geometries: OptGeoArrayLikeSeq, indices: ArrayLikeSeq[int] | None = None, *, out: NDArray[np.object_] | None = None, **kwargs + geometries: OptGeoArrayLikeSeq, + indices: ArrayLikeSeq[int] | None = None, + *, + out: NDArray[np.object_] | None = None, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> MultiPolygon | GeoArray: ... - @overload def geometrycollections( - geometries: Sequence[Geometry | None], indices: None = None, out: None = None, **kwargs + geometries: Sequence[Geometry | None], indices: None = None, out: None = None, **kwargs: Unpack[UFuncKwargsNoOut] ) -> GeometryCollection: ... @overload def geometrycollections( geometries: Sequence[Sequence[Geometry | None]], indices: ArrayLikeSeq[int] | None = None, out: NDArray[np.object_] | None = None, - **kwargs, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> GeoArray: ... @overload def geometrycollections( - geometries: OptGeoArrayLikeSeq, indices: ArrayLikeSeq[int] | None = None, out: NDArray[np.object_] | None = None, **kwargs + geometries: OptGeoArrayLikeSeq, + indices: ArrayLikeSeq[int] | None = None, + out: NDArray[np.object_] | None = None, + **kwargs: Unpack[UFuncKwargsNoOut], ) -> GeometryCollection | GeoArray: ... - -def prepare(geometry: OptGeoArrayLike, **kwargs) -> None: ... -def destroy_prepared(geometry: OptGeoArrayLike, **kwargs) -> None: ... +def prepare(geometry: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargsNoOut]) -> None: ... +def destroy_prepared(geometry: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargsNoOut]) -> None: ... 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/io.pyi b/stubs/shapely/shapely/io.pyi index 871967fa8fc0..1b06299f3f86 100644 --- a/stubs/shapely/shapely/io.pyi +++ b/stubs/shapely/shapely/io.pyi @@ -1,12 +1,12 @@ from _typeshed import Incomplete -from typing import Literal, TypeAlias, overload +from typing import Literal, TypeAlias, Unpack, overload import numpy as np from numpy.typing import NDArray from ._enum import ParamEnum from ._ragged_array import from_ragged_array as from_ragged_array, to_ragged_array as to_ragged_array -from ._typing import ArrayLikeSeq, GeoArray, OptGeoArrayLikeSeq +from ._typing import ArrayLikeSeq, GeoArray, OptGeoArrayLikeSeq, UFuncKwargs from .geometry.base import BaseGeometry from .lib import Geometry @@ -30,7 +30,7 @@ def to_wkt( trim: bool = True, output_dimension: _OutputDimension | None = None, old_3d: bool = False, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> None: ... @overload def to_wkt( @@ -39,7 +39,7 @@ def to_wkt( trim: bool = True, output_dimension: _OutputDimension | None = None, old_3d: bool = False, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> str: ... @overload def to_wkt( @@ -48,9 +48,8 @@ def to_wkt( trim: bool = True, output_dimension: _OutputDimension | None = None, old_3d: bool = False, - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> NDArray[np.str_]: ... - @overload def to_wkb( geometry: None, @@ -59,7 +58,7 @@ def to_wkb( byte_order: int = -1, include_srid: bool = False, flavor: Literal["iso", "extended"] = "extended", - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> None: ... @overload def to_wkb( @@ -69,7 +68,7 @@ def to_wkb( byte_order: int = -1, include_srid: bool = False, flavor: Literal["iso", "extended"] = "extended", - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> bytes: ... @overload def to_wkb( @@ -79,7 +78,7 @@ def to_wkb( byte_order: int = -1, include_srid: bool = False, flavor: Literal["iso", "extended"] = "extended", - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> str: ... @overload def to_wkb( @@ -89,7 +88,7 @@ def to_wkb( byte_order: int = -1, include_srid: bool = False, flavor: Literal["iso", "extended"] = "extended", - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> bytes | str: ... @overload def to_wkb( @@ -99,7 +98,7 @@ def to_wkb( byte_order: int = -1, include_srid: bool = False, flavor: Literal["iso", "extended"] = "extended", - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> NDArray[np.bytes_]: ... @overload def to_wkb( @@ -109,7 +108,7 @@ def to_wkb( byte_order: int = -1, include_srid: bool = False, flavor: Literal["iso", "extended"] = "extended", - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> NDArray[np.str_]: ... @overload def to_wkb( @@ -119,43 +118,53 @@ def to_wkb( byte_order: int = -1, include_srid: bool = False, flavor: Literal["iso", "extended"] = "extended", - **kwargs, + **kwargs: Unpack[UFuncKwargs], ) -> NDArray[np.bytes_] | NDArray[np.str_]: ... - @overload -def to_geojson(geometry: None, indent: int | None = None, **kwargs) -> None: ... +def to_geojson(geometry: None, indent: int | None = None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def to_geojson(geometry: Geometry, indent: int | None = None, **kwargs) -> str: ... +def to_geojson(geometry: Geometry, indent: int | None = None, **kwargs: Unpack[UFuncKwargs]) -> str: ... @overload -def to_geojson(geometry: OptGeoArrayLikeSeq, indent: int | None = None, **kwargs) -> NDArray[np.str_]: ... - +def to_geojson(geometry: OptGeoArrayLikeSeq, indent: int | None = None, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.str_]: ... @overload -def from_wkt(geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs) -> None: ... +def from_wkt( + geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs: Unpack[UFuncKwargs] +) -> None: ... @overload -def from_wkt(geometry: str, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs) -> BaseGeometry: ... # type: ignore[overload-overlap] +def from_wkt( + geometry: str, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs: Unpack[UFuncKwargs] +) -> BaseGeometry: ... # type: ignore[overload-overlap] @overload def from_wkt( - geometry: ArrayLikeSeq[str | None], on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs + geometry: ArrayLikeSeq[str | None], + on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", + **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... - @overload -def from_wkb(geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs) -> None: ... +def from_wkb( + geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs: Unpack[UFuncKwargs] +) -> None: ... @overload def from_wkb( - geometry: str | bytes, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs + geometry: str | bytes, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs: Unpack[UFuncKwargs] ) -> BaseGeometry: ... # type: ignore[overload-overlap] @overload def from_wkb( - geometry: ArrayLikeSeq[str | bytes | None], on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs + geometry: ArrayLikeSeq[str | bytes | None], + on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", + **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... - @overload -def from_geojson(geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs) -> None: ... +def from_geojson( + geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs: Unpack[UFuncKwargs] +) -> None: ... @overload def from_geojson( - geometry: str | bytes, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs + geometry: str | bytes, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs: Unpack[UFuncKwargs] ) -> BaseGeometry: ... # type: ignore[overload-overlap] @overload def from_geojson( - geometry: ArrayLikeSeq[str | bytes | None], on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs + geometry: ArrayLikeSeq[str | bytes | None], + on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", + **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... diff --git a/stubs/shapely/shapely/predicates.pyi b/stubs/shapely/shapely/predicates.pyi index 85790e546d9f..dce25fed1b72 100644 --- a/stubs/shapely/shapely/predicates.pyi +++ b/stubs/shapely/shapely/predicates.pyi @@ -1,9 +1,9 @@ -from typing import Any, Literal, TypeGuard, overload +from typing import Any, Literal, TypeGuard, Unpack, overload import numpy as np from numpy.typing import NDArray -from ._typing import ArrayLike, ArrayLikeSeq, OptGeoArrayLike, OptGeoArrayLikeSeq +from ._typing import ArrayLike, ArrayLikeSeq, OptGeoArrayLike, OptGeoArrayLikeSeq, UFuncKwargs from .geometry.base import BaseGeometry from .lib import Geometry @@ -42,226 +42,231 @@ __all__ = [ ] @overload -def has_z(geometry: Geometry | None, **kwargs) -> np.bool_: ... +def has_z(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def has_z(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def has_z(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def has_m(geometry: Geometry | None, **kwargs) -> np.bool_: ... +def has_m(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def has_m(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def has_m(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def is_ccw(geometry: Geometry | None, **kwargs) -> np.bool_: ... +def is_ccw(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def is_ccw(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def is_ccw(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def is_closed(geometry: Geometry | None, **kwargs) -> np.bool_: ... +def is_closed(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def is_closed(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def is_closed(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def is_empty(geometry: Geometry | None, **kwargs) -> np.bool_: ... +def is_empty(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def is_empty(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def is_empty(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def is_geometry(geometry: Geometry, **kwargs) -> np.bool_[Literal[True]]: ... +def is_geometry(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> np.bool_[Literal[True]]: ... @overload -def is_geometry(geometry: None, **kwargs) -> np.bool_[Literal[False]]: ... +def is_geometry(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_[Literal[False]]: ... @overload -def is_geometry(geometry: ArrayLikeSeq[Any], **kwargs) -> NDArray[np.bool_]: ... # type: ignore[overload-overlap] +def is_geometry(geometry: ArrayLikeSeq[Any], **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... # type: ignore[overload-overlap] @overload -def is_geometry(geometry: object, **kwargs) -> TypeGuard[BaseGeometry]: ... - +def is_geometry(geometry: object, **kwargs: Unpack[UFuncKwargs]) -> TypeGuard[BaseGeometry]: ... @overload -def is_missing(geometry: Geometry, **kwargs) -> np.bool_[Literal[False]]: ... +def is_missing(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> np.bool_[Literal[False]]: ... @overload -def is_missing(geometry: None, **kwargs) -> np.bool_[Literal[True]]: ... +def is_missing(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_[Literal[True]]: ... @overload -def is_missing(geometry: ArrayLikeSeq[Any], **kwargs) -> NDArray[np.bool_]: ... # type: ignore[overload-overlap] +def is_missing(geometry: ArrayLikeSeq[Any], **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... # type: ignore[overload-overlap] @overload -def is_missing(geometry: object, **kwargs) -> TypeGuard[None]: ... - +def is_missing(geometry: object, **kwargs: Unpack[UFuncKwargs]) -> TypeGuard[None]: ... @overload -def is_prepared(geometry: Geometry | None, **kwargs) -> np.bool_: ... +def is_prepared(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def is_prepared(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def is_prepared(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def is_valid_input(geometry: Geometry | None, **kwargs) -> np.bool_[Literal[True]]: ... +def is_valid_input(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_[Literal[True]]: ... @overload -def is_valid_input(geometry: ArrayLikeSeq[Any], **kwargs) -> NDArray[np.bool_]: ... # type: ignore[overload-overlap] +def is_valid_input(geometry: ArrayLikeSeq[Any], **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... # type: ignore[overload-overlap] @overload -def is_valid_input(geometry: object, **kwargs) -> TypeGuard[BaseGeometry | None]: ... - +def is_valid_input(geometry: object, **kwargs: Unpack[UFuncKwargs]) -> TypeGuard[BaseGeometry | None]: ... @overload -def is_ring(geometry: Geometry | None, **kwargs) -> np.bool_: ... +def is_ring(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def is_ring(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def is_ring(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def is_simple(geometry: Geometry | None, **kwargs) -> np.bool_: ... +def is_simple(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def is_simple(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def is_simple(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def is_valid(geometry: Geometry | None, **kwargs) -> np.bool_: ... +def is_valid(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def is_valid(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def is_valid(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def is_valid_reason(geometry: None, **kwargs) -> None: ... +def is_valid_reason(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def is_valid_reason(geometry: Geometry, **kwargs) -> str: ... +def is_valid_reason(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> str: ... @overload -def is_valid_reason(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.object_]: ... - +def is_valid_reason(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.object_]: ... @overload -def crosses(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ... +def crosses(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def crosses(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ... +def crosses(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def crosses(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def crosses(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def contains(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ... +def contains(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def contains(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ... +def contains(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def contains(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def contains(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def contains_properly(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ... +def contains_properly(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def contains_properly(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ... +def contains_properly(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def contains_properly(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def contains_properly(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def covered_by(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ... +def covered_by(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def covered_by(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ... +def covered_by(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def covered_by(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def covered_by(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def covers(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ... +def covers(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def covers(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ... +def covers(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def covers(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def covers(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def disjoint(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ... +def disjoint(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def disjoint(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ... +def disjoint(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def disjoint(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def disjoint(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def equals(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ... +def equals(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def equals(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ... +def equals(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def equals(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def equals(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def intersects(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ... +def intersects(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def intersects(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ... +def intersects(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def intersects(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def intersects(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def overlaps(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ... +def overlaps(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def overlaps(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ... +def overlaps(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def overlaps(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def overlaps(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def touches(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ... +def touches(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def touches(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ... +def touches(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def touches(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def touches(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def within(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ... +def within(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def within(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ... +def within(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def within(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def within(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload def equals_exact( - a: Geometry | None, b: Geometry | None, tolerance: float = 0.0, *, normalize: bool = False, **kwargs + a: Geometry | None, b: Geometry | None, tolerance: float = 0.0, *, normalize: bool = False, **kwargs: Unpack[UFuncKwargs] ) -> np.bool_: ... @overload def equals_exact( - a: OptGeoArrayLike, b: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], *, normalize: bool = False, **kwargs + a: OptGeoArrayLike, + b: OptGeoArrayLike, + tolerance: ArrayLikeSeq[float], + *, + normalize: bool = False, + **kwargs: Unpack[UFuncKwargs], ) -> NDArray[np.bool_]: ... @overload def equals_exact( - a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, tolerance: ArrayLike[float] = 0.0, *, normalize: bool = False, **kwargs + a: OptGeoArrayLikeSeq, + b: OptGeoArrayLike, + tolerance: ArrayLike[float] = 0.0, + *, + normalize: bool = False, + **kwargs: Unpack[UFuncKwargs], ) -> NDArray[np.bool_]: ... @overload def equals_exact( - a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, tolerance: ArrayLike[float] = 0.0, *, normalize: bool = False, **kwargs + a: OptGeoArrayLike, + b: OptGeoArrayLikeSeq, + tolerance: ArrayLike[float] = 0.0, + *, + normalize: bool = False, + **kwargs: Unpack[UFuncKwargs], ) -> NDArray[np.bool_]: ... - @overload -def equals_identical(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ... +def equals_identical(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def equals_identical(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ... +def equals_identical(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def equals_identical(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... - +def equals_identical(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def relate(a: Geometry | None, b: None, **kwargs) -> None: ... +def relate(a: Geometry | None, b: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def relate(a: None, b: Geometry | None, **kwargs) -> None: ... +def relate(a: None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def relate(a: Geometry, b: Geometry, **kwargs) -> str: ... +def relate(a: Geometry, b: Geometry, **kwargs: Unpack[UFuncKwargs]) -> str: ... @overload -def relate(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.object_]: ... +def relate(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.object_]: ... @overload -def relate(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.object_]: ... - +def relate(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.object_]: ... @overload -def relate_pattern(a: Geometry | None, b: Geometry | None, pattern: str, **kwargs) -> np.bool_: ... +def relate_pattern(a: Geometry | None, b: Geometry | None, pattern: str, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def relate_pattern(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, pattern: str, **kwargs) -> NDArray[np.bool_]: ... +def relate_pattern( + a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, pattern: str, **kwargs: Unpack[UFuncKwargs] +) -> NDArray[np.bool_]: ... @overload -def relate_pattern(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, pattern: str, **kwargs) -> NDArray[np.bool_]: ... - +def relate_pattern( + a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, pattern: str, **kwargs: Unpack[UFuncKwargs] +) -> NDArray[np.bool_]: ... @overload -def dwithin(a: Geometry | None, b: Geometry | None, distance: float, **kwargs) -> np.bool_: ... +def dwithin(a: Geometry | None, b: Geometry | None, distance: float, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def dwithin(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, distance: float, **kwargs) -> NDArray[np.bool_]: ... +def dwithin(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, distance: float, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def dwithin(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, distance: float, **kwargs) -> NDArray[np.bool_]: ... - +def dwithin(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, distance: float, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def contains_xy(geom: Geometry | None, x: float, y: float, **kwargs) -> np.bool_: ... +def contains_xy(geom: Geometry | None, x: float, y: float, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def contains_xy(geom: OptGeoArrayLike, x: ArrayLikeSeq[float], y: None = None, **kwargs) -> NDArray[np.bool_]: ... +def contains_xy( + geom: OptGeoArrayLike, x: ArrayLikeSeq[float], y: None = None, **kwargs: Unpack[UFuncKwargs] +) -> NDArray[np.bool_]: ... @overload -def contains_xy(geom: Geometry | None, x: ArrayLike[float], y: ArrayLikeSeq[float], **kwargs) -> NDArray[np.bool_]: ... +def contains_xy( + geom: Geometry | None, x: ArrayLike[float], y: ArrayLikeSeq[float], **kwargs: Unpack[UFuncKwargs] +) -> NDArray[np.bool_]: ... @overload -def contains_xy(geom: Geometry | None, x: ArrayLikeSeq[float], y: ArrayLike[float], **kwargs) -> NDArray[np.bool_]: ... +def contains_xy( + geom: Geometry | None, x: ArrayLikeSeq[float], y: ArrayLike[float], **kwargs: Unpack[UFuncKwargs] +) -> NDArray[np.bool_]: ... @overload -def contains_xy(geom: OptGeoArrayLikeSeq, x: ArrayLike[float], y: ArrayLike[float], **kwargs) -> NDArray[np.bool_]: ... - +def contains_xy( + geom: OptGeoArrayLikeSeq, x: ArrayLike[float], y: ArrayLike[float], **kwargs: Unpack[UFuncKwargs] +) -> NDArray[np.bool_]: ... @overload -def intersects_xy(geom: Geometry | None, x: float, y: float, **kwargs) -> np.bool_: ... +def intersects_xy(geom: Geometry | None, x: float, y: float, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload -def intersects_xy(geom: OptGeoArrayLike, x: ArrayLikeSeq[float], y: None = None, **kwargs) -> NDArray[np.bool_]: ... +def intersects_xy( + geom: OptGeoArrayLike, x: ArrayLikeSeq[float], y: None = None, **kwargs: Unpack[UFuncKwargs] +) -> NDArray[np.bool_]: ... @overload -def intersects_xy(geom: Geometry | None, x: ArrayLike[float], y: ArrayLikeSeq[float], **kwargs) -> NDArray[np.bool_]: ... +def intersects_xy( + geom: Geometry | None, x: ArrayLike[float], y: ArrayLikeSeq[float], **kwargs: Unpack[UFuncKwargs] +) -> NDArray[np.bool_]: ... @overload -def intersects_xy(geom: Geometry | None, x: ArrayLikeSeq[float], y: ArrayLike[float], **kwargs) -> NDArray[np.bool_]: ... +def intersects_xy( + geom: Geometry | None, x: ArrayLikeSeq[float], y: ArrayLike[float], **kwargs: Unpack[UFuncKwargs] +) -> NDArray[np.bool_]: ... @overload -def intersects_xy(geom: OptGeoArrayLikeSeq, x: ArrayLike[float], y: ArrayLike[float], **kwargs) -> NDArray[np.bool_]: ... +def intersects_xy( + geom: OptGeoArrayLikeSeq, x: ArrayLike[float], y: ArrayLike[float], **kwargs: Unpack[UFuncKwargs] +) -> NDArray[np.bool_]: ... diff --git a/stubs/shapely/shapely/set_operations.pyi b/stubs/shapely/shapely/set_operations.pyi index 7328583d2ad1..198b8dab572a 100644 --- a/stubs/shapely/shapely/set_operations.pyi +++ b/stubs/shapely/shapely/set_operations.pyi @@ -1,7 +1,7 @@ -from typing import overload +from typing import Unpack, overload from typing_extensions import deprecated -from ._typing import GeoArray, OptGeoArrayLike, OptGeoArrayLikeSeq +from ._typing import GeoArray, OptGeoArrayLike, OptGeoArrayLikeSeq, UFuncKwargs from .geometry.base import BaseGeometry from .lib import Geometry @@ -21,85 +21,108 @@ __all__ = [ ] @overload -def difference(a: Geometry, b: Geometry, grid_size: float | None = None, **kwargs) -> BaseGeometry: ... +def difference(a: Geometry, b: Geometry, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry: ... @overload -def difference(a: None, b: Geometry | None, grid_size: float | None = None, **kwargs) -> None: ... +def difference(a: None, b: Geometry | None, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def difference(a: Geometry | None, b: None, grid_size: float | None = None, **kwargs) -> None: ... +def difference(a: Geometry | None, b: None, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def difference(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, grid_size: float | None = None, **kwargs) -> GeoArray: ... +def difference( + a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs] +) -> GeoArray: ... @overload -def difference(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, grid_size: float | None = None, **kwargs) -> GeoArray: ... - +def difference( + a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs] +) -> GeoArray: ... @overload -def intersection(a: Geometry, b: Geometry, grid_size: float | None = None, **kwargs) -> BaseGeometry: ... +def intersection(a: Geometry, b: Geometry, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry: ... @overload -def intersection(a: None, b: Geometry | None, grid_size: float | None = None, **kwargs) -> None: ... +def intersection(a: None, b: Geometry | None, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def intersection(a: Geometry | None, b: None, grid_size: float | None = None, **kwargs) -> None: ... +def intersection(a: Geometry | None, b: None, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def intersection(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, grid_size: float | None = None, **kwargs) -> GeoArray: ... +def intersection( + a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs] +) -> GeoArray: ... @overload -def intersection(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, grid_size: float | None = None, **kwargs) -> GeoArray: ... - +def intersection( + a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs] +) -> GeoArray: ... @overload -def intersection_all(geometries: OptGeoArrayLike, axis: None = None, **kwargs) -> BaseGeometry: ... +def intersection_all(geometries: OptGeoArrayLike, axis: None = None, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry: ... @overload -def intersection_all(geometries: OptGeoArrayLikeSeq, axis: int, **kwargs) -> BaseGeometry | GeoArray: ... - +def intersection_all(geometries: OptGeoArrayLikeSeq, axis: int, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry | GeoArray: ... @overload -def symmetric_difference(a: Geometry, b: Geometry, grid_size: float | None = None, **kwargs) -> BaseGeometry: ... +def symmetric_difference( + a: Geometry, b: Geometry, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs] +) -> BaseGeometry: ... @overload -def symmetric_difference(a: None, b: Geometry | None, grid_size: float | None = None, **kwargs) -> None: ... +def symmetric_difference(a: None, b: Geometry | None, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def symmetric_difference(a: Geometry | None, b: None, grid_size: float | None = None, **kwargs) -> None: ... +def symmetric_difference(a: Geometry | None, b: None, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def symmetric_difference(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, grid_size: float | None = None, **kwargs) -> GeoArray: ... +def symmetric_difference( + a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs] +) -> GeoArray: ... @overload -def symmetric_difference(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, grid_size: float | None = None, **kwargs) -> GeoArray: ... - +def symmetric_difference( + a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs] +) -> GeoArray: ... @overload @deprecated("symmetric_difference_all behaves incorrectly and will be removed in a future version.") -def symmetric_difference_all(geometries: OptGeoArrayLike, axis: None = None, **kwargs) -> BaseGeometry: ... +def symmetric_difference_all(geometries: OptGeoArrayLike, axis: None = None, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry: ... @overload @deprecated("symmetric_difference_all behaves incorrectly and will be removed in a future version.") -def symmetric_difference_all(geometries: OptGeoArrayLikeSeq, axis: int, **kwargs) -> BaseGeometry | GeoArray: ... - +def symmetric_difference_all( + geometries: OptGeoArrayLikeSeq, axis: int, **kwargs: Unpack[UFuncKwargs] +) -> BaseGeometry | GeoArray: ... @overload -def union(a: Geometry, b: Geometry, grid_size: float | None = None, **kwargs) -> BaseGeometry: ... +def union(a: Geometry, b: Geometry, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry: ... @overload -def union(a: None, b: Geometry | None, grid_size: float | None = None, **kwargs) -> None: ... +def union(a: None, b: Geometry | None, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def union(a: Geometry | None, b: None, grid_size: float | None = None, **kwargs) -> None: ... +def union(a: Geometry | None, b: None, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload -def union(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, grid_size: float | None = None, **kwargs) -> GeoArray: ... +def union( + a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs] +) -> GeoArray: ... @overload -def union(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, grid_size: float | None = None, **kwargs) -> GeoArray: ... - +def union( + a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs] +) -> GeoArray: ... @overload -def union_all(geometries: OptGeoArrayLike, grid_size: float | None = None, axis: None = None, **kwargs) -> BaseGeometry: ... +def union_all( + geometries: OptGeoArrayLike, grid_size: float | None = None, axis: None = None, **kwargs: Unpack[UFuncKwargs] +) -> BaseGeometry: ... @overload def union_all( - geometries: OptGeoArrayLikeSeq, grid_size: float | None = None, *, axis: int, **kwargs + geometries: OptGeoArrayLikeSeq, grid_size: float | None = None, *, axis: int, **kwargs: Unpack[UFuncKwargs] ) -> BaseGeometry | GeoArray: ... @overload -def union_all(geometries: OptGeoArrayLikeSeq, grid_size: float | None, axis: int, **kwargs) -> BaseGeometry | GeoArray: ... +def union_all( + geometries: OptGeoArrayLikeSeq, grid_size: float | None, axis: int, **kwargs: Unpack[UFuncKwargs] +) -> BaseGeometry | GeoArray: ... unary_union = union_all @overload -def coverage_union(a: OptGeoArrayLike, b: OptGeoArrayLike, *, axis: None = None, **kwargs) -> BaseGeometry: ... +def coverage_union( + a: OptGeoArrayLike, b: OptGeoArrayLike, *, axis: None = None, **kwargs: Unpack[UFuncKwargs] +) -> BaseGeometry: ... @overload -def coverage_union(a: OptGeoArrayLike, b: OptGeoArrayLike, *, axis: int, **kwargs) -> BaseGeometry | GeoArray: ... - +def coverage_union( + a: OptGeoArrayLike, b: OptGeoArrayLike, *, axis: int, **kwargs: Unpack[UFuncKwargs] +) -> BaseGeometry | GeoArray: ... @overload -def coverage_union_all(geometries: OptGeoArrayLike, axis: None = None, **kwargs) -> BaseGeometry: ... +def coverage_union_all(geometries: OptGeoArrayLike, axis: None = None, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry: ... @overload -def coverage_union_all(geometries: OptGeoArrayLikeSeq, axis: int, **kwargs) -> BaseGeometry | GeoArray: ... - -def disjoint_subset_union(a: OptGeoArrayLike, b: OptGeoArrayLike, **kwargs) -> BaseGeometry | GeoArray: ... - +def coverage_union_all(geometries: OptGeoArrayLikeSeq, axis: int, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry | GeoArray: ... +def disjoint_subset_union(a: OptGeoArrayLike, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry | GeoArray: ... @overload -def disjoint_subset_union_all(geometries: OptGeoArrayLike, *, axis: None = None, **kwargs) -> BaseGeometry: ... +def disjoint_subset_union_all( + geometries: OptGeoArrayLike, *, axis: None = None, **kwargs: Unpack[UFuncKwargs] +) -> BaseGeometry: ... @overload -def disjoint_subset_union_all(geometries: OptGeoArrayLikeSeq, *, axis: int, **kwargs) -> BaseGeometry | GeoArray: ... +def disjoint_subset_union_all( + geometries: OptGeoArrayLikeSeq, *, axis: int, **kwargs: Unpack[UFuncKwargs] +) -> BaseGeometry | GeoArray: ... From 26dc21594ea3e165ec19d116e67bf4a7ecc36c56 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 2 Jun 2026 13:18:45 +0000 Subject: [PATCH 2/5] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stubs/shapely/shapely/constructive.pyi | 26 ++++++++++++++++++++ stubs/shapely/shapely/creation.pyi | 9 +++++++ stubs/shapely/shapely/io.pyi | 5 ++++ stubs/shapely/shapely/predicates.pyi | 30 ++++++++++++++++++++++++ stubs/shapely/shapely/set_operations.pyi | 9 +++++++ 5 files changed, 79 insertions(+) diff --git a/stubs/shapely/shapely/constructive.pyi b/stubs/shapely/shapely/constructive.pyi index 67fe61a3cadd..08278329c530 100644 --- a/stubs/shapely/shapely/constructive.pyi +++ b/stubs/shapely/shapely/constructive.pyi @@ -64,6 +64,7 @@ def boundary(geometry: GeometryCollection | None, **kwargs: Unpack[UFuncKwargs]) def boundary(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> BaseMultipartGeometry | Any: ... @overload def boundary(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... + @overload def buffer( geometry: Geometry, @@ -119,6 +120,7 @@ def buffer( single_sided: bool = False, **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... + @overload def offset_curve( geometry: Geometry, @@ -164,6 +166,7 @@ def offset_curve( mitre_limit: float = 5.0, **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... + @overload def centroid(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> Point: ... @overload @@ -172,6 +175,7 @@ def centroid(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... def centroid(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> Point | None: ... @overload def centroid(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... + @overload def clip_by_rect( geometry: Geometry, xmin: float, ymin: float, xmax: float, ymax: float, **kwargs: Unpack[UFuncKwargs] @@ -186,6 +190,7 @@ def clip_by_rect( def clip_by_rect( geometry: OptGeoArrayLikeSeq, xmin: float, ymin: float, xmax: float, ymax: float, **kwargs: Unpack[UFuncKwargs] ) -> GeoArray: ... + @overload def concave_hull( geometry: Geometry, ratio: float = 0.0, allow_holes: bool = False, **kwargs: Unpack[UFuncKwargs] @@ -200,6 +205,7 @@ def concave_hull( def concave_hull( geometry: OptGeoArrayLikeSeq, ratio: float = 0.0, allow_holes: bool = False, **kwargs: Unpack[UFuncKwargs] ) -> GeoArray: ... + @overload def convex_hull(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry: ... @overload @@ -208,6 +214,7 @@ def convex_hull(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... def convex_hull(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry | None: ... @overload def convex_hull(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... + @overload def delaunay_triangles( geometry: Geometry, tolerance: float = 0.0, only_edges: Literal[False] = False, **kwargs: Unpack[UFuncKwargs] @@ -251,6 +258,7 @@ def delaunay_triangles( only_edges: ArrayLike[bool] = False, **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... + @overload def constrained_delaunay_triangles(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... @overload @@ -259,6 +267,7 @@ def constrained_delaunay_triangles(geometry: None, **kwargs: Unpack[UFuncKwargs] def constrained_delaunay_triangles(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection | None: ... @overload def constrained_delaunay_triangles(geometry: OptGeoArrayLikeSeq | OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... + @overload def envelope(geometry: Point, **kwargs: Unpack[UFuncKwargs]) -> Point: ... @overload @@ -269,6 +278,7 @@ def envelope(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... def envelope(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry | None: ... @overload def envelope(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... + @overload def extract_unique_points(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> MultiPoint: ... @overload @@ -277,6 +287,7 @@ def extract_unique_points(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None def extract_unique_points(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> MultiPoint | None: ... @overload def extract_unique_points(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... + @overload def build_area(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry: ... @overload @@ -335,6 +346,7 @@ def make_valid( def make_valid( geometry: OptGeoArrayLikeSeq, *, method: Literal["structure"], keep_collapsed: bool = True, **kwargs: Unpack[UFuncKwargs] ) -> GeoArray: ... + @overload def minimum_clearance_line(geometry: Point, **kwargs: Unpack[UFuncKwargs]) -> Point: ... @overload @@ -347,10 +359,12 @@ def minimum_clearance_line(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> Non def minimum_clearance_line(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> Polygon | Point | None: ... @overload def minimum_clearance_line(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... + @overload def normalize(geometry: OptGeoT, **kwargs: Unpack[UFuncKwargs]) -> OptGeoT: ... @overload def normalize(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... + @overload def point_on_surface(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> Point: ... @overload @@ -359,6 +373,7 @@ def point_on_surface(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... def point_on_surface(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> Point | None: ... @overload def point_on_surface(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... + @overload def node(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> MultiLineString: ... @overload @@ -367,12 +382,14 @@ def node(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... def node(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> MultiLineString | None: ... @overload def node(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... + @overload def polygonize(geometries: Sequence[Geometry | None], **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... @overload def polygonize(geometries: Sequence[Sequence[Geometry | None]], **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload def polygonize(geometries: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection | GeoArray: ... + @overload def polygonize_full( geometries: Sequence[Geometry | None], **kwargs: Unpack[UFuncKwargs] @@ -388,20 +405,24 @@ def polygonize_full( tuple[GeometryCollection, GeometryCollection, GeometryCollection, GeometryCollection] | tuple[GeoArray, GeoArray, GeoArray, GeoArray] ): ... + @overload def remove_repeated_points(geometry: OptGeoT, tolerance: float = 0.0, **kwargs: Unpack[UFuncKwargs]) -> OptGeoT: ... @overload def remove_repeated_points(geometry: OptGeoArrayLikeSeq, tolerance: float = 0.0, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... + @overload def reverse(geometry: OptGeoT, **kwargs: Unpack[UFuncKwargs]) -> OptGeoT: ... @overload def reverse(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... + @overload def segmentize(geometry: OptGeoT, max_segment_length: float, **kwargs: Unpack[UFuncKwargs]) -> OptGeoT: ... @overload def segmentize(geometry: OptGeoArrayLike, max_segment_length: ArrayLikeSeq[float], **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... @overload def segmentize(geometry: OptGeoArrayLikeSeq, max_segment_length: ArrayLike[float], **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... + @overload def simplify(geometry: OptGeoT, tolerance: float, preserve_topology: bool = True, **kwargs: Unpack[UFuncKwargs]) -> OptGeoT: ... @overload @@ -412,6 +433,7 @@ def simplify( def simplify( geometry: OptGeoArrayLikeSeq, tolerance: ArrayLike[float], preserve_topology: bool = True, **kwargs: Unpack[UFuncKwargs] ) -> GeoArray: ... + @overload def snap(geometry: OptGeoT, reference: Geometry, tolerance: float, **kwargs: Unpack[UFuncKwargs]) -> OptGeoT: ... @overload @@ -428,6 +450,7 @@ def snap( def snap( geometry: OptGeoArrayLike, reference: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], **kwargs: Unpack[UFuncKwargs] ) -> GeoArray: ... + @overload def voronoi_polygons( geometry: Geometry, @@ -558,6 +581,7 @@ def voronoi_polygons( ordered: ArrayLikeSeq[bool], **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... + @overload def oriented_envelope(geometry: Point, **kwargs: Unpack[UFuncKwargs]) -> Point: ... @overload @@ -583,6 +607,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 maximum_inscribed_circle( geometry: Polygon | MultiPolygon, tolerance: float | None = None, **kwargs: Unpack[UFuncKwargs] @@ -601,6 +626,7 @@ def maximum_inscribed_circle( def maximum_inscribed_circle( geometry: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], **kwargs: Unpack[UFuncKwargs] ) -> GeoArray: ... + @overload def orient_polygons(geometry: OptGeoT, *, exterior_cw: bool = False, **kwargs: Unpack[UFuncKwargs]) -> OptGeoT: ... @overload diff --git a/stubs/shapely/shapely/creation.pyi b/stubs/shapely/shapely/creation.pyi index e575edf5e87e..df67b593ba2e 100644 --- a/stubs/shapely/shapely/creation.pyi +++ b/stubs/shapely/shapely/creation.pyi @@ -98,6 +98,7 @@ def points( out: NDArray[np.object_] | None = None, **kwargs: Unpack[UFuncKwargsNoOut], ) -> Point | GeoArray: ... + @overload def linestrings( coords: Sequence[float], # acts as (x1, x2, ...) @@ -142,6 +143,7 @@ def linestrings( out: NDArray[np.object_] | None = None, **kwargs: Unpack[UFuncKwargsNoOut], ) -> LineString | GeoArray: ... + @overload def linearrings( coords: Sequence[float], # acts as (x1, x2, ...) @@ -186,6 +188,7 @@ def linearrings( out: NDArray[np.object_] | None = None, **kwargs: Unpack[UFuncKwargsNoOut], ) -> LinearRing | GeoArray: ... + @overload def polygons( geometries: LinearRing | Sequence[Sequence[float]] | None, @@ -213,6 +216,7 @@ def polygons( out: NDArray[np.object_] | None = None, **kwargs: Unpack[UFuncKwargsNoOut], ) -> Polygon | GeoArray: ... + @overload def box(xmin: float, ymin: float, xmax: float, ymax: float, ccw: bool = True, **kwargs: Unpack[UFuncKwargsNoOut]) -> Polygon: ... @overload @@ -224,6 +228,7 @@ def box( ccw: bool = True, **kwargs: Unpack[UFuncKwargsNoOut], ) -> GeoArray: ... + @overload def multipoints( geometries: Sequence[Point | Sequence[float] | None], @@ -248,6 +253,7 @@ def multipoints( out: NDArray[np.object_] | None = None, **kwargs: Unpack[UFuncKwargsNoOut], ) -> MultiPoint | GeoArray: ... + @overload def multilinestrings( geometries: Sequence[LineString | Sequence[Sequence[float]] | None], @@ -272,6 +278,7 @@ def multilinestrings( out: NDArray[np.object_] | None = None, **kwargs: Unpack[UFuncKwargsNoOut], ) -> MultiLineString | GeoArray: ... + @overload def multipolygons( geometries: Sequence[Polygon | Sequence[Sequence[float]] | None], @@ -296,6 +303,7 @@ def multipolygons( out: NDArray[np.object_] | None = None, **kwargs: Unpack[UFuncKwargsNoOut], ) -> MultiPolygon | GeoArray: ... + @overload def geometrycollections( geometries: Sequence[Geometry | None], indices: None = None, out: None = None, **kwargs: Unpack[UFuncKwargsNoOut] @@ -314,6 +322,7 @@ 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 empty( diff --git a/stubs/shapely/shapely/io.pyi b/stubs/shapely/shapely/io.pyi index 1b06299f3f86..271aed83ce0c 100644 --- a/stubs/shapely/shapely/io.pyi +++ b/stubs/shapely/shapely/io.pyi @@ -50,6 +50,7 @@ def to_wkt( old_3d: bool = False, **kwargs: Unpack[UFuncKwargs], ) -> NDArray[np.str_]: ... + @overload def to_wkb( geometry: None, @@ -120,12 +121,14 @@ def to_wkb( flavor: Literal["iso", "extended"] = "extended", **kwargs: Unpack[UFuncKwargs], ) -> NDArray[np.bytes_] | NDArray[np.str_]: ... + @overload def to_geojson(geometry: None, indent: int | None = None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload def to_geojson(geometry: Geometry, indent: int | None = None, **kwargs: Unpack[UFuncKwargs]) -> str: ... @overload def to_geojson(geometry: OptGeoArrayLikeSeq, indent: int | None = None, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.str_]: ... + @overload def from_wkt( geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs: Unpack[UFuncKwargs] @@ -140,6 +143,7 @@ def from_wkt( on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... + @overload def from_wkb( geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs: Unpack[UFuncKwargs] @@ -154,6 +158,7 @@ def from_wkb( on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs: Unpack[UFuncKwargs], ) -> GeoArray: ... + @overload def from_geojson( geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs: Unpack[UFuncKwargs] diff --git a/stubs/shapely/shapely/predicates.pyi b/stubs/shapely/shapely/predicates.pyi index dce25fed1b72..441db8a635c3 100644 --- a/stubs/shapely/shapely/predicates.pyi +++ b/stubs/shapely/shapely/predicates.pyi @@ -45,22 +45,27 @@ __all__ = [ def has_z(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def has_z(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def has_m(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def has_m(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def is_ccw(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def is_ccw(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def is_closed(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def is_closed(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def is_empty(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def is_empty(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def is_geometry(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> np.bool_[Literal[True]]: ... @overload @@ -69,6 +74,7 @@ def is_geometry(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_[Liter def is_geometry(geometry: ArrayLikeSeq[Any], **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... # type: ignore[overload-overlap] @overload def is_geometry(geometry: object, **kwargs: Unpack[UFuncKwargs]) -> TypeGuard[BaseGeometry]: ... + @overload def is_missing(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> np.bool_[Literal[False]]: ... @overload @@ -77,100 +83,118 @@ def is_missing(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_[Litera def is_missing(geometry: ArrayLikeSeq[Any], **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... # type: ignore[overload-overlap] @overload def is_missing(geometry: object, **kwargs: Unpack[UFuncKwargs]) -> TypeGuard[None]: ... + @overload def is_prepared(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def is_prepared(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def is_valid_input(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_[Literal[True]]: ... @overload def is_valid_input(geometry: ArrayLikeSeq[Any], **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... # type: ignore[overload-overlap] @overload def is_valid_input(geometry: object, **kwargs: Unpack[UFuncKwargs]) -> TypeGuard[BaseGeometry | None]: ... + @overload def is_ring(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def is_ring(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def is_simple(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def is_simple(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def is_valid(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def is_valid(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def is_valid_reason(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload def is_valid_reason(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> str: ... @overload def is_valid_reason(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.object_]: ... + @overload def crosses(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def crosses(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload def crosses(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def contains(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def contains(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload def contains(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def contains_properly(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def contains_properly(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload def contains_properly(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def covered_by(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def covered_by(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload def covered_by(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def covers(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def covers(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload def covers(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def disjoint(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def disjoint(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload def disjoint(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def equals(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def equals(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload def equals(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def intersects(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def intersects(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload def intersects(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def overlaps(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def overlaps(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload def overlaps(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def touches(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def touches(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload def touches(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def within(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def within(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload def within(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def equals_exact( a: Geometry | None, b: Geometry | None, tolerance: float = 0.0, *, normalize: bool = False, **kwargs: Unpack[UFuncKwargs] @@ -202,12 +226,14 @@ def equals_exact( normalize: bool = False, **kwargs: Unpack[UFuncKwargs], ) -> NDArray[np.bool_]: ... + @overload def equals_identical(a: Geometry | None, b: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def equals_identical(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload def equals_identical(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def relate(a: Geometry | None, b: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... @overload @@ -218,6 +244,7 @@ def relate(a: Geometry, b: Geometry, **kwargs: Unpack[UFuncKwargs]) -> str: ... def relate(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.object_]: ... @overload def relate(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.object_]: ... + @overload def relate_pattern(a: Geometry | None, b: Geometry | None, pattern: str, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload @@ -228,12 +255,14 @@ def relate_pattern( def relate_pattern( a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, pattern: str, **kwargs: Unpack[UFuncKwargs] ) -> NDArray[np.bool_]: ... + @overload def dwithin(a: Geometry | None, b: Geometry | None, distance: float, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload def dwithin(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, distance: float, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload def dwithin(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, distance: float, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... + @overload def contains_xy(geom: Geometry | None, x: float, y: float, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload @@ -252,6 +281,7 @@ def contains_xy( def contains_xy( geom: OptGeoArrayLikeSeq, x: ArrayLike[float], y: ArrayLike[float], **kwargs: Unpack[UFuncKwargs] ) -> NDArray[np.bool_]: ... + @overload def intersects_xy(geom: Geometry | None, x: float, y: float, **kwargs: Unpack[UFuncKwargs]) -> np.bool_: ... @overload diff --git a/stubs/shapely/shapely/set_operations.pyi b/stubs/shapely/shapely/set_operations.pyi index 198b8dab572a..cfe9eaf00dc2 100644 --- a/stubs/shapely/shapely/set_operations.pyi +++ b/stubs/shapely/shapely/set_operations.pyi @@ -34,6 +34,7 @@ def difference( def difference( a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs] ) -> GeoArray: ... + @overload def intersection(a: Geometry, b: Geometry, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry: ... @overload @@ -48,10 +49,12 @@ def intersection( def intersection( a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs] ) -> GeoArray: ... + @overload def intersection_all(geometries: OptGeoArrayLike, axis: None = None, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry: ... @overload def intersection_all(geometries: OptGeoArrayLikeSeq, axis: int, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry | GeoArray: ... + @overload def symmetric_difference( a: Geometry, b: Geometry, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs] @@ -68,6 +71,7 @@ def symmetric_difference( def symmetric_difference( a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs] ) -> GeoArray: ... + @overload @deprecated("symmetric_difference_all behaves incorrectly and will be removed in a future version.") def symmetric_difference_all(geometries: OptGeoArrayLike, axis: None = None, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry: ... @@ -76,6 +80,7 @@ def symmetric_difference_all(geometries: OptGeoArrayLike, axis: None = None, **k def symmetric_difference_all( geometries: OptGeoArrayLikeSeq, axis: int, **kwargs: Unpack[UFuncKwargs] ) -> BaseGeometry | GeoArray: ... + @overload def union(a: Geometry, b: Geometry, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry: ... @overload @@ -90,6 +95,7 @@ def union( def union( a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, grid_size: float | None = None, **kwargs: Unpack[UFuncKwargs] ) -> GeoArray: ... + @overload def union_all( geometries: OptGeoArrayLike, grid_size: float | None = None, axis: None = None, **kwargs: Unpack[UFuncKwargs] @@ -113,11 +119,14 @@ def coverage_union( def coverage_union( a: OptGeoArrayLike, b: OptGeoArrayLike, *, axis: int, **kwargs: Unpack[UFuncKwargs] ) -> BaseGeometry | GeoArray: ... + @overload def coverage_union_all(geometries: OptGeoArrayLike, axis: None = None, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry: ... @overload def coverage_union_all(geometries: OptGeoArrayLikeSeq, axis: int, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry | GeoArray: ... + def disjoint_subset_union(a: OptGeoArrayLike, b: OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> BaseGeometry | GeoArray: ... + @overload def disjoint_subset_union_all( geometries: OptGeoArrayLike, *, axis: None = None, **kwargs: Unpack[UFuncKwargs] From 399635c49fd9ca506ed86692f4718022b2811366 Mon Sep 17 00:00:00 2001 From: jack-volantautonomy Date: Tue, 2 Jun 2026 14:41:47 +0100 Subject: [PATCH 3/5] Fix mypy --- stubs/shapely/shapely/constructive.pyi | 6 +++--- stubs/shapely/shapely/io.pyi | 12 ++++++------ stubs/shapely/shapely/predicates.pyi | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/stubs/shapely/shapely/constructive.pyi b/stubs/shapely/shapely/constructive.pyi index 08278329c530..90d7e154e069 100644 --- a/stubs/shapely/shapely/constructive.pyi +++ b/stubs/shapely/shapely/constructive.pyi @@ -260,11 +260,11 @@ def delaunay_triangles( ) -> GeoArray: ... @overload -def constrained_delaunay_triangles(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... +def constrained_delaunay_triangles(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection: ... # type: ignore[overload-overlap] @overload -def constrained_delaunay_triangles(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... +def constrained_delaunay_triangles(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> None: ... # type: ignore[overload-overlap] @overload -def constrained_delaunay_triangles(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection | None: ... +def constrained_delaunay_triangles(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> GeometryCollection | None: ... # type: ignore[overload-overlap] @overload def constrained_delaunay_triangles(geometry: OptGeoArrayLikeSeq | OptGeoArrayLike, **kwargs: Unpack[UFuncKwargs]) -> GeoArray: ... diff --git a/stubs/shapely/shapely/io.pyi b/stubs/shapely/shapely/io.pyi index 271aed83ce0c..240408eceeb3 100644 --- a/stubs/shapely/shapely/io.pyi +++ b/stubs/shapely/shapely/io.pyi @@ -134,9 +134,9 @@ def from_wkt( geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs: Unpack[UFuncKwargs] ) -> None: ... @overload -def from_wkt( +def from_wkt( # type: ignore[overload-overlap] geometry: str, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs: Unpack[UFuncKwargs] -) -> BaseGeometry: ... # type: ignore[overload-overlap] +) -> BaseGeometry: ... @overload def from_wkt( geometry: ArrayLikeSeq[str | None], @@ -149,9 +149,9 @@ def from_wkb( geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs: Unpack[UFuncKwargs] ) -> None: ... @overload -def from_wkb( +def from_wkb( # type: ignore[overload-overlap] geometry: str | bytes, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs: Unpack[UFuncKwargs] -) -> BaseGeometry: ... # type: ignore[overload-overlap] +) -> BaseGeometry: ... @overload def from_wkb( geometry: ArrayLikeSeq[str | bytes | None], @@ -164,9 +164,9 @@ def from_geojson( geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs: Unpack[UFuncKwargs] ) -> None: ... @overload -def from_geojson( +def from_geojson( # type: ignore[overload-overlap] geometry: str | bytes, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs: Unpack[UFuncKwargs] -) -> BaseGeometry: ... # type: ignore[overload-overlap] +) -> BaseGeometry: ... @overload def from_geojson( geometry: ArrayLikeSeq[str | bytes | None], diff --git a/stubs/shapely/shapely/predicates.pyi b/stubs/shapely/shapely/predicates.pyi index 441db8a635c3..b39e174d0521 100644 --- a/stubs/shapely/shapely/predicates.pyi +++ b/stubs/shapely/shapely/predicates.pyi @@ -67,7 +67,7 @@ def is_empty(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.boo def is_empty(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def is_geometry(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> np.bool_[Literal[True]]: ... +def is_geometry(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> np.bool_[Literal[True]]: ... # type: ignore[overload-overlap] @overload def is_geometry(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_[Literal[False]]: ... @overload @@ -76,7 +76,7 @@ def is_geometry(geometry: ArrayLikeSeq[Any], **kwargs: Unpack[UFuncKwargs]) -> N def is_geometry(geometry: object, **kwargs: Unpack[UFuncKwargs]) -> TypeGuard[BaseGeometry]: ... @overload -def is_missing(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> np.bool_[Literal[False]]: ... +def is_missing(geometry: Geometry, **kwargs: Unpack[UFuncKwargs]) -> np.bool_[Literal[False]]: ... # type: ignore[overload-overlap] @overload def is_missing(geometry: None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_[Literal[True]]: ... @overload @@ -90,7 +90,7 @@ def is_prepared(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np. def is_prepared(geometry: OptGeoArrayLikeSeq, **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... @overload -def is_valid_input(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_[Literal[True]]: ... +def is_valid_input(geometry: Geometry | None, **kwargs: Unpack[UFuncKwargs]) -> np.bool_[Literal[True]]: ... # type: ignore[overload-overlap] @overload def is_valid_input(geometry: ArrayLikeSeq[Any], **kwargs: Unpack[UFuncKwargs]) -> NDArray[np.bool_]: ... # type: ignore[overload-overlap] @overload From f701f0b8d468cc1653d1ca31730ffc3057efd077 Mon Sep 17 00:00:00 2001 From: jack-volantautonomy Date: Tue, 2 Jun 2026 14:47:41 +0100 Subject: [PATCH 4/5] Fix imports --- stubs/shapely/shapely/constructive.pyi | 3 ++- stubs/shapely/shapely/creation.pyi | 3 ++- stubs/shapely/shapely/io.pyi | 3 ++- stubs/shapely/shapely/predicates.pyi | 3 ++- stubs/shapely/shapely/set_operations.pyi | 4 ++-- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/stubs/shapely/shapely/constructive.pyi b/stubs/shapely/shapely/constructive.pyi index 90d7e154e069..e3d21dedb46d 100644 --- a/stubs/shapely/shapely/constructive.pyi +++ b/stubs/shapely/shapely/constructive.pyi @@ -1,5 +1,6 @@ from collections.abc import Sequence -from typing import Any, Literal, SupportsIndex, Unpack, overload +from typing import Any, Literal, SupportsIndex, overload +from typing_extensions import Unpack from ._enum import ParamEnum from ._typing import ArrayLike, ArrayLikeSeq, GeoArray, OptGeoArrayLike, OptGeoArrayLikeSeq, OptGeoT, UFuncKwargs diff --git a/stubs/shapely/shapely/creation.pyi b/stubs/shapely/shapely/creation.pyi index df67b593ba2e..a51ff551071d 100644 --- a/stubs/shapely/shapely/creation.pyi +++ b/stubs/shapely/shapely/creation.pyi @@ -1,5 +1,6 @@ from collections.abc import Sequence -from typing import Literal, SupportsIndex, TypeAlias, Unpack, overload +from typing import Literal, SupportsIndex, TypeAlias, overload +from typing_extensions import Unpack import numpy as np from numpy.typing import NDArray diff --git a/stubs/shapely/shapely/io.pyi b/stubs/shapely/shapely/io.pyi index 240408eceeb3..2506df3e6c3b 100644 --- a/stubs/shapely/shapely/io.pyi +++ b/stubs/shapely/shapely/io.pyi @@ -1,5 +1,6 @@ from _typeshed import Incomplete -from typing import Literal, TypeAlias, Unpack, overload +from typing import Literal, TypeAlias, overload +from typing_extensions import Unpack import numpy as np from numpy.typing import NDArray diff --git a/stubs/shapely/shapely/predicates.pyi b/stubs/shapely/shapely/predicates.pyi index b39e174d0521..03e2a2fd4b50 100644 --- a/stubs/shapely/shapely/predicates.pyi +++ b/stubs/shapely/shapely/predicates.pyi @@ -1,4 +1,5 @@ -from typing import Any, Literal, TypeGuard, Unpack, overload +from typing import Any, Literal, TypeGuard, overload +from typing_extensions import Unpack import numpy as np from numpy.typing import NDArray diff --git a/stubs/shapely/shapely/set_operations.pyi b/stubs/shapely/shapely/set_operations.pyi index cfe9eaf00dc2..f1972a624d7f 100644 --- a/stubs/shapely/shapely/set_operations.pyi +++ b/stubs/shapely/shapely/set_operations.pyi @@ -1,5 +1,5 @@ -from typing import Unpack, overload -from typing_extensions import deprecated +from typing import overload +from typing_extensions import Unpack, deprecated from ._typing import GeoArray, OptGeoArrayLike, OptGeoArrayLikeSeq, UFuncKwargs from .geometry.base import BaseGeometry From 7c7a5933d560b98c154879bd7d0ebdd7a19a0a6d Mon Sep 17 00:00:00 2001 From: jack-volantautonomy Date: Tue, 2 Jun 2026 15:03:31 +0100 Subject: [PATCH 5/5] fix flake8 --- stubs/shapely/shapely/_typing.pyi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stubs/shapely/shapely/_typing.pyi b/stubs/shapely/shapely/_typing.pyi index 952b2251b383..ed62e8b881eb 100644 --- a/stubs/shapely/shapely/_typing.pyi +++ b/stubs/shapely/shapely/_typing.pyi @@ -56,8 +56,8 @@ class SupportsGeoInterface(Protocol): class SupportsRead(Protocol[_T_co]): def read(self) -> _T_co: ... -CastingKind = Literal["no", "equiv", "safe", "same_kind", "unsafe"] -OrderKind = Literal["K", "A", "C", "F"] +CastingKind: TypeAlias = Literal["no", "equiv", "safe", "same_kind", "unsafe"] +OrderKind: TypeAlias = Literal["K", "A", "C", "F"] @type_check_only class _UFuncKwargsBase(TypedDict, total=False):