diff --git a/stubs/shapely/shapely/__init__.pyi b/stubs/shapely/shapely/__init__.pyi index a36042aeba82..22e9b97f7ee6 100644 --- a/stubs/shapely/shapely/__init__.pyi +++ b/stubs/shapely/shapely/__init__.pyi @@ -1,6 +1,7 @@ from typing import Final from . import affinity as affinity +from ._coverage import * from ._geometry import * from .constructive import * from .coordinates import * diff --git a/stubs/shapely/shapely/_coverage.pyi b/stubs/shapely/shapely/_coverage.pyi new file mode 100644 index 000000000000..4d5b7b7d57ed --- /dev/null +++ b/stubs/shapely/shapely/_coverage.pyi @@ -0,0 +1,15 @@ +from typing import overload + +import numpy as np + +from ._typing import ArrayLike, GeoArray, GeoArrayLikeSeq, OptGeoArrayLike +from .geometry import Polygon + +__all__ = ["coverage_invalid_edges", "coverage_is_valid", "coverage_simplify"] + +def coverage_is_valid(geometry: OptGeoArrayLike, gap_width: float = 0.0, **kwargs) -> np.bool_: ... +def coverage_invalid_edges(geometry: OptGeoArrayLike, gap_width: float = 0.0, **kwargs) -> GeoArray: ... +@overload +def coverage_simplify(geometry: Polygon, tolerance: ArrayLike[float], *, simplify_boundary: bool = True) -> Polygon: ... +@overload +def coverage_simplify(geometry: GeoArrayLikeSeq, tolerance: ArrayLike[float], *, simplify_boundary: bool = True) -> GeoArray: ... diff --git a/stubs/shapely/shapely/constructive.pyi b/stubs/shapely/shapely/constructive.pyi index f3a74f56fe17..ba1ba4e6ea59 100644 --- a/stubs/shapely/shapely/constructive.pyi +++ b/stubs/shapely/shapely/constructive.pyi @@ -429,60 +429,79 @@ def voronoi_polygons( ordered: bool = False, **kwargs, ) -> GeometryCollection[Polygon] | LineString | MultiLineString | None: ... -@overload +@overload # `geometry` as sequence-like def voronoi_polygons( geometry: OptGeoArrayLikeSeq, tolerance: ArrayLike[float] = 0.0, extend_to: OptGeoArrayLike = None, only_edges: ArrayLike[bool] = False, - ordered: bool = False, + ordered: ArrayLike[bool] = False, **kwargs, ) -> GeoArray: ... -@overload +@overload # `tolerance` as sequence-like def voronoi_polygons( geometry: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], extend_to: OptGeoArrayLike = None, only_edges: ArrayLike[bool] = False, - ordered: bool = False, + ordered: ArrayLike[bool] = False, **kwargs, ) -> GeoArray: ... @overload -def voronoi_polygons( +def voronoi_polygons( # `extend_to` as positional sequence-like geometry: OptGeoArrayLike, tolerance: ArrayLike[float], extend_to: OptGeoArrayLikeSeq, only_edges: ArrayLike[bool] = False, - ordered: bool = False, + ordered: ArrayLike[bool] = False, **kwargs, ) -> GeoArray: ... -@overload +@overload # `extend_to` as keyword sequence-like def voronoi_polygons( geometry: OptGeoArrayLike, tolerance: ArrayLike[float] = 0.0, *, extend_to: OptGeoArrayLikeSeq, only_edges: ArrayLike[bool] = False, - ordered: bool = False, + ordered: ArrayLike[bool] = False, **kwargs, ) -> GeoArray: ... @overload -def voronoi_polygons( +def voronoi_polygons( # `only_edges` as positional sequence-like geometry: OptGeoArrayLike, tolerance: ArrayLike[float], extend_to: OptGeoArrayLike, only_edges: ArrayLikeSeq[bool], - ordered: bool = False, + ordered: ArrayLike[bool] = False, **kwargs, ) -> GeoArray: ... @overload -def voronoi_polygons( +def voronoi_polygons( # `only_edges` as keyword sequence-like geometry: OptGeoArrayLike, tolerance: ArrayLike[float] = 0.0, extend_to: OptGeoArrayLike = None, *, only_edges: ArrayLikeSeq[bool], - ordered: bool = False, + ordered: ArrayLike[bool] = False, + **kwargs, +) -> GeoArray: ... +@overload # `ordered` as positional sequence-like +def voronoi_polygons( + geometry: OptGeoArrayLike, + tolerance: ArrayLike[float], + extend_to: OptGeoArrayLike, + only_edges: ArrayLike[bool], + ordered: ArrayLikeSeq[bool], + **kwargs, +) -> GeoArray: ... +@overload # `ordered` as keyword sequence-like +def voronoi_polygons( + geometry: OptGeoArrayLike, + tolerance: ArrayLike[float] = 0.0, + extend_to: OptGeoArrayLike = None, + *, + only_edges: ArrayLike[bool] = False, + ordered: ArrayLikeSeq[bool], **kwargs, ) -> GeoArray: ... @overload @@ -511,26 +530,18 @@ def minimum_bounding_circle(geometry: Geometry | None, **kwargs) -> Polygon | Po @overload def minimum_bounding_circle(geometry: OptGeoArrayLikeSeq, **kwargs) -> GeoArray: ... @overload -def maximum_inscribed_circle(geometry: Point, tolerance: float | None = None, **kwargs) -> Point: ... -@overload -def maximum_inscribed_circle( - geometry: LineString | Polygon | BaseMultipartGeometry, tolerance: float | None = None, **kwargs -): ... -@overload -def maximum_inscribed_circle(geometry: Geometry, tolerance: float | None = None, **kwargs) -> Polygon | Point: ... +def maximum_inscribed_circle(geometry: Polygon | MultiPolygon, tolerance: float | None = None, **kwargs) -> LineString: ... @overload def maximum_inscribed_circle(geometry: None, tolerance: float | None = None, **kwargs) -> None: ... @overload -def maximum_inscribed_circle(geometry: Geometry | None, tolerance: float | None = None, **kwargs) -> Polygon | Point | None: ... +def maximum_inscribed_circle( + geometry: Polygon | MultiPolygon | None, tolerance: float | None = None, **kwargs +) -> LineString | None: ... @overload def maximum_inscribed_circle(geometry: OptGeoArrayLikeSeq, tolerance: ArrayLike[float] | None = None, **kwargs) -> GeoArray: ... @overload -def orient_polygons(geometry: Point, *, exterior_cw: bool = False, **kwargs) -> Point: ... -@overload -def orient_polygons(geometry: Geometry, *, exterior_cw: bool = False, **kwargs) -> BaseGeometry: ... -@overload -def orient_polygons(geometry: None, *, exterior_cw: bool = False, **kwargs) -> None: ... +def maximum_inscribed_circle(geometry: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], **kwargs) -> GeoArray: ... @overload -def orient_polygons(geometry: Geometry | None, *, exterior_cw: bool = False, **kwargs) -> BaseGeometry | None: ... +def orient_polygons(geometry: OptGeoT, *, exterior_cw: bool = False, **kwargs) -> OptGeoT: ... @overload def orient_polygons(geometry: OptGeoArrayLikeSeq, *, exterior_cw: bool = False, **kwargs) -> GeoArray: ... diff --git a/stubs/shapely/shapely/creation.pyi b/stubs/shapely/shapely/creation.pyi index db0a7f75f0f5..193100448eaa 100644 --- a/stubs/shapely/shapely/creation.pyi +++ b/stubs/shapely/shapely/creation.pyi @@ -12,18 +12,18 @@ from .geometry import GeometryCollection, LinearRing, LineString, MultiLineStrin from .lib import Geometry __all__ = [ - "points", - "linestrings", + "box", + "destroy_prepared", + "empty", + "geometrycollections", "linearrings", - "polygons", - "multipoints", + "linestrings", "multilinestrings", + "multipoints", "multipolygons", - "geometrycollections", - "box", + "points", + "polygons", "prepare", - "destroy_prepared", - "empty", ] class HandleNaN(ParamEnum): @@ -31,7 +31,7 @@ class HandleNaN(ParamEnum): skip = 1 error = 2 -_HandleNaN: TypeAlias = Literal[0, 1, 2] | HandleNaN +_HandleNaN: TypeAlias = Literal["allow", "skip", "error"] | HandleNaN @overload def points( @@ -40,7 +40,7 @@ def points( z: float | None = None, indices: None = None, *, - handle_nan: _HandleNaN = 0, + handle_nan: _HandleNaN = ..., out: None = None, **kwargs, # acts as x ) -> Point: ... @@ -51,7 +51,7 @@ def points( z: None = None, indices: None = None, *, - handle_nan: _HandleNaN = 0, + handle_nan: _HandleNaN = ..., out: None = None, **kwargs, # acts as x, y[, z] ) -> Point: ... @@ -62,7 +62,7 @@ def points( z: Sequence[float] | None = None, indices: ArrayLikeSeq[int] | None = None, *, - handle_nan: _HandleNaN = 0, + handle_nan: _HandleNaN = ..., out: NDArray[np.object_] | None = None, **kwargs, ) -> GeoArray: ... @@ -73,7 +73,7 @@ def points( z: None = None, indices: ArrayLikeSeq[int] | None = None, *, - handle_nan: _HandleNaN = 0, + handle_nan: _HandleNaN = ..., out: NDArray[np.object_] | None = None, **kwargs, ) -> GeoArray: ... @@ -84,7 +84,7 @@ def points( z: ArrayLike[float] | None = None, indices: ArrayLikeSeq[int] | None = None, *, - handle_nan: _HandleNaN = 0, + handle_nan: _HandleNaN = ..., out: NDArray[np.object_] | None = None, **kwargs, ) -> Point | GeoArray: ... @@ -95,7 +95,7 @@ def points( z: ArrayLike[float] | None = None, indices: ArrayLikeSeq[int] | None = None, *, - handle_nan: _HandleNaN = 0, + handle_nan: _HandleNaN = ..., out: NDArray[np.object_] | None = None, **kwargs, ) -> Point | GeoArray: ... @@ -106,7 +106,7 @@ def linestrings( z: Sequence[float] | None = None, indices: None = None, *, - handle_nan: _HandleNaN = 0, + handle_nan: _HandleNaN = ..., out: None = None, **kwargs, ) -> LineString: ... @@ -117,7 +117,7 @@ def linestrings( z: None = None, indices: None = None, *, - handle_nan: _HandleNaN = 0, + handle_nan: _HandleNaN = ..., out: None = None, **kwargs, ) -> LineString: ... @@ -128,7 +128,7 @@ def linestrings( z: None = None, indices: ArrayLikeSeq[int] | None = None, *, - handle_nan: _HandleNaN = 0, + handle_nan: _HandleNaN = ..., out: NDArray[np.object_] | None = None, **kwargs, ) -> GeoArray: ... @@ -139,7 +139,7 @@ def linestrings( z: ArrayLikeSeq[float] | None = None, indices: ArrayLikeSeq[int] | None = None, *, - handle_nan: _HandleNaN = 0, + handle_nan: _HandleNaN = ..., out: NDArray[np.object_] | None = None, **kwargs, ) -> LineString | GeoArray: ... @@ -150,7 +150,7 @@ def linearrings( z: Sequence[float] | None = None, indices: None = None, *, - handle_nan: _HandleNaN = 0, + handle_nan: _HandleNaN = ..., out: None = None, **kwargs, ) -> LinearRing: ... @@ -161,7 +161,7 @@ def linearrings( z: None = None, indices: None = None, *, - handle_nan: _HandleNaN = 0, + handle_nan: _HandleNaN = ..., out: None = None, **kwargs, ) -> LinearRing: ... @@ -172,7 +172,7 @@ def linearrings( z: None = None, indices: ArrayLikeSeq[int] | None = None, *, - handle_nan: _HandleNaN = 0, + handle_nan: _HandleNaN = ..., out: NDArray[np.object_] | None = None, **kwargs, ) -> GeoArray: ... @@ -183,7 +183,7 @@ def linearrings( z: ArrayLikeSeq[float] | None = None, indices: ArrayLikeSeq[int] | None = None, *, - handle_nan: _HandleNaN = 0, + handle_nan: _HandleNaN = ..., out: NDArray[np.object_] | None = None, **kwargs, ) -> LinearRing | GeoArray: ... diff --git a/stubs/shapely/shapely/decorators.pyi b/stubs/shapely/shapely/decorators.pyi index 2d0aa31dd4b7..fe5131950cec 100644 --- a/stubs/shapely/shapely/decorators.pyi +++ b/stubs/shapely/shapely/decorators.pyi @@ -1,4 +1,4 @@ -from collections.abc import Callable, Iterable +from collections.abc import Callable, Container from typing import TypeVar _F = TypeVar("_F", bound=Callable[..., object]) @@ -9,4 +9,4 @@ class requires_geos: def __call__(self, func: _F) -> _F: ... def multithreading_enabled(func: _F) -> _F: ... -def deprecate_positional(should_be_kwargs: Iterable[str], category: type[Warning] = ...) -> Callable[..., object]: ... +def deprecate_positional(should_be_kwargs: Container[str], category: type[Warning] = ...) -> Callable[..., object]: ... diff --git a/stubs/shapely/shapely/geometry/base.pyi b/stubs/shapely/shapely/geometry/base.pyi index 75da5ee5e05d..06daad1cff35 100644 --- a/stubs/shapely/shapely/geometry/base.pyi +++ b/stubs/shapely/shapely/geometry/base.pyi @@ -127,7 +127,7 @@ class BaseGeometry(Geometry): single_sided: bool = False, *, quadsegs: int | None = None, # deprecated - resolution: int | None = None, # to be deprecated + resolution: int | None = None, # deprecated ) -> Polygon: ... def simplify(self, tolerance: float, preserve_topology: bool = True) -> BaseGeometry: ... def normalize(self) -> BaseGeometry: ... @@ -226,7 +226,7 @@ class BaseGeometry(Geometry): @overload def dwithin(self, other: OptGeoArrayLike, distance: ArrayLikeSeq[float]) -> NDArray[np.bool_]: ... @overload - def equals_exact(self, other: Geometry | None, tolerance: float = 0.0, *, normalize: Literal[False] = False) -> bool: ... + def equals_exact(self, other: Geometry | None, tolerance: float = 0.0, *, normalize: bool = False) -> bool: ... @overload def equals_exact( self, other: OptGeoArrayLikeSeq, tolerance: float = 0.0, *, normalize: bool = False diff --git a/stubs/shapely/shapely/io.pyi b/stubs/shapely/shapely/io.pyi index 9b840b4874b8..54b17de3fa0d 100644 --- a/stubs/shapely/shapely/io.pyi +++ b/stubs/shapely/shapely/io.pyi @@ -17,7 +17,7 @@ _OutputDimension: TypeAlias = Literal[2, 3, 4] # Mypy and stubtest aren't happy with the following definition and # raise is a reserved keyword, so we cannot use the class syntax of enums -# DecodingErrorOptions = ParamEnum("DecodingErrorOptions", {"ignore": 0, "warn": 1, "raise": 2}) +# DecodingErrorOptions = ParamEnum("DecodingErrorOptions", {"ignore": 0, "warn": 1, "raise": 2, "fix": 3}) DecodingErrorOptions: Incomplete class WKBFlavorOptions(ParamEnum): @@ -128,26 +128,30 @@ def to_geojson(geometry: Geometry, indent: int | None = None, **kwargs) -> str: @overload def to_geojson(geometry: OptGeoArrayLikeSeq, indent: int | None = None, **kwargs) -> NDArray[np.str_]: ... @overload -def from_wkt(geometry: None, on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs) -> None: ... +def from_wkt(geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs) -> None: ... @overload -def from_wkt(geometry: str, on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs) -> BaseGeometry: ... # type: ignore[overload-overlap] +def from_wkt(geometry: str, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs) -> BaseGeometry: ... # type: ignore[overload-overlap] @overload def from_wkt( - geometry: ArrayLikeSeq[str | None], on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs + geometry: ArrayLikeSeq[str | None], on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs ) -> GeoArray: ... @overload -def from_wkb(geometry: None, on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs) -> None: ... +def from_wkb(geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs) -> None: ... @overload -def from_wkb(geometry: str | bytes, on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs) -> BaseGeometry: ... # type: ignore[overload-overlap] +def from_wkb( + geometry: str | bytes, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs +) -> BaseGeometry: ... # type: ignore[overload-overlap] @overload def from_wkb( - geometry: ArrayLikeSeq[str | bytes | None], on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs + geometry: ArrayLikeSeq[str | bytes | None], on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs ) -> GeoArray: ... @overload -def from_geojson(geometry: None, on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs) -> None: ... +def from_geojson(geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs) -> None: ... @overload -def from_geojson(geometry: str | bytes, on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs) -> BaseGeometry: ... # type: ignore[overload-overlap] +def from_geojson( + geometry: str | bytes, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs +) -> BaseGeometry: ... # type: ignore[overload-overlap] @overload def from_geojson( - geometry: ArrayLikeSeq[str | bytes | None], on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs + geometry: ArrayLikeSeq[str | bytes | None], on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs ) -> GeoArray: ... diff --git a/stubs/shapely/shapely/measurement.pyi b/stubs/shapely/shapely/measurement.pyi index 69d9a0c40654..887e3592a5e2 100644 --- a/stubs/shapely/shapely/measurement.pyi +++ b/stubs/shapely/shapely/measurement.pyi @@ -8,14 +8,14 @@ from .lib import Geometry __all__ = [ "area", - "distance", "bounds", - "total_bounds", - "length", - "hausdorff_distance", + "distance", "frechet_distance", - "minimum_clearance", + "hausdorff_distance", + "length", "minimum_bounding_radius", + "minimum_clearance", + "total_bounds", ] @overload diff --git a/stubs/shapely/shapely/predicates.pyi b/stubs/shapely/shapely/predicates.pyi index 3b4fe369b980..e2d3ece203ba 100644 --- a/stubs/shapely/shapely/predicates.pyi +++ b/stubs/shapely/shapely/predicates.pyi @@ -69,11 +69,11 @@ def is_geometry(geometry: ArrayLikeSeq[Any], **kwargs) -> NDArray[np.bool_]: ... @overload def is_geometry(geometry: object, **kwargs) -> TypeGuard[BaseGeometry]: ... @overload -def is_missing(geometry: Geometry, **kwargs) -> Literal[True]: ... +def is_missing(geometry: Geometry, **kwargs) -> Literal[False]: ... @overload def is_missing(geometry: ArrayLikeSeq[Any], **kwargs) -> NDArray[np.bool_]: ... # type: ignore[overload-overlap] @overload -def is_missing(geometry: object, **kwargs) -> TypeGuard[BaseGeometry]: ... +def is_missing(geometry: object, **kwargs) -> TypeGuard[None]: ... @overload def is_prepared(geometry: Geometry | None, **kwargs) -> bool: ... @overload diff --git a/stubs/shapely/shapely/set_operations.pyi b/stubs/shapely/shapely/set_operations.pyi index ccc6d3c8e91c..a243b3028e5c 100644 --- a/stubs/shapely/shapely/set_operations.pyi +++ b/stubs/shapely/shapely/set_operations.pyi @@ -1,4 +1,5 @@ from typing import overload +from typing_extensions import deprecated from ._typing import GeoArray, OptGeoArrayLike, OptGeoArrayLikeSeq from .geometry.base import BaseGeometry @@ -54,8 +55,10 @@ def symmetric_difference(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, grid_size: f @overload def symmetric_difference(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, grid_size: float | None = None, **kwargs) -> 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: ... @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: ... @overload def union(a: Geometry, b: Geometry, grid_size: float | None = None, **kwargs) -> BaseGeometry: ... @@ -86,10 +89,7 @@ def coverage_union(a: OptGeoArrayLike, b: OptGeoArrayLike, *, axis: int, **kwarg def coverage_union_all(geometries: OptGeoArrayLike, axis: None = None, **kwargs) -> BaseGeometry: ... @overload def coverage_union_all(geometries: OptGeoArrayLikeSeq, axis: int, **kwargs) -> BaseGeometry | GeoArray: ... -@overload -def disjoint_subset_union(a: OptGeoArrayLike, b: OptGeoArrayLike, *, axis: None = None, **kwargs) -> BaseGeometry: ... -@overload -def disjoint_subset_union(a: OptGeoArrayLike, b: OptGeoArrayLike, *, axis: int, **kwargs) -> BaseGeometry | GeoArray: ... +def disjoint_subset_union(a: OptGeoArrayLike, b: OptGeoArrayLike, **kwargs) -> BaseGeometry | GeoArray: ... @overload def disjoint_subset_union_all(geometries: OptGeoArrayLike, *, axis: None = None, **kwargs) -> BaseGeometry: ... @overload diff --git a/stubs/shapely/shapely/vectorized/__init__.pyi b/stubs/shapely/shapely/vectorized/__init__.pyi index 327128e4c6fd..cb93b6c5687e 100644 --- a/stubs/shapely/shapely/vectorized/__init__.pyi +++ b/stubs/shapely/shapely/vectorized/__init__.pyi @@ -1,4 +1,5 @@ from typing import overload +from typing_extensions import deprecated import numpy as np from numpy.typing import NDArray @@ -8,30 +9,38 @@ from ..lib import Geometry from ..prepared import PreparedGeometry @overload +@deprecated("Use 'shapely.contains_xy' instead (available since shapely 2.0.0).") def contains(geometry: Geometry | PreparedGeometry[Geometry], x: float, y: float) -> bool: ... @overload +@deprecated("Use 'shapely.contains_xy' instead (available since shapely 2.0.0).") def contains( geometry: Geometry | PreparedGeometry[Geometry], x: ArrayLikeSeq[float], y: ArrayLike[float] ) -> NDArray[np.bool_]: ... @overload +@deprecated("Use 'shapely.contains_xy' instead (available since shapely 2.0.0).") def contains( geometry: Geometry | PreparedGeometry[Geometry], x: ArrayLike[float], y: ArrayLikeSeq[float] ) -> NDArray[np.bool_]: ... @overload +@deprecated("Use 'shapely.contains_xy' instead (available since shapely 2.0.0).") def contains( geometry: Geometry | PreparedGeometry[Geometry], x: ArrayLike[float], y: ArrayLike[float] ) -> bool | NDArray[np.bool_]: ... @overload +@deprecated("Use 'shapely.intersects_xy' instead (available since shapely 2.0.0).") def touches(geometry: Geometry | PreparedGeometry[Geometry], x: float, y: float) -> bool: ... @overload +@deprecated("Use 'shapely.intersects_xy' instead (available since shapely 2.0.0).") def touches( geometry: Geometry | PreparedGeometry[Geometry], x: ArrayLikeSeq[float], y: ArrayLike[float] ) -> NDArray[np.bool_]: ... @overload +@deprecated("Use 'shapely.intersects_xy' instead (available since shapely 2.0.0).") def touches( geometry: Geometry | PreparedGeometry[Geometry], x: ArrayLike[float], y: ArrayLikeSeq[float] ) -> NDArray[np.bool_]: ... @overload +@deprecated("Use 'shapely.intersects_xy' instead (available since shapely 2.0.0).") def touches( geometry: Geometry | PreparedGeometry[Geometry], x: ArrayLike[float], y: ArrayLike[float] ) -> bool | NDArray[np.bool_]: ...