
    ёi                        S SK Jr  S SKrS SKJr  S SKJr  S SKJr  SSKJ	r	J
r
  SSKJr  / r\" S	/S
/S/S.5          S             SS jj5       r S       SS jjrg)    )annotationsN)_C_ops)in_dynamic_or_pir_mode)ParamAliasDecorator   )
check_typecheck_variable_and_dtype)LayerHelperx1x2eps)xyepsilonc                   [        5       (       al  [        R                  " X5      nUS:w  a6  [        R                  " U/UR
                  S9n[        R                  " Xc5      n[        R                  " XbSSUS5      $ [        US[        [        4S5        [        US[        S5        [        US[        S5        [        U S	/ S
QS5        [        US/ S
QS5        [        R                  " X5      nUS:w  aY  UR                  R                  UR
                  S9n[        R                  " S/X6R
                  S9n[        R                  " Xg5      n[!        SUS9nSUUSS.n	UR#                  U R
                  S9n
UR%                  SSU0SU
0U	S9  U
$ )a  

It computes the pairwise distance between two vectors. The
distance is calculated by p-order norm:

.. math::

    \Vert x \Vert _p = \left( \sum_{i=1}^n \vert x_i \vert ^ p \right) ^ {1/p}.

Parameters:
    x (Tensor): Tensor, shape is :math:`[N, D]` or :math:`[D]`, where :math:`N`
        is batch size, :math:`D` is the dimension of vector. Available dtype is
        float16, float32, float64.
    y (Tensor): Tensor, shape is :math:`[N, D]` or :math:`[D]`, where :math:`N`
        is batch size, :math:`D` is the dimension of vector. Available dtype is
        float16, float32, float64.
    p (float, optional): The order of norm. Default: :math:`2.0`.
    epsilon (float, optional): Add small value to avoid division by zero.
        Default: :math:`1e-6`.
    keepdim (bool, optional): Whether to reserve the reduced dimension
        in the output Tensor. The result tensor is one dimension less than
        the result of ``|x-y|`` unless :attr:`keepdim` is True. Default: False.
    name (str|None, optional): For details, please refer to :ref:`api_guide_Name`.
        Generally, no setting is required. Default: None.

Returns:
    Tensor, the dtype is same as input tensor.

    - If :attr:`keepdim` is True, the output shape is :math:`[N, 1]` or :math:`[1]`,
      depending on whether the input has data shaped as :math:`[N, D]`.
    - If :attr:`keepdim` is False, the output shape is :math:`[N]` or :math:`[]`,
      depending on whether the input has data shaped as :math:`[N, D]`.

Examples:
    .. code-block:: python

        >>> import paddle
        >>> x = paddle.to_tensor([[1., 3.], [3., 5.]], dtype=paddle.float64)
        >>> y = paddle.to_tensor([[5., 6.], [7., 8.]], dtype=paddle.float64)
        >>> distance = paddle.nn.functional.pairwise_distance(x, y)
        >>> print(distance)
        Tensor(shape=[2], dtype=float64, place=Place(cpu), stop_gradient=True,
        [4.99999860, 4.99999860])
g        dtypeFporderPairwiseDistancer   keepdimr   )float16float32float64r      )shape
fill_valuer   )name)axisr   r   r   p_normXOut)typeinputsoutputsattrs)r   r   subtractpaddle	to_tensorr   addr    r   floatintboolr	   block
create_varfullr
   "create_variable_for_type_inference	append_op)r   r   pr   r   r   subepsilon_varhelperr&   outs              ]/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/nn/functional/distance.pypairwise_distancer9      sz   v ooa#c>&&y		BG**S*C}}SRgu== 	1h.@A7I0BC7I/AB s57I	
 	!s57I	
 ooa#c>))..SYY.?K ++cgYYK **S.C/d;	
 77agg7F3*ucl% 	 	
 
    c           	     V   [        U R                  5      n[        U5      S:X  d   S5       e[        R                  R                  U SSSS24   U SSSS2SS24   -
  USS9n[        R                  " [        R                  " UR                  SS95      ) n[        R                  " XE5      $ )	a  
Computes the p-norm distance between every pair of row vectors in the input.

Args:
    x (Tensor): The input tensor with shape :math:`N \times M`.
    p (float, optional): The value for the p-norm distance to calculate between each vector pair. Default: :math:`2.0`.
    name (str, optional): For details, please refer to :ref:`api_guide_Name`. Generally, no setting is required. Default: None.

Returns:
    Tensor with shape :math:`N(N-1)/2` , the dtype is same as input tensor.

Examples:
    .. code-block:: python

        >>> import paddle
        >>> paddle.seed(2023)
        >>> a = paddle.randn([4, 5])
        >>> print(a)
        Tensor(shape=[4, 5], dtype=float32, place=Place(cpu), stop_gradient=True,
               [[ 0.06132207,  1.11349595,  0.41906244, -0.24858207, -1.85169315],
                [-1.50370061,  1.73954511,  0.13331604,  1.66359663, -0.55764782],
                [-0.59911072, -0.57773495, -1.03176904, -0.33741450, -0.29695082],
                [-1.50258386,  0.67233968, -1.07747352,  0.80170447, -0.06695852]])
        >>> pdist_out=paddle.pdist(a)
        >>> print(pdist_out)
        Tensor(shape=[6], dtype=float32, place=Place(cpu), stop_gradient=True,
               [2.87295413, 2.79758120, 3.02793980, 3.40844536, 1.89435327, 1.93171620])
   zThe x must be 2-dimensional.Nr   )r3   r   r-   r   )	listr   lenr(   linalgnormtrilonesmasked_select)r   r3   r   x_shapedmasks         r8   pdistrG      s    @ 177mGw<1;;;1S$\?QsD!Q-??12NAKKAGG6:;;D((r:   )       @gư>FN)r   paddle.Tensorr   rI   r3   r+   r   r+   r   r-   r   
str | NonereturnrI   )rH   N)r   rI   r3   r+   r   rJ   rK   rI   )
__future__r   r(   r   paddle.frameworkr   paddle.utils.decorator_utilsr   base.data_feederr   r	   base.layer_helperr
   __all__r9   rG    r:   r8   <module>rS      s    #   3 < D ,
 VV7 ZZZ Z 	Z
 Z Z ZZ| :>$)$)$),6$)$)r:   