  
      @property
      def _cudnn_version(self):
          """ str: The installed cuDNN version. """
          if self._is_linux:
              cudnn_checkfiles = self._cudnn_checkfiles_linux()
          elif self._is_windows:
              cudnn_checkfiles = self._cudnn_checkfiles_windows()
          else:
              retval = "Unsupported OS"
              if self._is_conda:
                  retval += ". Check Conda packages for Conda cuDNN"
              return retval
  
          cudnn_checkfile = None
          for checkfile in cudnn_checkfiles:
              if os.path.isfile(checkfile):
                  cudnn_checkfile = checkfile
                  break
  
          if not cudnn_checkfile:
              retval = "No global version found"
              if self._is_conda:
                  retval += ". Check Conda packages for Conda cuDNN"
              return retval
  
          found = 0
          with open(cudnn_checkfile, "r") as ofile:
              for line in ofile:
                  if line.lower().startswith("#define cudnn_major"):
                      major = line[line.rfind(" ") + 1:].strip()
                      found += 1
                  elif line.lower().startswith("#define cudnn_minor"):
                      minor = line[line.rfind(" ") + 1:].strip()
                      found += 1
                  elif line.lower().startswith("#define cudnn_patchlevel"):
                      patchlevel = line[line.rfind(" ") + 1:].strip()
                      found += 1
                  if found == 3:
                      break
          if found != 3:
              retval = "No global version found"
              if self._is_conda:
                  retval += ". Check Conda packages for Conda cuDNN"
              return retval
          return "{}.{}.{}".format(major, minor, patchlevel)
 
</s> remove                 version += ". Check Conda packages for Conda Cuda"
        return version
 </s> add                 retval += ". Check Conda packages for Conda Cuda"
        return retval </s> remove         chk = Popen("nvcc -V", shell=True, stdout=PIPE, stderr=PIPE)
        stdout, stderr = chk.communicate()
        if not stderr:
            version = re.search(r".*release (?P<cuda>\d+\.\d+)", stdout.decode(self._encoding))
            version = version.groupdict().get("cuda", None)
            if version:
                return version
        # Failed to load nvcc
        if self._is_linux:
            version = self._cuda_version_linux()
        elif self._is_windows:
            version = self._cuda_version_windows()
        else:
            version = "Unsupported OS"
 </s> add         retval = self._cuda_check.cuda_version
        if not retval:
            retval = "No global version found" </s> remove             return retval
        return "{}.{}.{}".format(major, minor, patchlevel)

    @staticmethod
    def _cudnn_checkfiles_linux():
        """ Obtain the location of the files to check for cuDNN location in Linux.

        Returns
        str:
            The location of the header files for cuDNN
        """
        chk = os.popen("ldconfig -p | grep -P \"libcudnn.so.\\d+\" | head -n 1").read()
        if "libcudnn.so." not in chk:
            return list()
        chk = chk.strip().replace("libcudnn.so.", "")
        cudnn_vers = chk[0]
        cudnn_path = chk[chk.find("=>") + 3:chk.find("libcudnn") - 1]
        cudnn_path = cudnn_path.replace("lib", "include")
        cudnn_checkfiles = [os.path.join(cudnn_path, "cudnn_v{}.h".format(cudnn_vers)),
                            os.path.join(cudnn_path, "cudnn.h")]
        return cudnn_checkfiles

    def _cudnn_checkfiles_windows(self):
        """ Obtain the location of the files to check for cuDNN location in Windows.

        Returns
        str:
            The location of the header files for cuDNN
        """
        # TODO A more reliable way of getting the windows location
        if not self._cuda_path and not self._cuda_keys_windows:
            return list()
        if not self._cuda_path:
            self._cuda_path = os.environ[self._cuda_keys_windows[0]]

        cudnn_checkfile = os.path.join(self._cuda_path, "include", "cudnn.h")
        return [cudnn_checkfile]

    def _get_cuda_path(self):
        """ Obtain the path to Cuda install location.

        Returns
        -------
        str
            The path to the install location of Cuda on the system
        """
        if self._is_linux:
            path = self._cuda_path_linux()
        elif self._is_windows:
            path = self._cuda_path_windows()
        else:
            path = None
        return path

    @staticmethod
    def _cuda_path_linux():
        """ Obtain the path to Cuda install location on Linux.

        Returns
        -------
        str
            The path to the install location of Cuda on a Linux system
        """
        ld_library_path = os.environ.get("LD_LIBRARY_PATH", None)
        chk = os.popen("ldconfig -p | grep -P \"libcudart.so.\\d+.\\d+\" | head -n 1").read()
        if ld_library_path and not chk:
            paths = ld_library_path.split(":")
            for path in paths:
                chk = os.popen("ls {} | grep -P -o \"libcudart.so.\\d+.\\d+\" | "
                               "head -n 1".format(path)).read()
                if chk:
                    break
        if not chk:
            return None
        return chk[chk.find("=>") + 3:chk.find("targets") - 1]

    @staticmethod
    def _cuda_path_windows():
        """ Obtain the path to Cuda install location on Windows.

        Returns
        -------
        str
            The path to the install location of Cuda on a Windows system
        """
        cuda_path = os.environ.get("CUDA_PATH", None)
        return cuda_path

    def _cuda_version_linux(self):
        """ Obtain the installed version of Cuda on a Linux system.

        Returns
        -------
        The installed CUDA version on a Linux system
        """
        ld_library_path = os.environ.get("LD_LIBRARY_PATH", None)
        chk = os.popen("ldconfig -p | grep -P \"libcudart.so.\\d+.\\d+\" | head -n 1").read()
        if ld_library_path and not chk:
            paths = ld_library_path.split(":")
            for path in paths:
                chk = os.popen("ls {} | grep -P -o \"libcudart.so.\\d+.\\d+\" | "
                               "head -n 1".format(path)).read()
                if chk:
                    break
        if not chk:
            retval = "No global version found"
            if self._is_conda:
                retval += ". Check Conda packages for Conda Cuda"
            return retval
        cudavers = chk.strip().replace("libcudart.so.", "")
        return cudavers[:cudavers.find(" ")]

    def _cuda_version_windows(self):
        """ Obtain the installed version of Cuda on a Windows system.

        Returns
        -------
        The installed CUDA version on a Windows system
        """
        cuda_keys = self._cuda_keys_windows
        if not cuda_keys:
            retval = "No global version found"
            if self._is_conda:
                retval += ". Check Conda packages for Conda Cuda"
            return retval
        cudavers = [key.lower().replace("cuda_path_v", "").replace("_", ".") for key in cuda_keys]
        return " ".join(cudavers)
 </s> add         return retval </s> remove         if found != 3:
            self.output.error("cuDNN version could not be determined. See "
                              "https://github.com/deepfakes/faceswap/blob/master/INSTALL.md#cudnn "
                              "for instructions")
 </s> add         if found != 3:  # Full version could not be determined </s> remove             self.output.error("cuDNN not found. See "
                              "https://github.com/deepfakes/faceswap/blob/master/INSTALL.md#cudnn "
                              "for instructions")
 </s> add 
        retval = self._cuda_check.cudnn_version
        if not retval:
  
      @property
      def _cudnn_version(self):
          """ str: The installed cuDNN version. """
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
        retval = self._cuda_check.cudnn_version
        if not retval:
              retval = "No global version found"
              if self._is_conda:
                  retval += ". Check Conda packages for Conda cuDNN"
              return retval
          return "{}.{}.{}".format(major, minor, patchlevel)
keep keep keep keep replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace keep keep keep keep keep
 sysinfo/setup - Standardize cuda/cudnn checks 
lib/sysinfo.py