          if self._os in ("windows", "linux"):
              self._cuda_check()
              self._cudnn_check()
  
      def _cuda_check(self):
          """ Obtain the location and version of Cuda and populate :attr:`cuda_version` and
          :attr:`cuda_path`
  
          Initially just calls `nvcc -V` to get the installed version of Cuda currently in use.
          If this fails, drills down to more OS specific checking methods.
 
</s> remove     def __init__(self):
        self.cuda_path = None
        self.cuda_version = None
        self.cudnn_version = None
 </s> add     def __init__(self) -> None:
        self.cuda_path: Optional[str] = None
        self.cuda_version: Optional[str] = None
        self.cudnn_version: Optional[str] = None </s> remove     def _cuda_check_linux(self):
 </s> add     def _cuda_check_linux(self) -> None: </s> remove         self._os = platform.system().lower()
        self._cuda_keys = [key for key in os.environ if key.lower().startswith("cuda_path_v")]
        self._cudnn_header_files = ["cudnn_version.h", "cudnn.h"]
 </s> add         self._os: str = platform.system().lower()
        self._cuda_keys: List[str] = [key
                                      for key in os.environ
                                      if key.lower().startswith("cuda_path_v")]
        self._cudnn_header_files: List[str] = ["cudnn_version.h", "cudnn.h"] </s> remove     def _get_checkfiles_linux(self):
 </s> add     def _get_checkfiles_linux(self) -> List[str]: </s> remove     def _get_checkfiles_windows(self):
 </s> add     def _get_checkfiles_windows(self) -> List[str]:
    def _cuda_check(self) -> None:
          if self._os in ("windows", "linux"):
              self._cuda_check()
              self._cudnn_check()
  
    def _cuda_check(self) -> None:
          """ Obtain the location and version of Cuda and populate :attr:`cuda_version` and
          :attr:`cuda_path`
  
          Initially just calls `nvcc -V` to get the installed version of Cuda currently in use.
          If this fails, drills down to more OS specific checking methods.
keep keep keep keep replace keep keep keep keep keep
 pin protobuf

Setup: automatically detect for apple-silicon 
setup.py