typing and comment updates

This commit is contained in:
Jan Petykiewicz 2020-11-03 01:17:43 -08:00
parent 085bb79ed7
commit ecefdff781

View File

@ -1,7 +1,7 @@
from typing import Tuple from typing import Tuple, Optional
import numpy import numpy # type: ignore
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 from scipy import sparse # type: ignore
def raster(vertices: numpy.ndarray, def raster(vertices: numpy.ndarray,
@ -18,11 +18,14 @@ def raster(vertices: numpy.ndarray,
Polygons are assumed to have clockwise vertex order; reversing the vertex order is equivalent Polygons are assumed to have clockwise vertex order; reversing the vertex order is equivalent
to multiplying the result by -1. to multiplying the result by -1.
:param vertices: 2xN ndarray containing x,y coordinates for each vertex of the polygon Args:
:param grid_x: x-coordinates for the edges of each pixel (ie, the leftmost two columns span vertices: 2xN ndarray containing `x,y` coordinates for each vertex of the polygon
x=grid_x[0] to x=grid_x[1] and x=grid_x[1] to x=grid_x[2]) grid_x: x-coordinates for the edges of each pixel (ie, the leftmost two columns span
:param grid_y: y-coordinates for the edges of each pixel (see grid_x) `x=grid_x[0]` to `x=grid_x[1]` and `x=grid_x[1]` to `x=grid_x[2]`)
:return: 2D ndarray with pixel values in the range [0, 1] containing the anti-aliased polygon grid_y: y-coordinates for the edges of each pixel (see `grid_x`)
Returns:
2D ndarray with pixel values in the range [0, 1] containing the anti-aliased polygon
""" """
vertices = numpy.array(vertices) vertices = numpy.array(vertices)
grid_x = numpy.array(grid_x) grid_x = numpy.array(grid_x)
@ -49,7 +52,7 @@ def find_intersections(
vertices: numpy.ndarray, vertices: numpy.ndarray,
grid_x: numpy.ndarray, grid_x: numpy.ndarray,
grid_y: numpy.ndarray grid_y: numpy.ndarray
) -> Tuple[numpy.ndarray]: ) -> Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]:
""" """
Find intersections between a polygon and grid lines Find intersections between a polygon and grid lines
""" """
@ -126,7 +129,7 @@ def create_vertices(
vertices: numpy.ndarray, vertices: numpy.ndarray,
grid_x: numpy.ndarray, grid_x: numpy.ndarray,
grid_y: numpy.ndarray, grid_y: numpy.ndarray,
new_vertex_data: Tuple[numpy.ndarray] = None new_vertex_data: Optional[Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]] = None
) -> sparse.coo_matrix: ) -> sparse.coo_matrix:
""" """
Create additional vertices where a polygon crosses gridlines Create additional vertices where a polygon crosses gridlines
@ -171,6 +174,7 @@ def create_vertices(
return vertices return vertices
def clip_vertices_to_window( def clip_vertices_to_window(
vertices: numpy.ndarray, vertices: numpy.ndarray,
min_x: float = -numpy.inf, min_x: float = -numpy.inf,
@ -201,26 +205,29 @@ def get_raster_parts(
grid_y: numpy.ndarray grid_y: numpy.ndarray
) -> 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
of pixel values, it returns a sparse array containing the value of pixel values, it returns a sparse array containing the value
(-area + 1j * cover) `(-area + 1j * cover)`
for each pixel which contains a line segment, where for each pixel which contains a line segment, where
cover is the fraction of the pixel's y-length that is traversed by the segment, `cover` is the fraction of the pixel's y-length that is traversed by the segment,
multiplied by the sign of (y_final - y_initial) multiplied by the sign of `(y_final - y_initial)`
area is the fraction of the pixel's area covered by the trapezoid formed by `area` is the fraction of the pixel's area covered by the trapezoid formed by
the line segment's endpoints (clipped to the cell edges) and their projections the line segment's endpoints (clipped to the cell edges) and their projections
onto the pixel's left (i.e., lowest-x) edge, again multiplied by onto the pixel's left (i.e., lowest-x) edge, again multiplied by
the sign of (y_final - y_initial) the sign of `(y_final - y_initial)`
Note that polygons are assumed to be wound clockwise. Note that polygons are assumed to be wound clockwise.
The result from raster(...) can be obtained with The result from `raster(...)` can be obtained with
raster_result = numpy.real(lines_result) + numpy.imag(lines_result).cumsum(axis=0) `raster_result = numpy.real(lines_result) + numpy.imag(lines_result).cumsum(axis=0)`
:param vertices: 2xN ndarray containing x,y coordinates for each point in the polygon Args:
:param grid_x: x-coordinates for the edges of each pixel (ie, the leftmost two columns span vertices: 2xN ndarray containing `x, y` coordinates for each point in the polygon
x=grid_x[0] to x=grid_x[1] and x=grid_x[1] to x=grid_x[2]) grid_x: x-coordinates for the edges of each pixel (ie, the leftmost two columns span
:param grid_y: y-coordinates for the edges of each pixel (see grid_x) `x=grid_x[0]` to `x=grid_x[1]` and `x=grid_x[1]` to `x=grid_x[2]`)
:return: Complex sparse COO matrix containing area and cover information grid_y: y-coordinates for the edges of each pixel (see `grid_x`)
Returns:
Complex sparse COO matrix containing area and cover information
""" """
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')