diff --git a/stubs/shapely/@tests/stubtest_allowlist.txt b/stubs/shapely/@tests/stubtest_allowlist.txt index 2d094265a..fd759a27a 100644 --- a/stubs/shapely/@tests/stubtest_allowlist.txt +++ b/stubs/shapely/@tests/stubtest_allowlist.txt @@ -1,4 +1,4 @@ -shapely\.geometry\.conftest +shapely\.conftest shapely\.tests.* shapely\._typing # stubs only module diff --git a/stubs/shapely/METADATA.toml b/stubs/shapely/METADATA.toml index e12eb3f77..023f0b416 100644 --- a/stubs/shapely/METADATA.toml +++ b/stubs/shapely/METADATA.toml @@ -1,4 +1,4 @@ -version = "2.0.*" +version = "2.1.*" # Requires a version of numpy with a `py.typed` file requires = ["numpy>=1.20"] upstream_repository = "https://github.com/shapely/shapely" diff --git a/stubs/shapely/shapely/_geometry.pyi b/stubs/shapely/shapely/_geometry.pyi index 874dc42ab..eb2cdab6c 100644 --- a/stubs/shapely/shapely/_geometry.pyi +++ b/stubs/shapely/shapely/_geometry.pyi @@ -13,28 +13,29 @@ from .lib import Geometry __all__ = [ "GeometryType", - "get_type_id", - "get_dimensions", + "force_2d", + "force_3d", "get_coordinate_dimension", + "get_dimensions", + "get_exterior_ring", + "get_geometry", + "get_interior_ring", + "get_m", "get_num_coordinates", + "get_num_geometries", + "get_num_interior_rings", + "get_num_points", + "get_parts", + "get_point", + "get_precision", + "get_rings", "get_srid", - "set_srid", + "get_type_id", "get_x", "get_y", "get_z", - "get_exterior_ring", - "get_num_points", - "get_num_interior_rings", - "get_num_geometries", - "get_point", - "get_interior_ring", - "get_geometry", - "get_parts", - "get_rings", - "get_precision", "set_precision", - "force_2d", - "force_3d", + "set_srid", ] _PrecisionMode: TypeAlias = Literal["valid_output", "pointwise", "keep_collapsed", 0, 1, 2] @@ -89,6 +90,10 @@ def get_z(point: Geometry | None, **kwargs) -> float: ... @overload def get_z(point: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ... @overload +def get_m(point: Geometry | None, **kwargs) -> float: ... +@overload +def get_m(point: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.float64]: ... +@overload def get_point(geometry: LineString, index: SupportsIndex, **kwargs) -> Point | Any: ... @overload def get_point(geometry: Point | Polygon | BaseMultipartGeometry | None, index: SupportsIndex, **kwargs) -> None: ... diff --git a/stubs/shapely/shapely/_ragged_array.pyi b/stubs/shapely/shapely/_ragged_array.pyi index c79038f46..c4d60165b 100644 --- a/stubs/shapely/shapely/_ragged_array.pyi +++ b/stubs/shapely/shapely/_ragged_array.pyi @@ -5,7 +5,7 @@ from ._geometry import GeometryType from ._typing import ArrayLike, ArrayLikeSeq, GeoArray, OptGeoArrayLikeSeq def to_ragged_array( - geometries: OptGeoArrayLikeSeq, include_z: bool | None = None + geometries: OptGeoArrayLikeSeq, include_z: bool | None = None, include_m: bool | None = None ) -> tuple[GeometryType, NDArray[np.float64], tuple[NDArray[np.int64], ...]]: ... def from_ragged_array( geometry_type: GeometryType, coords: ArrayLike[float], offsets: ArrayLikeSeq[int] | None = None diff --git a/stubs/shapely/shapely/algorithms/cga.pyi b/stubs/shapely/shapely/algorithms/cga.pyi index 32f5765f3..d3d7ea164 100644 --- a/stubs/shapely/shapely/algorithms/cga.pyi +++ b/stubs/shapely/shapely/algorithms/cga.pyi @@ -1,6 +1,3 @@ -from collections.abc import Callable - from ..geometry import LinearRing def signed_area(ring: LinearRing) -> float: ... -def is_ccw_impl(name: None = None) -> Callable[[LinearRing], bool]: ... diff --git a/stubs/shapely/shapely/algorithms/polylabel.pyi b/stubs/shapely/shapely/algorithms/polylabel.pyi index 8ef31b991..5d9777c30 100644 --- a/stubs/shapely/shapely/algorithms/polylabel.pyi +++ b/stubs/shapely/shapely/algorithms/polylabel.pyi @@ -1,19 +1,3 @@ -from ..errors import TopologicalError as TopologicalError from ..geometry import Point, Polygon -class Cell: - x: float - y: float - h: float - centroid: Point - distance: float - max_distance: float - def __init__(self, x: float, y: float, h: float, polygon: Polygon) -> None: ... - def __lt__(self, other: Cell) -> bool: ... - def __le__(self, other: Cell) -> bool: ... - def __eq__(self, other: object) -> bool: ... - def __ne__(self, other: object) -> bool: ... - def __gt__(self, other: Cell) -> bool: ... - def __ge__(self, other: Cell) -> bool: ... - def polylabel(polygon: Polygon, tolerance: float = 1.0) -> Point: ... diff --git a/stubs/shapely/shapely/constructive.pyi b/stubs/shapely/shapely/constructive.pyi index f022b0cd7..36dc537dd 100644 --- a/stubs/shapely/shapely/constructive.pyi +++ b/stubs/shapely/shapely/constructive.pyi @@ -1,5 +1,6 @@ from collections.abc import Sequence from typing import Any, Literal, SupportsIndex, overload +from typing_extensions import TypeAlias from ._enum import ParamEnum from ._typing import ArrayLike, ArrayLikeSeq, GeoArray, OptGeoArrayLike, OptGeoArrayLikeSeq, OptGeoT @@ -12,32 +13,38 @@ __all__ = [ "BufferJoinStyle", "boundary", "buffer", - "offset_curve", + "build_area", "centroid", "clip_by_rect", "concave_hull", + "constrained_delaunay_triangles", "convex_hull", "delaunay_triangles", - "segmentize", "envelope", "extract_unique_points", - "build_area", "make_valid", - "normalize", + "maximum_inscribed_circle", + "minimum_bounding_circle", + "minimum_clearance_line", + "minimum_rotated_rectangle", "node", + "normalize", + "offset_curve", + "orient_polygons", + "oriented_envelope", "point_on_surface", "polygonize", "polygonize_full", "remove_repeated_points", "reverse", + "segmentize", "simplify", "snap", "voronoi_polygons", - "oriented_envelope", - "minimum_rotated_rectangle", - "minimum_bounding_circle", ] +_Method: TypeAlias = Literal["linework", "structure"] + class BufferCapStyle(ParamEnum): round = 1 flat = 2 @@ -229,6 +236,14 @@ def delaunay_triangles( geometry: OptGeoArrayLikeSeq, tolerance: ArrayLike[float] = 0.0, only_edges: ArrayLike[bool] = False, **kwargs ) -> GeoArray: ... @overload +def constrained_delaunay_triangles(geometry: Geometry, **kwargs) -> GeometryCollection: ... +@overload +def constrained_delaunay_triangles(geometry: None, **kwargs) -> None: ... +@overload +def constrained_delaunay_triangles(geometry: Geometry | None, **kwargs) -> GeometryCollection | None: ... +@overload +def constrained_delaunay_triangles(geometry: OptGeoArrayLikeSeq | OptGeoArrayLike, **kwargs) -> GeoArray: ... +@overload def envelope(geometry: Point, **kwargs) -> Point: ... @overload def envelope(geometry: Geometry, **kwargs) -> BaseGeometry: ... @@ -255,13 +270,37 @@ def build_area(geometry: Geometry | None, **kwargs) -> BaseGeometry | None: ... @overload def build_area(geometry: OptGeoArrayLikeSeq, **kwargs) -> GeoArray: ... @overload -def make_valid(geometry: Geometry, **kwargs) -> BaseGeometry: ... +def make_valid(geometry: Geometry, *, method: _Method = "linework", keep_collapsed: bool = True, **kwargs) -> BaseGeometry: ... @overload -def make_valid(geometry: None, **kwargs) -> None: ... +def make_valid(geometry: None, *, method: _Method = "linework", keep_collapsed: bool = True, **kwargs) -> None: ... @overload -def make_valid(geometry: Geometry | None, **kwargs) -> BaseGeometry | None: ... +def make_valid( + geometry: Geometry | None, *, method: Literal["structure"], keep_collapsed: bool = True, **kwargs +) -> BaseGeometry | None: ... @overload -def make_valid(geometry: OptGeoArrayLikeSeq, **kwargs) -> GeoArray: ... +def make_valid( + geometry: Geometry | None, *, method: Literal["linework"], keep_collapsed: Literal[True], **kwargs +) -> BaseGeometry | None: ... +@overload +def make_valid( + geometry: OptGeoArrayLikeSeq, *, method: Literal["structure"], keep_collapsed: bool = True, **kwargs +) -> GeoArray: ... +@overload +def make_valid( + geometry: OptGeoArrayLikeSeq, *, method: Literal["linework"], keep_collapsed: Literal[True], **kwargs +) -> GeoArray: ... +@overload +def minimum_clearance_line(geometry: Point, **kwargs) -> Point: ... +@overload +def minimum_clearance_line(geometry: LineString | Polygon | BaseMultipartGeometry, **kwargs) -> Polygon: ... +@overload +def minimum_clearance_line(geometry: Geometry, **kwargs) -> Polygon | Point: ... +@overload +def minimum_clearance_line(geometry: None, **kwargs) -> None: ... +@overload +def minimum_clearance_line(geometry: Geometry | None, **kwargs) -> Polygon | Point | None: ... +@overload +def minimum_clearance_line(geometry: OptGeoArrayLikeSeq, **kwargs) -> GeoArray: ... @overload def normalize(geometry: OptGeoT, **kwargs) -> OptGeoT: ... @overload @@ -335,27 +374,53 @@ def snap(geometry: OptGeoArrayLike, reference: OptGeoArrayLikeSeq, tolerance: Ar def snap(geometry: OptGeoArrayLike, reference: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], **kwargs) -> GeoArray: ... @overload def voronoi_polygons( - geometry: Geometry, tolerance: float = 0.0, extend_to: Geometry | None = None, only_edges: Literal[False] = False, **kwargs + geometry: Geometry, + tolerance: float = 0.0, + extend_to: Geometry | None = None, + only_edges: Literal[False] = False, + ordered: bool = False, + **kwargs, ) -> GeometryCollection[Polygon]: ... @overload def voronoi_polygons( - geometry: Geometry, tolerance: float, extend_to: Geometry | None, only_edges: Literal[True], **kwargs + geometry: Geometry, tolerance: float, extend_to: Geometry | None, only_edges: Literal[True], ordered: bool = False, **kwargs ) -> LineString | MultiLineString: ... @overload def voronoi_polygons( - geometry: Geometry, tolerance: float = 0.0, extend_to: Geometry | None = None, *, only_edges: Literal[True], **kwargs + geometry: Geometry, + tolerance: float = 0.0, + extend_to: Geometry | None = None, + *, + only_edges: Literal[True], + ordered: bool = False, + **kwargs, ) -> LineString | MultiLineString: ... @overload def voronoi_polygons( - geometry: Geometry, tolerance: float = 0.0, extend_to: Geometry | None = None, only_edges: bool = False, **kwargs + geometry: Geometry, + tolerance: float = 0.0, + extend_to: Geometry | None = None, + only_edges: bool = False, + ordered: bool = False, + **kwargs, ) -> GeometryCollection[Polygon] | LineString | MultiLineString: ... @overload def voronoi_polygons( - geometry: None, tolerance: float = 0.0, extend_to: Geometry | None = None, only_edges: bool = False, **kwargs + geometry: None, + tolerance: float = 0.0, + extend_to: Geometry | None = None, + only_edges: bool = False, + ordered: bool = False, + **kwargs, ) -> None: ... @overload def voronoi_polygons( - geometry: Geometry | None, tolerance: float = 0.0, extend_to: Geometry | None = None, only_edges: bool = False, **kwargs + geometry: Geometry | None, + tolerance: float = 0.0, + extend_to: Geometry | None = None, + only_edges: bool = False, + ordered: bool = False, + **kwargs, ) -> GeometryCollection[Polygon] | LineString | MultiLineString | None: ... @overload def voronoi_polygons( @@ -363,6 +428,7 @@ def voronoi_polygons( tolerance: ArrayLike[float] = 0.0, extend_to: OptGeoArrayLike = None, only_edges: ArrayLike[bool] = False, + ordered: bool = False, **kwargs, ) -> GeoArray: ... @overload @@ -371,6 +437,7 @@ def voronoi_polygons( tolerance: ArrayLikeSeq[float], extend_to: OptGeoArrayLike = None, only_edges: ArrayLike[bool] = False, + ordered: bool = False, **kwargs, ) -> GeoArray: ... @overload @@ -379,6 +446,7 @@ def voronoi_polygons( tolerance: ArrayLike[float], extend_to: OptGeoArrayLikeSeq, only_edges: ArrayLike[bool] = False, + ordered: bool = False, **kwargs, ) -> GeoArray: ... @overload @@ -388,11 +456,17 @@ def voronoi_polygons( *, extend_to: OptGeoArrayLikeSeq, only_edges: ArrayLike[bool] = False, + ordered: bool = False, **kwargs, ) -> GeoArray: ... @overload def voronoi_polygons( - geometry: OptGeoArrayLike, tolerance: ArrayLike[float], extend_to: OptGeoArrayLike, only_edges: ArrayLikeSeq[bool], **kwargs + geometry: OptGeoArrayLike, + tolerance: ArrayLike[float], + extend_to: OptGeoArrayLike, + only_edges: ArrayLikeSeq[bool], + ordered: bool = False, + **kwargs, ) -> GeoArray: ... @overload def voronoi_polygons( @@ -401,6 +475,7 @@ def voronoi_polygons( extend_to: OptGeoArrayLike = None, *, only_edges: ArrayLikeSeq[bool], + ordered: bool = False, **kwargs, ) -> GeoArray: ... @overload @@ -428,3 +503,27 @@ def minimum_bounding_circle(geometry: None, **kwargs) -> None: ... def minimum_bounding_circle(geometry: Geometry | None, **kwargs) -> Polygon | Point | None: ... @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: ... +@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: ... +@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: ... +@overload +def orient_polygons(geometry: Geometry | None, *, exterior_cw: bool = False, **kwargs) -> BaseGeometry | None: ... +@overload +def orient_polygons(geometry: OptGeoArrayLikeSeq, *, exterior_cw: bool = False, **kwargs) -> GeoArray: ... diff --git a/stubs/shapely/shapely/coordinates.pyi b/stubs/shapely/shapely/coordinates.pyi index 7aa57afce..bb8026c9d 100644 --- a/stubs/shapely/shapely/coordinates.pyi +++ b/stubs/shapely/shapely/coordinates.pyi @@ -10,32 +10,40 @@ __all__ = ["transform", "count_coordinates", "get_coordinates", "set_coordinates @overload def transform( - geometry: OptGeoT, transformation: Callable[[NDArray[np.float64]], NDArray[np.float64]], include_z: bool = False + geometry: OptGeoT, + transformation: Callable[[NDArray[np.float64]], NDArray[np.float64]], + include_z: bool = False, + *, + interleaved: bool = True, ) -> OptGeoT: ... @overload def transform( - geometry: OptGeoArrayLikeSeq, transformation: Callable[[NDArray[np.float64]], NDArray[np.float64]], include_z: bool = False + geometry: OptGeoArrayLikeSeq, + transformation: Callable[[NDArray[np.float64]], NDArray[np.float64]], + include_z: bool = False, + *, + interleaved: bool = True, ) -> GeoArray: ... def count_coordinates(geometry: OptGeoArrayLike) -> int: ... @overload def get_coordinates( - geometry: OptGeoArrayLike, include_z: bool = False, return_index: Literal[False] = False + geometry: OptGeoArrayLike, include_z: bool = False, return_index: Literal[False] = False, *, include_m: bool = False ) -> NDArray[np.float64]: ... @overload def get_coordinates( - geometry: OptGeoArrayLike, include_z: bool = False, *, return_index: Literal[True] + geometry: OptGeoArrayLike, include_z: bool = False, *, return_index: Literal[True], include_m: bool = False ) -> tuple[NDArray[np.float64], NDArray[np.int64]]: ... @overload def get_coordinates( - geometry: OptGeoArrayLike, include_z: bool, return_index: Literal[True] + geometry: OptGeoArrayLike, include_z: bool, return_index: Literal[True], *, include_m: bool = False ) -> tuple[NDArray[np.float64], NDArray[np.int64]]: ... @overload def get_coordinates( - geometry: OptGeoArrayLike, include_z: bool = False, *, return_index: bool + geometry: OptGeoArrayLike, include_z: bool = False, *, return_index: bool, include_m: bool = False ) -> NDArray[np.float64] | tuple[NDArray[np.float64], NDArray[np.int64]]: ... @overload def get_coordinates( - geometry: OptGeoArrayLike, include_z: bool, return_index: bool + geometry: OptGeoArrayLike, include_z: bool, return_index: bool, *, include_m: bool = False ) -> NDArray[np.float64] | tuple[NDArray[np.float64], NDArray[np.int64]]: ... @overload def set_coordinates(geometry: GeoT, coordinates: ArrayLikeSeq[float]) -> GeoT: ... diff --git a/stubs/shapely/shapely/creation.pyi b/stubs/shapely/shapely/creation.pyi index b3f3e4382..db0a7f75f 100644 --- a/stubs/shapely/shapely/creation.pyi +++ b/stubs/shapely/shapely/creation.pyi @@ -1,9 +1,11 @@ from collections.abc import Sequence from typing import Literal, SupportsIndex, overload +from typing_extensions import TypeAlias import numpy as np from numpy.typing import NDArray +from ._enum import ParamEnum from ._geometry import GeometryType from ._typing import ArrayLike, ArrayLikeSeq, GeoArray, OptGeoArrayLike, OptGeoArrayLikeSeq from .geometry import GeometryCollection, LinearRing, LineString, MultiLineString, MultiPoint, MultiPolygon, Point, Polygon @@ -24,13 +26,34 @@ __all__ = [ "empty", ] +class HandleNaN(ParamEnum): + allow = 0 + skip = 1 + error = 2 + +_HandleNaN: TypeAlias = Literal[0, 1, 2] | HandleNaN + @overload def points( - coords: float, y: float, z: float | None = None, indices: None = None, out: None = None, **kwargs # acts as x + coords: float, + y: float, + z: float | None = None, + indices: None = None, + *, + handle_nan: _HandleNaN = 0, + out: None = None, + **kwargs, # acts as x ) -> Point: ... @overload def points( - coords: Sequence[float], y: None = None, z: None = None, indices: None = None, out: None = None, **kwargs # acts as x, y[, z] + coords: Sequence[float], + y: None = None, + z: None = None, + indices: None = None, + *, + handle_nan: _HandleNaN = 0, + out: None = None, + **kwargs, # acts as x, y[, z] ) -> Point: ... @overload def points( @@ -38,6 +61,8 @@ def points( y: Sequence[float], # must be (y1, y2, ...) z: Sequence[float] | None = None, indices: ArrayLikeSeq[int] | None = None, + *, + handle_nan: _HandleNaN = 0, out: NDArray[np.object_] | None = None, **kwargs, ) -> GeoArray: ... @@ -47,6 +72,8 @@ def points( y: None = None, z: None = None, indices: ArrayLikeSeq[int] | None = None, + *, + handle_nan: _HandleNaN = 0, out: NDArray[np.object_] | None = None, **kwargs, ) -> GeoArray: ... @@ -56,6 +83,8 @@ def points( y: ArrayLike[float], z: ArrayLike[float] | None = None, indices: ArrayLikeSeq[int] | None = None, + *, + handle_nan: _HandleNaN = 0, out: NDArray[np.object_] | None = None, **kwargs, ) -> Point | GeoArray: ... @@ -65,6 +94,8 @@ def points( y: ArrayLike[float] | None = None, z: ArrayLike[float] | None = None, indices: ArrayLikeSeq[int] | None = None, + *, + handle_nan: _HandleNaN = 0, out: NDArray[np.object_] | None = None, **kwargs, ) -> Point | GeoArray: ... @@ -74,6 +105,8 @@ def linestrings( y: Sequence[float], z: Sequence[float] | None = None, indices: None = None, + *, + handle_nan: _HandleNaN = 0, out: None = None, **kwargs, ) -> LineString: ... @@ -83,6 +116,8 @@ def linestrings( y: None = None, z: None = None, indices: None = None, + *, + handle_nan: _HandleNaN = 0, out: None = None, **kwargs, ) -> LineString: ... @@ -92,6 +127,8 @@ def linestrings( y: None = None, z: None = None, indices: ArrayLikeSeq[int] | None = None, + *, + handle_nan: _HandleNaN = 0, out: NDArray[np.object_] | None = None, **kwargs, ) -> GeoArray: ... @@ -101,6 +138,8 @@ def linestrings( y: ArrayLikeSeq[float] | None = None, z: ArrayLikeSeq[float] | None = None, indices: ArrayLikeSeq[int] | None = None, + *, + handle_nan: _HandleNaN = 0, out: NDArray[np.object_] | None = None, **kwargs, ) -> LineString | GeoArray: ... @@ -110,6 +149,8 @@ def linearrings( y: Sequence[float], z: Sequence[float] | None = None, indices: None = None, + *, + handle_nan: _HandleNaN = 0, out: None = None, **kwargs, ) -> LinearRing: ... @@ -119,6 +160,8 @@ def linearrings( y: None = None, z: None = None, indices: None = None, + *, + handle_nan: _HandleNaN = 0, out: None = None, **kwargs, ) -> LinearRing: ... @@ -128,6 +171,8 @@ def linearrings( y: None = None, z: None = None, indices: ArrayLikeSeq[int] | None = None, + *, + handle_nan: _HandleNaN = 0, out: NDArray[np.object_] | None = None, **kwargs, ) -> GeoArray: ... @@ -137,6 +182,8 @@ def linearrings( y: ArrayLikeSeq[float] | None = None, z: ArrayLikeSeq[float] | None = None, indices: ArrayLikeSeq[int] | None = None, + *, + handle_nan: _HandleNaN = 0, out: NDArray[np.object_] | None = None, **kwargs, ) -> LinearRing | GeoArray: ... @@ -145,6 +192,7 @@ def polygons( geometries: LinearRing | Sequence[Sequence[float]] | None, holes: ArrayLikeSeq[float] | OptGeoArrayLikeSeq | None = None, indices: None = None, + *, out: None = None, **kwargs, ) -> Polygon: ... @@ -153,6 +201,7 @@ def polygons( geometries: Sequence[LinearRing | Sequence[Sequence[float]] | None], holes: ArrayLikeSeq[float] | OptGeoArrayLikeSeq | None = None, indices: ArrayLikeSeq[int] | None = None, + *, out: NDArray[np.object_] | None = None, **kwargs, ) -> GeoArray: ... @@ -161,6 +210,7 @@ def polygons( geometries: ArrayLikeSeq[float] | OptGeoArrayLikeSeq, holes: ArrayLikeSeq[float] | OptGeoArrayLikeSeq | None = None, indices: ArrayLikeSeq[int] | None = None, + *, out: NDArray[np.object_] | None = None, **kwargs, ) -> Polygon | GeoArray: ... @@ -177,48 +227,51 @@ def box( ) -> GeoArray: ... @overload def multipoints( - geometries: Sequence[Point | Sequence[float] | None], indices: None = None, out: None = None, **kwargs + geometries: Sequence[Point | Sequence[float] | None], indices: None = None, *, out: None = None, **kwargs ) -> MultiPoint: ... @overload def multipoints( geometries: Sequence[Sequence[Point | Sequence[float] | None]], indices: ArrayLikeSeq[int] | None = None, + *, out: NDArray[np.object_] | None = None, **kwargs, ) -> GeoArray: ... @overload def multipoints( - geometries: OptGeoArrayLikeSeq, indices: ArrayLikeSeq[int] | None = None, out: NDArray[np.object_] | None = None, **kwargs + geometries: OptGeoArrayLikeSeq, indices: ArrayLikeSeq[int] | None = None, *, out: NDArray[np.object_] | None = None, **kwargs ) -> MultiPoint | GeoArray: ... @overload def multilinestrings( - geometries: Sequence[LineString | Sequence[Sequence[float]] | None], indices: None = None, out: None = None, **kwargs + geometries: Sequence[LineString | Sequence[Sequence[float]] | None], indices: None = None, *, out: None = None, **kwargs ) -> MultiLineString: ... @overload def multilinestrings( geometries: Sequence[Sequence[LineString | Sequence[Sequence[float]] | None]], indices: ArrayLikeSeq[int] | None = None, + *, out: NDArray[np.object_] | None = None, **kwargs, ) -> GeoArray: ... @overload def multilinestrings( - geometries: OptGeoArrayLikeSeq, indices: ArrayLikeSeq[int] | None = None, out: NDArray[np.object_] | None = None, **kwargs + geometries: OptGeoArrayLikeSeq, indices: ArrayLikeSeq[int] | None = None, *, out: NDArray[np.object_] | None = None, **kwargs ) -> MultiLineString | GeoArray: ... @overload def multipolygons( - geometries: Sequence[Polygon | Sequence[Sequence[float]] | None], indices: None = None, out: None = None, **kwargs + geometries: Sequence[Polygon | Sequence[Sequence[float]] | None], indices: None = None, *, out: None = None, **kwargs ) -> MultiPolygon: ... @overload def multipolygons( geometries: Sequence[Sequence[Polygon | Sequence[Sequence[float]] | None]], indices: ArrayLikeSeq[int] | None = None, + *, out: NDArray[np.object_] | None = None, **kwargs, ) -> GeoArray: ... @overload def multipolygons( - geometries: OptGeoArrayLikeSeq, indices: ArrayLikeSeq[int] | None = None, out: NDArray[np.object_] | None = None, **kwargs + geometries: OptGeoArrayLikeSeq, indices: ArrayLikeSeq[int] | None = None, *, out: NDArray[np.object_] | None = None, **kwargs ) -> MultiPolygon | GeoArray: ... @overload def geometrycollections( diff --git a/stubs/shapely/shapely/decorators.pyi b/stubs/shapely/shapely/decorators.pyi index d9149d60e..2d0aa31dd 100644 --- a/stubs/shapely/shapely/decorators.pyi +++ b/stubs/shapely/shapely/decorators.pyi @@ -1,4 +1,4 @@ -from collections.abc import Callable +from collections.abc import Callable, Iterable from typing import TypeVar _F = TypeVar("_F", bound=Callable[..., object]) @@ -9,3 +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]: ... diff --git a/stubs/shapely/shapely/geometry/base.pyi b/stubs/shapely/shapely/geometry/base.pyi index ac8b1ca31..75da5ee5e 100644 --- a/stubs/shapely/shapely/geometry/base.pyi +++ b/stubs/shapely/shapely/geometry/base.pyi @@ -158,6 +158,8 @@ class BaseGeometry(Geometry): @property def has_z(self) -> bool: ... @property + def has_m(self) -> bool: ... + @property def is_empty(self) -> bool: ... @property def is_ring(self) -> bool: ... @@ -224,13 +226,15 @@ 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) -> bool: ... + def equals_exact(self, other: Geometry | None, tolerance: float = 0.0, *, normalize: Literal[False] = False) -> bool: ... @overload - def equals_exact(self, other: OptGeoArrayLikeSeq, tolerance: float) -> NDArray[np.bool_]: ... + def equals_exact( + self, other: OptGeoArrayLikeSeq, tolerance: float = 0.0, *, normalize: bool = False + ) -> NDArray[np.bool_]: ... @overload - def equals_exact(self, other: OptGeoArrayLike, tolerance: ArrayLikeSeq[float]) -> NDArray[np.bool_]: ... - @deprecated("Method 'almost_equals()' is deprecated. Use method 'equals_exact()' instead.") - def almost_equals(self, other: OptGeoArrayLike, decimal: int = 6) -> bool | NDArray[np.bool_]: ... + def equals_exact( + self, other: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], *, normalize: bool = False + ) -> NDArray[np.bool_]: ... @overload def relate_pattern(self, other: Geometry | None, pattern: str) -> bool: ... @overload diff --git a/stubs/shapely/shapely/geometry/point.pyi b/stubs/shapely/shapely/geometry/point.pyi index 29973bdce..e9ac4e181 100644 --- a/stubs/shapely/shapely/geometry/point.pyi +++ b/stubs/shapely/shapely/geometry/point.pyi @@ -25,6 +25,8 @@ class Point(BaseGeometry): def y(self) -> float: ... @property def z(self) -> float: ... + @property + def m(self) -> float: ... def svg(self, scale_factor: float = 1.0, fill_color: str | None = None, opacity: float | None = None) -> str: ... # type: ignore[override] # more precise base overrides @property diff --git a/stubs/shapely/shapely/io.pyi b/stubs/shapely/shapely/io.pyi index 27b667e53..9b840b487 100644 --- a/stubs/shapely/shapely/io.pyi +++ b/stubs/shapely/shapely/io.pyi @@ -1,5 +1,6 @@ from _typeshed import Incomplete from typing import Literal, overload +from typing_extensions import TypeAlias import numpy as np from numpy.typing import NDArray @@ -12,6 +13,8 @@ from .lib import Geometry __all__ = ["from_geojson", "from_ragged_array", "from_wkb", "from_wkt", "to_geojson", "to_ragged_array", "to_wkb", "to_wkt"] +_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}) @@ -23,18 +26,28 @@ class WKBFlavorOptions(ParamEnum): @overload def to_wkt( - geometry: None, rounding_precision: int = 6, trim: bool = True, output_dimension: int = 3, old_3d: bool = False, **kwargs + geometry: None, + rounding_precision: int = 6, + trim: bool = True, + output_dimension: _OutputDimension | None = None, + old_3d: bool = False, + **kwargs, ) -> None: ... @overload def to_wkt( - geometry: Geometry, rounding_precision: int = 6, trim: bool = True, output_dimension: int = 3, old_3d: bool = False, **kwargs + geometry: Geometry, + rounding_precision: int = 6, + trim: bool = True, + output_dimension: _OutputDimension | None = None, + old_3d: bool = False, + **kwargs, ) -> str: ... @overload def to_wkt( geometry: OptGeoArrayLikeSeq, rounding_precision: int = 6, trim: bool = True, - output_dimension: int = 3, + output_dimension: _OutputDimension | None = None, old_3d: bool = False, **kwargs, ) -> NDArray[np.str_]: ... @@ -42,7 +55,7 @@ def to_wkt( def to_wkb( geometry: None, hex: bool = False, - output_dimension: int = 3, + output_dimension: _OutputDimension | None = None, byte_order: int = -1, include_srid: bool = False, flavor: Literal["iso", "extended"] = "extended", @@ -52,7 +65,7 @@ def to_wkb( def to_wkb( geometry: Geometry, hex: Literal[False] = False, - output_dimension: int = 3, + output_dimension: _OutputDimension | None = None, byte_order: int = -1, include_srid: bool = False, flavor: Literal["iso", "extended"] = "extended", @@ -62,7 +75,7 @@ def to_wkb( def to_wkb( geometry: Geometry, hex: Literal[True], - output_dimension: int = 3, + output_dimension: _OutputDimension | None = None, byte_order: int = -1, include_srid: bool = False, flavor: Literal["iso", "extended"] = "extended", @@ -72,7 +85,7 @@ def to_wkb( def to_wkb( geometry: Geometry, hex: bool, - output_dimension: int = 3, + output_dimension: _OutputDimension | None = None, byte_order: int = -1, include_srid: bool = False, flavor: Literal["iso", "extended"] = "extended", @@ -82,7 +95,7 @@ def to_wkb( def to_wkb( geometry: OptGeoArrayLikeSeq, hex: Literal[False] = False, - output_dimension: int = 3, + output_dimension: _OutputDimension | None = None, byte_order: int = -1, include_srid: bool = False, flavor: Literal["iso", "extended"] = "extended", @@ -92,7 +105,7 @@ def to_wkb( def to_wkb( geometry: OptGeoArrayLikeSeq, hex: Literal[True], - output_dimension: int = 3, + output_dimension: _OutputDimension | None = None, byte_order: int = -1, include_srid: bool = False, flavor: Literal["iso", "extended"] = "extended", @@ -102,7 +115,7 @@ def to_wkb( def to_wkb( geometry: OptGeoArrayLikeSeq, hex: bool, - output_dimension: int = 3, + output_dimension: _OutputDimension | None = None, byte_order: int = -1, include_srid: bool = False, flavor: Literal["iso", "extended"] = "extended", diff --git a/stubs/shapely/shapely/lib.pyi b/stubs/shapely/shapely/lib.pyi index 4a123b911..a3b3d82bb 100644 --- a/stubs/shapely/shapely/lib.pyi +++ b/stubs/shapely/shapely/lib.pyi @@ -13,10 +13,14 @@ build_area: np.ufunc centroid: np.ufunc clip_by_rect: np.ufunc concave_hull: np.ufunc +constrained_delaunay_triangles: np.ufunc contains: np.ufunc contains_properly: np.ufunc contains_xy: np.ufunc convex_hull: np.ufunc +coverage_invalid_edges: np.ufunc +coverage_is_valid: np.ufunc +coverage_simplify: np.ufunc coverage_union: np.ufunc covered_by: np.ufunc covers: np.ufunc @@ -27,11 +31,13 @@ destroy_prepared: np.ufunc difference: np.ufunc difference_prec: np.ufunc disjoint: np.ufunc +disjoint_subset_union: np.ufunc distance: np.ufunc dwithin: np.ufunc envelope: np.ufunc equals: np.ufunc equals_exact: np.ufunc +equals_identical: np.ufunc extract_unique_points: np.ufunc force_2d: np.ufunc force_3d: np.ufunc @@ -45,6 +51,7 @@ get_dimensions: np.ufunc get_exterior_ring: np.ufunc get_geometry: np.ufunc get_interior_ring: np.ufunc +get_m: np.ufunc get_num_coordinates: np.ufunc get_num_geometries: np.ufunc get_num_interior_rings: np.ufunc @@ -53,6 +60,7 @@ get_point: np.ufunc get_precision: np.ufunc get_srid: np.ufunc get_type_id: np.ufunc +has_m: np.ufunc get_x: np.ufunc get_y: np.ufunc get_z: np.ufunc @@ -85,12 +93,16 @@ line_merge_directed: np.ufunc linearrings: np.ufunc linestrings: np.ufunc make_valid: np.ufunc +make_valid_with_params: np.ufunc +maximum_inscribed_circle: np.ufunc minimum_bounding_circle: np.ufunc minimum_bounding_radius: np.ufunc minimum_clearance: np.ufunc +minimum_clearance_line: np.ufunc node: np.ufunc normalize: np.ufunc offset_curve: np.ufunc +orient_polygons: np.ufunc oriented_envelope: np.ufunc overlaps: np.ufunc point_on_surface: np.ufunc diff --git a/stubs/shapely/shapely/ops.pyi b/stubs/shapely/shapely/ops.pyi index a03a5f432..f1f188bcb 100644 --- a/stubs/shapely/shapely/ops.pyi +++ b/stubs/shapely/shapely/ops.pyi @@ -1,6 +1,5 @@ from collections.abc import Callable, Iterable from typing import Any, Literal, overload -from typing_extensions import deprecated from ._typing import GeoT, OptGeoArrayLike, SupportsGeoInterface from .algorithms.polylabel import polylabel as polylabel @@ -10,23 +9,22 @@ from .geometry.linestring import _ConvertibleToLineString from .lib import Geometry __all__ = [ - "cascaded_union", + "clip_by_rect", "linemerge", + "nearest_points", "operator", + "orient", "polygonize", "polygonize_full", - "transform", - "unary_union", - "triangulate", - "voronoi_diagram", - "split", - "nearest_points", - "validate", - "snap", "shared_paths", - "clip_by_rect", - "orient", + "snap", + "split", "substring", + "transform", + "triangulate", + "unary_union", + "validate", + "voronoi_diagram", ] class CollectionOperator: @@ -47,8 +45,6 @@ class CollectionOperator: def linemerge( self, lines: MultiLineString | BaseMultipartGeometry | Iterable[_ConvertibleToLineString], directed: bool = False ) -> LineString | MultiLineString: ... - @deprecated("The `cascaded_union()` function is deprecated. Use `unary_union()` instead.") - def cascaded_union(self, geoms: OptGeoArrayLike) -> BaseGeometry: ... def unary_union(self, geoms: OptGeoArrayLike) -> BaseGeometry: ... operator: CollectionOperator @@ -58,8 +54,6 @@ linemerge = operator.linemerge unary_union = operator.unary_union # This is also an alias to operator method but we want to mark it as deprecated -@deprecated("The `cascaded_union()` function is deprecated. Use `unary_union()` instead.") -def cascaded_union(geoms: OptGeoArrayLike) -> BaseGeometry: ... @overload # edges false def triangulate(geom: Geometry, tolerance: float = 0.0, edges: Literal[False] = False) -> list[Polygon]: ... @overload # edges true (keyword) diff --git a/stubs/shapely/shapely/predicates.pyi b/stubs/shapely/shapely/predicates.pyi index ddf792261..3b4fe369b 100644 --- a/stubs/shapely/shapely/predicates.pyi +++ b/stubs/shapely/shapely/predicates.pyi @@ -9,7 +9,21 @@ from .geometry.base import BaseGeometry from .lib import Geometry __all__ = [ + "contains", + "contains_properly", + "contains_xy", + "covered_by", + "covers", + "crosses", + "disjoint", + "dwithin", + "equals", + "equals_exact", + "equals_identical", + "has_m", "has_z", + "intersects", + "intersects_xy", "is_ccw", "is_closed", "is_empty", @@ -21,23 +35,11 @@ __all__ = [ "is_valid", "is_valid_input", "is_valid_reason", - "crosses", - "contains", - "contains_xy", - "contains_properly", - "covered_by", - "covers", - "disjoint", - "dwithin", - "equals", - "intersects", - "intersects_xy", "overlaps", - "touches", - "within", - "equals_exact", "relate", "relate_pattern", + "touches", + "within", ] @overload @@ -45,6 +47,10 @@ def has_z(geometry: Geometry | None, **kwargs) -> bool: ... @overload def has_z(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... @overload +def has_m(geometry: Geometry | None, **kwargs) -> bool: ... +@overload +def has_m(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... +@overload def is_ccw(geometry: Geometry | None, **kwargs) -> bool: ... @overload def is_ccw(geometry: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... @@ -163,13 +169,27 @@ def within(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bo @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, **kwargs) -> bool: ... +def equals_exact( + a: Geometry | None, b: Geometry | None, tolerance: float = 0.0, *, normalize: bool = False, **kwargs +) -> bool: ... @overload -def equals_exact(a: OptGeoArrayLike, b: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], **kwargs) -> NDArray[np.bool_]: ... +def equals_exact( + a: OptGeoArrayLike, b: OptGeoArrayLike, tolerance: ArrayLikeSeq[float], *, normalize: bool = False, **kwargs +) -> NDArray[np.bool_]: ... @overload -def equals_exact(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, tolerance: ArrayLike[float] = 0.0, **kwargs) -> NDArray[np.bool_]: ... +def equals_exact( + a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, tolerance: ArrayLike[float] = 0.0, *, normalize: bool = False, **kwargs +) -> NDArray[np.bool_]: ... @overload -def equals_exact(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, tolerance: ArrayLike[float] = 0.0, **kwargs) -> NDArray[np.bool_]: ... +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: ... +@overload +def equals_identical(a: OptGeoArrayLikeSeq, b: OptGeoArrayLike, **kwargs) -> NDArray[np.bool_]: ... +@overload +def equals_identical(a: OptGeoArrayLike, b: OptGeoArrayLikeSeq, **kwargs) -> NDArray[np.bool_]: ... @overload def relate(a: Geometry | None, b: None, **kwargs) -> None: ... @overload diff --git a/stubs/shapely/shapely/set_operations.pyi b/stubs/shapely/shapely/set_operations.pyi index d44c034f4..ccc6d3c8e 100644 --- a/stubs/shapely/shapely/set_operations.pyi +++ b/stubs/shapely/shapely/set_operations.pyi @@ -5,7 +5,11 @@ from .geometry.base import BaseGeometry from .lib import Geometry __all__ = [ + "coverage_union", + "coverage_union_all", "difference", + "disjoint_subset_union", + "disjoint_subset_union_all", "intersection", "intersection_all", "symmetric_difference", @@ -13,8 +17,6 @@ __all__ = [ "unary_union", "union", "union_all", - "coverage_union", - "coverage_union_all", ] @overload @@ -84,3 +86,11 @@ 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: ... +@overload +def disjoint_subset_union_all(geometries: OptGeoArrayLike, *, axis: None = None, **kwargs) -> BaseGeometry: ... +@overload +def disjoint_subset_union_all(geometries: OptGeoArrayLikeSeq, *, axis: int, **kwargs) -> BaseGeometry | GeoArray: ...