Skip to content

Fix shapely return types coming from numpy ufuncs #14231

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 13 additions & 13 deletions stubs/shapely/shapely/_geometry.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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]: ...

Expand Down
4 changes: 3 additions & 1 deletion stubs/shapely/shapely/algorithms/cga.pyi
Original file line number Diff line number Diff line change
@@ -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: ...
2 changes: 1 addition & 1 deletion stubs/shapely/shapely/linear.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
14 changes: 7 additions & 7 deletions stubs/shapely/shapely/measurement.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -19,23 +19,23 @@ __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
def distance(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ...
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
Expand All @@ -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
Expand All @@ -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]: ...
74 changes: 43 additions & 31 deletions stubs/shapely/shapely/predicates.pyi
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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",
Expand Down Expand Up @@ -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
Expand All @@ -103,75 +115,75 @@ 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
def within(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
@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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion stubs/shapely/shapely/strtree.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading