code: def _remove_ellipsis(self, index, numrows, numcols, numbands):
          
          # Remove the first ellipsis we find.
          rows = slice(0, numrows)
          cols = slice(0, numcols)
          bands = slice(0, numbands)
          if index[0] is Ellipsis:
              if len(index) == 2:
                  # jp2k[..., other_slice]
                  newindex = (rows, cols, index[1])
              else:
                  # jp2k[..., cols, bands]
                  newindex = (rows, index[1], index[2])
          elif index[1] is Ellipsis:
              if len(index) == 2:
                  # jp2k[rows, ...]
                  newindex = (index[0], cols, bands)
              else:
                  # jp2k[rows, ..., bands]
                  newindex = (index[0], cols, index[2])
          else:
              # Assume that we don't have 4D imagery, of course.
              newindex = (index[0], index[1], bands)
  
          return newindex
docs: resolve the first ellipsis in the index so that it references the image
  
          Parameters
          ----------
          index : tuple
              tuple of index arguments, presumably one of them is the Ellipsis
          numrows, numcols, numbands : int
              image dimensions
  
          Returns
          -------
          tuple
              Same as index, except that the first Ellipsis is replaced with
              a proper slice whose start and stop members are not None