              return
          self.cuda_version = self._cuda_keys[0].lower().replace("cuda_path_v", "").replace("_", ".")
          self.cuda_path = os.environ[self._cuda_keys[0][0]]
  
      def _cudnn_check(self):
          """ Check Linux or Windows cuDNN Version from cudnn.h and add to :attr:`cudnn_version`. """
          cudnn_checkfiles = getattr(self, f"_get_checkfiles_{self._os}")()
          cudnn_checkfile = next((hdr for hdr in cudnn_checkfiles if os.path.isfile(hdr)), None)
          logger.debug("cudnn checkfiles: %s", cudnn_checkfile)
          if not cudnn_checkfile:
              return
 
</s> remove             return
 </s> add             return False
 </s> remove         if found != 3:  # Full version could not be determined
            return
 </s> add         if found != 3:  # Full version not determined
            return False
 </s> remove             key = pkg[0].split("==", maxsplit=1)[0]
 </s> add             reqs = next(parse_requirements(pkg[0]))  # TODO Handle '=' vs '==' for conda
            key = reqs.unsafe_name
            specs = reqs.specs
 </s> remove         self.cuda_path: Optional[str] = None
        self.cuda_version: Optional[str] = None
        self.cudnn_version: Optional[str] = None
 </s> add         self.cuda_path: str | None = None
        self.cuda_version: str | None = None
        self.cudnn_version: str | None = None </s> remove             if len(pkg[0].split("==")) > 1:
                if pkg[0].split("==")[1] != self._conda_installed_packages.get(key):
                    self._conda_missing_packages.append(pkg)
                    continue
 </s> add             if not self._validate_spec(specs, self._conda_installed_packages[key]):
                self._conda_missing_packages.append(pkg)
    def _cudnn_check_files(self) -> bool:
        """ Check header files for cuDNN version """
              return
          self.cuda_version = self._cuda_keys[0].lower().replace("cuda_path_v", "").replace("_", ".")
          self.cuda_path = os.environ[self._cuda_keys[0][0]]
  
    def _cudnn_check_files(self) -> bool:
        """ Check header files for cuDNN version """
    def _cudnn_check_files(self) -> bool:
        """ Check header files for cuDNN version """
          cudnn_checkfiles = getattr(self, f"_get_checkfiles_{self._os}")()
          cudnn_checkfile = next((hdr for hdr in cudnn_checkfiles if os.path.isfile(hdr)), None)
          logger.debug("cudnn checkfiles: %s", cudnn_checkfile)
          if not cudnn_checkfile:
              return
keep keep keep keep replace replace keep keep keep keep keep
 Rebase code (#1326)

* Remove tensorflow_probability requirement

* setup.py - fix progress bars

* requirements.txt: Remove pre python 3.9 packages

* update apple requirements.txt

* update INSTALL.md

* Remove python<3.9 code

* setup.py - fix Windows Installer

* typing: python3.9 compliant

* Update pytest and readthedocs python versions

* typing fixes

* Python Version updates
  - Reduce max version to 3.10
  - Default to 3.10 in installers
  - Remove incompatible 3.11 tests

* Update dependencies

* Downgrade imageio dep for Windows

* typing: merge optional unions and fixes

* Updates
  - min python version 3.10
  - typing to python 3.10 spec
  - remove pre-tf2.10 code
  - Add conda tests

* train: re-enable optimizer saving

* Update dockerfiles

* Update setup.py
  - Apple Conda deps to setup.py
  - Better Cuda + dependency handling

* bugfix: Patch logging to prevent Autograph errors

* Update dockerfiles

* Setup.py - Setup.py - stdout to utf-8

* Add more OSes to github Actions

* suppress mac-os end to end test 
setup.py