def METHOD_NAME(self, polygon: Geometry) -> Iterable[Tuple[int, int]]:
    """ Return tile indexes overlapping with a given geometry.
    """
    if self._gbox.crs is None:
        poly = polygon
    else:
        poly = polygon.to_crs(self._gbox.crs)
    yy, xx = self.range_from_bbox(poly.boundingbox)
    for idx in itertools.product(yy, xx):
        gbox = self[idx]
        if gbox.extent.intersects(poly):
            yield idx