Skip to content

Commit cb31604

Browse files
authored
Fix shapely return types coming from numpy ufuncs (#14231)
1 parent 28d8ff1 commit cb31604

File tree

7 files changed

+72
-58
lines changed

7 files changed

+72
-58
lines changed

stubs/shapely/shapely/_geometry.pyi

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -52,23 +52,23 @@ class GeometryType(IntEnum):
5252
GEOMETRYCOLLECTION = 7
5353

5454
@overload
55-
def get_type_id(geometry: Geometry | None, **kwargs) -> int: ...
55+
def get_type_id(geometry: Geometry | None, **kwargs) -> np.int32: ...
5656
@overload
5757
def get_type_id(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.int64]: ...
5858
@overload
59-
def get_dimensions(geometry: Geometry | None, **kwargs) -> int: ...
59+
def get_dimensions(geometry: Geometry | None, **kwargs) -> np.int32: ...
6060
@overload
6161
def get_dimensions(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.int64]: ...
6262
@overload
63-
def get_coordinate_dimension(geometry: Geometry | None, **kwargs) -> int: ...
63+
def get_coordinate_dimension(geometry: Geometry | None, **kwargs) -> np.int32: ...
6464
@overload
6565
def get_coordinate_dimension(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.int64]: ...
6666
@overload
67-
def get_num_coordinates(geometry: Geometry | None, **kwargs) -> int: ...
67+
def get_num_coordinates(geometry: Geometry | None, **kwargs) -> np.int32: ...
6868
@overload
6969
def get_num_coordinates(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.int64]: ...
7070
@overload
71-
def get_srid(geometry: Geometry | None, **kwargs) -> int: ...
71+
def get_srid(geometry: Geometry | None, **kwargs) -> np.int32: ...
7272
@overload
7373
def get_srid(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.int64]: ...
7474
@overload
@@ -78,19 +78,19 @@ def set_srid(geometry: OptGeoArrayLikeSeq, srid: ArrayLike[SupportsIndex], **kwa
7878
@overload
7979
def set_srid(geometry: OptGeoArrayLike, srid: ArrayLikeSeq[SupportsIndex], **kwargs) -> GeoArray: ...
8080
@overload
81-
def get_x(point: Geometry | None, **kwargs) -> float: ...
81+
def get_x(point: Geometry | None, **kwargs) -> np.float64: ...
8282
@overload
8383
def get_x(point: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ...
8484
@overload
85-
def get_y(point: Geometry | None, **kwargs) -> float: ...
85+
def get_y(point: Geometry | None, **kwargs) -> np.float64: ...
8686
@overload
8787
def get_y(point: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ...
8888
@overload
89-
def get_z(point: Geometry | None, **kwargs) -> float: ...
89+
def get_z(point: Geometry | None, **kwargs) -> np.float64: ...
9090
@overload
9191
def get_z(point: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ...
9292
@overload
93-
def get_m(point: Geometry | None, **kwargs) -> float: ...
93+
def get_m(point: Geometry | None, **kwargs) -> np.float64: ...
9494
@overload
9595
def get_m(point: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ...
9696
@overload
@@ -104,7 +104,7 @@ def get_point(geometry: OptGeoArrayLikeSeq, index: ArrayLike[SupportsIndex], **k
104104
@overload
105105
def get_point(geometry: OptGeoArrayLike, index: ArrayLikeSeq[SupportsIndex], **kwargs) -> GeoArray: ...
106106
@overload
107-
def get_num_points(geometry: Geometry | None, **kwargs) -> int: ...
107+
def get_num_points(geometry: Geometry | None, **kwargs) -> np.int32: ...
108108
@overload
109109
def get_num_points(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.int64]: ...
110110
@overload
@@ -126,7 +126,7 @@ def get_interior_ring(geometry: OptGeoArrayLikeSeq, index: ArrayLike[SupportsInd
126126
@overload
127127
def get_interior_ring(geometry: OptGeoArrayLike, index: ArrayLikeSeq[SupportsIndex], **kwargs) -> GeoArray: ...
128128
@overload
129-
def get_num_interior_rings(geometry: Geometry | None, **kwargs) -> int: ...
129+
def get_num_interior_rings(geometry: Geometry | None, **kwargs) -> np.int32: ...
130130
@overload
131131
def get_num_interior_rings(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.int64]: ...
132132
@overload
@@ -158,11 +158,11 @@ def get_rings(geometry: OptGeoArrayLike, return_index: Literal[True]) -> tuple[G
158158
@overload
159159
def get_rings(geometry: OptGeoArrayLike, return_index: bool) -> GeoArray | tuple[GeoArray, NDArray[np.int64]]: ...
160160
@overload
161-
def get_num_geometries(geometry: Geometry | None, **kwargs) -> int: ...
161+
def get_num_geometries(geometry: Geometry | None, **kwargs) -> np.int32: ...
162162
@overload
163163
def get_num_geometries(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.int64]: ...
164164
@overload
165-
def get_precision(geometry: Geometry | None, **kwargs) -> float: ...
165+
def get_precision(geometry: Geometry | None, **kwargs) -> np.float64: ...
166166
@overload
167167
def get_precision(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ...
168168

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import numpy as np
2+
13
from ..geometry import LinearRing
24

3-
def signed_area(ring: LinearRing) -> float: ...
5+
def signed_area(ring: LinearRing) -> np.float64: ...

stubs/shapely/shapely/linear.pyi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def line_interpolate_point(
3030
@overload
3131
def line_locate_point(
3232
line: LineString | MultiLineString | GeometryCollection | None, other: Point | None, normalized: bool = False, **kwargs
33-
) -> float: ...
33+
) -> np.float64: ...
3434
@overload
3535
def line_locate_point(
3636
line: LineString | MultiLineString | GeometryCollection | None, other: OptGeoArrayLikeSeq, normalized: bool = False, **kwargs

stubs/shapely/shapely/measurement.pyi

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,23 @@ __all__ = [
1919
]
2020

2121
@overload
22-
def area(geometry: Geometry | None, **kwargs) -> float: ...
22+
def area(geometry: Geometry | None, **kwargs) -> np.float64: ...
2323
@overload
2424
def area(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ...
2525
@overload
26-
def distance(a: Geometry | None, b: Geometry | None, **kwargs) -> float: ...
26+
def distance(a: Geometry | None, b: Geometry | None, **kwargs) -> np.float64: ...
2727
@overload
2828
def distance(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.float64]: ...
2929
@overload
3030
def distance(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ...
3131
def bounds(geometry: OptGeoArrayLike, **kwargs) -> NDArray[np.float64]: ...
3232
def total_bounds(geometry: OptGeoArrayLike, **kwargs) -> NDArray[np.float64]: ...
3333
@overload
34-
def length(geometry: Geometry | None, **kwargs) -> float: ...
34+
def length(geometry: Geometry | None, **kwargs) -> np.float64: ...
3535
@overload
3636
def length(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ...
3737
@overload
38-
def hausdorff_distance(a: Geometry | None, b: Geometry | None, densify: float | None = None, **kwargs) -> float: ...
38+
def hausdorff_distance(a: Geometry | None, b: Geometry | None, densify: float | None = None, **kwargs) -> np.float64: ...
3939
@overload
4040
def hausdorff_distance(a: OptGeoArrayLike, b: OptGeoArrayLike, densify: ArrayLikeSeq[float], **kwargs) -> NDArray[np.float64]: ...
4141
@overload
@@ -47,7 +47,7 @@ def hausdorff_distance(
4747
a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, densify: ArrayLike[float] | None = None, **kwargs
4848
) -> NDArray[np.float64]: ...
4949
@overload
50-
def frechet_distance(a: Geometry | None, b: Geometry | None, densify: float | None = None, **kwargs) -> float: ...
50+
def frechet_distance(a: Geometry | None, b: Geometry | None, densify: float | None = None, **kwargs) -> np.float64: ...
5151
@overload
5252
def frechet_distance(a: OptGeoArrayLike, b: OptGeoArrayLike, densify: ArrayLikeSeq[float], **kwargs) -> NDArray[np.float64]: ...
5353
@overload
@@ -59,10 +59,10 @@ def frechet_distance(
5959
a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, densify: ArrayLike[float] | None = None, **kwargs
6060
) -> NDArray[np.float64]: ...
6161
@overload
62-
def minimum_clearance(geometry: Geometry | None, **kwargs) -> float: ...
62+
def minimum_clearance(geometry: Geometry | None, **kwargs) -> np.float64: ...
6363
@overload
6464
def minimum_clearance(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ...
6565
@overload
66-
def minimum_bounding_radius(geometry: Geometry | None, **kwargs) -> float: ...
66+
def minimum_bounding_radius(geometry: Geometry | None, **kwargs) -> np.float64: ...
6767
@overload
6868
def minimum_bounding_radius(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ...

stubs/shapely/shapely/predicates.pyi

Lines changed: 43 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
import sys
12
from typing import Any, Literal, overload
2-
from typing_extensions import TypeGuard
3+
from typing_extensions import TypeAlias, TypeGuard
34

45
import numpy as np
56
from numpy.typing import NDArray
@@ -8,6 +9,13 @@ from ._typing import ArrayLike, ArrayLikeSeq, OptGeoArrayLike, OptGeoArrayLikeSe
89
from .geometry.base import BaseGeometry
910
from .lib import Geometry
1011

12+
if sys.version_info >= (3, 10):
13+
_NPTrue: TypeAlias = np.bool_[Literal[True]]
14+
_NPFalse: TypeAlias = np.bool_[Literal[False]]
15+
else:
16+
_NPTrue: TypeAlias = np.bool_
17+
_NPFalse: TypeAlias = np.bool_
18+
1119
__all__ = [
1220
"contains",
1321
"contains_properly",
@@ -43,57 +51,61 @@ __all__ = [
4351
]
4452

4553
@overload
46-
def has_z(geometry: Geometry | None, **kwargs) -> bool: ...
54+
def has_z(geometry: Geometry | None, **kwargs) -> np.bool_: ...
4755
@overload
4856
def has_z(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
4957
@overload
50-
def has_m(geometry: Geometry | None, **kwargs) -> bool: ...
58+
def has_m(geometry: Geometry | None, **kwargs) -> np.bool_: ...
5159
@overload
5260
def has_m(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
5361
@overload
54-
def is_ccw(geometry: Geometry | None, **kwargs) -> bool: ...
62+
def is_ccw(geometry: Geometry | None, **kwargs) -> np.bool_: ...
5563
@overload
5664
def is_ccw(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
5765
@overload
58-
def is_closed(geometry: Geometry | None, **kwargs) -> bool: ...
66+
def is_closed(geometry: Geometry | None, **kwargs) -> np.bool_: ...
5967
@overload
6068
def is_closed(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
6169
@overload
62-
def is_empty(geometry: Geometry | None, **kwargs) -> bool: ...
70+
def is_empty(geometry: Geometry | None, **kwargs) -> np.bool_: ...
6371
@overload
6472
def is_empty(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
6573
@overload
66-
def is_geometry(geometry: Geometry, **kwargs) -> Literal[True]: ...
74+
def is_geometry(geometry: Geometry, **kwargs) -> _NPTrue: ...
75+
@overload
76+
def is_geometry(geometry: None, **kwargs) -> _NPFalse: ...
6777
@overload
6878
def is_geometry(geometry: ArrayLikeSeq[Any], **kwargs) -> NDArray[np.bool_]: ... # type: ignore[overload-overlap]
6979
@overload
7080
def is_geometry(geometry: object, **kwargs) -> TypeGuard[BaseGeometry]: ...
7181
@overload
72-
def is_missing(geometry: Geometry, **kwargs) -> Literal[True]: ...
82+
def is_missing(geometry: Geometry, **kwargs) -> _NPFalse: ...
83+
@overload
84+
def is_missing(geometry: None, **kwargs) -> _NPTrue: ...
7385
@overload
7486
def is_missing(geometry: ArrayLikeSeq[Any], **kwargs) -> NDArray[np.bool_]: ... # type: ignore[overload-overlap]
7587
@overload
76-
def is_missing(geometry: object, **kwargs) -> TypeGuard[BaseGeometry]: ...
88+
def is_missing(geometry: object, **kwargs) -> TypeGuard[None]: ...
7789
@overload
78-
def is_prepared(geometry: Geometry | None, **kwargs) -> bool: ...
90+
def is_prepared(geometry: Geometry | None, **kwargs) -> np.bool_: ...
7991
@overload
8092
def is_prepared(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
8193
@overload
82-
def is_valid_input(geometry: Geometry | None, **kwargs) -> Literal[True]: ...
94+
def is_valid_input(geometry: Geometry | None, **kwargs) -> _NPTrue: ...
8395
@overload
8496
def is_valid_input(geometry: ArrayLikeSeq[Any], **kwargs) -> NDArray[np.bool_]: ... # type: ignore[overload-overlap]
8597
@overload
8698
def is_valid_input(geometry: object, **kwargs) -> TypeGuard[BaseGeometry | None]: ...
8799
@overload
88-
def is_ring(geometry: Geometry | None, **kwargs) -> bool: ...
100+
def is_ring(geometry: Geometry | None, **kwargs) -> np.bool_: ...
89101
@overload
90102
def is_ring(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
91103
@overload
92-
def is_simple(geometry: Geometry | None, **kwargs) -> bool: ...
104+
def is_simple(geometry: Geometry | None, **kwargs) -> np.bool_: ...
93105
@overload
94106
def is_simple(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
95107
@overload
96-
def is_valid(geometry: Geometry | None, **kwargs) -> bool: ...
108+
def is_valid(geometry: Geometry | None, **kwargs) -> np.bool_: ...
97109
@overload
98110
def is_valid(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
99111
@overload
@@ -103,75 +115,75 @@ def is_valid_reason(geometry: Geometry, **kwargs) -> str: ...
103115
@overload
104116
def is_valid_reason(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.object_]: ...
105117
@overload
106-
def crosses(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
118+
def crosses(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
107119
@overload
108120
def crosses(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
109121
@overload
110122
def crosses(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
111123
@overload
112-
def contains(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
124+
def contains(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
113125
@overload
114126
def contains(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
115127
@overload
116128
def contains(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
117129
@overload
118-
def contains_properly(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
130+
def contains_properly(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
119131
@overload
120132
def contains_properly(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
121133
@overload
122134
def contains_properly(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
123135
@overload
124-
def covered_by(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
136+
def covered_by(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
125137
@overload
126138
def covered_by(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
127139
@overload
128140
def covered_by(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
129141
@overload
130-
def covers(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
142+
def covers(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
131143
@overload
132144
def covers(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
133145
@overload
134146
def covers(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
135147
@overload
136-
def disjoint(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
148+
def disjoint(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
137149
@overload
138150
def disjoint(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
139151
@overload
140152
def disjoint(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
141153
@overload
142-
def equals(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
154+
def equals(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
143155
@overload
144156
def equals(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
145157
@overload
146158
def equals(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
147159
@overload
148-
def intersects(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
160+
def intersects(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
149161
@overload
150162
def intersects(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
151163
@overload
152164
def intersects(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
153165
@overload
154-
def overlaps(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
166+
def overlaps(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
155167
@overload
156168
def overlaps(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
157169
@overload
158170
def overlaps(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
159171
@overload
160-
def touches(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
172+
def touches(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
161173
@overload
162174
def touches(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
163175
@overload
164176
def touches(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
165177
@overload
166-
def within(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
178+
def within(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
167179
@overload
168180
def within(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
169181
@overload
170182
def within(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ...
171183
@overload
172184
def equals_exact(
173185
a: Geometry | None, b: Geometry | None, tolerance: float = 0.0, *, normalize: bool = False, **kwargs
174-
) -> bool: ...
186+
) -> np.bool_: ...
175187
@overload
176188
def equals_exact(
177189
a: OptGeoArrayLike, b: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], *, normalize: bool = False, **kwargs
@@ -185,7 +197,7 @@ def equals_exact(
185197
a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, tolerance: ArrayLike[float] = 0.0, *, normalize: bool = False, **kwargs
186198
) -> NDArray[np.bool_]: ...
187199
@overload
188-
def equals_identical(a: Geometry | None, b: Geometry | None, **kwargs) -> bool: ...
200+
def equals_identical(a: Geometry | None, b: Geometry | None, **kwargs) -> np.bool_: ...
189201
@overload
190202
def equals_identical(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ...
191203
@overload
@@ -201,19 +213,19 @@ def relate(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.ob
201213
@overload
202214
def relate(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.object_]: ...
203215
@overload
204-
def relate_pattern(a: Geometry | None, b: Geometry | None, pattern: str, **kwargs) -> bool: ...
216+
def relate_pattern(a: Geometry | None, b: Geometry | None, pattern: str, **kwargs) -> np.bool_: ...
205217
@overload
206218
def relate_pattern(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, pattern: str, **kwargs) -> NDArray[np.bool_]: ...
207219
@overload
208220
def relate_pattern(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, pattern: str, **kwargs) -> NDArray[np.bool_]: ...
209221
@overload
210-
def dwithin(a: Geometry | None, b: Geometry | None, distance: float, **kwargs) -> bool: ...
222+
def dwithin(a: Geometry | None, b: Geometry | None, distance: float, **kwargs) -> np.bool_: ...
211223
@overload
212224
def dwithin(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, distance: float, **kwargs) -> NDArray[np.bool_]: ...
213225
@overload
214226
def dwithin(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, distance: float, **kwargs) -> NDArray[np.bool_]: ...
215227
@overload
216-
def contains_xy(geom: Geometry | None, x: float, y: float, **kwargs) -> bool: ...
228+
def contains_xy(geom: Geometry | None, x: float, y: float, **kwargs) -> np.bool_: ...
217229
@overload
218230
def contains_xy(geom: OptGeoArrayLike, x: ArrayLikeSeq[float], y: None = None, **kwargs) -> NDArray[np.bool_]: ...
219231
@overload
@@ -223,7 +235,7 @@ def contains_xy(geom: Geometry | None, x: ArrayLikeSeq[float], y: ArrayLike[floa
223235
@overload
224236
def contains_xy(geom: OptGeoArrayLikeSeq, x: ArrayLike[float], y: ArrayLike[float], **kwargs) -> NDArray[np.bool_]: ...
225237
@overload
226-
def intersects_xy(geom: Geometry | None, x: float, y: float, **kwargs) -> bool: ...
238+
def intersects_xy(geom: Geometry | None, x: float, y: float, **kwargs) -> np.bool_: ...
227239
@overload
228240
def intersects_xy(geom: OptGeoArrayLike, x: ArrayLikeSeq[float], y: None = None, **kwargs) -> NDArray[np.bool_]: ...
229241
@overload

stubs/shapely/shapely/strtree.pyi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class STRtree:
4040
) -> NDArray[np.int64]: ...
4141
# nearest may return `None` if the tree is empty, use the "Any trick"
4242
@overload
43-
def nearest(self, geometry: Geometry) -> int | Any: ...
43+
def nearest(self, geometry: Geometry) -> np.int64 | Any: ...
4444
@overload
4545
def nearest(self, geometry: GeoArrayLikeSeq) -> NDArray[np.int64] | Any: ...
4646
@overload # return_distance=False

0 commit comments

Comments
 (0)