docs: def _getitem(self, key, validate=False):
          """Return specified page from cache or file."""
          key = int(key)
          pages = self.pages
  
          if key < 0:
              key %= len(self)
          elif self._indexed and key >= len(pages):
              raise IndexError('index out of range')
  
          if key < len(pages):
              page = pages[key]
              if self._cache:
                  if not isinstance(page, inttypes):
                      if validate and validate != page.hash:
                          raise RuntimeError('page hash mismatch')
                      return page
              elif isinstance(page, (TiffPage, self._tiffpage)):
                  if validate and validate != page.hash:
                      raise RuntimeError('page hash mismatch')
                  return page
  
          self._seek(key)
          page = self._tiffpage(self.parent, index=key, keyframe=self._keyframe)
          if validate and validate != page.hash:
              raise RuntimeError('page hash mismatch')
          if self._cache:
              pages[key] = page
          return page