Skip to content

Fix shapely for 2.1 release #14230

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 1 commit 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
1 change: 1 addition & 0 deletions stubs/shapely/shapely/__init__.pyi
Original file line number Diff line number Diff line change
@@ -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 *
Expand Down
15 changes: 15 additions & 0 deletions stubs/shapely/shapely/_coverage.pyi
Original file line number Diff line number Diff line change
@@ -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: ...
63 changes: 37 additions & 26 deletions stubs/shapely/shapely/constructive.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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: ...
@overload
def orient_polygons(geometry: Geometry, *, exterior_cw: bool = False, **kwargs) -> BaseGeometry: ...
@overload
def orient_polygons(geometry: None, *, exterior_cw: bool = False, **kwargs) -> None: ...
def maximum_inscribed_circle(geometry: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], **kwargs) -> GeoArray: ...
@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: ...
46 changes: 23 additions & 23 deletions stubs/shapely/shapely/creation.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -12,26 +12,26 @@ from .geometry import GeometryCollection, LinearRing, LineString, MultiLineStrin
from .lib import Geometry

__all__ = [
"points",
"linestrings",
"box",
"destroy_prepared",
"empty",
"geometrycollections",
"linearrings",
"polygons",
"multipoints",
"linestrings",
"multilinestrings",
"multipoints",
"multipolygons",
"geometrycollections",
"box",
"points",
"polygons",
"prepare",
"destroy_prepared",
"empty",
]

class HandleNaN(ParamEnum):
allow = 0
skip = 1
error = 2

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

@overload
def points(
Expand All @@ -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: ...
Expand All @@ -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: ...
Expand All @@ -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: ...
Expand All @@ -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: ...
Expand All @@ -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: ...
Expand All @@ -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: ...
Expand All @@ -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: ...
Expand All @@ -117,7 +117,7 @@ def linestrings(
z: None = None,
indices: None = None,
*,
handle_nan: _HandleNaN = 0,
handle_nan: _HandleNaN = ...,
out: None = None,
**kwargs,
) -> LineString: ...
Expand All @@ -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: ...
Expand All @@ -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: ...
Expand All @@ -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: ...
Expand All @@ -161,7 +161,7 @@ def linearrings(
z: None = None,
indices: None = None,
*,
handle_nan: _HandleNaN = 0,
handle_nan: _HandleNaN = ...,
out: None = None,
**kwargs,
) -> LinearRing: ...
Expand All @@ -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: ...
Expand All @@ -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: ...
Expand Down
4 changes: 2 additions & 2 deletions stubs/shapely/shapely/decorators.pyi
Original file line number Diff line number Diff line change
@@ -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])
Expand All @@ -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]: ...
4 changes: 2 additions & 2 deletions stubs/shapely/shapely/geometry/base.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -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: ...
Expand Down Expand Up @@ -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
Expand Down
24 changes: 14 additions & 10 deletions stubs/shapely/shapely/io.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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: ...
def from_wkb(geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "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: 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"] = "raise", **kwargs
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: ...
def from_geojson(geometry: None, on_invalid: Literal["raise", "warn", "ignore", "fix"] = "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: 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"] = "raise", **kwargs
geometry: ArrayLikeSeq[str | bytes | None], on_invalid: Literal["raise", "warn", "ignore", "fix"] = "raise", **kwargs
) -> GeoArray: ...
Loading