
    ~Wh                         d Z ddlZddlZddlZddlmc mZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ  ed           G d d	e
                      ZdS )
zContains the flatten layer.    N)Layer)	InputSpec)
conv_utils)keras_exportzkeras.layers.Flattenc                   :     e Zd ZdZd fd	Zd Zd Z fdZ xZS )Flattena  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, ...)`.
        It defaults to the `image_data_format` value found in your
        Keras config file at `~/.keras/keras.json`.
        If you never set it, then it will be "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)

    Nc                      t                      j        di | t          j        |          | _        t          d          | _        | j        dk    | _        d S )N   )min_ndimchannels_first )super__init__r   normalize_data_formatdata_formatr   
input_spec_channels_first)selfr   kwargs	__class__s      d/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/keras/layers/reshaping/flatten.pyr   zFlatten.__init__?   s\    ""6"""%;KHH#Q///#/3CC    c                 z   | j         re|j        j        }|rW|dk    rQdg}|                    t	          d|                     |                    d           t          j        ||          }t          j                    r6t          j	        |j        d         dg          }t          j
        ||          S |j        }|j        }|dk    rt          j        |d          S t          j                            |d                   }|dd          }|                                rCt          t!          j        t$          j        |                    }t          j	        d|g          }nB|$t          j	        t          |          dg          }nt          j        |          d         dg}t          j
        ||          S )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   callzFlatten.callE   s    	@<$D @q c""5D>>222""1%%%f;???!! 	; !k6<?B*?@@O:fo666 ,K#Dqyy~f15555I55k!nEE	!,QRR "2244 @"!(~FF   H ')k2x.&A&AOO*&(k3y>>22F&G&GOO')x'7'7':B&?Oz&/:::r   c                 L   t          j        |                                          }|st          j        dg          }n	|d         g}t          j        |dd                    r(|t          j        |dd          t                    gz  }n|d gz  }t          j        |          S )Nr
   r   )dtype)r#   TensorShapeas_listnpallprodr,   )r   r4   output_shapes      r   compute_output_shapezFlatten.compute_output_shapej   s    n[1199;; 	,>1#..LL'N+L6+abb/"" 	#RW[_C@@@AALLTF"L~l+++r   c                     t                                                      }|                    d| j        i           |S )Nr   )r   
get_configupdater   )r   configr   s     r   rC   zFlatten.get_configv   s7    ##%%}d&67888r   )N)	__name__
__module____qualname____doc__r   r8   rA   rC   __classcell__)r   s   @r   r   r       s         :D D D D D D#; #; #;J
, 
, 
,        r   r   )rI   r-   r/   numpyr=   tensorflow.compat.v2r)   v2r#   keras.engine.base_layerr   keras.engine.input_specr   keras.utilsr    tensorflow.python.util.tf_exportr   r   r   r   r   <module>rR      s    " !          ! ! ! ! ! ! ! ! ! ) ) ) ) ) ) - - - - - - " " " " " " : 9 9 9 9 9 $%%X X X X Xe X X &%X X Xr   