docs: def is_valid(self):
          """Return True if tile is available in tile pyramid."""
          if not all([
              isinstance(self.zoom, int),
              self.zoom >= 0,
              isinstance(self.row, int),
              self.row >= 0,
              isinstance(self.col, int),
              self.col >= 0
          ]):
              raise TypeError("zoom, col and row must be integers >= 0")
          cols = self.tile_pyramid.matrix_width(self.zoom)
          rows = self.tile_pyramid.matrix_height(self.zoom)
          if self.col >= cols:
              raise ValueError("col (%s) exceeds matrix width (%s)" % (self.col, cols))
          if self.row >= rows:
              raise ValueError("row (%s) exceeds matrix height (%s)" % (self.row, rows))
          return True