code: def make_links(self):
          
          for dep in self.deps:
              filepaths, exts = dep.get_filepaths_and_exts()
  
              for path, ext in zip(filepaths, exts):
                  logger.info("Need path %s with ext %s" % (path, ext))
                  dest = self.ipath_from_ext(ext)
  
                  if not os.path.exists(path):
                      # Try netcdf file.
                      # TODO: this case should be treated in a cleaner way.
                      path += ".nc"
                      if os.path.exists(path): dest += ".nc"
  
                  if not os.path.exists(path):
                      raise self.Error("%s: %s is needed by this task but it does not exist" % (self, path))
  
                  if path.endswith(".nc") and not dest.endswith(".nc"): # NC --> NC file
                      dest += ".nc"
  
                  # Link path to dest if dest link does not exist.
                  # else check that it points to the expected file.
                  logger.debug("Linking path %s --> %s" % (path, dest))
                  if not os.path.exists(dest):
                      os.symlink(path, dest)
                  else:
                      # check links but only if we haven't performed the restart.
                      # in this case, indeed we may have replaced the file pointer with the
                      # previous output file of the present task.
                      if os.path.realpath(dest) != path and self.num_restarts == 0:
                          raise self.Error("\nDestination:\n %s\ndoes not point to path:\n %s" % (dest, path))
docs: Create symbolic links to the output files produced by the other tasks.
  
          .. warning::
  
              This method should be called only when the calculation is READY because
              it uses a heuristic approach to find the file to link.