code: def is_cached(self):
          
          from dvc.remote.local import RemoteLOCAL
          from dvc.remote.s3 import RemoteS3
  
          old = Stage.load(self.repo, self.path)
          if old._changed_outs():
              return False
  
          # NOTE: need to save checksums for deps in order to compare them
          # with what is written in the old stage.
          for dep in self.deps:
              dep.save()
  
          old_d = old.dumpd()
          new_d = self.dumpd()
  
          # NOTE: need to remove checksums from old dict in order to compare
          # it to the new one, since the new one doesn't have checksums yet.
          old_d.pop(self.PARAM_MD5, None)
          new_d.pop(self.PARAM_MD5, None)
          outs = old_d.get(self.PARAM_OUTS, [])
          for out in outs:
              out.pop(RemoteLOCAL.PARAM_CHECKSUM, None)
              out.pop(RemoteS3.PARAM_CHECKSUM, None)
  
          if old_d != new_d:
              return False
  
          # NOTE: committing to prevent potential data duplication. For example
          #
          #    $ dvc config cache.type hardlink
          #    $ echo foo > foo
          #    $ dvc add foo
          #    $ rm -f foo
          #    $ echo foo > foo
          #    $ dvc add foo # should replace foo with a link to cache
          #
          old.commit()
  
          return True
docs: Checks if this stage has been already ran and stored