Fix shapely for 2.1 release (#14230)

This commit is contained in:
Ali Hamdan
2025-07-09 09:42:57 +02:00
committed by GitHub
parent c6ced0deda
commit fbaced9227
10 changed files with 115 additions and 75 deletions
+1
View File
@@ -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 *
+15
View File
@@ -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: ...
+37 -26
View File
@@ -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: ...
def maximum_inscribed_circle(geometry: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], **kwargs) -> GeoArray: ...
@overload
def orient_polygons(geometry: Geometry, *, exterior_cw: bool = False, **kwargs) -> BaseGeometry: ...
@overload
def orient_polygons(geometry: None, *, exterior_cw: bool = False, **kwargs) -> None: ...
@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: ...
+24 -24
View File
@@ -12,18 +12,18 @@ from .geometry import GeometryCollection, LinearRing, LineString, MultiLineStrin
from .lib import Geometry
__all__ = [
"points",
"linestrings",
"linearrings",
"polygons",
"multipoints",
"multilinestrings",
"multipolygons",
"geometrycollections",
"box",
"prepare",
"destroy_prepared",
"empty",
"geometrycollections",
"linearrings",
"linestrings",
"multilinestrings",
"multipoints",
"multipolygons",
"points",
"polygons",
"prepare",
]
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: ...
+2 -2
View File
@@ -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]: ...
+2 -2
View File
@@ -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
+16 -12
View File
@@ -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: ...
@overload
def from_wkb(geometry: str | bytes, on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs) -> BaseGeometry: ... # type: ignore[overload-overlap]
def from_wkb(geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs) -> None: ...
@overload
def from_wkb(
geometry: ArrayLikeSeq[str | bytes | None], on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs
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", "fix"] = "raise", **kwargs
) -> GeoArray: ...
@overload
def from_geojson(geometry: None, on_invalid: Literal["raise", "warn", "ignore"] = "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: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs) -> None: ...
@overload
def from_geojson(
geometry: ArrayLikeSeq[str | bytes | None], on_invalid: Literal["raise", "warn", "ignore"] = "raise", **kwargs
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", "fix"] = "raise", **kwargs
) -> GeoArray: ...
+5 -5
View File
@@ -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
+4 -4
View File
@@ -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
@@ -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) -> np.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]
) -> np.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) -> np.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]
) -> np.bool_ | NDArray[np.bool_]: ...