§
    |”j  ã                  óZ   — d dl mZ d dlmZ d dlmZ d dlmZ erd dlmZ g Z		 	 	 ddd„Z
dS )é    )Úannotations)ÚTYPE_CHECKING)Ú_C_ops)Úin_dynamic_or_pir_mode)ÚTensorç      ð?NÚinputr   ÚxÚyÚbetaÚfloatÚalphaÚnameú
str | NoneÚreturnc                ób   — t          ¦   «         s
J d¦   «         ‚t          j        | ||||¦  «        S )aƒ	  
    Applies matrix multiplication for `x` and `y` , `input` is added to
    the final result. The equation is:

    ..  math::

        out = alpha * x * y + beta * input

    The supported input/output Tensor layout are as follows:

    Note:
        input[SparseCsrTensor] + x[SparseCsrTensor] @ y[SparseCsrTensor] -> out[SparseCsrTensor]
        input[DenseTensor] + x[SparseCsrTensor] @ y[DenseTensor] -> out[DenseTensor]
        input[SparseCooTensor] + x[SparseCooTensor] @ y[SparseCooTensor] -> out[SparseCooTensor]
        input[DenseTensor] + x[SparseCooTensor] @ y[DenseTensor] -> out[DenseTensor]

    It supports backward propagation.

    Dimensions `input` , `x` , `y` must be same and >= 2D. Automatic broadcasting of Tensor is not supported.

    Args:
        input (SparseTensor|DenseTensor): The input tensor. Shape is [*, M, N]. The data type can be float32 or float64.
        x (SparseTensor): The input SparseTensor. Shape is [*, M, K]. The data type can be float32 or float64.
        y (SparseTensor|DenseTensor): The input tensor. Shape is [*, K, N]. The data type can be float32 or float64.
        beta (float, optional): Coefficient of `input` . Default: 1.0
        alpha (float, optional): Coefficient of `x * y` . Default: 1.0
        name (str, optional): Name for the operation (optional, default is None). For more information, please refer to :ref:`api_guide_Name`.

    Returns:
        SparseTensor|DenseTensor: Tensor type, date type and shape is the same with `input` .

    Examples:

        .. code-block:: python

            >>> # doctest: +REQUIRES(env:GPU)
            >>> import paddle
            >>> paddle.device.set_device('gpu')

            >>> # dense + csr @ dense -> dense
            >>> input = paddle.rand([3, 2])
            >>> crows = [0, 1, 2, 3]
            >>> cols = [1, 2, 0]
            >>> values = [1., 2., 3.]
            >>> x = paddle.sparse.sparse_csr_tensor(crows, cols, values, [3, 3])
            >>> y = paddle.rand([3, 2])
            >>> out = paddle.sparse.addmm(input, x, y, 3.0, 2.0)

            >>> # dense + coo @ dense -> dense
            >>> input = paddle.rand([3, 2])
            >>> indices = [[0, 1, 2], [1, 2, 0]]
            >>> values = [1., 2., 3.]
            >>> x = paddle.sparse.sparse_coo_tensor(indices, values, [3, 3])
            >>> y = paddle.rand([3, 2])
            >>> out = paddle.sparse.addmm(input, x, y, 3.0, 2.0)

    z<Currently, Sparse API only support dynamic mode or pir mode.)r   r   Úsparse_addmm)r	   r
   r   r   r   r   s         úf/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/paddle/sparse/multiary.pyÚaddmmr      sC   € õB "Ñ#Ô#ð ð ØFñô Ð#õ Ô˜u a¨¨D°%Ñ8Ô8Ð8ó    )r   r   N)r	   r   r
   r   r   r   r   r   r   r   r   r   r   r   )Ú
__future__r   Útypingr   Úpaddler   Úpaddle.base.frameworkr   r   Ú__all__r   © r   r   ú<module>r      s£   ðð #Ð "Ð "Ð "Ð "Ð "à  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8àð ØÐÐÐÐÐà
€ð ØØðD9ð D9ð D9ð D9ð D9ð D9ð D9r   