From d25151f0234df5c10b81fc6b0a1e7d890792c209 Mon Sep 17 00:00:00 2001 From: jack-volantautonomy Date: Mon, 10 Aug 2026 15:21:44 +0100 Subject: [PATCH 1/9] Fix --- stubs/rasterio/METADATA.toml | 2 +- stubs/rasterio/rasterio/_affine_types.pyi | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/stubs/rasterio/METADATA.toml b/stubs/rasterio/METADATA.toml index 1b0fd1d39342..e4eb462a4cc1 100644 --- a/stubs/rasterio/METADATA.toml +++ b/stubs/rasterio/METADATA.toml @@ -1,4 +1,4 @@ version = "1.5.0" upstream-repository = "https://github.com/rasterio/rasterio" requires-python = ">=3.12" -dependencies = ["numpy>=2", "click>=8"] +dependencies = ["numpy>=2", "click>=8", "affine>=3"] diff --git a/stubs/rasterio/rasterio/_affine_types.pyi b/stubs/rasterio/rasterio/_affine_types.pyi index bf462c70813f..ad700a7e9a88 100644 --- a/stubs/rasterio/rasterio/_affine_types.pyi +++ b/stubs/rasterio/rasterio/_affine_types.pyi @@ -1,4 +1,3 @@ -# Swap to `from affine import Affine as Affine` once affine ships `py.typed` (v3). -from typing import Any, TypeAlias +from affine import Affine as Affine -Affine: TypeAlias = Any +Affine: Affine From 972a874618d26bcf8127b871a88d7789a22d6480 Mon Sep 17 00:00:00 2001 From: jack-volantautonomy Date: Mon, 10 Aug 2026 15:40:59 +0100 Subject: [PATCH 2/9] Better --- stubs/rasterio/@tests/stubtest_allowlist.txt | 1 - stubs/rasterio/METADATA.toml | 2 +- stubs/rasterio/rasterio/_affine_types.pyi | 3 --- stubs/rasterio/rasterio/_base.pyi | 17 +---------------- stubs/rasterio/rasterio/_io.pyi | 2 +- stubs/rasterio/rasterio/_warp.pyi | 2 +- stubs/rasterio/rasterio/features.pyi | 4 +--- stubs/rasterio/rasterio/io.pyi | 2 +- stubs/rasterio/rasterio/mask.pyi | 2 +- stubs/rasterio/rasterio/merge.pyi | 3 +-- stubs/rasterio/rasterio/plot.pyi | 2 +- stubs/rasterio/rasterio/stack.pyi | 2 +- stubs/rasterio/rasterio/transform.pyi | 3 +-- stubs/rasterio/rasterio/warp.pyi | 4 +--- stubs/rasterio/rasterio/windows.pyi | 5 +---- 15 files changed, 13 insertions(+), 41 deletions(-) diff --git a/stubs/rasterio/@tests/stubtest_allowlist.txt b/stubs/rasterio/@tests/stubtest_allowlist.txt index ce1edb64708e..4b4577f911be 100644 --- a/stubs/rasterio/@tests/stubtest_allowlist.txt +++ b/stubs/rasterio/@tests/stubtest_allowlist.txt @@ -1,6 +1,5 @@ # Stubs-only helper modules with no runtime counterpart. rasterio\._typing -rasterio\._affine_types # Stubs-only type aliases referenced in signatures only. rasterio\.merge\.MethodFunction diff --git a/stubs/rasterio/METADATA.toml b/stubs/rasterio/METADATA.toml index e4eb462a4cc1..5aafc6e390ad 100644 --- a/stubs/rasterio/METADATA.toml +++ b/stubs/rasterio/METADATA.toml @@ -1,4 +1,4 @@ -version = "1.5.0" +version = "1.5.1" upstream-repository = "https://github.com/rasterio/rasterio" requires-python = ">=3.12" dependencies = ["numpy>=2", "click>=8", "affine>=3"] diff --git a/stubs/rasterio/rasterio/_affine_types.pyi b/stubs/rasterio/rasterio/_affine_types.pyi index ad700a7e9a88..e69de29bb2d1 100644 --- a/stubs/rasterio/rasterio/_affine_types.pyi +++ b/stubs/rasterio/rasterio/_affine_types.pyi @@ -1,3 +0,0 @@ -from affine import Affine as Affine - -Affine: Affine diff --git a/stubs/rasterio/rasterio/_base.pyi b/stubs/rasterio/rasterio/_base.pyi index 8a7b76903797..f496f78ad7bf 100644 --- a/stubs/rasterio/rasterio/_base.pyi +++ b/stubs/rasterio/rasterio/_base.pyi @@ -5,7 +5,7 @@ from types import TracebackType from typing import Any, Final from typing_extensions import Self, deprecated -from rasterio._affine_types import Affine +from affine import Affine as Affine from rasterio._path import _ParsedPath, _UnparsedPath from rasterio._typing import Colormap, CRSInput, _OpenOption from rasterio.control import GroundControlPoint @@ -68,47 +68,37 @@ class DatasetBase: def get_nodatavals(self) -> tuple[float | None, ...]: ... @property def nodatavals(self) -> tuple[float | None, ...]: ... - @property def nodata(self) -> float | None: ... @nodata.setter def nodata(self, value: float | None) -> None: ... - @property def mask_flag_enums(self) -> tuple[list[MaskFlags], ...]: ... - @property def crs(self) -> CRS: ... @crs.setter def crs(self, value: CRSInput) -> None: ... - @property def descriptions(self) -> tuple[str | None, ...]: ... @descriptions.setter def descriptions(self, value: Sequence[str | None]) -> None: ... - def write_transform(self, transform: Sequence[float]) -> None: ... - @property def transform(self) -> Affine: ... @transform.setter def transform(self, value: Affine) -> None: ... - @property def offsets(self) -> tuple[float, ...]: ... @offsets.setter def offsets(self, value: Sequence[float]) -> None: ... - @property def scales(self) -> tuple[float, ...]: ... @scales.setter def scales(self, value: Sequence[float]) -> None: ... - @property def units(self) -> tuple[str | None, ...]: ... @units.setter def units(self, value: Sequence[str | None]) -> None: ... - def block_window(self, bidx: int, i: int, j: int) -> Window: ... def block_size(self, bidx: int, i: int, j: int) -> int: ... def block_windows(self, bidx: int = 0) -> Iterable[tuple[tuple[int, int], Window]]: ... @@ -136,27 +126,22 @@ class DatasetBase: def tag_namespaces(self, bidx: int = 0) -> list[str]: ... def tags(self, bidx: int = 0, ns: str | None = None) -> dict[str, str]: ... def get_tag_item(self, ns: str, dm: str | None = None, bidx: int = 0, ovr: int | None = None) -> str | None: ... - @property def colorinterp(self) -> tuple[ColorInterp, ...]: ... @colorinterp.setter def colorinterp(self, value: Sequence[ColorInterp]) -> None: ... - def colormap(self, bidx: int) -> Colormap: ... def overviews(self, bidx: int) -> list[int]: ... def checksum(self, bidx: int, window: Window | None = None) -> int: ... def get_gcps(self) -> tuple[list[GroundControlPoint], CRS]: ... - @property def gcps(self) -> tuple[list[GroundControlPoint], CRS]: ... @gcps.setter def gcps(self, value: tuple[Sequence[GroundControlPoint], CRSInput]) -> None: ... - @property def rpcs(self) -> RPC | None: ... @rpcs.setter def rpcs(self, value: RPC | None) -> None: ... - @property def files(self) -> list[str]: ... diff --git a/stubs/rasterio/rasterio/_io.pyi b/stubs/rasterio/rasterio/_io.pyi index 671d0067b07f..9d92754db1d4 100644 --- a/stubs/rasterio/rasterio/_io.pyi +++ b/stubs/rasterio/rasterio/_io.pyi @@ -3,9 +3,9 @@ from collections.abc import Iterator, Sequence from typing import Any, BinaryIO, Final from typing_extensions import Self, deprecated +from affine import Affine as Affine import numpy as np from numpy.typing import DTypeLike, NDArray -from rasterio._affine_types import Affine from rasterio._base import DatasetBase from rasterio._path import _ParsedPath, _UnparsedPath from rasterio._typing import Colormap, CRSInput, Indexes, NumType, ShapeND, WindowInput, _GDALOption, _OpenOption diff --git a/stubs/rasterio/rasterio/_warp.pyi b/stubs/rasterio/rasterio/_warp.pyi index b98484b6fd62..6a109c6b0313 100644 --- a/stubs/rasterio/rasterio/_warp.pyi +++ b/stubs/rasterio/rasterio/_warp.pyi @@ -2,7 +2,7 @@ from collections.abc import Sequence from typing import Any, Final from numpy.typing import DTypeLike, NDArray -from rasterio._affine_types import Affine +from affine import Affine as Affine from rasterio._io import DatasetReaderBase from rasterio._typing import CRSInput, Geometry, Indexes, ShapeND, WindowInput, _GDALOption, _NestedScalar from rasterio.control import GroundControlPoint diff --git a/stubs/rasterio/rasterio/features.pyi b/stubs/rasterio/rasterio/features.pyi index d3689801f08e..7a88a13fca3f 100644 --- a/stubs/rasterio/rasterio/features.pyi +++ b/stubs/rasterio/rasterio/features.pyi @@ -4,9 +4,9 @@ from collections.abc import Iterable, Iterator from typing import Any, Final, overload from typing_extensions import deprecated +from affine import Affine as Affine import numpy as np from numpy.typing import DTypeLike, NDArray -from rasterio._affine_types import Affine from rasterio._typing import Geometry as Geometry from rasterio.enums import MergeAlg as MergeAlg from rasterio.io import DatasetReaderBase @@ -40,7 +40,6 @@ def rasterize( dst_kwds: dict[str, Any] | None = None, ) -> NDArray[Any]: ... def bounds(geometry: Geometry, north_up: bool = True, transform: Affine | None = None) -> tuple[float, float, float, float]: ... - @overload def geometry_window( dataset: DatasetReaderBase, shapes: Iterable[Geometry], pad_x: float = 0, pad_y: float = 0, *, boundless: bool = False @@ -60,7 +59,6 @@ def geometry_window( pixel_precision: float | None = None, boundless: bool = False, ) -> Window: ... - def is_valid_geom(geom: Geometry) -> bool: ... def dataset_features( src: DatasetReaderBase, diff --git a/stubs/rasterio/rasterio/io.pyi b/stubs/rasterio/rasterio/io.pyi index ad52b80ed0a7..c4308f98628a 100644 --- a/stubs/rasterio/rasterio/io.pyi +++ b/stubs/rasterio/rasterio/io.pyi @@ -3,8 +3,8 @@ from types import TracebackType from typing import Any, Final from typing_extensions import Self, deprecated +from affine import Affine as Affine from numpy.typing import DTypeLike -from rasterio._affine_types import Affine from rasterio._filepath import FilePathBase as FilePathBase from rasterio._io import ( BufferedDatasetWriterBase as BufferedDatasetWriterBase, diff --git a/stubs/rasterio/rasterio/mask.pyi b/stubs/rasterio/rasterio/mask.pyi index 016f621c567f..e0259b0c1d42 100644 --- a/stubs/rasterio/rasterio/mask.pyi +++ b/stubs/rasterio/rasterio/mask.pyi @@ -2,8 +2,8 @@ import logging from collections.abc import Iterable from typing import Any, Final +from affine import Affine as Affine from numpy.typing import NDArray -from rasterio._affine_types import Affine from rasterio._typing import Geometry from rasterio.errors import WindowError as WindowError from rasterio.features import geometry_mask as geometry_mask, geometry_window as geometry_window diff --git a/stubs/rasterio/rasterio/merge.pyi b/stubs/rasterio/rasterio/merge.pyi index d9d767d53c2e..f98aa7d0055d 100644 --- a/stubs/rasterio/rasterio/merge.pyi +++ b/stubs/rasterio/rasterio/merge.pyi @@ -4,8 +4,8 @@ from collections.abc import Callable, Sequence from typing import Any, Final, Literal, TypeAlias, overload from typing_extensions import deprecated +from affine import Affine as Affine from numpy.typing import DTypeLike, NDArray -from rasterio._affine_types import Affine from rasterio.enums import Resampling from rasterio.io import DatasetReaderBase @@ -23,7 +23,6 @@ def copy_min(merged_data: _Arr, new_data: _Arr, merged_mask: _Arr, new_mask: _Ar def copy_max(merged_data: _Arr, new_data: _Arr, merged_mask: _Arr, new_mask: _Arr, **kwargs: Any) -> None: ... def copy_sum(merged_data: _Arr, new_data: _Arr, merged_mask: _Arr, new_mask: _Arr, **kwargs: Any) -> None: ... def copy_count(merged_data: _Arr, new_data: _Arr, merged_mask: _Arr, new_mask: _Arr, **kwargs: Any) -> None: ... - @overload def merge( sources: Sequence[DatasetReaderBase | str | os.PathLike[str]], diff --git a/stubs/rasterio/rasterio/plot.pyi b/stubs/rasterio/rasterio/plot.pyi index 80815180dac1..1df2f6545ad1 100644 --- a/stubs/rasterio/rasterio/plot.pyi +++ b/stubs/rasterio/rasterio/plot.pyi @@ -2,8 +2,8 @@ import logging from collections.abc import Mapping, Sequence from typing import Any, Final, Literal +from affine import Affine as Affine from numpy.typing import NDArray -from rasterio._affine_types import Affine from rasterio.io import DatasetReader as DatasetReader from rasterio.transform import guard_transform as guard_transform diff --git a/stubs/rasterio/rasterio/stack.pyi b/stubs/rasterio/rasterio/stack.pyi index 68680ffe9b1e..307ffa1a5b64 100644 --- a/stubs/rasterio/rasterio/stack.pyi +++ b/stubs/rasterio/rasterio/stack.pyi @@ -3,8 +3,8 @@ import os from collections.abc import Sequence from typing import Any, Final +from affine import Affine as Affine from numpy.typing import DTypeLike, NDArray -from rasterio._affine_types import Affine from rasterio.enums import Resampling from rasterio.io import DatasetReaderBase diff --git a/stubs/rasterio/rasterio/transform.pyi b/stubs/rasterio/rasterio/transform.pyi index f6aae2f7f098..79009d1bae8f 100644 --- a/stubs/rasterio/rasterio/transform.pyi +++ b/stubs/rasterio/rasterio/transform.pyi @@ -2,7 +2,7 @@ from collections.abc import Callable, Sequence from typing import Final, Literal, TypeAlias, overload from typing_extensions import Self, deprecated -from rasterio._affine_types import Affine as Affine +from affine import Affine as Affine from rasterio._transform import GCPTransformerBase, RPCTransformerBase from rasterio._typing import _GDALOption from rasterio.control import GroundControlPoint @@ -76,7 +76,6 @@ class TransformerBase: zs: float | Sequence[float] | None = None, offset: _OffsetOptions = "center", ) -> tuple[float, float] | tuple[list[float], list[float]]: ... - @overload def rowcol( self, diff --git a/stubs/rasterio/rasterio/warp.pyi b/stubs/rasterio/rasterio/warp.pyi index 09e4a86ca08d..44589e85d24e 100644 --- a/stubs/rasterio/rasterio/warp.pyi +++ b/stubs/rasterio/rasterio/warp.pyi @@ -3,8 +3,8 @@ from collections.abc import Mapping, Sequence from typing import Any, Final, TypeAlias, overload from typing_extensions import deprecated +from affine import Affine as Affine from numpy.typing import ArrayLike, NDArray -from rasterio._affine_types import Affine from rasterio._typing import CRSInput, Geometry, _GDALOption from rasterio.control import GroundControlPoint from rasterio.enums import Resampling @@ -19,7 +19,6 @@ SUPPORTED_RESAMPLING: Final[list[Resampling]] def transform( src_crs: CRSInput, dst_crs: CRSInput, xs: ArrayLike, ys: ArrayLike, zs: ArrayLike | None = None ) -> tuple[list[float], list[float]] | tuple[list[float], list[float], list[float]]: ... - @overload def transform_geom( src_crs: CRSInput, dst_crs: CRSInput, geom: Geometry | Sequence[Geometry], *, precision: float = -1 @@ -38,7 +37,6 @@ def transform_geom( antimeridian_offset: float | None = None, precision: float = -1, ) -> dict[str, Any] | list[dict[str, Any]]: ... - def transform_bounds( src_crs: CRSInput, dst_crs: CRSInput, left: float, bottom: float, right: float, top: float, densify_pts: int = 21 ) -> tuple[float, float, float, float]: ... diff --git a/stubs/rasterio/rasterio/windows.pyi b/stubs/rasterio/rasterio/windows.pyi index bead643d3f08..a0d5de0ae9ce 100644 --- a/stubs/rasterio/rasterio/windows.pyi +++ b/stubs/rasterio/rasterio/windows.pyi @@ -2,8 +2,8 @@ from collections.abc import Callable, Sequence from typing import Any, TypeAlias, overload from typing_extensions import Self, deprecated +from affine import Affine as Affine from numpy.typing import NDArray -from rasterio._affine_types import Affine from rasterio.errors import RasterioDeprecationWarning as RasterioDeprecationWarning, WindowError as WindowError _Bounds: TypeAlias = tuple[float, float, float, float] @@ -16,7 +16,6 @@ class WindowMethodsMixin: @overload @deprecated("The `precision` parameter is unused since rasterio 1.3 and will be removed in 2.0.0.") def window(self, left: float, bottom: float, right: float, top: float, precision: int | None = None) -> Window: ... - def window_transform(self, window: Window) -> Affine: ... def window_bounds(self, window: Window) -> _Bounds: ... @@ -26,7 +25,6 @@ def get_data_window(arr: NDArray[Any], nodata: float | None = None) -> Window: . def union(*windows: Window) -> Window: ... def intersection(*windows: Window) -> Window: ... def intersect(*windows: Window) -> bool: ... - @overload def from_bounds(left: float, bottom: float, right: float, top: float, transform: Affine | None = None) -> Window: ... @overload @@ -43,7 +41,6 @@ def from_bounds( width: int | None = None, precision: int | None = None, ) -> Window: ... - def transform(window: Window, transform: Affine) -> Affine: ... def bounds(window: Window, transform: Affine, height: int = 0, width: int = 0) -> _Bounds: ... def crop(window: Window, height: int, width: int) -> Window: ... From d641e5065329a8aacec6384699240af60f650cba Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 10 Aug 2026 14:43:11 +0000 Subject: [PATCH 3/9] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stubs/rasterio/rasterio/_base.pyi | 15 +++++++++++++++ stubs/rasterio/rasterio/_io.pyi | 2 +- stubs/rasterio/rasterio/_warp.pyi | 2 +- stubs/rasterio/rasterio/features.pyi | 4 +++- stubs/rasterio/rasterio/merge.pyi | 1 + stubs/rasterio/rasterio/transform.pyi | 1 + stubs/rasterio/rasterio/warp.pyi | 2 ++ stubs/rasterio/rasterio/windows.pyi | 3 +++ 8 files changed, 27 insertions(+), 3 deletions(-) diff --git a/stubs/rasterio/rasterio/_base.pyi b/stubs/rasterio/rasterio/_base.pyi index f496f78ad7bf..f5b6d7a75cea 100644 --- a/stubs/rasterio/rasterio/_base.pyi +++ b/stubs/rasterio/rasterio/_base.pyi @@ -68,37 +68,47 @@ class DatasetBase: def get_nodatavals(self) -> tuple[float | None, ...]: ... @property def nodatavals(self) -> tuple[float | None, ...]: ... + @property def nodata(self) -> float | None: ... @nodata.setter def nodata(self, value: float | None) -> None: ... + @property def mask_flag_enums(self) -> tuple[list[MaskFlags], ...]: ... + @property def crs(self) -> CRS: ... @crs.setter def crs(self, value: CRSInput) -> None: ... + @property def descriptions(self) -> tuple[str | None, ...]: ... @descriptions.setter def descriptions(self, value: Sequence[str | None]) -> None: ... + def write_transform(self, transform: Sequence[float]) -> None: ... + @property def transform(self) -> Affine: ... @transform.setter def transform(self, value: Affine) -> None: ... + @property def offsets(self) -> tuple[float, ...]: ... @offsets.setter def offsets(self, value: Sequence[float]) -> None: ... + @property def scales(self) -> tuple[float, ...]: ... @scales.setter def scales(self, value: Sequence[float]) -> None: ... + @property def units(self) -> tuple[str | None, ...]: ... @units.setter def units(self, value: Sequence[str | None]) -> None: ... + def block_window(self, bidx: int, i: int, j: int) -> Window: ... def block_size(self, bidx: int, i: int, j: int) -> int: ... def block_windows(self, bidx: int = 0) -> Iterable[tuple[tuple[int, int], Window]]: ... @@ -126,22 +136,27 @@ class DatasetBase: def tag_namespaces(self, bidx: int = 0) -> list[str]: ... def tags(self, bidx: int = 0, ns: str | None = None) -> dict[str, str]: ... def get_tag_item(self, ns: str, dm: str | None = None, bidx: int = 0, ovr: int | None = None) -> str | None: ... + @property def colorinterp(self) -> tuple[ColorInterp, ...]: ... @colorinterp.setter def colorinterp(self, value: Sequence[ColorInterp]) -> None: ... + def colormap(self, bidx: int) -> Colormap: ... def overviews(self, bidx: int) -> list[int]: ... def checksum(self, bidx: int, window: Window | None = None) -> int: ... def get_gcps(self) -> tuple[list[GroundControlPoint], CRS]: ... + @property def gcps(self) -> tuple[list[GroundControlPoint], CRS]: ... @gcps.setter def gcps(self, value: tuple[Sequence[GroundControlPoint], CRSInput]) -> None: ... + @property def rpcs(self) -> RPC | None: ... @rpcs.setter def rpcs(self, value: RPC | None) -> None: ... + @property def files(self) -> list[str]: ... diff --git a/stubs/rasterio/rasterio/_io.pyi b/stubs/rasterio/rasterio/_io.pyi index 9d92754db1d4..bd0ce16ba759 100644 --- a/stubs/rasterio/rasterio/_io.pyi +++ b/stubs/rasterio/rasterio/_io.pyi @@ -3,8 +3,8 @@ from collections.abc import Iterator, Sequence from typing import Any, BinaryIO, Final from typing_extensions import Self, deprecated -from affine import Affine as Affine import numpy as np +from affine import Affine as Affine from numpy.typing import DTypeLike, NDArray from rasterio._base import DatasetBase from rasterio._path import _ParsedPath, _UnparsedPath diff --git a/stubs/rasterio/rasterio/_warp.pyi b/stubs/rasterio/rasterio/_warp.pyi index 6a109c6b0313..f7d3311f74f2 100644 --- a/stubs/rasterio/rasterio/_warp.pyi +++ b/stubs/rasterio/rasterio/_warp.pyi @@ -1,8 +1,8 @@ from collections.abc import Sequence from typing import Any, Final -from numpy.typing import DTypeLike, NDArray from affine import Affine as Affine +from numpy.typing import DTypeLike, NDArray from rasterio._io import DatasetReaderBase from rasterio._typing import CRSInput, Geometry, Indexes, ShapeND, WindowInput, _GDALOption, _NestedScalar from rasterio.control import GroundControlPoint diff --git a/stubs/rasterio/rasterio/features.pyi b/stubs/rasterio/rasterio/features.pyi index 7a88a13fca3f..303ca1f3de5e 100644 --- a/stubs/rasterio/rasterio/features.pyi +++ b/stubs/rasterio/rasterio/features.pyi @@ -4,8 +4,8 @@ from collections.abc import Iterable, Iterator from typing import Any, Final, overload from typing_extensions import deprecated -from affine import Affine as Affine import numpy as np +from affine import Affine as Affine from numpy.typing import DTypeLike, NDArray from rasterio._typing import Geometry as Geometry from rasterio.enums import MergeAlg as MergeAlg @@ -40,6 +40,7 @@ def rasterize( dst_kwds: dict[str, Any] | None = None, ) -> NDArray[Any]: ... def bounds(geometry: Geometry, north_up: bool = True, transform: Affine | None = None) -> tuple[float, float, float, float]: ... + @overload def geometry_window( dataset: DatasetReaderBase, shapes: Iterable[Geometry], pad_x: float = 0, pad_y: float = 0, *, boundless: bool = False @@ -59,6 +60,7 @@ def geometry_window( pixel_precision: float | None = None, boundless: bool = False, ) -> Window: ... + def is_valid_geom(geom: Geometry) -> bool: ... def dataset_features( src: DatasetReaderBase, diff --git a/stubs/rasterio/rasterio/merge.pyi b/stubs/rasterio/rasterio/merge.pyi index f98aa7d0055d..e9713eb21dcb 100644 --- a/stubs/rasterio/rasterio/merge.pyi +++ b/stubs/rasterio/rasterio/merge.pyi @@ -23,6 +23,7 @@ def copy_min(merged_data: _Arr, new_data: _Arr, merged_mask: _Arr, new_mask: _Ar def copy_max(merged_data: _Arr, new_data: _Arr, merged_mask: _Arr, new_mask: _Arr, **kwargs: Any) -> None: ... def copy_sum(merged_data: _Arr, new_data: _Arr, merged_mask: _Arr, new_mask: _Arr, **kwargs: Any) -> None: ... def copy_count(merged_data: _Arr, new_data: _Arr, merged_mask: _Arr, new_mask: _Arr, **kwargs: Any) -> None: ... + @overload def merge( sources: Sequence[DatasetReaderBase | str | os.PathLike[str]], diff --git a/stubs/rasterio/rasterio/transform.pyi b/stubs/rasterio/rasterio/transform.pyi index 79009d1bae8f..7a365f1a66d5 100644 --- a/stubs/rasterio/rasterio/transform.pyi +++ b/stubs/rasterio/rasterio/transform.pyi @@ -76,6 +76,7 @@ class TransformerBase: zs: float | Sequence[float] | None = None, offset: _OffsetOptions = "center", ) -> tuple[float, float] | tuple[list[float], list[float]]: ... + @overload def rowcol( self, diff --git a/stubs/rasterio/rasterio/warp.pyi b/stubs/rasterio/rasterio/warp.pyi index 44589e85d24e..adcd1c278458 100644 --- a/stubs/rasterio/rasterio/warp.pyi +++ b/stubs/rasterio/rasterio/warp.pyi @@ -19,6 +19,7 @@ SUPPORTED_RESAMPLING: Final[list[Resampling]] def transform( src_crs: CRSInput, dst_crs: CRSInput, xs: ArrayLike, ys: ArrayLike, zs: ArrayLike | None = None ) -> tuple[list[float], list[float]] | tuple[list[float], list[float], list[float]]: ... + @overload def transform_geom( src_crs: CRSInput, dst_crs: CRSInput, geom: Geometry | Sequence[Geometry], *, precision: float = -1 @@ -37,6 +38,7 @@ def transform_geom( antimeridian_offset: float | None = None, precision: float = -1, ) -> dict[str, Any] | list[dict[str, Any]]: ... + def transform_bounds( src_crs: CRSInput, dst_crs: CRSInput, left: float, bottom: float, right: float, top: float, densify_pts: int = 21 ) -> tuple[float, float, float, float]: ... diff --git a/stubs/rasterio/rasterio/windows.pyi b/stubs/rasterio/rasterio/windows.pyi index a0d5de0ae9ce..c5c80b9861f9 100644 --- a/stubs/rasterio/rasterio/windows.pyi +++ b/stubs/rasterio/rasterio/windows.pyi @@ -16,6 +16,7 @@ class WindowMethodsMixin: @overload @deprecated("The `precision` parameter is unused since rasterio 1.3 and will be removed in 2.0.0.") def window(self, left: float, bottom: float, right: float, top: float, precision: int | None = None) -> Window: ... + def window_transform(self, window: Window) -> Affine: ... def window_bounds(self, window: Window) -> _Bounds: ... @@ -25,6 +26,7 @@ def get_data_window(arr: NDArray[Any], nodata: float | None = None) -> Window: . def union(*windows: Window) -> Window: ... def intersection(*windows: Window) -> Window: ... def intersect(*windows: Window) -> bool: ... + @overload def from_bounds(left: float, bottom: float, right: float, top: float, transform: Affine | None = None) -> Window: ... @overload @@ -41,6 +43,7 @@ def from_bounds( width: int | None = None, precision: int | None = None, ) -> Window: ... + def transform(window: Window, transform: Affine) -> Affine: ... def bounds(window: Window, transform: Affine, height: int = 0, width: int = 0) -> _Bounds: ... def crop(window: Window, height: int, width: int) -> Window: ... From 37db7e01e842961be832df61276c576ca32b86b4 Mon Sep 17 00:00:00 2001 From: jack-volantautonomy Date: Mon, 10 Aug 2026 15:47:08 +0100 Subject: [PATCH 4/9] Remove unnecessary file --- stubs/rasterio/rasterio/_affine_types.pyi | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 stubs/rasterio/rasterio/_affine_types.pyi diff --git a/stubs/rasterio/rasterio/_affine_types.pyi b/stubs/rasterio/rasterio/_affine_types.pyi deleted file mode 100644 index e69de29bb2d1..000000000000 From 7907ae4479c3422578c9ae63cda401f85dbebf3a Mon Sep 17 00:00:00 2001 From: jack-volantautonomy Date: Mon, 10 Aug 2026 16:04:25 +0100 Subject: [PATCH 5/9] 1.5.1 changes --- stubs/rasterio/rasterio/errors.pyi | 1 + stubs/rasterio/rasterio/plot.pyi | 2 +- stubs/rasterio/rasterio/warp.pyi | 3 +-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/stubs/rasterio/rasterio/errors.pyi b/stubs/rasterio/rasterio/errors.pyi index c883864c3f86..6e7425eb4fa7 100644 --- a/stubs/rasterio/rasterio/errors.pyi +++ b/stubs/rasterio/rasterio/errors.pyi @@ -16,6 +16,7 @@ class NodataShadowWarning(UserWarning): ... class NotGeoreferencedWarning(UserWarning): ... class TransformWarning(UserWarning): ... class RPCError(ValueError): ... +class InvalidShapeError(RasterioError, ValueError): ... class ShapeSkipWarning(UserWarning): ... class GDALBehaviorChangeException(RuntimeError): ... class GDALOptionNotImplementedError(RasterioError): ... diff --git a/stubs/rasterio/rasterio/plot.pyi b/stubs/rasterio/rasterio/plot.pyi index 1df2f6545ad1..a407bb686479 100644 --- a/stubs/rasterio/rasterio/plot.pyi +++ b/stubs/rasterio/rasterio/plot.pyi @@ -25,7 +25,7 @@ def show( title: str | None = None, transform: Affine | None = None, percent_range: tuple[float, float] | None = None, - adjust: bool = True, + adjust: bool = False, **kwargs: Any, ) -> Any: ... def plotting_extent( diff --git a/stubs/rasterio/rasterio/warp.pyi b/stubs/rasterio/rasterio/warp.pyi index adcd1c278458..929eaddf79a5 100644 --- a/stubs/rasterio/rasterio/warp.pyi +++ b/stubs/rasterio/rasterio/warp.pyi @@ -19,7 +19,6 @@ SUPPORTED_RESAMPLING: Final[list[Resampling]] def transform( src_crs: CRSInput, dst_crs: CRSInput, xs: ArrayLike, ys: ArrayLike, zs: ArrayLike | None = None ) -> tuple[list[float], list[float]] | tuple[list[float], list[float], list[float]]: ... - @overload def transform_geom( src_crs: CRSInput, dst_crs: CRSInput, geom: Geometry | Sequence[Geometry], *, precision: float = -1 @@ -38,7 +37,6 @@ def transform_geom( antimeridian_offset: float | None = None, precision: float = -1, ) -> dict[str, Any] | list[dict[str, Any]]: ... - def transform_bounds( src_crs: CRSInput, dst_crs: CRSInput, left: float, bottom: float, right: float, top: float, densify_pts: int = 21 ) -> tuple[float, float, float, float]: ... @@ -60,6 +58,7 @@ def reproject( resampling: Resampling = ..., num_threads: int = 1, init_dest_nodata: bool = True, + tolerance: float = 0.125, warp_mem_limit: int = 0, src_geoloc_array: NDArray[Any] | None = None, **kwargs: _GDALOption, From fc9603335981be02c54363c1d7ea768c2a5257c0 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 10 Aug 2026 15:06:42 +0000 Subject: [PATCH 6/9] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stubs/rasterio/rasterio/warp.pyi | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stubs/rasterio/rasterio/warp.pyi b/stubs/rasterio/rasterio/warp.pyi index 929eaddf79a5..ffd58099a02f 100644 --- a/stubs/rasterio/rasterio/warp.pyi +++ b/stubs/rasterio/rasterio/warp.pyi @@ -19,6 +19,7 @@ SUPPORTED_RESAMPLING: Final[list[Resampling]] def transform( src_crs: CRSInput, dst_crs: CRSInput, xs: ArrayLike, ys: ArrayLike, zs: ArrayLike | None = None ) -> tuple[list[float], list[float]] | tuple[list[float], list[float], list[float]]: ... + @overload def transform_geom( src_crs: CRSInput, dst_crs: CRSInput, geom: Geometry | Sequence[Geometry], *, precision: float = -1 @@ -37,6 +38,7 @@ def transform_geom( antimeridian_offset: float | None = None, precision: float = -1, ) -> dict[str, Any] | list[dict[str, Any]]: ... + def transform_bounds( src_crs: CRSInput, dst_crs: CRSInput, left: float, bottom: float, right: float, top: float, densify_pts: int = 21 ) -> tuple[float, float, float, float]: ... From 810a94730359abcc17d75da2441c6fef0f614283 Mon Sep 17 00:00:00 2001 From: jack-volantautonomy Date: Mon, 10 Aug 2026 16:23:24 +0100 Subject: [PATCH 7/9] Extra tweaks --- stubs/rasterio/rasterio/_warp.pyi | 2 ++ stubs/rasterio/rasterio/serde.pyi | 5 +++++ 2 files changed, 7 insertions(+) create mode 100644 stubs/rasterio/rasterio/serde.pyi diff --git a/stubs/rasterio/rasterio/_warp.pyi b/stubs/rasterio/rasterio/_warp.pyi index f7d3311f74f2..f757cfe5a747 100644 --- a/stubs/rasterio/rasterio/_warp.pyi +++ b/stubs/rasterio/rasterio/_warp.pyi @@ -14,6 +14,8 @@ from rasterio.rpc import RPC SUPPORTED_RESAMPLING: Final[list[Resampling]] DEFAULT_NODATA_FLAG: Final[object] +dtype_ranges: dict[str, tuple[float, float]] + def recursive_round(val: _NestedScalar, precision: int) -> _NestedScalar: ... def _transform_geom( src_crs: CRSInput, dst_crs: CRSInput, geom: Geometry | Sequence[Geometry], precision: int diff --git a/stubs/rasterio/rasterio/serde.pyi b/stubs/rasterio/rasterio/serde.pyi new file mode 100644 index 000000000000..bba8f05ca8ed --- /dev/null +++ b/stubs/rasterio/rasterio/serde.pyi @@ -0,0 +1,5 @@ +from functools import singledispatch +from typing import Any + +@singledispatch +def to_json(obj: Any) -> Any: ... From f06868b5bdf965dc4ef3a34a9b878700ba7335c7 Mon Sep 17 00:00:00 2001 From: jack-volantautonomy Date: Mon, 10 Aug 2026 16:32:37 +0100 Subject: [PATCH 8/9] Extra required --- stubs/rasterio/METADATA.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/stubs/rasterio/METADATA.toml b/stubs/rasterio/METADATA.toml index 5aafc6e390ad..fbf479b461eb 100644 --- a/stubs/rasterio/METADATA.toml +++ b/stubs/rasterio/METADATA.toml @@ -2,3 +2,6 @@ version = "1.5.1" upstream-repository = "https://github.com/rasterio/rasterio" requires-python = ">=3.12" dependencies = ["numpy>=2", "click>=8", "affine>=3"] + +[tool.stubtest] +stubtest-dependencies = ["affine"] From 4a56006ee7d064593dc0c98018b972613f8592f5 Mon Sep 17 00:00:00 2001 From: jack-volantautonomy Date: Tue, 11 Aug 2026 09:29:08 +0100 Subject: [PATCH 9/9] Sorted --- stubs/rasterio/rasterio/serde.pyi | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/stubs/rasterio/rasterio/serde.pyi b/stubs/rasterio/rasterio/serde.pyi index bba8f05ca8ed..fa06f4908611 100644 --- a/stubs/rasterio/rasterio/serde.pyi +++ b/stubs/rasterio/rasterio/serde.pyi @@ -1,5 +1,4 @@ from functools import singledispatch -from typing import Any @singledispatch -def to_json(obj: Any) -> Any: ... +def to_json(obj: object) -> object: ...