docs: def tiles_from_geom(self, geometry, zoom):
          """
          Return all tiles intersecting with input geometry.
  
          - geometry: shapely geometry
          - zoom: zoom level
          """
          validate_zoom(zoom)
          if geometry.is_empty:
              return
          if not geometry.is_valid:
              raise ValueError("no valid geometry: %s" % geometry.type)
          if geometry.geom_type == "Point":
              yield self.tile_from_xy(geometry.x, geometry.y, zoom)
          elif geometry.geom_type == "MultiPoint":
              for point in geometry:
                  yield self.tile_from_xy(point.x, point.y, zoom)
          elif geometry.geom_type in (
              "LineString", "MultiLineString", "Polygon", "MultiPolygon",
              "GeometryCollection"
          ):
              prepared_geometry = prep(clip_geometry_to_srs_bounds(geometry, self))
              for tile in self.tiles_from_bbox(geometry, zoom):
                  if prepared_geometry.intersects(tile.bbox()):
                      yield tile