
    2Vh3
                     f    d dl mZ d dl mZ d dlmZ d dlmZ d Z ed       G d de             Zy	)
    )activations)backend)keras_export)Layerc                 6    t        j                  |       dk(  ryy)z.Return a Large negative number based on dtype.float16g     Lg    e)r   standardize_dtype)dtypes    T/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/layers/activations/softmax.py_large_negative_numberr      s      '94    zkeras.layers.Softmaxc                   <     e Zd ZdZd fd	ZddZ fdZd Z xZS )Softmaxa'  Softmax activation layer.

    Formula:
    ``` python
    exp_x = exp(x - max(x))
    f(x) = exp_x / sum(exp_x)
    ```

    Example:
    >>> softmax_layer = keras.layers.Softmax()
    >>> input = np.array([1.0, 2.0, 1.0])
    >>> result = softmax_layer(input)
    >>> result
    [0.21194157, 0.5761169, 0.21194157]


    Args:
        axis: Integer, or list of Integers, axis along which the softmax
            normalization is applied.
        **kwargs: Base layer keyword arguments, such as `name` and `dtype`.

    Call arguments:
        inputs: The inputs (logits) to the softmax layer.
        mask: A boolean mask of the same shape as `inputs`. The mask
            specifies 1 to keep and 0 to mask. Defaults to `None`.

    Returns:
        Softmaxed output with the same shape as `inputs`.
    c                 `    t        |   di | || _        d| _        | j	                          y )NT )super__init__axissupports_masking_build_at_init)selfr   kwargs	__class__s      r   r   zSoftmax.__init__.   s.    "6"	 $r   c                    |>dt        j                  ||j                        z
  t        |j                        z  }||z  }t	        | j
                  t        t        f      rt        | j
                        dkD  rMt         j                  j                  |t         j                  j                  || j
                  d      z
        }nFt        j                  || j
                  d         }n!t        j                  || j
                        }|>t         j                  j                  |t        j                  ||j                              }|S )Ng      ?   T)r   keepdimsr   )r   )r   castr
   r   
isinstancer   tuplelistlennumpyexpmath	logsumexpr   softmaxmultiply)r   inputsmaskadderoutputss        r   callzSoftmax.call5   s   gll466&v||45E eOFdii%/499~!!--++ll,,TYY -  &--f499Q<H!))&tyyAG mm,,dGMM:G r   c                 ^    t         |          }|j                  d| j                  i       |S )Nr   )r   
get_configupdater   )r   configr   s     r   r.   zSoftmax.get_configQ   s*    #%vtyy)*r   c                     |S Nr   )r   input_shapes     r   compute_output_shapezSoftmax.compute_output_shapeV   s    r   )r2   )	__name__
__module____qualname____doc__r   r,   r.   r4   __classcell__)r   s   @r   r   r      s    <8
r   r   N)		keras.srcr   r   keras.src.api_exportr   keras.src.layers.layerr   r   r   r   r   r   <module>r>      s:    !  - ( $%He H &Hr   