
    2Vh;                     d    d dl mZ d dl mZ d dlmZ d dlmZ  eddg       G d de             Zy	)
    )backend)ops)keras_export)BaseGlobalPoolingz#keras.layers.GlobalAveragePooling1Dzkeras.layers.GlobalAvgPool1Dc                   4     e Zd ZdZd fd	ZddZddZ xZS )GlobalAveragePooling1Da;  Global average pooling operation for temporal data.

    Args:
        data_format: string, either `"channels_last"` or `"channels_first"`.
            The ordering of the dimensions in the inputs. `"channels_last"`
            corresponds to inputs with shape `(batch, steps, features)`
            while `"channels_first"` corresponds to inputs with shape
            `(batch, features, steps)`. 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"`.
        keepdims: A boolean, whether to keep the temporal dimension or not.
            If `keepdims` is `False` (default), the rank of the tensor is
            reduced for spatial dimensions. If `keepdims` is `True`, the
            temporal dimension are retained with length 1.
            The behavior is the same as for `tf.reduce_mean` or `np.mean`.

    Call arguments:
        inputs: A 3D tensor.
        mask: Binary tensor of shape `(batch_size, steps)` indicating whether
            a given step should be masked (excluded from the average).

    Input shape:

    - If `data_format='channels_last'`:
        3D tensor with shape:
        `(batch_size, steps, features)`
    - If `data_format='channels_first'`:
        3D tensor with shape:
        `(batch_size, features, steps)`

    Output shape:

    - If `keepdims=False`:
        2D tensor with shape `(batch_size, features)`.
    - If `keepdims=True`:
        - If `data_format="channels_last"`:
            3D tensor with shape `(batch_size, 1, features)`
        - If `data_format="channels_first"`:
            3D tensor with shape `(batch_size, features, 1)`

    Example:

    >>> x = np.random.rand(2, 3, 4)
    >>> y = keras.layers.GlobalAveragePooling1D()(x)
    >>> y.shape
    (2, 4)
    c                 :    t        |   dd||d| d| _        y )N   )pool_dimensionsdata_formatkeepdimsT )super__init__supports_masking)selfr   r   kwargs	__class__s       a/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/layers/pooling/global_average_pooling1d.pyr   zGlobalAveragePooling1D.__init__>   s2     	
#	
 		
 !%    c                    | j                   dk(  rdnd}|t        j                  ||d   j                        }t	        j
                  || j                   dk(  rdnd      }||z  }t	        j                  ||| j                        t	        j                  ||| j                        z  S t	        j                  ||| j                        S )Nchannels_lastr
      r   )axisr   )	r   r   castdtyper   expand_dimssumr   mean)r   inputsmask
steps_axiss       r   callzGlobalAveragePooling1D.callG   s    **o=Q1
<<fQioo6D??4++>aAD dNF77Z$--:FG G 88FdmmLLr   c                      y Nr   )r   r    r!   s      r   compute_maskz#GlobalAveragePooling1D.compute_maskU   s    r   )NFr%   )__name__
__module____qualname____doc__r   r#   r&   __classcell__)r   s   @r   r   r      s    .`%Mr   r   N)	keras.srcr   r   keras.src.api_exportr   ,keras.src.layers.pooling.base_global_poolingr   r   r   r   r   <module>r/      s@      - J -&I. IIr   