<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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]