          loss = K.mean(loss, axis=-1) * self.beta
          return loss
  
  
  class LInfNorm(tf.keras.losses.Loss):
      """ Calculate the L-inf norm as a loss function. """
  
      def call(self, y_true, y_pred):
          """ Call the L-inf norm loss function.
  
 
</s> remove     def call(self, y_true, y_pred):
 </s> add     @classmethod
    def call(cls, y_true, y_pred): </s> remove         self.c_1 = (self.k_1 * self.max_value) ** 2
        self.c_2 = (self.k_2 * self.max_value) ** 2
        self.dim_ordering = K.image_data_format()

    @staticmethod
    def _int_shape(input_tensor):
        """ Returns the shape of tensor or variable as a tuple of int or None entries.

        Parameters
        ----------
        input_tensor: tensor or variable
            The input to return the shape for

        Returns
        -------
        tuple
            A tuple of integers (or None entries)
        """
        return K.int_shape(input_tensor)
 </s> add  </s> remove class GradientLoss(tf.keras.losses.Loss):
 </s> add class GradientLoss(tf.keras.losses.Loss):  # pylint:disable=too-few-public-methods </s> remove             msg += " - Average loss since last save: {}".format(", ".join(lossmsg))
 </s> add             msg += f" - Average loss since last save: {', '.join(lossmsg)}" </s> remove         retval = dict()
 </s> add         retval = {}
class LInfNorm(tf.keras.losses.Loss):  # pylint:disable=too-few-public-methods
          loss = K.mean(loss, axis=-1) * self.beta
          return loss
  
  
class LInfNorm(tf.keras.losses.Loss):  # pylint:disable=too-few-public-methods
      """ Calculate the L-inf norm as a loss function. """
  
      def call(self, y_true, y_pred):
          """ Call the L-inf norm loss function.
  
keep keep keep keep 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/model/losses_tf.py