docs: def h5_file_exists(fname, size_guess=None, rtol=0.1, atol=1., dsets={}):
      """
      Returns ``True`` if an HDF5 file exists, has the expected file size, and
      contains (at least) the given datasets, with the correct shapes.
  
      Args:
          fname (str): Filename to check.
          size_guess (Optional[int]): Expected size (in Bytes) of the file. If
              ``None`` (the default), then filesize is not checked.
          rtol (Optional[float]): Relative tolerance for filesize.
          atol (Optional[float]): Absolute tolerance (in Bytes) for filesize.
          dsets (Optional[dict]): Dictionary specifying expected datasets. Each
              key is the name of a dataset, while each value is the expected shape
              of the dataset. Defaults to ``{}``, meaning that no datasets are
              checked.
  
      Returns:
          ``True`` if the file matches by all given criteria.
      """
      # Check if the file exists
      if not os.path.isfile(fname):
          # print('File does not exist.')
          return False
  
      # Check file size, withe the given tolerances
      if size_guess is not None:
          size = os.path.getsize(fname)
          tol = atol + rtol * size_guess
  
          if abs(size - size_guess) > tol:
              # print('File size is wrong:')
              # print('  expected: {: >16d}'.format(size_guess))
              # print('     found: {: >16d}'.format(size))
              return False
  
      # Check the datasets in the file
      if len(dsets):
          import h5py
          try:
              with h5py.File(fname, 'r') as f:
                  for key in dsets:
                      # Check that dataset is in file
                      if key not in f:
                          # print('Dataset "{}" not in file.'.format(key))
                          return False
                      # Check that the shape of the dataset is correct
                      if dsets[key] is not None:
                          if f[key].shape != dsets[key]:
                              # print('Dataset "{}" has wrong shape:'.format(key))
                              # print('  expected: {}'.format(dsets[key]))
                              # print('     found: {}'.format(f[key].shape))
                              return False
          except IOError:
              # print('Problem reading file.')
              return False
  
      return True