def find_pattern_partial_matches(grid: CellGrid2D, pattern: PATTERN_T) -> Iterator[float]:
(x_min, y_min), (x_max, y_max) = grid.get_extreme_coords(pad=1)
pattern_h, pattern_w = len(pattern), len(pattern[0])
pattern_area = pattern_h * pattern_w
for y in range(y_min, y_max):
for x in range(x_min, x_max):
rectangle = grid.get_rectangle(
x_range=(x, x + pattern_w),
y_range=(y, y + pattern_h),
)
if all(all(x == grid.dead_cell for x in row) for row in rectangle):
yield 0.0
correct_count = count_correct_cells(test_pattern=rectangle, target_pattern=pattern)
yield (correct_count / pattern_area)
评论列表
文章目录