          self.model.compile(optimizer=optimizer, loss=self._loss.functions)
          self._state.add_session_loss_names(self._loss.names)
          logger.debug("Compiled Model: %s", self.model)
  
      def _rewrite_plaid_outputs(self) -> None:
          """ Rewrite the output names for models using the PlaidML (Keras 2.2.4) backend
  
          Keras 2.2.4 duplicates model output names if any of the models have multiple outputs
          so we need to rename the outputs so we can successfully map the loss dictionaries.
  
          This is a bit of a hack, but it does work.
          """
          # TODO Remove this rewrite code if PlaidML updates to a version of Keras where this is
          # no longer necessary
          if len(self.model.output_names) == len(set(self.model.output_names)):
              logger.debug("Output names are unique, not rewriting: %s", self.model.output_names)
              return
          seen = {name: 0 for name in set(self.model.output_names)}
          new_names = []
          for name in self.model.output_names:
              new_names.append(f"{name}_{seen[name]}")
              seen[name] += 1
          logger.debug("Output names rewritten: (old: %s, new: %s)",
                       self.model.output_names, new_names)
          self.model.output_names = new_names
  
      def _legacy_mapping(self) -> Optional[dict]:
          """ The mapping of separate model files to single model layers for transferring of legacy
          weights.
  
          Returns
          -------
 
</s> remove         return KerasModel(input_, outputs=outputs, name="decoder_a")
 </s> add         return KModel(input_, outputs=outputs, name="decoder_a") </s> remove _CONFIG: Dict[str, "ConfigValueType"] = {}


def KerasModel(inputs: list, outputs: list, name: str) -> keras.models.Model:  # noqa, pylint:disable=invalid-name
    """ wrapper for :class:`keras.models.Model`.

    There are some minor foibles between Keras 2.2 and the Tensorflow version of Keras, so this
    catches potential issues and fixes prior to returning the requested model.

    All models created within plugins should use this method, and should not call keras directly
    for a model.

    Parameters
    ----------
    inputs: a keras.Input object or list of keras.Input objects.
        The input(s) of the model
    outputs: keras objects
        The output(s) of the model.
    name: str
        The name of the model.

    Returns
    -------
    :class:`keras.models.Model`
        A Keras Model
    """
    if get_backend() == "amd":
        logger.debug("Flattening inputs (%s) and outputs (%s) for AMD", inputs, outputs)
        inputs = np.array(inputs).flatten().tolist()
        outputs = np.array(outputs).flatten().tolist()
        logger.debug("Flattened inputs (%s) and outputs (%s)", inputs, outputs)
    return KModel(inputs, outputs, name=name)
 </s> add _CONFIG: T.Dict[str, ConfigValueType] = {} </s> remove         return KerasModel([input_], outputs=outputs, name="decoder_b")
 </s> add         return KModel([input_], outputs=outputs, name="decoder_b") </s> remove         return KerasModel(input_, outputs=outputs, name="decoder_b")
 </s> add         return KModel(input_, outputs=outputs, name="decoder_b") </s> remove             The output of this function must be a keras model generated from
            :class:`plugins.train.model._base.KerasModel`. See Keras documentation for the correct
            structure, but note that parameter :attr:`name` is a required rather than an optional
            argument in Faceswap. You should assign this to the attribute ``self.name`` that is
            automatically generated from the plugin's filename.
 </s> add             The generated model
    def _legacy_mapping(self) -> T.Optional[dict]:
          self.model.compile(optimizer=optimizer, loss=self._loss.functions)
          self._state.add_session_loss_names(self._loss.names)
          logger.debug("Compiled Model: %s", self.model)
  
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
    def _legacy_mapping(self) -> T.Optional[dict]:
          """ The mapping of separate model files to single model layers for transferring of legacy
          weights.
  
          Returns
          -------
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 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 
plugins/train/model/_base/model.py