docs: def series(self):
          """Return series of TIFFpage with compatible shape and properties."""
          if self.is_ome:
              series = self._omeseries()
          elif self.is_fluoview:
              dims = {b'X': 'X', b'Y': 'Y', b'Z': 'Z', b'T': 'T',
                      b'WAVELENGTH': 'C', b'TIME': 'T', b'XY': 'R',
                      b'EVENT': 'V', b'EXPOSURE': 'L'}
              mmhd = list(reversed(self.pages[0].mm_header.dimensions))
              series = [Record(
                  axes=''.join(dims.get(i[0].strip().upper(), 'O')
                               for i in mmhd if i[1] > 1),
                  shape=tuple(int(i[1]) for i in mmhd if i[1] > 1),
                  pages=self.pages, dtype=numpy.dtype(self.pages[0].dtype))]
          elif self.is_lsm:
              lsmi = self.pages[0].cz_lsm_info
              axes = CZ_SCAN_TYPES[lsmi.scan_type]
              if self.pages[0].is_rgb:
                  axes = axes.replace('C', '').replace('XY', 'XYC')
              axes = axes[::-1]
              shape = [getattr(lsmi, CZ_DIMENSIONS[i]) for i in axes]
              pages = [p for p in self.pages if not p.is_reduced]
              series = [Record(axes=axes, shape=shape, pages=pages,
                               dtype=numpy.dtype(pages[0].dtype))]
              if len(pages) != len(self.pages):  # reduced RGB pages
                  pages = [p for p in self.pages if p.is_reduced]
                  cp = 1
                  i = 0
                  while cp < len(pages) and i < len(shape)-2:
                      cp *= shape[i]
                      i += 1
                  shape = shape[:i] + list(pages[0].shape)
                  axes = axes[:i] + 'CYX'
                  series.append(Record(axes=axes, shape=shape, pages=pages,
                                       dtype=numpy.dtype(pages[0].dtype)))
          elif self.is_nih:
              series = [Record(pages=self.pages,
                               shape=(len(self.pages),) + self.pages[0].shape,
                               axes='I' + self.pages[0].axes,
                               dtype=numpy.dtype(self.pages[0].dtype))]
          elif self.pages[0].is_shaped:
              shape = self.pages[0].tags['image_description'].value[7:-1]
              shape = tuple(int(i) for i in shape.split(b','))
              series = [Record(pages=self.pages, shape=shape,
                               axes='O' * len(shape),
                               dtype=numpy.dtype(self.pages[0].dtype))]
          else:
              shapes = []
              pages = {}
              for page in self.pages:
                  shape = page.shape + (page.axes,
                                        page.compression in TIFF_DECOMPESSORS)
                  if not shape in pages:
                      shapes.append(shape)
                      pages[shape] = [page]
                  else:
                      pages[shape].append(page)
              series = [Record(pages=pages[s],
                               axes=(('I' + s[-2])
                                     if len(pages[s]) > 1 else s[-2]),
                               dtype=numpy.dtype(pages[s][0].dtype),
                               shape=((len(pages[s]), ) + s[:-2]
                                      if len(pages[s]) > 1 else s[:-2]))
                        for s in shapes]
          return series