          models = [model]
      else:
          models.append(model)
      for layer in model.layers:
          if isinstance(layer, KModel):
              get_all_sub_models(layer, models=models)
      return models
  
  
  class IO():
 
</s> remove         A list of all :class:`keras.models.Model` objects found within the given model. The
        provided model will always be returned in the first position
 </s> add         A list of all :class:`tensorflow.keras.models.Model` objects found within the given model.
        The provided model will always be returned in the first position </s> remove     model: :class:`keras.models.Model`
 </s> add     model: :class:`tensorflow.keras.models.Model` </s> remove class _GlobalPooling2D(keras.layers.Layer):  # type:ignore[name-defined]
    """Abstract class for different global pooling 2D layers.
 </s> add class SubPixelUpscaling(tf.keras.layers.Layer):
    """ Sub-pixel convolutional up-scaling layer. </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.min(inputs, axis=[1, 2])
        else:
            pooled = K.min(inputs, axis=[2, 3])
        return pooled
 </s> add         if self.data_format == "channels_first":
            batch, channels, rows, columns = input_shape
            return (batch,
                    channels // (self.scale_factor ** 2),
                    rows * self.scale_factor,
                    columns * self.scale_factor)
        batch, rows, columns, channels = input_shape
        return (batch,
                rows * self.scale_factor,
                columns * self.scale_factor,
                channels // (self.scale_factor ** 2))
        if isinstance(layer, kmodels.Model):
          models = [model]
      else:
          models.append(model)
      for layer in model.layers:
        if isinstance(layer, kmodels.Model):
              get_all_sub_models(layer, models=models)
      return models
  
  
  class IO():
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 
plugins/train/model/_base/io.py