
    ёi                        S SK Jr  S SKJr  S SKJr  SSKJr  \(       a  S SK	J
r
  / r " S S\5      r " S	 S
\5      r " S S\5      r " S S\5      rg)    )annotations)TYPE_CHECKING)Layer   )
functional)Tensorc                  H   ^  \ rS rSrSrSSU 4S jjjrS	S jrS
S jrSrU =r	$ )ReLU   a*  

Sparse ReLU Activation, requiring x to be a SparseCooTensor or SparseCsrTensor.

.. math::

    ReLU(x) = max(x, 0)

Parameters:
    name (str|None, optional): Name for the operation (optional, default is None).
        For more information, please refer to :ref:`api_guide_Name`.

Shape:
    - input: Sparse Tensor with any shape.
    - output: Sparse Tensor with the same shape as input.

Examples:
    .. code-block:: python

        >>> import paddle

        >>> dense_x = paddle.to_tensor([-2., 0., 1.])
        >>> sparse_x = dense_x.to_sparse_coo(1)
        >>> relu = paddle.sparse.nn.ReLU()
        >>> out = relu(sparse_x)
        >>> print(out)
        Tensor(shape=[3], dtype=paddle.float32, place=Place(cpu), stop_gradient=True,
               indices=[[0, 2]],
               values=[0., 1.])
c                .   > [         TU ]  5         Xl        g Nsuper__init___nameselfname	__class__s     a/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/sparse/nn/layer/activation.pyr   ReLU.__init__=       
    c                B    [         R                  " XR                  5      $ r   )Frelur   r   xs     r   forwardReLU.forwardA   s    vva$$r   c                N    U R                   (       a  SU R                    3nU$ SnU$ Nzname= r   r   name_strs     r   
extra_reprReLU.extra_reprD   )    +/::U4::,' <>r   r$   r   r   
str | NonereturnNoner   r   r,   r   r,   str
__name__
__module____qualname____firstlineno____doc__r   r   r'   __static_attributes____classcell__r   s   @r   r
   r
      s!    > % r   r
   c                  H   ^  \ rS rSrSrSSU 4S jjjrS	S jrS
S jrSrU =r	$ )SoftmaxI   au  

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).

Transform x to dense matrix, and :math:`i` is row index, :math:`j` is column index.
If axis=-1, We have:

.. math::

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

Parameters:
    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`.

Shape:
    - input: SparseCooTensor / SparseCsrTensor with any shape.
    - output: Sparse Tensor with the same shape as input.

Examples:
    .. code-block:: python

        >>> import paddle
        >>> paddle.seed(2022)

        >>> mask = paddle.rand((3, 4)) < 0.7
        >>> x = paddle.rand((3, 4)) * mask.astype('float32')
        >>> print(x)
        Tensor(shape=[3, 4], dtype=float32, place=Place(cpu), stop_gradient=True,
        [[0.88156885, 0.14463395, 0.17831714, 0.43818203],
         [0.07617740, 0.75576496, 0.        , 0.61921930],
         [0.        , 0.        , 0.42460245, 0.03001321]])

        >>> csr = x.to_sparse_csr()
        >>> print(csr)
        Tensor(shape=[3, 4], dtype=paddle.float32, place=Place(cpu), stop_gradient=True,
               crows=[0, 4, 7, 9],
               cols=[0, 1, 2, 3, 0, 1, 3, 2, 3],
               values=[0.88156885, 0.14463395, 0.17831714, 0.43818203, 0.07617740,
                       0.75576496, 0.61921930, 0.42460245, 0.03001321])

        >>> softmax = paddle.sparse.nn.Softmax()
        >>> out = softmax(csr)
        >>> print(out)
        Tensor(shape=[3, 4], dtype=paddle.float32, place=Place(cpu), stop_gradient=True,
               crows=[0, 4, 7, 9],
               cols=[0, 1, 2, 3, 0, 1, 3, 2, 3],
               values=[0.38234913, 0.18298410, 0.18925257, 0.24541418, 0.21302439,
                       0.42031071, 0.36666498, 0.59738696, 0.40261301])

        >>> 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, 0, 0, 1, 1, 1, 2, 2],
                        [0, 1, 2, 3, 0, 1, 3, 2, 3]],
               values=[0.88156885, 0.14463395, 0.17831714, 0.43818203, 0.07617740,
                       0.75576496, 0.61921930, 0.42460245, 0.03001321])

        >>> out = softmax(coo)
        >>> print(out)
        Tensor(shape=[3, 4], dtype=paddle.float32, place=Place(cpu), stop_gradient=True,
               indices=[[0, 0, 0, 0, 1, 1, 1, 2, 2],
                        [0, 1, 2, 3, 0, 1, 3, 2, 3]],
               values=[0.38234913, 0.18298411, 0.18925257, 0.24541420, 0.21302438,
                       0.42031071, 0.36666498, 0.59738696, 0.40261301])
c                :   > [         TU ]  5         Xl        X l        g r   )r   r   _axisr   )r   axisr   r   s      r   r   Softmax.__init__   s    

r   c                X    [         R                  " XR                  U R                  5      $ r   )r   softmaxr>   r   r   s     r   r   Softmax.forward   s    yyJJ

33r   c                N    U R                   (       a  SU R                    3nU$ SnU$ r"   r$   r%   s     r   r'   Softmax.extra_repr   r)   r   )r>   r   )N)r?   intr   r+   r,   r-   r.   r/   r1   r9   s   @r   r;   r;   I   s#    FP 
4 r   r;   c                  H   ^  \ rS rSrSrSSU 4S jjjrS	S jrS
S jrSrU =r	$ )ReLU6   a  

Sparse ReLU6 Activation, requiring x to be a SparseCooTensor or SparseCsrTensor.

.. math::

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

Parameters:
    name (str|None, optional): Name for the operation (optional, default is None).
        For more information, please refer to :ref:`api_guide_Name`.

Shape:
    - input: Sparse Tensor with any shape.
    - output: Sparse Tensor with the same shape as input.

Examples:
    .. code-block:: python

        >>> import paddle

        >>> dense_x = paddle.to_tensor([-2., 0., 8.])
        >>> sparse_x = dense_x.to_sparse_coo(1)
        >>> relu6 = paddle.sparse.nn.ReLU6()
        >>> out = relu6(sparse_x)
c                .   > [         TU ]  5         Xl        g r   r   r   s     r   r   ReLU6.__init__   r   r   c                B    [         R                  " XR                  5      $ r   )r   relu6r   r   s     r   r   ReLU6.forward   s    wwq**%%r   c                N    U R                   (       a  SU R                    3nU$ SnU$ r"   r$   r%   s     r   r'   ReLU6.extra_repr   r)   r   r$   r   r*   r.   r/   r1   r9   s   @r   rI   rI      s!    6 & r   rI   c                  T   ^  \ rS rSrSr S     SU 4S jjjrS	S jrS
S jrSrU =r	$ )	LeakyReLU   a  

Sparse Leaky ReLU Activation, requiring x to be a SparseCooTensor or SparseCsrTensor.

.. math::

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

Parameters:
    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`.

Shape:
    - input: Sparse Tensor with any shape.
    - output: Sparse Tensor with the same shape as input.

Examples:
    .. code-block:: python

        >>> import paddle

        >>> dense_x = paddle.to_tensor([-2., 0., 5.])
        >>> sparse_x = dense_x.to_sparse_coo(1)
        >>> leaky_relu = paddle.sparse.nn.LeakyReLU(0.5)
        >>> out = leaky_relu(sparse_x)

c                :   > [         TU ]  5         Xl        X l        g r   )r   r   _negative_sloper   )r   negative_sloper   r   s      r   r   LeakyReLU.__init__   s     	-
r   c                X    [         R                  " XR                  U R                  5      $ r   )r   
leaky_relurV   r   r   s     r   r   LeakyReLU.forward   s    ||A33TZZ@@r   c                N    U R                   (       a  SU R                    3nU$ SnU$ r"   r$   r%   s     r   r'   LeakyReLU.extra_repr   r)   r   )r   rV   )g{Gz?N)rW   floatr   r+   r,   r-   r.   r/   r1   r9   s   @r   rS   rS      sB    "J @D#2<	 A r   rS   N)
__future__r   typingr   	paddle.nnr   r#   r   r   paddler   __all__r
   r;   rI   rS    r   r   <module>re      sS    #    
)5 )XSe Sl%E %P1 1r   