  
     ~lib.model.layers.GlobalMinPooling2D
     ~lib.model.layers.GlobalStdDevPooling2D
     ~lib.model.layers.L2_normalize
     ~lib.model.layers.PixelShuffler
     ~lib.model.layers.ReflectionPadding2D
     ~lib.model.layers.SubPixelUpscaling
     ~lib.model.layers.Swish
  
 
</s> remove    
 </s> add    ~lib.model.layers.Swish
 </s> remove         self.input_spec = keras.layers.InputSpec(ndim=4)
 </s> add  </s> remove The losses listed here are generated from the docstrings in :mod:`lib.model.losses_tf`, however
the functions are exactly the same for :mod:`lib.model.losses_plaid`. The correct loss module will
be imported as :mod:`lib.model.losses` depending on the backend in use.

 </s> add  </s> remove         if self.data_format == 'channels_first':
            batch_size, channels, height, width = input_shape
            if batch_size is None:
                batch_size = -1
            r_height, r_width = self.size
            o_height, o_width = height * r_height, width * r_width
            o_channels = channels // (r_height * r_width)
 </s> add     def call(self, inputs: tf.Tensor, *args, **kwargs) -> tf.Tensor:
        """ Override to call the layer. </s> remove         if len(input_shape) != 4:
            raise ValueError('Inputs should have rank ' +
                             str(4) +
                             '; Received input shape:', str(input_shape))

        if self.data_format == 'channels_first':
            height = None
            width = None
            if input_shape[2] is not None:
                height = input_shape[2] * self.size[0]
            if input_shape[3] is not None:
                width = input_shape[3] * self.size[1]
            channels = input_shape[1] // self.size[0] // self.size[1]

            if channels * self.size[0] * self.size[1] != input_shape[1]:
                raise ValueError('channels of input and size are incompatible')

            retval = (input_shape[0],
                      channels,
                      height,
                      width)
        elif self.data_format == 'channels_last':
            height = None
            width = None
            if input_shape[1] is not None:
                height = input_shape[1] * self.size[0]
            if input_shape[2] is not None:
                width = input_shape[2] * self.size[1]
            channels = input_shape[3] // self.size[0] // self.size[1]

            if channels * self.size[0] * self.size[1] != input_shape[3]:
                raise ValueError('channels of input and size are incompatible')
 </s> add         if self.data_format == 'channels_last':
            pooled = K.min(inputs, axis=[1, 2])
        else:
            pooled = K.min(inputs, axis=[2, 3])
        return pooled
   ~lib.model.layers.KResizeImages
  
     ~lib.model.layers.GlobalMinPooling2D
     ~lib.model.layers.GlobalStdDevPooling2D
   ~lib.model.layers.KResizeImages
     ~lib.model.layers.L2_normalize
     ~lib.model.layers.PixelShuffler
     ~lib.model.layers.ReflectionPadding2D
     ~lib.model.layers.SubPixelUpscaling
     ~lib.model.layers.Swish
  
keep keep add keep keep keep keep keep keep
 Training fixes:
  - Fix mixed precision layer storing and switching
  - typofix in _requirements_base.txt
  - lib.model.layers - cleanup, docs and tests fixes
  - lib.model.nn_blocks - typing fixes 
docs/full/lib/model.rst