      def _unzip_model(self):
          """ Unzip the model file to the cache folder """
          self.logger.info("Extracting: '%s'", self._model_name)
          try:
              zip_file = zipfile.ZipFile(self._model_zip_path, "r")
              self._write_model(zip_file)
          except Exception as err:  # pylint:disable=broad-except
              self.logger.error("Unable to extract model file: %s", str(err))
              sys.exit(1)
  
      def _write_model(self, zip_file):
 
</s> remove             msg = ("There are multiple plugin types ('{}') stored in the model folder '{}'. This "
                   "is not supported.\nPlease split the model files into their own folders before "
                   "proceeding".format("', '".join(multiple_models), self.model_dir))
 </s> add             ptypes = "', '".join(multiple_models)
            msg = (f"There are multiple plugin types ('{ptypes}') stored in the model folder '"
                   f"{self.model_dir}'. This is not supported.\nPlease split the model files into "
                   "their own folders before proceeding") </s> remove             msg = ("You have requested to train with the '{}' plugin, but a model file for the "
                   "'{}' plugin already exists in the folder '{}'.\nPlease select a different "
                   "model folder.".format(self.name, multiple_models[0], self.model_dir))
 </s> add             msg = (f"You have requested to train with the '{self.name}' plugin, but a model file "
                   f"for the '{multiple_models[0]}' plugin already exists in the folder "
                   f"'{self.model_dir}'.\nPlease select a different model folder.") </s> remove                 raise FaceswapError(msg)
 </s> add                 raise FaceswapError(msg) from err </s> remove         dropped_files = list()
 </s> add         dropped_files = [] </s> remove             retval = KerasModel(model_inputs, model, name="{}_inference".format(saved_model.name))
 </s> add             retval = KerasModel(model_inputs, model, name=f"{saved_model.name}_inference")
            with zipfile.ZipFile(self._model_zip_path, "r") as zip_file:
                self._write_model(zip_file)
      def _unzip_model(self):
          """ Unzip the model file to the cache folder """
          self.logger.info("Extracting: '%s'", self._model_name)
          try:
            with zipfile.ZipFile(self._model_zip_path, "r") as zip_file:
                self._write_model(zip_file)
            with zipfile.ZipFile(self._model_zip_path, "r") as zip_file:
                self._write_model(zip_file)
          except Exception as err:  # pylint:disable=broad-except
              self.logger.error("Unable to extract model file: %s", str(err))
              sys.exit(1)
  
      def _write_model(self, zip_file):
keep keep keep keep replace replace keep keep keep keep keep
 Update code to support Tensorflow versions up to 2.8 (#1213)

* Update maximum tf version in setup + requirements

* - bump max version of tf version in launcher
- standardise tf version check

* update keras get_custom_objects  for tf>2.6

* bugfix: force black text in GUI file dialogs (linux)

* dssim loss - Move to stock tf.ssim function

* Update optimizer imports for compatibility

* fix logging for tf2.8

* Fix GUI graphing for TF2.8

* update tests

* bump requirements.txt versions

* Remove limit on nvidia-ml-py

* Graphing bugfixes
  - Prevent live graph from displaying if data not yet available

* bugfix: Live graph. Collect loss labels correctly

* fix: live graph - swallow inconsistent loss errors

* Bugfix: Prevent live graph from clearing during training

* Fix graphing for AMD 
lib/utils.py