docs: def _parse(self):
          """Get axes and shape from file names."""
          if not self.pattern:
              raise TiffSequence.ParseError('invalid pattern')
          pattern = re.compile(self.pattern, re.IGNORECASE | re.VERBOSE)
          matches = pattern.findall(os.path.split(self.files[0])[-1])
          if not matches:
              raise TiffSequence.ParseError('pattern does not match file names')
          matches = matches[-1]
          if len(matches) % 2:
              raise TiffSequence.ParseError(
                  'pattern does not match axis name and index')
          axes = ''.join(m for m in matches[::2] if m)
          if not axes:
              raise TiffSequence.ParseError('pattern does not match file names')
  
          indices = []
          for fname in self.files:
              fname = os.path.split(fname)[-1]
              matches = pattern.findall(fname)[-1]
              if axes != ''.join(m for m in matches[::2] if m):
                  raise ValueError('axes do not match within image sequence')
              indices.append([int(m) for m in matches[1::2] if m])
          shape = tuple(numpy.max(indices, axis=0))
          startindex = tuple(numpy.min(indices, axis=0))
          shape = tuple(i-j+1 for i, j in zip(shape, startindex))
          if product(shape) != len(self.files):
              log.warning(
                  'TiffSequence: files are missing. Missing data are zeroed')
  
          self.axes = axes.upper()
          self.shape = shape
          self._indices = indices
          self._startindex = startindex