Fix shapely return types coming from numpy ufuncs (#14231)

This commit is contained in:
Ali Hamdan
2025-07-07 17:43:45 +02:00
committed by GitHub
parent 28d8ff1a80
commit cb3160488b
7 changed files with 72 additions and 58 deletions
+13 -13
View File
@@ -52,23 +52,23 @@ class GeometryType(IntEnum):
GEOMETRYCOLLECTION = 7
@overload
def get_type_id(geometry: Geometry | None, **kwargs) -> int: ...
def get_type_id(geometry: Geometry | None, **kwargs) -> np.int32: ...
@overload
def get_type_id(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.int64]: ...
@overload
def get_dimensions(geometry: Geometry | None, **kwargs) -> int: ...
def get_dimensions(geometry: Geometry | None, **kwargs) -> np.int32: ...
@overload
def get_dimensions(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.int64]: ...
@overload
def get_coordinate_dimension(geometry: Geometry | None, **kwargs) -> int: ...
def get_coordinate_dimension(geometry: Geometry | None, **kwargs) -> np.int32: ...
@overload
def get_coordinate_dimension(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.int64]: ...
@overload
def get_num_coordinates(geometry: Geometry | None, **kwargs) -> int: ...
def get_num_coordinates(geometry: Geometry | None, **kwargs) -> np.int32: ...
@overload
def get_num_coordinates(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.int64]: ...
@overload
def get_srid(geometry: Geometry | None, **kwargs) -> int: ...
def get_srid(geometry: Geometry | None, **kwargs) -> np.int32: ...
@overload
def get_srid(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.int64]: ...
@overload
@@ -78,19 +78,19 @@ def set_srid(geometry: OptGeoArrayLikeSeq, srid: ArrayLike[SupportsIndex], **kwa
@overload
def set_srid(geometry: OptGeoArrayLike, srid: ArrayLikeSeq[SupportsIndex], **kwargs) -> GeoArray: ...
@overload
def get_x(point: Geometry | None, **kwargs) -> float: ...
def get_x(point: Geometry | None, **kwargs) -> np.float64: ...
@overload
def get_x(point: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ...
@overload
def get_y(point: Geometry | None, **kwargs) -> float: ...
def get_y(point: Geometry | None, **kwargs) -> np.float64: ...
@overload
def get_y(point: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ...
@overload
def get_z(point: Geometry | None, **kwargs) -> float: ...
def get_z(point: Geometry | None, **kwargs) -> np.float64: ...
@overload
def get_z(point: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ...
@overload
def get_m(point: Geometry | None, **kwargs) -> float: ...
def get_m(point: Geometry | None, **kwargs) -> np.float64: ...
@overload
def get_m(point: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ...
@overload
@@ -104,7 +104,7 @@ def get_point(geometry: OptGeoArrayLikeSeq, index: ArrayLike[SupportsIndex], **k
@overload
def get_point(geometry: OptGeoArrayLike, index: ArrayLikeSeq[SupportsIndex], **kwargs) -> GeoArray: ...
@overload
def get_num_points(geometry: Geometry | None, **kwargs) -> int: ...
def get_num_points(geometry: Geometry | None, **kwargs) -> np.int32: ...
@overload
def get_num_points(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.int64]: ...
@overload
@@ -126,7 +126,7 @@ def get_interior_ring(geometry: OptGeoArrayLikeSeq, index: ArrayLike[SupportsInd
@overload
def get_interior_ring(geometry: OptGeoArrayLike, index: ArrayLikeSeq[SupportsIndex], **kwargs) -> GeoArray: ...
@overload
def get_num_interior_rings(geometry: Geometry | None, **kwargs) -> int: ...
def get_num_interior_rings(geometry: Geometry | None, **kwargs) -> np.int32: ...
@overload
def get_num_interior_rings(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.int64]: ...
@overload
@@ -158,11 +158,11 @@ def get_rings(geometry: OptGeoArrayLike, return_index: Literal[True]) -> tuple[G
@overload
def get_rings(geometry: OptGeoArrayLike, return_index: bool) -> GeoArray | tuple[GeoArray, NDArray[np.int64]]: ...
@overload
def get_num_geometries(geometry: Geometry | None, **kwargs) -> int: ...
def get_num_geometries(geometry: Geometry | None, **kwargs) -> np.int32: ...
@overload
def get_num_geometries(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.int64]: ...
@overload
def get_precision(geometry: Geometry | None, **kwargs) -> float: ...
def get_precision(geometry: Geometry | None, **kwargs) -> np.float64: ...
@overload
def get_precision(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ...
+3 -1
View File
@@ -1,3 +1,5 @@
import numpy as np
from ..geometry import LinearRing
def signed_area(ring: LinearRing) -> float: ...
def signed_area(ring: LinearRing) -> np.float64: ...
+1 -1
View File
@@ -30,7 +30,7 @@ def line_interpolate_point(
@overload
def line_locate_point(
line: LineString | MultiLineString | GeometryCollection | None, other: Point | None, normalized: bool = False, **kwargs
) -> float: ...
) -> np.float64: ...
@overload
def line_locate_point(
line: LineString | MultiLineString | GeometryCollection | None, other: OptGeoArrayLikeSeq, normalized: bool = False, **kwargs
+7 -7
View File
@@ -19,11 +19,11 @@ __all__ = [
]
@overload
def area(geometry: Geometry | None, **kwargs) -> float: ...
def area(geometry: Geometry | None, **kwargs) -> np.float64: ...
@overload
def area(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ...
@overload
def distance(a: Geometry | None, b: Geometry | None, **kwargs) -> float: ...
def distance(a: Geometry | None, b: Geometry | None, **kwargs) -> np.float64: ...
@overload
def distance(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.float64]: ...
@overload
@@ -31,11 +31,11 @@ def distance(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.
def bounds(geometry: OptGeoArrayLike, **kwargs) -> NDArray[np.float64]: ...
def total_bounds(geometry: OptGeoArrayLike, **kwargs) -> NDArray[np.float64]: ...
@overload
def length(geometry: Geometry | None, **kwargs) -> float: ...
def length(geometry: Geometry | None, **kwargs) -> np.float64: ...
@overload
def length(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ...
@overload
def hausdorff_distance(a: Geometry | None, b: Geometry | None, densify: float | None = None, **kwargs) -> float: ...
def hausdorff_distance(a: Geometry | None, b: Geometry | None, densify: float | None = None, **kwargs) -> np.float64: ...
@overload
def hausdorff_distance(a: OptGeoArrayLike, b: OptGeoArrayLike, densify: ArrayLikeSeq[float], **kwargs) -> NDArray[np.float64]: ...
@overload
@@ -47,7 +47,7 @@ def hausdorff_distance(
a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, densify: ArrayLike[float] | None = None, **kwargs
) -> NDArray[np.float64]: ...
@overload
def frechet_distance(a: Geometry | None, b: Geometry | None, densify: float | None = None, **kwargs) -> float: ...
def frechet_distance(a: Geometry | None, b: Geometry | None, densify: float | None = None, **kwargs) -> np.float64: ...
@overload
def frechet_distance(a: OptGeoArrayLike, b: OptGeoArrayLike, densify: ArrayLikeSeq[float], **kwargs) -> NDArray[np.float64]: ...
@overload
@@ -59,10 +59,10 @@ def frechet_distance(
a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, densify: ArrayLike[float] | None = None, **kwargs
) -> NDArray[np.float64]: ...
@overload
def minimum_clearance(geometry: Geometry | None, **kwargs) -> float: ...
def minimum_clearance(geometry: Geometry | None, **kwargs) -> np.float64: ...
@overload
def minimum_clearance(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ...
@overload
def minimum_bounding_radius(geometry: Geometry | None, **kwargs) -> float: ...
def minimum_bounding_radius(geometry: Geometry | None, **kwargs) -> np.float64: ...
@overload
def minimum_bounding_radius(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ...
+43 -31
View File
@@ -1,5 +1,6 @@
import sys
from typing import Any, Literal, overload
from typing_extensions import TypeGuard
from typing_extensions import TypeAlias, TypeGuard
import numpy as np
from numpy.typing import NDArray
@@ -8,6 +9,13 @@ from ._typing import ArrayLike, ArrayLikeSeq, OptGeoArrayLike, OptGeoArrayLikeSe
from .geometry.base import BaseGeometry
from .lib import Geometry
if sys.version_info >= (3, 10):
_NPTrue: TypeAlias = np.bool_[Literal[True]]
_NPFalse: TypeAlias = np.bool_[Literal[False]]
else:
_NPTrue: TypeAlias = np.bool_
_NPFalse: TypeAlias = np.bool_
__all__ = [
"contains",
"contains_properly",
@@ -43,57 +51,61 @@ __all__ = [
]
@overload
def has_z(geometry: Geometry | None, **kwargs) -> bool: ...
def has_z(geometry: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def has_z(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
@overload
def has_m(geometry: Geometry | None, **kwargs) -> bool: ...
def has_m(geometry: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def has_m(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
@overload
def is_ccw(geometry: Geometry | None, **kwargs) -> bool: ...
def is_ccw(geometry: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def is_ccw(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
@overload
def is_closed(geometry: Geometry | None, **kwargs) -> bool: ...
def is_closed(geometry: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def is_closed(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
@overload
def is_empty(geometry: Geometry | None, **kwargs) -> bool: ...
def is_empty(geometry: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def is_empty(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
@overload
def is_geometry(geometry: Geometry, **kwargs) -> Literal[True]: ...
def is_geometry(geometry: Geometry, **kwargs) -> _NPTrue: ...
@overload
def is_geometry(geometry: None, **kwargs) -> _NPFalse: ...
@overload
def is_geometry(geometry: ArrayLikeSeq[Any], **kwargs) -> NDArray[np.bool_]: ... # type: ignore[overload-overlap]
@overload
def is_geometry(geometry: object, **kwargs) -> TypeGuard[BaseGeometry]: ...
@overload
def is_missing(geometry: Geometry, **kwargs) -> Literal[True]: ...
def is_missing(geometry: Geometry, **kwargs) -> _NPFalse: ...
@overload
def is_missing(geometry: None, **kwargs) -> _NPTrue: ...
@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: ...
def is_prepared(geometry: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def is_prepared(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
@overload
def is_valid_input(geometry: Geometry | None, **kwargs) -> Literal[True]: ...
def is_valid_input(geometry: Geometry | None, **kwargs) -> _NPTrue: ...
@overload
def is_valid_input(geometry: ArrayLikeSeq[Any], **kwargs) -> NDArray[np.bool_]: ... # type: ignore[overload-overlap]
@overload
def is_valid_input(geometry: object, **kwargs) -> TypeGuard[BaseGeometry | None]: ...
@overload
def is_ring(geometry: Geometry | None, **kwargs) -> bool: ...
def is_ring(geometry: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def is_ring(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
@overload
def is_simple(geometry: Geometry | None, **kwargs) -> bool: ...
def is_simple(geometry: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def is_simple(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
@overload
def is_valid(geometry: Geometry | None, **kwargs) -> bool: ...
def is_valid(geometry: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def is_valid(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
@overload
@@ -103,67 +115,67 @@ def is_valid_reason(geometry: Geometry, **kwargs) -> str: ...
@overload
def is_valid_reason(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.object_]: ...
@overload
def crosses(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
def crosses(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def crosses(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
@overload
def crosses(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
@overload
def contains(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
def contains(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def contains(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
@overload
def contains(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
@overload
def contains_properly(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
def contains_properly(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def contains_properly(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
@overload
def contains_properly(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
@overload
def covered_by(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
def covered_by(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def covered_by(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
@overload
def covered_by(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
@overload
def covers(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
def covers(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def covers(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
@overload
def covers(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
@overload
def disjoint(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
def disjoint(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def disjoint(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
@overload
def disjoint(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
@overload
def equals(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
def equals(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def equals(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
@overload
def equals(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
@overload
def intersects(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
def intersects(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def intersects(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
@overload
def intersects(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
@overload
def overlaps(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
def overlaps(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def overlaps(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
@overload
def overlaps(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
@overload
def touches(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
def touches(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def touches(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
@overload
def touches(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
@overload
def within(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
def within(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def within(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
@overload
@@ -171,7 +183,7 @@ def within(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bo
@overload
def equals_exact(
a: Geometry | None, b: Geometry | None, tolerance: float = 0.0, *, normalize: bool = False, **kwargs
) -> bool: ...
) -> np.bool_: ...
@overload
def equals_exact(
a: OptGeoArrayLike, b: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], *, normalize: bool = False, **kwargs
@@ -185,7 +197,7 @@ def equals_exact(
a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, tolerance: ArrayLike[float] = 0.0, *, normalize: bool = False, **kwargs
) -> NDArray[np.bool_]: ...
@overload
def equals_identical(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
def equals_identical(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
@overload
def equals_identical(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
@overload
@@ -201,19 +213,19 @@ def relate(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.ob
@overload
def relate(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.object_]: ...
@overload
def relate_pattern(a: Geometry | None, b: Geometry | None, pattern: str, **kwargs) -> bool: ...
def relate_pattern(a: Geometry | None, b: Geometry | None, pattern: str, **kwargs) -> np.bool_: ...
@overload
def relate_pattern(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, pattern: str, **kwargs) -> NDArray[np.bool_]: ...
@overload
def relate_pattern(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, pattern: str, **kwargs) -> NDArray[np.bool_]: ...
@overload
def dwithin(a: Geometry | None, b: Geometry | None, distance: float, **kwargs) -> bool: ...
def dwithin(a: Geometry | None, b: Geometry | None, distance: float, **kwargs) -> np.bool_: ...
@overload
def dwithin(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, distance: float, **kwargs) -> NDArray[np.bool_]: ...
@overload
def dwithin(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, distance: float, **kwargs) -> NDArray[np.bool_]: ...
@overload
def contains_xy(geom: Geometry | None, x: float, y: float, **kwargs) -> bool: ...
def contains_xy(geom: Geometry | None, x: float, y: float, **kwargs) -> np.bool_: ...
@overload
def contains_xy(geom: OptGeoArrayLike, x: ArrayLikeSeq[float], y: None = None, **kwargs) -> NDArray[np.bool_]: ...
@overload
@@ -223,7 +235,7 @@ def contains_xy(geom: Geometry | None, x: ArrayLikeSeq[float], y: ArrayLike[floa
@overload
def contains_xy(geom: OptGeoArrayLikeSeq, x: ArrayLike[float], y: ArrayLike[float], **kwargs) -> NDArray[np.bool_]: ...
@overload
def intersects_xy(geom: Geometry | None, x: float, y: float, **kwargs) -> bool: ...
def intersects_xy(geom: Geometry | None, x: float, y: float, **kwargs) -> np.bool_: ...
@overload
def intersects_xy(geom: OptGeoArrayLike, x: ArrayLikeSeq[float], y: None = None, **kwargs) -> NDArray[np.bool_]: ...
@overload
+1 -1
View File
@@ -40,7 +40,7 @@ class STRtree:
) -> NDArray[np.int64]: ...
# nearest may return `None` if the tree is empty, use the "Any trick"
@overload
def nearest(self, geometry: Geometry) -> int | Any: ...
def nearest(self, geometry: Geometry) -> np.int64 | Any: ...
@overload
def nearest(self, geometry: GeoArrayLikeSeq) -> NDArray[np.int64] | Any: ...
@overload # return_distance=False
@@ -8,7 +8,7 @@ from ..lib import Geometry
from ..prepared import PreparedGeometry
@overload
def contains(geometry: Geometry | PreparedGeometry[Geometry], x: float, y: float) -> bool: ...
def contains(geometry: Geometry | PreparedGeometry[Geometry], x: float, y: float) -> np.bool_: ...
@overload
def contains(
geometry: Geometry | PreparedGeometry[Geometry], x: ArrayLikeSeq[float], y: ArrayLike[float]
@@ -20,9 +20,9 @@ def contains(
@overload
def contains(
geometry: Geometry | PreparedGeometry[Geometry], x: ArrayLike[float], y: ArrayLike[float]
) -> bool | NDArray[np.bool_]: ...
) -> np.bool_ | NDArray[np.bool_]: ...
@overload
def touches(geometry: Geometry | PreparedGeometry[Geometry], x: float, y: float) -> bool: ...
def touches(geometry: Geometry | PreparedGeometry[Geometry], x: float, y: float) -> np.bool_: ...
@overload
def touches(
geometry: Geometry | PreparedGeometry[Geometry], x: ArrayLikeSeq[float], y: ArrayLike[float]
@@ -34,4 +34,4 @@ def touches(
@overload
def touches(
geometry: Geometry | PreparedGeometry[Geometry], x: ArrayLike[float], y: ArrayLike[float]
) -> bool | NDArray[np.bool_]: ...
) -> np.bool_ | NDArray[np.bool_]: ...