          """ python function: Selected writer's pre-encode function, if it has one,
          otherwise ``None`` """
          dummy = np.zeros((20, 20, 3), dtype="uint8")
          test = self._writer.pre_encode(dummy)
          retval: Optional[Callable[[np.ndarray],
                                    List[bytes]]] = None if test is None else self._writer.pre_encode
          logger.debug("Writer pre_encode function: %s", retval)
          return retval
  
      @property
      def save_thread(self) -> MultiThread:
 
</s> remove     def pre_encode(self) -> Optional[Callable[[np.ndarray], List[bytes]]]:
 </s> add     def pre_encode(self) -> T.Optional[T.Callable[[np.ndarray], T.List[bytes]]]: </s> remove     def _mask_shapes(self) -> Optional[List[tuple]]:
 </s> add     def _mask_shapes(self) -> T.Optional[T.List[tuple]]: </s> remove     def _mask_inputs(self) -> Optional[list]:
 </s> add     def _mask_inputs(self) -> T.Optional[list]: </s> remove         self._model: Optional[keras.models.Model] = None
 </s> add         self._model: T.Optional[tf.keras.models.Model] = None </s> remove         if get_backend() == "amd":
            # We can't log the graph in Tensorboard logs for AMD so need to obtain from state file
            loss_keys = {int(sess_id): [name for name in session["loss_names"] if name != "total"]
                         for sess_id, session in self._state["sessions"].items()}
        else:
            assert self._tb_logs is not None
            loss_keys = {sess_id: list(logs.keys())
                         for sess_id, logs
                         in self._tb_logs.get_loss(session_id=session_id).items()}
 </s> add         assert self._tb_logs is not None
        loss_keys = {sess_id: list(logs.keys())
                     for sess_id, logs
                     in self._tb_logs.get_loss(session_id=session_id).items()}
        retval: T.Optional[T.Callable[[np.ndarray],
                           T.List[bytes]]] = None if test is None else self._writer.pre_encode
          """ python function: Selected writer's pre-encode function, if it has one,
          otherwise ``None`` """
          dummy = np.zeros((20, 20, 3), dtype="uint8")
          test = self._writer.pre_encode(dummy)
        retval: T.Optional[T.Callable[[np.ndarray],
                           T.List[bytes]]] = None if test is None else self._writer.pre_encode
        retval: T.Optional[T.Callable[[np.ndarray],
                           T.List[bytes]]] = None if test is None else self._writer.pre_encode
          logger.debug("Writer pre_encode function: %s", retval)
          return retval
  
      @property
      def save_thread(self) -> MultiThread:
keep keep keep keep replace replace keep keep keep keep keep
 Remove plaidML support (#1325)

* Remove PlaidML reference from readme files

* Remove AMD option from installers

* remove amd requirements and update setup.py

* remove plaidml test from CI workflow

* gpustats: remove plaidml backend

* plaid removals:
  - faceswap.py - python version check
  - setup.cfg - plaidml typing ignore
  - lib.keras_utils - All plaid code
  - lib.launcher.py - All plaidml checks and configuration

* remove tf2.2 specific code from GUI event reader

* lib.model - remove all plaidml implementations

* plugins.extract - remove plaidml code

* plugins.train remove plaidml code

* lib.convert - remove plaidml code

* tools.model: remove plaidml code

* Remove plaidML tests from unit tests

* remove plaidml_utils and docsting cleanups

* Remove plaidML refs from configs

* fix keras imports 
scripts/convert.py