Skip to content

Commit fbaced9

Browse files
authored
Fix shapely for 2.1 release (#14230)
1 parent c6ced0d commit fbaced9

File tree

10 files changed

+112
-72
lines changed

10 files changed

+112
-72
lines changed

stubs/shapely/shapely/__init__.pyi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from typing import Final
22

33
from . import affinity as affinity
4+
from ._coverage import *
45
from ._geometry import *
56
from .constructive import *
67
from .coordinates import *

stubs/shapely/shapely/_coverage.pyi

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from typing import overload
2+
3+
import numpy as np
4+
5+
from ._typing import ArrayLike, GeoArray, GeoArrayLikeSeq, OptGeoArrayLike
6+
from .geometry import Polygon
7+
8+
__all__ = ["coverage_invalid_edges", "coverage_is_valid", "coverage_simplify"]
9+
10+
def coverage_is_valid(geometry: OptGeoArrayLike, gap_width: float = 0.0, **kwargs) -> np.bool_: ...
11+
def coverage_invalid_edges(geometry: OptGeoArrayLike, gap_width: float = 0.0, **kwargs) -> GeoArray: ...
12+
@overload
13+
def coverage_simplify(geometry: Polygon, tolerance: ArrayLike[float], *, simplify_boundary: bool = True) -> Polygon: ...
14+
@overload
15+
def coverage_simplify(geometry: GeoArrayLikeSeq, tolerance: ArrayLike[float], *, simplify_boundary: bool = True) -> GeoArray: ...

stubs/shapely/shapely/constructive.pyi

Lines changed: 37 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -429,60 +429,79 @@ def voronoi_polygons(
429429
ordered: bool = False,
430430
**kwargs,
431431
) -> GeometryCollection[Polygon] | LineString | MultiLineString | None: ...
432-
@overload
432+
@overload # `geometry` as sequence-like
433433
def voronoi_polygons(
434434
geometry: OptGeoArrayLikeSeq,
435435
tolerance: ArrayLike[float] = 0.0,
436436
extend_to: OptGeoArrayLike = None,
437437
only_edges: ArrayLike[bool] = False,
438-
ordered: bool = False,
438+
ordered: ArrayLike[bool] = False,
439439
**kwargs,
440440
) -> GeoArray: ...
441-
@overload
441+
@overload # `tolerance` as sequence-like
442442
def voronoi_polygons(
443443
geometry: OptGeoArrayLike,
444444
tolerance: ArrayLikeSeq[float],
445445
extend_to: OptGeoArrayLike = None,
446446
only_edges: ArrayLike[bool] = False,
447-
ordered: bool = False,
447+
ordered: ArrayLike[bool] = False,
448448
**kwargs,
449449
) -> GeoArray: ...
450450
@overload
451-
def voronoi_polygons(
451+
def voronoi_polygons( # `extend_to` as positional sequence-like
452452
geometry: OptGeoArrayLike,
453453
tolerance: ArrayLike[float],
454454
extend_to: OptGeoArrayLikeSeq,
455455
only_edges: ArrayLike[bool] = False,
456-
ordered: bool = False,
456+
ordered: ArrayLike[bool] = False,
457457
**kwargs,
458458
) -> GeoArray: ...
459-
@overload
459+
@overload # `extend_to` as keyword sequence-like
460460
def voronoi_polygons(
461461
geometry: OptGeoArrayLike,
462462
tolerance: ArrayLike[float] = 0.0,
463463
*,
464464
extend_to: OptGeoArrayLikeSeq,
465465
only_edges: ArrayLike[bool] = False,
466-
ordered: bool = False,
466+
ordered: ArrayLike[bool] = False,
467467
**kwargs,
468468
) -> GeoArray: ...
469469
@overload
470-
def voronoi_polygons(
470+
def voronoi_polygons( # `only_edges` as positional sequence-like
471471
geometry: OptGeoArrayLike,
472472
tolerance: ArrayLike[float],
473473
extend_to: OptGeoArrayLike,
474474
only_edges: ArrayLikeSeq[bool],
475-
ordered: bool = False,
475+
ordered: ArrayLike[bool] = False,
476476
**kwargs,
477477
) -> GeoArray: ...
478478
@overload
479-
def voronoi_polygons(
479+
def voronoi_polygons( # `only_edges` as keyword sequence-like
480480
geometry: OptGeoArrayLike,
481481
tolerance: ArrayLike[float] = 0.0,
482482
extend_to: OptGeoArrayLike = None,
483483
*,
484484
only_edges: ArrayLikeSeq[bool],
485-
ordered: bool = False,
485+
ordered: ArrayLike[bool] = False,
486+
**kwargs,
487+
) -> GeoArray: ...
488+
@overload # `ordered` as positional sequence-like
489+
def voronoi_polygons(
490+
geometry: OptGeoArrayLike,
491+
tolerance: ArrayLike[float],
492+
extend_to: OptGeoArrayLike,
493+
only_edges: ArrayLike[bool],
494+
ordered: ArrayLikeSeq[bool],
495+
**kwargs,
496+
) -> GeoArray: ...
497+
@overload # `ordered` as keyword sequence-like
498+
def voronoi_polygons(
499+
geometry: OptGeoArrayLike,
500+
tolerance: ArrayLike[float] = 0.0,
501+
extend_to: OptGeoArrayLike = None,
502+
*,
503+
only_edges: ArrayLike[bool] = False,
504+
ordered: ArrayLikeSeq[bool],
486505
**kwargs,
487506
) -> GeoArray: ...
488507
@overload
@@ -511,26 +530,18 @@ def minimum_bounding_circle(geometry: Geometry | None, **kwargs) -> Polygon | Po
511530
@overload
512531
def minimum_bounding_circle(geometry: OptGeoArrayLikeSeq, **kwargs) -> GeoArray: ...
513532
@overload
514-
def maximum_inscribed_circle(geometry: Point, tolerance: float | None = None, **kwargs) -> Point: ...
515-
@overload
516-
def maximum_inscribed_circle(
517-
geometry: LineString | Polygon | BaseMultipartGeometry, tolerance: float | None = None, **kwargs
518-
): ...
519-
@overload
520-
def maximum_inscribed_circle(geometry: Geometry, tolerance: float | None = None, **kwargs) -> Polygon | Point: ...
533+
def maximum_inscribed_circle(geometry: Polygon | MultiPolygon, tolerance: float | None = None, **kwargs) -> LineString: ...
521534
@overload
522535
def maximum_inscribed_circle(geometry: None, tolerance: float | None = None, **kwargs) -> None: ...
523536
@overload
524-
def maximum_inscribed_circle(geometry: Geometry | None, tolerance: float | None = None, **kwargs) -> Polygon | Point | None: ...
537+
def maximum_inscribed_circle(
538+
geometry: Polygon | MultiPolygon | None, tolerance: float | None = None, **kwargs
539+
) -> LineString | None: ...
525540
@overload
526541
def maximum_inscribed_circle(geometry: OptGeoArrayLikeSeq, tolerance: ArrayLike[float] | None = None, **kwargs) -> GeoArray: ...
527542
@overload
528-
def orient_polygons(geometry: Point, *, exterior_cw: bool = False, **kwargs) -> Point: ...
529-
@overload
530-
def orient_polygons(geometry: Geometry, *, exterior_cw: bool = False, **kwargs) -> BaseGeometry: ...
531-
@overload
532-
def orient_polygons(geometry: None, *, exterior_cw: bool = False, **kwargs) -> None: ...
543+
def maximum_inscribed_circle(geometry: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], **kwargs) -> GeoArray: ...
533544
@overload
534-
def orient_polygons(geometry: Geometry | None, *, exterior_cw: bool = False, **kwargs) -> BaseGeometry | None: ...
545+
def orient_polygons(geometry: OptGeoT, *, exterior_cw: bool = False, **kwargs) -> OptGeoT: ...
535546
@overload
536547
def orient_polygons(geometry: OptGeoArrayLikeSeq, *, exterior_cw: bool = False, **kwargs) -> GeoArray: ...

stubs/shapely/shapely/creation.pyi

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,26 @@ from .geometry import GeometryCollection, LinearRing, LineString, MultiLineStrin
1212
from .lib import Geometry
1313

1414
__all__ = [
15-
"points",
16-
"linestrings",
15+
"box",
16+
"destroy_prepared",
17+
"empty",
18+
"geometrycollections",
1719
"linearrings",
18-
"polygons",
19-
"multipoints",
20+
"linestrings",
2021
"multilinestrings",
22+
"multipoints",
2123
"multipolygons",
22-
"geometrycollections",
23-
"box",
24+
"points",
25+
"polygons",
2426
"prepare",
25-
"destroy_prepared",
26-
"empty",
2727
]
2828

2929
class HandleNaN(ParamEnum):
3030
allow = 0
3131
skip = 1
3232
error = 2
3333

34-
_HandleNaN: TypeAlias = Literal[0, 1, 2] | HandleNaN
34+
_HandleNaN: TypeAlias = Literal["allow", "skip", "error"] | HandleNaN
3535

3636
@overload
3737
def points(
@@ -40,7 +40,7 @@ def points(
4040
z: float | None = None,
4141
indices: None = None,
4242
*,
43-
handle_nan: _HandleNaN = 0,
43+
handle_nan: _HandleNaN = ...,
4444
out: None = None,
4545
**kwargs, # acts as x
4646
) -> Point: ...
@@ -51,7 +51,7 @@ def points(
5151
z: None = None,
5252
indices: None = None,
5353
*,
54-
handle_nan: _HandleNaN = 0,
54+
handle_nan: _HandleNaN = ...,
5555
out: None = None,
5656
**kwargs, # acts as x, y[, z]
5757
) -> Point: ...
@@ -62,7 +62,7 @@ def points(
6262
z: Sequence[float] | None = None,
6363
indices: ArrayLikeSeq[int] | None = None,
6464
*,
65-
handle_nan: _HandleNaN = 0,
65+
handle_nan: _HandleNaN = ...,
6666
out: NDArray[np.object_] | None = None,
6767
**kwargs,
6868
) -> GeoArray: ...
@@ -73,7 +73,7 @@ def points(
7373
z: None = None,
7474
indices: ArrayLikeSeq[int] | None = None,
7575
*,
76-
handle_nan: _HandleNaN = 0,
76+
handle_nan: _HandleNaN = ...,
7777
out: NDArray[np.object_] | None = None,
7878
**kwargs,
7979
) -> GeoArray: ...
@@ -84,7 +84,7 @@ def points(
8484
z: ArrayLike[float] | None = None,
8585
indices: ArrayLikeSeq[int] | None = None,
8686
*,
87-
handle_nan: _HandleNaN = 0,
87+
handle_nan: _HandleNaN = ...,
8888
out: NDArray[np.object_] | None = None,
8989
**kwargs,
9090
) -> Point | GeoArray: ...
@@ -95,7 +95,7 @@ def points(
9595
z: ArrayLike[float] | None = None,
9696
indices: ArrayLikeSeq[int] | None = None,
9797
*,
98-
handle_nan: _HandleNaN = 0,
98+
handle_nan: _HandleNaN = ...,
9999
out: NDArray[np.object_] | None = None,
100100
**kwargs,
101101
) -> Point | GeoArray: ...
@@ -106,7 +106,7 @@ def linestrings(
106106
z: Sequence[float] | None = None,
107107
indices: None = None,
108108
*,
109-
handle_nan: _HandleNaN = 0,
109+
handle_nan: _HandleNaN = ...,
110110
out: None = None,
111111
**kwargs,
112112
) -> LineString: ...
@@ -117,7 +117,7 @@ def linestrings(
117117
z: None = None,
118118
indices: None = None,
119119
*,
120-
handle_nan: _HandleNaN = 0,
120+
handle_nan: _HandleNaN = ...,
121121
out: None = None,
122122
**kwargs,
123123
) -> LineString: ...
@@ -128,7 +128,7 @@ def linestrings(
128128
z: None = None,
129129
indices: ArrayLikeSeq[int] | None = None,
130130
*,
131-
handle_nan: _HandleNaN = 0,
131+
handle_nan: _HandleNaN = ...,
132132
out: NDArray[np.object_] | None = None,
133133
**kwargs,
134134
) -> GeoArray: ...
@@ -139,7 +139,7 @@ def linestrings(
139139
z: ArrayLikeSeq[float] | None = None,
140140
indices: ArrayLikeSeq[int] | None = None,
141141
*,
142-
handle_nan: _HandleNaN = 0,
142+
handle_nan: _HandleNaN = ...,
143143
out: NDArray[np.object_] | None = None,
144144
**kwargs,
145145
) -> LineString | GeoArray: ...
@@ -150,7 +150,7 @@ def linearrings(
150150
z: Sequence[float] | None = None,
151151
indices: None = None,
152152
*,
153-
handle_nan: _HandleNaN = 0,
153+
handle_nan: _HandleNaN = ...,
154154
out: None = None,
155155
**kwargs,
156156
) -> LinearRing: ...
@@ -161,7 +161,7 @@ def linearrings(
161161
z: None = None,
162162
indices: None = None,
163163
*,
164-
handle_nan: _HandleNaN = 0,
164+
handle_nan: _HandleNaN = ...,
165165
out: None = None,
166166
**kwargs,
167167
) -> LinearRing: ...
@@ -172,7 +172,7 @@ def linearrings(
172172
z: None = None,
173173
indices: ArrayLikeSeq[int] | None = None,
174174
*,
175-
handle_nan: _HandleNaN = 0,
175+
handle_nan: _HandleNaN = ...,
176176
out: NDArray[np.object_] | None = None,
177177
**kwargs,
178178
) -> GeoArray: ...
@@ -183,7 +183,7 @@ def linearrings(
183183
z: ArrayLikeSeq[float] | None = None,
184184
indices: ArrayLikeSeq[int] | None = None,
185185
*,
186-
handle_nan: _HandleNaN = 0,
186+
handle_nan: _HandleNaN = ...,
187187
out: NDArray[np.object_] | None = None,
188188
**kwargs,
189189
) -> LinearRing | GeoArray: ...

stubs/shapely/shapely/decorators.pyi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from collections.abc import Callable, Iterable
1+
from collections.abc import Callable, Container
22
from typing import TypeVar
33

44
_F = TypeVar("_F", bound=Callable[..., object])
@@ -9,4 +9,4 @@ class requires_geos:
99
def __call__(self, func: _F) -> _F: ...
1010

1111
def multithreading_enabled(func: _F) -> _F: ...
12-
def deprecate_positional(should_be_kwargs: Iterable[str], category: type[Warning] = ...) -> Callable[..., object]: ...
12+
def deprecate_positional(should_be_kwargs: Container[str], category: type[Warning] = ...) -> Callable[..., object]: ...

stubs/shapely/shapely/geometry/base.pyi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ class BaseGeometry(Geometry):
127127
single_sided: bool = False,
128128
*,
129129
quadsegs: int | None = None, # deprecated
130-
resolution: int | None = None, # to be deprecated
130+
resolution: int | None = None, # deprecated
131131
) -> Polygon: ...
132132
def simplify(self, tolerance: float, preserve_topology: bool = True) -> BaseGeometry: ...
133133
def normalize(self) -> BaseGeometry: ...
@@ -226,7 +226,7 @@ class BaseGeometry(Geometry):
226226
@overload
227227
def dwithin(self, other: OptGeoArrayLike, distance: ArrayLikeSeq[float]) -> NDArray[np.bool_]: ...
228228
@overload
229-
def equals_exact(self, other: Geometry | None, tolerance: float = 0.0, *, normalize: Literal[False] = False) -> bool: ...
229+
def equals_exact(self, other: Geometry | None, tolerance: float = 0.0, *, normalize: bool = False) -> bool: ...
230230
@overload
231231
def equals_exact(
232232
self, other: OptGeoArrayLikeSeq, tolerance: float = 0.0, *, normalize: bool = False

stubs/shapely/shapely/io.pyi

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ _OutputDimension: TypeAlias = Literal[2, 3, 4]
1717

1818
# Mypy and stubtest aren't happy with the following definition and
1919
# raise is a reserved keyword, so we cannot use the class syntax of enums
20-
# DecodingErrorOptions = ParamEnum("DecodingErrorOptions", {"ignore": 0, "warn": 1, "raise": 2})
20+
# DecodingErrorOptions = ParamEnum("DecodingErrorOptions", {"ignore": 0, "warn": 1, "raise": 2, "fix": 3})
2121
DecodingErrorOptions: Incomplete
2222

2323
class WKBFlavorOptions(ParamEnum):
@@ -128,26 +128,30 @@ def to_geojson(geometry: Geometry, indent: int | None = None, **kwargs) -> str:
128128
@overload
129129
def to_geojson(geometry: OptGeoArrayLikeSeq, indent: int | None = None, **kwargs) -> NDArray[np.str_]: ...
130130
@overload
131-
def from_wkt(geometry: None, on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs) -> None: ...
131+
def from_wkt(geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs) -> None: ...
132132
@overload
133-
def from_wkt(geometry: str, on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs) -> BaseGeometry: ... # type: ignore[overload-overlap]
133+
def from_wkt(geometry: str, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs) -> BaseGeometry: ... # type: ignore[overload-overlap]
134134
@overload
135135
def from_wkt(
136-
geometry: ArrayLikeSeq[str | None], on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs
136+
geometry: ArrayLikeSeq[str | None], on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs
137137
) -> GeoArray: ...
138138
@overload
139-
def from_wkb(geometry: None, on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs) -> None: ...
139+
def from_wkb(geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs) -> None: ...
140140
@overload
141-
def from_wkb(geometry: str | bytes, on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs) -> BaseGeometry: ... # type: ignore[overload-overlap]
141+
def from_wkb(
142+
geometry: str | bytes, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs
143+
) -> BaseGeometry: ... # type: ignore[overload-overlap]
142144
@overload
143145
def from_wkb(
144-
geometry: ArrayLikeSeq[str | bytes | None], on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs
146+
geometry: ArrayLikeSeq[str | bytes | None], on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs
145147
) -> GeoArray: ...
146148
@overload
147-
def from_geojson(geometry: None, on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs) -> None: ...
149+
def from_geojson(geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs) -> None: ...
148150
@overload
149-
def from_geojson(geometry: str | bytes, on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs) -> BaseGeometry: ... # type: ignore[overload-overlap]
151+
def from_geojson(
152+
geometry: str | bytes, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs
153+
) -> BaseGeometry: ... # type: ignore[overload-overlap]
150154
@overload
151155
def from_geojson(
152-
geometry: ArrayLikeSeq[str | bytes | None], on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs
156+
geometry: ArrayLikeSeq[str | bytes | None], on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs
153157
) -> GeoArray: ...

0 commit comments

Comments
 (0)