docs: def check(self, *args):
          """ Check that the arguments haven't changed since the last call.
  
          Parameters
          ----------
          *args:
              All but the last argument are inputs to the cached function. The
              last is the actual value of the function.
  
          Returns
          -------
          If arguments unchanged:
              return the cached answer
          else:
              indicate recomputation required by throwing a
              :class:`CacheException`.
          """
          data = self.load()
  
          if len(data)-1 != len(args):
              raise ValueError("Wrong number of arguments passed to Cache.check")
  
          try:
              for x, x_check in zip(data, args):
                  if isinstance(x, list):
                      if len(x) != len(x_check):
                          raise CacheException
                      for x_i, x_check_i in zip(x, x_check):
                          if x_i.shape != x_check_i.shape:
                              raise CacheException
                          elif not numpy.allclose(x_i, x_check_i,
                                                  equal_nan=True):
                              raise CacheException
                  elif x.shape != x_check.shape:
                      raise CacheException
                  elif not numpy.allclose(x, x_check, equal_nan=True):
                      raise CacheException
  
          except CacheException:
              raise CacheChanged(self.file_root)
  
          print(CacheOK(self.file_root))
          return data[-1]