docs: def _union_in_blocks(contours, block_size):
      """
      Generator which yields a valid shape for each block_size multiple of
      input contours. This merges together the contours for each block before
      yielding them.
      """
  
      n_contours = len(contours)
      for i in range(0, n_contours, block_size):
          j = min(i + block_size, n_contours)
  
          inners = []
          for c in contours[i:j]:
              p = _contour_to_poly(c)
              if p.type == 'Polygon':
                  inners.append(p)
              elif p.type == 'MultiPolygon':
                  inners.extend(p.geoms)
          holes = unary_union(inners)
          assert holes.is_valid
  
          yield holes