update type hints
This commit is contained in:
parent
0a81c97af1
commit
6e32eda1c7
@ -1,13 +1,14 @@
|
|||||||
from typing import Tuple, Optional
|
from numpy.typing import ArrayLike, NDArray
|
||||||
import numpy # type: ignore
|
import numpy
|
||||||
from numpy import logical_and, diff, floor, ceil, ones, zeros, hstack, full_like, newaxis
|
from numpy import logical_and, diff, floor, ceil, ones, zeros, hstack, full_like, newaxis
|
||||||
from scipy import sparse # type: ignore
|
from scipy import sparse
|
||||||
|
|
||||||
|
|
||||||
def raster(vertices: numpy.ndarray,
|
def raster(
|
||||||
grid_x: numpy.ndarray,
|
vertices: ArrayLike,
|
||||||
grid_y: numpy.ndarray
|
grid_x: ArrayLike,
|
||||||
) -> numpy.ndarray:
|
grid_y: ArrayLike,
|
||||||
|
) -> NDArray[numpy.float64]:
|
||||||
"""
|
"""
|
||||||
Draws a polygon onto a 2D grid of pixels, setting pixel values equal to the fraction of the
|
Draws a polygon onto a 2D grid of pixels, setting pixel values equal to the fraction of the
|
||||||
pixel area covered by the polygon. This implementation is written for accuracy and works with
|
pixel area covered by the polygon. This implementation is written for accuracy and works with
|
||||||
@ -49,10 +50,10 @@ def raster(vertices: numpy.ndarray,
|
|||||||
|
|
||||||
|
|
||||||
def find_intersections(
|
def find_intersections(
|
||||||
vertices: numpy.ndarray,
|
vertices: NDArray[numpy.float_],
|
||||||
grid_x: numpy.ndarray,
|
grid_x: NDArray[numpy.float_],
|
||||||
grid_y: numpy.ndarray
|
grid_y: NDArray[numpy.float_],
|
||||||
) -> Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]:
|
) -> tuple[NDArray[numpy.float64], NDArray[numpy.float64], NDArray[numpy.float64]]:
|
||||||
"""
|
"""
|
||||||
Find intersections between a polygon and grid lines
|
Find intersections between a polygon and grid lines
|
||||||
"""
|
"""
|
||||||
@ -126,10 +127,10 @@ def find_intersections(
|
|||||||
|
|
||||||
|
|
||||||
def create_vertices(
|
def create_vertices(
|
||||||
vertices: numpy.ndarray,
|
vertices: NDArray[numpy.float_],
|
||||||
grid_x: numpy.ndarray,
|
grid_x: NDArray[numpy.float_],
|
||||||
grid_y: numpy.ndarray,
|
grid_y: NDArray[numpy.float_],
|
||||||
new_vertex_data: Optional[Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]] = None
|
new_vertex_data: tuple[NDArray[numpy.float64], NDArray[numpy.float64], NDArray[numpy.float64]] | None = None
|
||||||
) -> sparse.coo_matrix:
|
) -> sparse.coo_matrix:
|
||||||
"""
|
"""
|
||||||
Create additional vertices where a polygon crosses gridlines
|
Create additional vertices where a polygon crosses gridlines
|
||||||
@ -176,12 +177,12 @@ def create_vertices(
|
|||||||
|
|
||||||
|
|
||||||
def clip_vertices_to_window(
|
def clip_vertices_to_window(
|
||||||
vertices: numpy.ndarray,
|
vertices: NDArray[numpy.float64],
|
||||||
min_x: float = -numpy.inf,
|
min_x: float = -numpy.inf,
|
||||||
max_x: float = numpy.inf,
|
max_x: float = numpy.inf,
|
||||||
min_y: float = -numpy.inf,
|
min_y: float = -numpy.inf,
|
||||||
max_y: float = numpy.inf
|
max_y: float = numpy.inf
|
||||||
) -> numpy.ndarray:
|
) -> NDArray[numpy.float64]:
|
||||||
"""
|
"""
|
||||||
"""
|
"""
|
||||||
# Remove points outside the window (these will only be original points)
|
# Remove points outside the window (these will only be original points)
|
||||||
@ -200,9 +201,9 @@ def clip_vertices_to_window(
|
|||||||
|
|
||||||
|
|
||||||
def get_raster_parts(
|
def get_raster_parts(
|
||||||
vertices: numpy.ndarray,
|
vertices: ArrayLike,
|
||||||
grid_x: numpy.ndarray,
|
grid_x: ArrayLike,
|
||||||
grid_y: numpy.ndarray
|
grid_y: ArrayLike,
|
||||||
) -> sparse.coo_matrix:
|
) -> sparse.coo_matrix:
|
||||||
"""
|
"""
|
||||||
This function performs the same task as `raster(...)`, but instead of returning a dense array
|
This function performs the same task as `raster(...)`, but instead of returning a dense array
|
||||||
@ -229,14 +230,20 @@ def get_raster_parts(
|
|||||||
Returns:
|
Returns:
|
||||||
Complex sparse COO matrix containing area and cover information
|
Complex sparse COO matrix containing area and cover information
|
||||||
"""
|
"""
|
||||||
|
vertices = numpy.array(vertices)
|
||||||
|
grid_x = numpy.array(grid_x)
|
||||||
|
grid_y = numpy.array(grid_y)
|
||||||
|
|
||||||
if grid_x.size < 2 or grid_y.size < 2:
|
if grid_x.size < 2 or grid_y.size < 2:
|
||||||
raise Exception('Grid must contain at least one full pixel')
|
raise Exception('Grid must contain at least one full pixel')
|
||||||
|
|
||||||
num_xy_px = numpy.array([grid_x.size, grid_y.size]) - 1
|
num_xy_px = numpy.array([grid_x.size, grid_y.size]) - 1
|
||||||
|
|
||||||
vertices = clip_vertices_to_window(vertices,
|
vertices = clip_vertices_to_window(
|
||||||
grid_x[0], grid_x[-1],
|
vertices,
|
||||||
grid_y[0], grid_y[-1])
|
grid_x[0], grid_x[-1],
|
||||||
|
grid_y[0], grid_y[-1],
|
||||||
|
)
|
||||||
|
|
||||||
# If the shape fell completely outside our area, just return a blank grid
|
# If the shape fell completely outside our area, just return a blank grid
|
||||||
if vertices.size == 0:
|
if vertices.size == 0:
|
||||||
|
@ -30,7 +30,7 @@ classifiers = [
|
|||||||
requires-python = ">=3.8"
|
requires-python = ">=3.8"
|
||||||
dynamic = ["version"]
|
dynamic = ["version"]
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"numpy~=1.21",
|
"numpy~=1.26",
|
||||||
"scipy",
|
"scipy",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user