              A tensor or list/tuple of tensors
          """
          return K.l2_normalize(inputs, self.axis)
  
      def get_config(self):
          """Returns the config of the layer.
  
          A layer config is a Python dictionary (serializable) containing the configuration of a
          layer. The same layer can be reinstated later (without its trained weights) from this
          configuration.
 
</s> remove     def get_config(self):
 </s> add     def get_config(self) -> dict[str, T.Any]: </s> remove     :class:`SubPixelUpscaling` layer to speed up the learning process. However, if you are stacking
    multiple :class:`SubPixelUpscaling` blocks, it may increase the number of parameters greatly,
    so the Convolution layer after :class:`SubPixelUpscaling` layer can be removed.
 </s> add     :class:`PixelShuffler` layer to speed up the learning process. However, if you are stacking
    multiple :class:`PixelShuffler` blocks, it may increase the number of parameters greatly,
    so the Convolution layer after :class:`PixelShuffler` layer can be removed. </s> remove         if self.data_format == 'channels_last':
            pooled = K.std(inputs, axis=[1, 2])
        else:
            pooled = K.std(inputs, axis=[2, 3])
        return pooled

 </s> add 
    def get_config(self) -> dict[str, T.Any]:
              A tensor or list/tuple of tensors
          """
          return K.l2_normalize(inputs, self.axis)
  
    def get_config(self) -> dict[str, T.Any]:
          """Returns the config of the layer.
  
          A layer config is a Python dictionary (serializable) containing the configuration of a
          layer. The same layer can be reinstated later (without its trained weights) from this
          configuration.
keep keep keep keep replace 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 
lib/model/layers.py