
    ёi                        S SK Jr  S SKJr  / rS SKJr  S SKJr  S SK	J
r
  \(       a  S SKJr  SSS jjrSSS	 jjrSSS
 jjr S       SS jjrg)    )annotations)TYPE_CHECKING)_C_ops)in_dynamic_or_pir_mode)LayerHelper)TensorNc                    [        5       (       a  [        R                  " U 5      $ Sn[        U5      nUR	                  U R
                  5      nUR                  USU 0SU00 S9  U$ )a=  
sparse relu activation, requiring x to be a SparseCooTensor or SparseCsrTensor.

.. math::

    out = max(x, 0)

Parameters:
    x (Tensor): The input Sparse Tensor with data type float32, float64.
    name (str|None, optional): Name for the operation (optional, default is None).
        For more information, please refer to :ref:`api_guide_Name`.

Returns:
    A Sparse Tensor with the same data type and shape as ``x`` .

Examples:
    .. code-block:: python

        >>> import paddle

        >>> dense_x = paddle.to_tensor([-2., 0., 1.])
        >>> sparse_x = dense_x.to_sparse_coo(1)
        >>> out = paddle.sparse.nn.functional.relu(sparse_x)
        >>> print(out)
        Tensor(shape=[3], dtype=paddle.float32, place=Place(cpu), stop_gradient=True,
               indices=[[0, 2]],
               values=[0., 1.])
sparse_reluxouttypeinputsoutputsattrs)r   r   r
   r   )create_sparse_variable_for_type_inferencedtype	append_op)r   nameop_typehelperr   s        f/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/sparse/nn/functional/activation.pyrelur      sl    : !!!$$W%>>qwwG#qE3<r 	 	
 
    c                    [        5       (       a  [        R                  " X5      $ Sn[        U5      nUR	                  U R
                  5      nUR                  USU 0SU0SU0S9  U$ )aE  
sparse softmax activation, requiring x to be a SparseCooTensor or SparseCsrTensor.

Note:
    Only support axis=-1 for SparseCsrTensor, which is faster when read data
    by row (axis=-1).

From the point of view of dense matrix, for each row :math:`i` and each column :math:`j`
in the matrix, we have:

.. math::

    softmax_ij = \frac{\exp(x_ij - max_j(x_ij))}{\sum_j(exp(x_ij - max_j(x_ij))}

Parameters:
    x (Tensor): The input tensor. It can be SparseCooTensor/SparseCsrTensor. The data type can be float32 or float64.
    axis (int, optional): The axis along which to perform softmax calculations. Only support -1 for SparseCsrTensor.
    name (str|None, optional): Name for the operation (optional, default is None).
        For more information, please refer to :ref:`api_guide_Name`.

Returns:
    Tensor: SparseCoo or SparseCsr, whose layout is the same with `x` .

Examples:
    .. code-block:: python

        >>> import paddle
        >>> paddle.seed(100)

        >>> mask = paddle.rand((3, 4)) < 0.5
        >>> x = paddle.rand((3, 4)) * mask.astype('float32')
        >>> print(x)
        Tensor(shape=[3, 4], dtype=float32, place=Place(cpu), stop_gradient=True,
        [[0.        , 0.95717543, 0.43864486, 0.        ],
         [0.84765935, 0.45680618, 0.39412445, 0.        ],
         [0.59444654, 0.        , 0.78364515, 0.        ]])

        >>> csr = x.to_sparse_csr()
        >>> print(csr)
        Tensor(shape=[3, 4], dtype=paddle.float32, place=Place(cpu), stop_gradient=True,
               crows=[0, 2, 5, 7],
               cols=[1, 2, 0, 1, 2, 0, 2],
               values=[0.95717543, 0.43864486, 0.84765935, 0.45680618, 0.39412445,
                       0.59444654, 0.78364515])

        >>> out = paddle.sparse.nn.functional.softmax(csr)
        >>> print(out)
        Tensor(shape=[3, 4], dtype=paddle.float32, place=Place(cpu), stop_gradient=True,
               crows=[0, 2, 5, 7],
               cols=[1, 2, 0, 1, 2, 0, 2],
               values=[0.62680405, 0.37319586, 0.43255258, 0.29261294, 0.27483448,
                       0.45284089, 0.54715902])

        >>> coo = x.to_sparse_coo(sparse_dim=2)
        >>> print(coo)
        Tensor(shape=[3, 4], dtype=paddle.float32, place=Place(cpu), stop_gradient=True,
               indices=[[0, 0, 1, 1, 1, 2, 2],
                        [1, 2, 0, 1, 2, 0, 2]],
               values=[0.95717543, 0.43864486, 0.84765935, 0.45680618, 0.39412445,
                       0.59444654, 0.78364515])

        >>> out = paddle.sparse.nn.functional.softmax(coo)
        >>> print(out)
        Tensor(shape=[3, 4], dtype=paddle.float32, place=Place(cpu), stop_gradient=True,
               indices=[[0, 0, 1, 1, 1, 2, 2],
                        [1, 2, 0, 1, 2, 0, 2]],
               values=[0.62680405, 0.37319589, 0.43255258, 0.29261294, 0.27483445,
                       0.45284092, 0.54715902])
sparse_softmaxr   r   axisr   )r   r   r   r   r   r   r   )r   r   r   r   r   r   s         r   softmaxr   F   st    L $$Q--"W%>>qwwG8CL4.	 	 	
 
r   c                Z    [        5       (       d   S5       e[        R                  " U 5      $ )a  
sparse relu6 activation, requiring x to be a SparseCooTensor or SparseCsrTensor.

.. math::

    relu6(x) = min(max(0, x), 6)

Parameters:
    x (Tensor): The input Sparse Tensor with data type float32, float64.
    name (str|None, optional): Name for the operation (optional, default is None).
        For more information, please refer to :ref:`api_guide_Name`.

Returns:
    A Sparse Tensor with the same data type and shape as ``x`` .

Examples:
    .. code-block:: python

        >>> import paddle

        >>> dense_x = paddle.to_tensor([-2., 0., 8.])
        >>> sparse_x = dense_x.to_sparse_coo(1)
        >>> out = paddle.sparse.nn.functional.relu6(sparse_x)
<Currently, Sparse API only support dynamic mode or pir mode.)r   r   sparse_relu6)r   r   s     r   relu6r"      s0    2 "## F# q!!r   c                Z    [        5       (       d   S5       e[        R                  " X5      $ )a  
sparse leaky_relu activation, requiring x to be a SparseCooTensor or SparseCsrTensor.

.. math::
    leaky\_relu(x)=
    \left\{
        \begin{array}{rcl}
            x, & & if \ x >= 0 \\
            negative\_slope * x, & & otherwise \\
        \end{array}
    \right.

Parameters:
    x (Tensor): The input Sparse Tensor with data type float32, float64.
    negative_slope (float, optional): Slope of the activation function at
        :math:`x < 0` . Default is 0.01.
    name (str|None, optional): Name for the operation (optional, default is None).
        For more information, please refer to :ref:`api_guide_Name`.

Returns:
    A Sparse Tensor with the same data type and shape as ``x`` .

Examples:
    .. code-block:: python

        >>> import paddle

        >>> dense_x = paddle.to_tensor([-2., 0., 5.])
        >>> sparse_x = dense_x.to_sparse_coo(1)
        >>> out = paddle.sparse.nn.functional.leaky_relu(sparse_x, 0.5)
r    )r   r   sparse_leaky_relu)r   negative_sloper   s      r   
leaky_relur&      s1    D "## F# ##A66r   )N)r   r   r   
str | Nonereturnr   )N)r   r   r   intr   r'   r(   r   )g{Gz?N)r   r   r%   floatr   r'   r(   r   )
__future__r   typingr   __all__paddler   paddle.base.frameworkr   paddle.base.layer_helperr   r   r   r   r"   r&    r   r   <module>r3      s`    #  
  8 0&RRj"@ AE%7%7$%73=%7%7r   