
    6bi                         S r SSKrSSKrSSKrSSKJs  Jr  SSK	J
r
  SSKJr  SSKJr  SSKJr  \" S5       " S S	\
5      5       rg)
zContains the flatten layer.    N)Layer)	InputSpec)
conv_utils)keras_exportzkeras.layers.Flattenc                   H   ^  \ rS rSrSrSU 4S jjrS rS rU 4S jrSr	U =r
$ )	Flatten    a  Flattens the input. Does not affect the batch size.

Note: If inputs are shaped `(batch,)` without a feature axis, then
flattening adds an extra channel dimension and output shape is `(batch, 1)`.

Args:
  data_format: A string,
    one of `channels_last` (default) or `channels_first`.
    The ordering of the dimensions in the inputs.
    `channels_last` corresponds to inputs with shape
    `(batch, ..., channels)` while `channels_first` corresponds to
    inputs with shape `(batch, channels, ...)`.
    When unspecified, uses
    `image_data_format` value found in your TF-Keras config file at
     `~/.keras/keras.json` (if exists) else 'channels_last'.
    Defaults to 'channels_last'.

Example:

>>> model = tf.keras.Sequential()
>>> model.add(tf.keras.layers.Conv2D(64, 3, 3, input_shape=(3, 32, 32)))
>>> model.output_shape
(None, 1, 10, 64)

>>> model.add(Flatten())
>>> model.output_shape
(None, 640)

c                    > [         TU ]  " S0 UD6  [        R                  " U5      U l        [        SS9U l        U R                  S:H  U l        g )N   )min_ndimchannels_first )super__init__r   normalize_data_formatdata_formatr   
input_spec_channels_first)selfr   kwargs	__class__s      _/home/james-whalen/.local/lib/python3.13/site-packages/tf_keras/src/layers/reshaping/flatten.pyr   Flatten.__init__@   sF    "6"%;;KH#Q/#//3CC    c                    U R                   (       af  UR                  R                  nU(       aI  US:  aC  S/nUR                  [	        SU5      5        UR                  S5        [        R                  " XS9n[        R                  " 5       (       a;  [        R                  " UR                  S   S/5      n[        R                  " X5      $ UR                  nUR                  nUS:X  a  [        R                  " USS9$ [        R                  R                  US   5      nUSS  nUR                  5       (       aG  [        [         R"                  " [$        R&                  U5      5      n[        R                  " SU/5      nO@Ub"  [        R                  " [        U5      S/5      nO[        R                  " U5      S   S/n[        R                  " X5      $ )Nr   r      )perm)axis)r   shaperankextendrangeappendtf	transposeexecuting_eagerlyconstantreshapeexpand_dimscompatdimension_valueis_fully_definedint	functoolsreduceoperatormul)	r   inputsr!   permutationflattened_shapeinput_shape	batch_dimnon_batch_dimslast_dims	            r   callFlatten.callF   sk   <<$$Dq c""5D>2""1%f?!! !kk6<<?B*?@O::f66 ,,K##Dqy~~f155II55k!nE	!,QR "2244"!((~F H ')kk2x.&AO*&(kk3y>22F&GO')xx'7':B&?Ozz&::r   c                 J   [         R                  " U5      R                  5       nU(       d  [         R                  " S/5      nOUS   /n[        R                  " USS  5      (       a!  U[        R
                  " USS  [        S9/-  nOUS /-  n[         R                  " U5      $ )Nr   r   )dtype)r%   TensorShapeas_listnpallprodr.   )r   r6   output_shapes      r   compute_output_shapeFlatten.compute_output_shapek   s    nn[199;>>1#.L'N+L66+ab/""RWW[_C@AALTF"L~~l++r   c                 ^   > [         TU ]  5       nUR                  SU R                  05        U$ )Nr   )r   
get_configupdater   )r   configr   s     r   rG   Flatten.get_configw   s,    #%}d&6&678r   )r   r   r   )N)__name__
__module____qualname____firstlineno____doc__r   r:   rD   rG   __static_attributes____classcell__)r   s   @r   r   r       s#    <D#;J
, r   r   )rO   r/   r1   numpyr@   tensorflow.compat.v2r+   v2r%   tf_keras.src.engine.base_layerr   tf_keras.src.engine.input_specr   tf_keras.src.utilsr    tensorflow.python.util.tf_exportr   r   r   r   r   <module>rY      sM    "    ! ! 0 4 ) : $%Ye Y &Yr   