docs: def split_to_tiles(img, columns, rows):
      """
      Split an image into a specified number of tiles.
      Args:
         img (ndarray):  The image to split.
         number_tiles (int):  The number of tiles required.
      Returns:
          Tuple of tiles
      """
      # validate_image(img, number_tiles)
  
      im_w, im_h = img.shape
      # columns, rows = calc_columns_rows(number_tiles)
      # extras = (columns * rows) - number_tiles
      tile_w, tile_h = int(np.floor(im_w / columns)), int(np.floor(im_h / rows))
  
      tiles = []
      # number = 1
      for pos_y in range(0, im_h - rows, tile_h):  # -rows for rounding error.
          for pos_x in range(0, im_w - columns, tile_w):  # as above.
              roi = (pos_x, pos_y, pos_x + tile_w, pos_y + tile_h)
              # image = img.crop(area)
              tile = img[roi[1]:roi[3], roi[0]:roi[2]]
              # position = (int(floor(pos_x / tile_w)) + 1,
              #             int(floor(pos_y / tile_h)) + 1)
              # coords = (pos_x, pos_y)
              # tile = Tile(image, number, position, coords)
              tiles.append(tile)
              # number += 1
  
      return tuple(tiles)