Ë
    –\;jÐÍ  ã                   ó&  — d dl Z ddlmZmZ ddlmZ ddlmZ e j                  j                  j                  j                  j                  Zd dl mZ d dlmZ d d	lmZ d d
lmZ ddl	mZmZmZ g Zd/d„Zd0d„Zed1d„«       Zd0d„Zed1d„«       Zd0d„Zed1d„«       Zd0d„Zed1d„«       Z d1d„Z!d1d„Z" e«       d2d„«       Z# e«       d1d„«       Z$ed1d„«       Z% e«       d1d„«       Z&ed1d„«       Z' e«       d1d„«       Z(ed1d„«       Z) e«       d1d„«       Z*ed1d„«       Z+ e«       d1d „«       Z,ed1d!„«       Z- e«       d1d"„«       Z.ed1d#„«       Z/d$„ Z0d/d%„Z1d0d&„Z2ed1d'„«       Z3d0d(„Z4ed1d)„«       Z5d0d*„Z6ed1d+„«       Z7d0d,„Z8ed1d-„«       Z9 e«       d2d.„«       Z:y)3é    Né   )Ú
check_typeÚcheck_variable_and_dtype)ÚVariableé   )Útemplatedoc)Ú_C_ops)Úfull)Úbroadcast_shape)Úinplace_apis_in_dygraph_only)ÚLayerHelperÚin_dynamic_modeÚin_dynamic_or_pir_modec           	      ó"  — t        «       r#t        t        | «      }|r	 |||«      S  ||«      S t        |dg d¢| «       |�t        |dg d¢| «       |�t	        |dt
        | «       t        | fi t        «       ¤Ž}|rB|j                  |j                  k7  r)t        d| › d|j                  › d|j                  › d�«      ‚|€|j                  |j                  ¬	«      }|r|j                  | ||d
œd|i¬«       |S |j                  | d|id|i¬«       |S )NÚx)ÚboolÚint8Úint16Úint32Úint64Úfloat16Úfloat32Úfloat64Úuint16Ú	complex64Ú
complex128ÚyÚoutz"(InvalidArgument) The DataType of z0 Op's Variable must be consistent, but received z and Ú.©Údtype©ÚXÚYÚOut©ÚtypeÚinputsÚoutputsr#   )r   Úgetattrr	   r   r   r   r   Úlocalsr!   Ú
ValueErrorÚ"create_variable_for_type_inferenceÚ	append_op©Úop_namer   r   r   ÚnameÚ	binary_opÚopÚhelpers           ú\G:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/tensor/logic.pyÚ_logical_opr6   #   s[  € ÜÔÜ”V˜WÓ%ˆÙÙ�a˜“8ˆOá�a“5ˆLä ØØòð ô!	
ð$ ˆ=Ü$ØØòð ô!ð$ ˆ?Ü�s˜E¤8¨WÔ5ä˜WÑ1¬«Ñ1ˆá˜Ÿ™ A§G¡GÒ+ÜØ4°W°IÐ=mÐno×nuÑnuÐmvÐv{Ð|}÷  }Dñ  }Dð  |Eð  EFð  Góð ð ˆ;Ø×;Ñ;À!Ç'Á'Ð;ÓJˆCáØ×ÑØ¨1°1Ñ%5ÀÀs¸|ð ô ð ˆ
ð	 ×ÑØ c¨1 X¸¸s°|ð ô ð ˆ
ó    c                 ód   — t        «       rt        j                  | |«      S t        d| |||d¬«      S )au  

    Compute element-wise logical AND on ``x`` and ``y``, and return ``out``. ``out`` is N-dim boolean ``Tensor``.
    Each element of ``out`` is calculated by

    .. math::

        out = x \&\& y

    Note:
        ``paddle.logical_and`` supports broadcasting. If you want know more about broadcasting, please refer to `Introduction to Tensor`_ .

        .. _Introduction to Tensor: ../../guides/beginner/tensor_en.html#chapter5-broadcasting-of-tensor

    Args:
        x (Tensor): the input tensor, it's data type should be one of bool, int8, int16, in32, in64, float16, float32, float64, complex64, complex128.
        y (Tensor): the input tensor, it's data type should be one of bool, int8, int16, in32, in64, float16, float32, float64, complex64, complex128.
        out(Tensor, optional): The ``Tensor`` that specifies the output of the operator, which can be any ``Tensor`` that has been created in the program. The default value is None, and a new ``Tensor`` will be created to save the output.
        name (str, optional): Name for the operation (optional, default is None). For more information, please refer to :ref:`api_guide_Name`.

    Returns:
        N-D Tensor. A location into which the result is stored. It's dimension equals with ``x``.

    Examples:
        .. code-block:: python

            >>> import paddle

            >>> x = paddle.to_tensor([True])
            >>> y = paddle.to_tensor([True, False, True, False])
            >>> res = paddle.logical_and(x, y)
            >>> print(res)
            Tensor(shape=[4], dtype=bool, place=Place(cpu), stop_gradient=True,
            [True , False, True , False])

    Úlogical_andT©r0   r   r   r1   r   r2   )r   r	   r9   r6   ©r   r   r   r1   s       r5   r9   r9   i   ó8   € ôJ ÔÜ×!Ñ! ! QÓ'Ð'äØ  a¨d¸Àtôð r7   c                 óì   — t        | j                  |j                  «      }|| j                  k7  r%t        dj                  || j                  «      «      ‚t	        «       rt        j                  | |«      S y)z™
    Inplace version of ``logical_and`` API, the output Tensor will be inplaced with input ``x``.
    Please refer to :ref:`api_paddle_logical_and`.
    úfThe shape of broadcast output {} is different from that of inplace tensor {} in the Inplace operation.N)r   Úshaper,   Úformatr   r	   Úlogical_and_©r   r   r1   Ú	out_shapes       r5   rA   rA   –   óh   € ô   §¡¨¯©Ó1€IØ�A—G‘GÒÜØt×{Ñ{Ø˜1Ÿ7™7óó
ð 	
ô
 ÔÜ×"Ñ" 1 aÓ(Ð(ð r7   c                 ód   — t        «       rt        j                  | |«      S t        d| |||d¬«      S )aØ  

    ``logical_or`` operator computes element-wise logical OR on ``x`` and ``y``, and returns ``out``. ``out`` is N-dim boolean ``Tensor``.
    Each element of ``out`` is calculated by

    .. math::

        out = x || y

    Note:
        ``paddle.logical_or`` supports broadcasting. If you want know more about broadcasting, please refer to `Introduction to Tensor`_ .

        .. _Introduction to Tensor: ../../guides/beginner/tensor_en.html#chapter5-broadcasting-of-tensor

    Args:
        x (Tensor): the input tensor, it's data type should be one of bool, int8, int16, in32, in64, float16, float32, float64, complex64, complex128.
        y (Tensor): the input tensor, it's data type should be one of bool, int8, int16, in32, in64, float16, float32, float64, complex64, complex128.
        out(Tensor): The ``Variable`` that specifies the output of the operator, which can be any ``Tensor`` that has been created in the program. The default value is None, and a new ``Tensor`` will be created to save the output.
        name (str, optional): Name for the operation (optional, default is None). For more information, please refer to :ref:`api_guide_Name`.

    Returns:
        N-D Tensor. A location into which the result is stored. It's dimension equals with ``x``.

    Examples:
        .. code-block:: python

            >>> import paddle

            >>> x = paddle.to_tensor([True, False], dtype="bool").reshape([2, 1])
            >>> y = paddle.to_tensor([True, False, True, False], dtype="bool").reshape([2, 2])
            >>> res = paddle.logical_or(x, y)
            >>> print(res)
            Tensor(shape=[2, 2], dtype=bool, place=Place(cpu), stop_gradient=True,
            [[True , True ],
             [True , False]])
    Ú
logical_orTr:   )r   r	   rF   r6   r;   s       r5   rF   rF   §   s8   € ôJ ÔÜ× Ñ   AÓ&Ð&ÜØ  Q¨T°sÀdôð r7   c                 óì   — t        | j                  |j                  «      }|| j                  k7  r%t        dj                  || j                  «      «      ‚t	        «       rt        j                  | |«      S y)z—
    Inplace version of ``logical_or`` API, the output Tensor will be inplaced with input ``x``.
    Please refer to :ref:`api_paddle_logical_or`.
    r>   N)r   r?   r,   r@   r   r	   Úlogical_or_rB   s       r5   rH   rH   Ó   óh   € ô   §¡¨¯©Ó1€IØ�A—G‘GÒÜØt×{Ñ{Ø˜1Ÿ7™7óó
ð 	
ô
 ÔÜ×!Ñ! ! QÓ'Ð'ð r7   c                 ód   — t        «       rt        j                  | |«      S t        d| |||d¬«      S )añ  

    ``logical_xor`` operator computes element-wise logical XOR on ``x`` and ``y``, and returns ``out``. ``out`` is N-dim boolean ``Tensor``.
    Each element of ``out`` is calculated by

    .. math::

        out = (x || y) \&\& !(x \&\& y)

    Note:
        ``paddle.logical_xor`` supports broadcasting. If you want know more about broadcasting, please refer to `Introduction to Tensor`_ .

        .. _Introduction to Tensor: ../../guides/beginner/tensor_en.html#chapter5-broadcasting-of-tensor

    Args:
        x (Tensor): the input tensor, it's data type should be one of bool, int8, int16, int32, int64, float16, float32, float64, complex64, complex128.
        y (Tensor): the input tensor, it's data type should be one of bool, int8, int16, int32, int64, float16, float32, float64, complex64, complex128.
        out(Tensor): The ``Tensor`` that specifies the output of the operator, which can be any ``Tensor`` that has been created in the program. The default value is None, and a new ``Tensor`` will be created to save the output.
        name (str, optional): Name for the operation (optional, default is None). For more information, please refer to :ref:`api_guide_Name`.

    Returns:
        N-D Tensor. A location into which the result is stored. It's dimension equals with ``x``.

    Examples:
        .. code-block:: python

            >>> import paddle

            >>> x = paddle.to_tensor([True, False], dtype="bool").reshape([2, 1])
            >>> y = paddle.to_tensor([True, False, True, False], dtype="bool").reshape([2, 2])
            >>> res = paddle.logical_xor(x, y)
            >>> print(res)
            Tensor(shape=[2, 2], dtype=bool, place=Place(cpu), stop_gradient=True,
            [[False, True ],
             [True , False]])
    Úlogical_xorTr:   )r   r	   rK   r6   r;   s       r5   rK   rK   ä   r<   r7   c                 óì   — t        | j                  |j                  «      }|| j                  k7  r%t        dj                  || j                  «      «      ‚t	        «       rt        j                  | |«      S y)z™
    Inplace version of ``logical_xor`` API, the output Tensor will be inplaced with input ``x``.
    Please refer to :ref:`api_paddle_logical_xor`.
    r>   N)r   r?   r,   r@   r   r	   Úlogical_xor_rB   s       r5   rM   rM     rD   r7   c                 ób   — t        «       rt        j                  | «      S t        d| d||d¬«      S )aÖ  

    ``logical_not`` operator computes element-wise logical NOT on ``x``, and returns ``out``. ``out`` is N-dim boolean ``Variable``.
    Each element of ``out`` is calculated by

    .. math::

        out = !x

    Note:
        ``paddle.logical_not`` supports broadcasting. If you want know more about broadcasting, please refer to `Introduction to Tensor`_ .

        .. _Introduction to Tensor: ../../guides/beginner/tensor_en.html#chapter5-broadcasting-of-tensor

    Args:

        x(Tensor):  Operand of logical_not operator. Must be a Tensor of type bool, int8, int16, in32, in64, float16, float32, or float64, complex64, complex128.
        out(Tensor): The ``Tensor`` that specifies the output of the operator, which can be any ``Tensor`` that has been created in the program. The default value is None, and a new ``Tensor` will be created to save the output.
        name(str|None): The default value is None. Normally there is no need for users to set this property. For more information, please refer to :ref:`api_guide_Name`.

    Returns:
        N-D Tensor. A location into which the result is stored. It's dimension equals with ``x``.

    Examples:
        .. code-block:: python

            >>> import paddle

            >>> x = paddle.to_tensor([True, False, True, False])
            >>> res = paddle.logical_not(x)
            >>> print(res)
            Tensor(shape=[4], dtype=bool, place=Place(cpu), stop_gradient=True,
            [False, True , False, True ])
    Úlogical_notNFr:   )r   r	   rO   r6   ©r   r   r1   s      r5   rO   rO   "  s6   € ôF ÔÜ×!Ñ! !Ó$Ð$ÜØ  d°¸3È%ôð r7   c                 óB   — t        «       rt        j                  | «      S y)z™
    Inplace version of ``logical_not`` API, the output Tensor will be inplaced with input ``x``.
    Please refer to :ref:`api_paddle_logical_not`.
    N)r   r	   Úlogical_not_©r   r1   s     r5   rR   rR   L  ó    € ô ÔÜ×"Ñ" 1Ó%Ð%ð r7   c                 ó*  — t        «       rt        j                  | «      S t        | dg d¢d«       t	        |dt
        t        d«      fd«       t        di t        «       ¤Ž}|j                  d¬«      }d|_
        |j                  dd	| gid
|gi¬«       |S )a¦  

    Test whether a Tensor is empty.

    Args:
        x (Tensor): The Tensor to be tested.
        name (str, optional): The default value is ``None`` . Normally users don't have to set this parameter. For more information, please refer to :ref:`api_guide_Name` .

    Returns:
        Tensor: A bool scalar Tensor. True if 'x' is an empty Tensor.

    Examples:
        .. code-block:: python

            >>> import paddle

            >>> input = paddle.rand(shape=[4, 32, 32], dtype='float32')
            >>> res = paddle.is_empty(x=input)
            >>> print(res)
            Tensor(shape=[], dtype=bool, place=Place(cpu), stop_gradient=True,
            False)

    r   )r   r   r   r   Úis_emptyr1   Nr   r    Tr#   r%   r&   )rV   )r   r	   rV   r   r   Ústrr'   r   r+   r-   Ústop_gradientr.   )r   r1   r4   Úconds       r5   rV   rV   V  s›   € ô0 ÔÜ�‰˜qÓ!Ð!ä ØˆsÒ<¸jô	
ô 	�4˜¤#¤t¨D£zÐ!2°JÔ?äÑ4¬6«8Ñ4ˆØ×8Ñ8¸vÐ8ÓFˆØ!ˆÔØ×ÑØ S¨1¨# J¸ÀÀ¸ð 	ô 	
ð ˆr7   c                 óÈ   — t        «       rt        j                  | |«      S t        di t	        «       ¤Ž}|j                  d¬«      }|j                  d| g|gdœd|gi¬«       |S )aŸ  
    Returns the truth value of :math:`x == y`. True if two inputs have the same elements, False otherwise.

    Note:
        The output has no gradient.

    Args:
        x(Tensor): Tensor, data type is bool, float32, float64, int32, int64.
        y(Tensor): Tensor, data type is bool, float32, float64, int32, int64.
        name(str, optional): The default value is None.  Normally there is no need for
            user to set this property.  For more information, please refer to :ref:`api_guide_Name`.

    Returns:
        Tensor: output Tensor, data type is bool, value is [False] or [True].

    Examples:
        .. code-block:: python

            >>> import paddle

            >>> x = paddle.to_tensor([1, 2, 3])
            >>> y = paddle.to_tensor([1, 2, 3])
            >>> z = paddle.to_tensor([1, 4, 3])
            >>> result1 = paddle.equal_all(x, y)
            >>> print(result1)
            Tensor(shape=[], dtype=bool, place=Place(cpu), stop_gradient=True,
            True)
            >>> result2 = paddle.equal_all(x, z)
            >>> print(result2)
            Tensor(shape=[], dtype=bool, place=Place(cpu), stop_gradient=True,
            False)
    Ú	equal_allr   r    r"   r%   r&   )r[   )r   r	   r[   r   r+   r-   r.   ©r   r   r1   r4   r   s        r5   r[   r[     sr   € ôB ÔÜ×Ñ  1Ó%Ð%äÑ5¬F«HÑ5ˆØ×7Ñ7¸fÐ7ÓEˆØ×ÑØØ˜ A 3Ñ'Ø˜S˜E�Nð 	ô 	
ð
 ˆ
r7   c                 ó®  — t        «       rt        j                  | ||||«      S t        | dg d¢d«       t        |dg d¢d«       t	        |dt
        d«       t	        |dt
        d«       t	        |dt        d«       t        di t        «       ¤Ž}|j                  d¬«      }| |d	œ}d
|i}	t        |«      t        |«      |dœ}
|j                  d||	|
¬«       |S )aÓ  
    Check if all :math:`x` and :math:`y` satisfy the condition:

    .. math::
        \left| x - y \right| \leq atol + rtol \times \left| y \right|

    elementwise, for all elements of :math:`x` and :math:`y`. This is analogous to :math:`numpy.allclose`, namely that it returns :math:`True` if
    two tensors are elementwise equal within a tolerance.

    Args:
        x (Tensor): The input tensor, it's data type should be float16, float32, float64.
        y (Tensor): The input tensor, it's data type should be float16, float32, float64.
        rtol (rtoltype, optional): The relative tolerance. Default: :math:`1e-5` .
        atol (atoltype, optional): The absolute tolerance. Default: :math:`1e-8` .
        equal_nan (equalnantype, optional): ${equal_nan_comment}. Default: False.
        name (str, optional): Name for the operation. For more information, please
            refer to :ref:`api_guide_Name`. Default: None.

    Returns:
        Tensor: The output tensor, it's data type is bool.

    Examples:
        .. code-block:: python

            >>> import paddle

            >>> x = paddle.to_tensor([10000., 1e-07])
            >>> y = paddle.to_tensor([10000.1, 1e-08])
            >>> result1 = paddle.allclose(x, y, rtol=1e-05, atol=1e-08, equal_nan=False, name="ignore_nan")
            >>> print(result1)
            Tensor(shape=[], dtype=bool, place=Place(cpu), stop_gradient=True,
            False)
            >>> result2 = paddle.allclose(x, y, rtol=1e-05, atol=1e-08, equal_nan=True, name="equal_nan")
            >>> print(result2)
            Tensor(shape=[], dtype=bool, place=Place(cpu), stop_gradient=True,
            False)
            >>> x = paddle.to_tensor([1.0, float('nan')])
            >>> y = paddle.to_tensor([1.0, float('nan')])
            >>> result1 = paddle.allclose(x, y, rtol=1e-05, atol=1e-08, equal_nan=False, name="ignore_nan")
            >>> print(result1)
            Tensor(shape=[], dtype=bool, place=Place(cpu), stop_gradient=True,
            False)
            >>> result2 = paddle.allclose(x, y, rtol=1e-05, atol=1e-08, equal_nan=True, name="equal_nan")
            >>> print(result2)
            Tensor(shape=[], dtype=bool, place=Place(cpu), stop_gradient=True,
            True)
    Úinput)r   r   r   ÚallcloseÚrtolÚatolÚ	equal_nanr   r    ©ÚInputÚOtherr%   ©r`   ra   rb   ©r'   r(   r)   Úattrs)r_   )r   r	   r_   r   r   Úfloatr   r   r+   r-   rW   r.   ©r   r   r`   ra   rb   r1   r4   r   r(   r)   rh   s              r5   r_   r_   ­  sà   € ôd ÔÜ�‰˜q ! T¨4°Ó;Ð;ä ØˆwÒ9¸:ô	
ô 	!ØˆwÒ9¸:ô	
ô 	�4˜¤¨
Ô3Ü�4˜¤¨
Ô3Ü�9˜k¬4°Ô<äÑ4¬6«8Ñ4ˆØ×7Ñ7¸fÐ7ÓEˆà qÑ)ˆØ˜#�,ˆÜ˜T›¬C°«IÀIÑNˆØ×ÑØ F°GÀ5ð 	ô 	
ð ˆ
r7   c                 ó:  — t        |t        t        t        t        t
        j                  j                  f«      st        dt        |«      › �«      ‚t        |t        t
        j                  j                  f«      st        g | j                  |¬«      }t        «       rt        j                  | |«      S t        | dg d¢d«       t        |dg d¢d«       t!        di t#        «       ¤Ž}|j%                  d¬«      }d	|_        |j)                  d| g|gd
œd|gi¬«       |S )a-  

    This layer returns the truth value of :math:`x == y` elementwise.

    Note:
        The output has no gradient.

    Args:
        x (Tensor): Tensor, data type is bool, float16, float32, float64, uint8, int8, int16, int32, int64.
        y (Tensor): Tensor, data type is bool, float16, float32, float64, uint8, int8, int16, int32, int64.
        name (str, optional): The default value is None. Normally there is no need for
            user to set this property.  For more information, please refer to :ref:`api_guide_Name`.

    Returns:
        Tensor: output Tensor, it's shape is the same as the input's Tensor,
        and the data type is bool. The result of this op is stop_gradient.

    Examples:
        .. code-block:: python

            >>> import paddle

            >>> x = paddle.to_tensor([1, 2, 3])
            >>> y = paddle.to_tensor([1, 3, 2])
            >>> result1 = paddle.equal(x, y)
            >>> print(result1)
            Tensor(shape=[3], dtype=bool, place=Place(cpu), stop_gradient=True,
            [True , False, False])
    zIType of input args must be float, bool, int or Tensor, but received type )r?   r!   Ú
fill_valuer   ©
r   r   r   r   Úuint8r   r   r   r   r   Úequalr   r   r    Tr"   r%   r&   )ro   )Ú
isinstanceÚintr   ri   r   ÚpaddleÚpirÚOpResultÚ	TypeErrorr'   r
   r!   r   r	   ro   r   r   r+   r-   rX   r.   r\   s        r5   ro   ro   ù  s  € ô> �aœ#œt¤U¬H´f·j±j×6IÑ6IÐJÔKÜØWÔX\Ð]^ÓX_ÐW`Ðaó
ð 	
ô �aœ(¤F§J¡J×$7Ñ$7Ð8Ô9Ü�r §¡°QÔ7ˆäÔÜ�|‰|˜A˜qÓ!Ð!ä ØØòð ô	
ô" 	!ØØòð ô	
ô" Ñ1¬«Ñ1ˆØ×7Ñ7¸fÐ7ÓEˆØ ˆÔà×ÑØØ˜ A 3Ñ'Ø˜S˜E�Nð 	ô 	
ð
 ˆ
r7   c                 óì   — t        | j                  |j                  «      }|| j                  k7  r%t        dj                  || j                  «      «      ‚t	        «       rt        j                  | |«      S y)z�
    Inplace version of ``equal`` API, the output Tensor will be inplaced with input ``x``.
    Please refer to :ref:`api_paddle_equal`.
    r>   N)r   r?   r,   r@   r   r	   Úequal_rB   s       r5   rw   rw   P  sf   € ô   §¡¨¯©Ó1€IØ�A—G‘GÒÜØt×{Ñ{Ø˜1Ÿ7™7óó
ð 	
ô
 ÔÜ�}‰}˜Q Ó"Ð"ð  r7   c                 ó  — t        «       rt        j                  | |«      S t        | dg d¢d«       t        |dg d¢d«       t	        di t        «       ¤Ž}|j                  d¬«      }d|_        |j                  d| g|gdœd	|gi¬
«       |S )a•  
    Returns the truth value of :math:`x >= y` elementwise, which is equivalent function to the overloaded operator `>=`.

    Note:
        The output has no gradient.

    Args:
        x (Tensor): First input to compare which is N-D tensor. The input data type should be bool, float16, float32, float64, uint8, int8, int16, int32, int64.
        y (Tensor): Second input to compare which is N-D tensor. The input data type should be bool, float16, float32, float64, uint8, int8, int16, int32, int64.
        name (str, optional): The default value is None.  Normally there is no need for
            user to set this property.  For more information, please refer to :ref:`api_guide_Name`.
    Returns:
        Tensor: The output shape is same as input :attr:`x`. The output data type is bool.

    Examples:
        .. code-block:: python

            >>> import paddle

            >>> x = paddle.to_tensor([1, 2, 3])
            >>> y = paddle.to_tensor([1, 3, 2])
            >>> result1 = paddle.greater_equal(x, y)
            >>> print(result1)
            Tensor(shape=[3], dtype=bool, place=Place(cpu), stop_gradient=True,
            [True , False, True ])
    r   rm   Úgreater_equalr   r   r    Tr"   r%   r&   )ry   )	r   r	   ry   r   r   r+   r-   rX   r.   r\   s        r5   ry   ry   a  s­   € ô8 ÔÜ×#Ñ# A qÓ)Ð)ä ØØòð ô	
ô" 	!ØØòð ô	
ô" Ñ9´³Ñ9ˆØ×7Ñ7¸fÐ7ÓEˆØ ˆÔà×ÑØ Ø˜ A 3Ñ'Ø˜S˜E�Nð 	ô 	
ð
 ˆ
r7   c                 óì   — t        | j                  |j                  «      }|| j                  k7  r%t        dj                  || j                  «      «      ‚t	        «       rt        j                  | |«      S y)z�
    Inplace version of ``greater_equal`` API, the output Tensor will be inplaced with input ``x``.
    Please refer to :ref:`api_paddle_greater_equal`.
    r>   N)r   r?   r,   r@   r   r	   Úgreater_equal_rB   s       r5   r{   r{   ®  sh   € ô   §¡¨¯©Ó1€IØ�A—G‘GÒÜØt×{Ñ{Ø˜1Ÿ7™7óó
ð 	
ô
 ÔÜ×$Ñ$ Q¨Ó*Ð*ð r7   c                 ó  — t        «       rt        j                  | |«      S t        | dg d¢d«       t        |dg d¢d«       t	        di t        «       ¤Ž}|j                  d¬«      }d|_        |j                  d| g|gdœd	|gi¬
«       |S )a’  
    Returns the truth value of :math:`x > y` elementwise, which is equivalent function to the overloaded operator `>`.

    Note:
        The output has no gradient.

    Args:
        x (Tensor): First input to compare which is N-D tensor. The input data type should be bool, float16, float32, float64, uint8, int8, int16, int32, int64.
        y (Tensor): Second input to compare which is N-D tensor. The input data type should be bool, float16, float32, float64, uint8, int8, int16, int32, int64.
        name (str, optional): The default value is None.  Normally there is no need for
            user to set this property.  For more information, please refer to :ref:`api_guide_Name`.
    Returns:
        Tensor: The output shape is same as input :attr:`x`. The output data type is bool.

    Examples:
        .. code-block:: python

            >>> import paddle

            >>> x = paddle.to_tensor([1, 2, 3])
            >>> y = paddle.to_tensor([1, 3, 2])
            >>> result1 = paddle.greater_than(x, y)
            >>> print(result1)
            Tensor(shape=[3], dtype=bool, place=Place(cpu), stop_gradient=True,
            [False, False, True ])
    r   rm   Úgreater_thanr   r   r    Tr"   r%   r&   )r}   )	r   r	   r}   r   r   r+   r-   rX   r.   r\   s        r5   r}   r}   ¿  s­   € ô8 ÔÜ×"Ñ" 1 aÓ(Ð(ä ØØòð ô	
ô" 	!ØØòð ô	
ô" Ñ8¬v«xÑ8ˆØ×7Ñ7¸fÐ7ÓEˆØ ˆÔà×ÑØØ˜ A 3Ñ'Ø˜S˜E�Nð 	ô 	
ð
 ˆ
r7   c                 óì   — t        | j                  |j                  «      }|| j                  k7  r%t        dj                  || j                  «      «      ‚t	        «       rt        j                  | |«      S y)z›
    Inplace version of ``greater_than`` API, the output Tensor will be inplaced with input ``x``.
    Please refer to :ref:`api_paddle_greater_than`.
    r>   N)r   r?   r,   r@   r   r	   Úgreater_than_rB   s       r5   r   r     sh   € ô   §¡¨¯©Ó1€IØ�A—G‘GÒÜØt×{Ñ{Ø˜1Ÿ7™7óó
ð 	
ô
 ÔÜ×#Ñ# A qÓ)Ð)ð r7   c                 ó  — t        «       rt        j                  | |«      S t        | dg d¢d«       t        |dg d¢d«       t	        di t        «       ¤Ž}|j                  d¬«      }d|_        |j                  d| g|gdœd	|gi¬
«       |S )a“  
    Returns the truth value of :math:`x <= y` elementwise, which is equivalent function to the overloaded operator `<=`.

    Note:
        The output has no gradient.

    Args:
        x (Tensor): First input to compare which is N-D tensor. The input data type should be bool, float16, float32, float64, uint8, int8, int16, int32, int64.
        y (Tensor): Second input to compare which is N-D tensor. The input data type should be bool, float16, float32, float64, uint8, int8, int16, int32, int64.
        name (str, optional): The default value is None.  Normally there is no need for
            user to set this property.  For more information, please refer to :ref:`api_guide_Name`.

    Returns:
        Tensor: The output shape is same as input :attr:`x`. The output data type is bool.

    Examples:
        .. code-block:: python

            >>> import paddle

            >>> x = paddle.to_tensor([1, 2, 3])
            >>> y = paddle.to_tensor([1, 3, 2])
            >>> result1 = paddle.less_equal(x, y)
            >>> print(result1)
            Tensor(shape=[3], dtype=bool, place=Place(cpu), stop_gradient=True,
            [True , True , False])
    r   rm   Ú
less_equalr   r   r    Tr"   r%   r&   )r�   )	r   r	   r�   r   r   r+   r-   rX   r.   r\   s        r5   r�   r�     s­   € ô: ÔÜ× Ñ   AÓ&Ð&ä ØØòð ô	
ô" 	!ØØòð ô	
ô" Ñ6¬V«XÑ6ˆØ×7Ñ7¸fÐ7ÓEˆØ ˆÔà×ÑØØ˜ A 3Ñ'Ø˜S˜E�Nð 	ô 	
ð
 ˆ
r7   c                 óì   — t        | j                  |j                  «      }|| j                  k7  r%t        dj                  || j                  «      «      ‚t	        «       rt        j                  | |«      S y)z—
    Inplace version of ``less_equal`` API, the output Tensor will be inplaced with input ``x``.
    Please refer to :ref:`api_paddle_less_equal`.
    r>   N)r   r?   r,   r@   r   r	   Úless_equal_rB   s       r5   rƒ   rƒ   k  rI   r7   c                 ó  — t        «       rt        j                  | |«      S t        | dg d¢d«       t        |dg d¢d«       t	        di t        «       ¤Ž}|j                  d¬«      }d|_        |j                  d| g|gdœd	|gi¬
«       |S )a�  
    Returns the truth value of :math:`x < y` elementwise, which is equivalent function to the overloaded operator `<`.

    Note:
        The output has no gradient.

    Args:
        x (Tensor): First input to compare which is N-D tensor. The input data type should be bool, float16, float32, float64, uint8, int8, int16, int32, int64.
        y (Tensor): Second input to compare which is N-D tensor. The input data type should be bool, float16, float32, float64, uint8, int8, int16, int32, int64.
        name (str, optional): The default value is None.  Normally there is no need for
            user to set this property.  For more information, please refer to :ref:`api_guide_Name`.

    Returns:
        Tensor: The output shape is same as input :attr:`x`. The output data type is bool.

    Examples:
        .. code-block:: python

            >>> import paddle

            >>> x = paddle.to_tensor([1, 2, 3])
            >>> y = paddle.to_tensor([1, 3, 2])
            >>> result1 = paddle.less_than(x, y)
            >>> print(result1)
            Tensor(shape=[3], dtype=bool, place=Place(cpu), stop_gradient=True,
            [False, True , False])
    r   rm   Ú	less_thanr   r   r    Tr"   r%   r&   )r…   )	r   r	   r…   r   r   r+   r-   rX   r.   r\   s        r5   r…   r…   |  ó­   € ô: ÔÜ×Ñ  1Ó%Ð%ä ØØòð ô	
ô" 	!ØØòð ô	
ô" Ñ5¬F«HÑ5ˆØ×7Ñ7¸fÐ7ÓEˆØ ˆÔà×ÑØØ˜ A 3Ñ'Ø˜S˜E�Nð 	ô 	
ð
 ˆ
r7   c                 óì   — t        | j                  |j                  «      }|| j                  k7  r%t        dj                  || j                  «      «      ‚t	        «       rt        j                  | |«      S y)z•
    Inplace version of ``less_than`` API, the output Tensor will be inplaced with input ``x``.
    Please refer to :ref:`api_paddle_less_than`.
    r>   N)r   r?   r,   r@   r   r	   Ú
less_than_rB   s       r5   rˆ   rˆ   Ê  óh   € ô   §¡¨¯©Ó1€IØ�A—G‘GÒÜØt×{Ñ{Ø˜1Ÿ7™7óó
ð 	
ô
 ÔÜ× Ñ   AÓ&Ð&ð r7   c                 ó  — t        «       rt        j                  | |«      S t        | dg d¢d«       t        |dg d¢d«       t	        di t        «       ¤Ž}|j                  d¬«      }d|_        |j                  d| g|gdœd	|gi¬
«       |S )a€  
    Returns the truth value of :math:`x != y` elementwise, which is equivalent function to the overloaded operator `!=`.

    Note:
        The output has no gradient.

    Args:
        x (Tensor): First input to compare which is N-D tensor. The input data type should be bool, float32, float64, uint8, int8, int16, int32, int64.
        y (Tensor): Second input to compare which is N-D tensor. The input data type should be bool, float32, float64, uint8, int8, int16, int32, int64.
        name (str, optional): The default value is None.  Normally there is no need for
            user to set this property.  For more information, please refer to :ref:`api_guide_Name`.

    Returns:
        Tensor: The output shape is same as input :attr:`x`. The output data type is bool.

    Examples:
        .. code-block:: python

            >>> import paddle

            >>> x = paddle.to_tensor([1, 2, 3])
            >>> y = paddle.to_tensor([1, 3, 2])
            >>> result1 = paddle.not_equal(x, y)
            >>> print(result1)
            Tensor(shape=[3], dtype=bool, place=Place(cpu), stop_gradient=True,
            [False, True , True ])
    r   rm   Ú	not_equalr   r   r    Tr"   r%   r&   )r‹   )	r   r	   r‹   r   r   r+   r-   rX   r.   r\   s        r5   r‹   r‹   Û  r†   r7   c                 óì   — t        | j                  |j                  «      }|| j                  k7  r%t        dj                  || j                  «      «      ‚t	        «       rt        j                  | |«      S y)z•
    Inplace version of ``not_equal`` API, the output Tensor will be inplaced with input ``x``.
    Please refer to :ref:`api_paddle_not_equal`.
    r>   N)r   r?   r,   r@   r   r	   Ú
not_equal_rB   s       r5   r�   r�   )  r‰   r7   c                 óä   — t        «       rWt        | t        t        j                  j
                  j                  j                  t        j                  j                  f«      S t        | t        «      S )a8  

    Tests whether input object is a paddle.Tensor.

    Args:
        x (object): Object to test.

    Returns:
        A boolean value. True if ``x`` is a paddle.Tensor, otherwise False.

    Examples:
        .. code-block:: python

            >>> import paddle

            >>> input1 = paddle.rand(shape=[2, 3, 5], dtype='float32')
            >>> check = paddle.is_tensor(input1)
            >>> print(check)
            True

            >>> input3 = [1, 4]
            >>> check = paddle.is_tensor(input3)
            >>> print(check)
            False

    )
r   rp   ÚTensorrr   ÚbaseÚcoreÚeagerrs   ÚValuer   )r   s    r5   Ú	is_tensorr”   :  sR   € ô6 ÔÜØ”œŸ™×(Ñ(×.Ñ.×5Ñ5´v·z±z×7GÑ7GÐHó
ð 	
ô ˜!œXÓ&Ð&r7   c                 óÔ  — t        «       r#t        t        | «      }|r	 |||«      S  ||«      S t        |dg d¢| «       |�t        |dg d¢| «       |�t	        |dt
        | «       t        | fi t        «       ¤Ž}|r|j                  |j                  k(  sJ ‚|€|j                  |j                  ¬«      }|r|j                  | ||dœd|i¬«       |S |j                  | d	|id|i¬«       |S )
Nr   )r   rn   r   r   r   r   r   r   r    r"   r%   r&   r#   )r   r*   r	   r   r   r   r   r+   r!   r-   r.   r/   s           r5   Ú_bitwise_opr–   ]  s  € ÜÔÜ”V˜WÓ%ˆÙÙ�a˜“8ˆOá�a“5ˆLä ØØÚ@Øô		
ð ˆ=Ü$ØØÚDØô	ð ˆ?Ü�s˜E¤8¨WÔ5ä˜WÑ1¬«Ñ1ˆÙØ—7‘7˜aŸg™gÒ%Ð%Ð%àˆ;Ø×;Ñ;À!Ç'Á'Ð;ÓJˆCáØ×ÑØ¨1°1Ñ%5ÀÀs¸|ð ô ð ˆ
ð	 ×ÑØ c¨1 X¸¸s°|ð ô ð ˆ
r7   c                 óh   — t        «       r|€t        j                  | |«      S t        d| |||d¬«      S )a�  

    Apply ``bitwise_and`` on Tensor ``X`` and ``Y`` .

    .. math::
        Out = X \& Y

    Note:
        ``paddle.bitwise_and`` supports broadcasting. If you want know more about broadcasting, please refer to please refer to `Introduction to Tensor`_ .

        .. _Introduction to Tensor: ../../guides/beginner/tensor_en.html#chapter5-broadcasting-of-tensor

    Args:
        x (Tensor): Input Tensor of ``bitwise_and`` . It is a N-D Tensor of bool, uint8, int8, int16, int32, int64.
        y (Tensor): Input Tensor of ``bitwise_and`` . It is a N-D Tensor of bool, uint8, int8, int16, int32, int64.
        out (Tensor, optional): Result of ``bitwise_and`` . It is a N-D Tensor with the same data type of input Tensor. Default: None.
        name (str, optional): The default value is None.  Normally there is no need for
            user to set this property.  For more information, please refer to :ref:`api_guide_Name`.

    Returns:
        Tensor: Result of ``bitwise_and`` . It is a N-D Tensor with the same data type of input Tensor.

    Examples:
        .. code-block:: python

            >>> import paddle
            >>> x = paddle.to_tensor([-5, -1, 1])
            >>> y = paddle.to_tensor([4,  2, -3])
            >>> res = paddle.bitwise_and(x, y)
            >>> print(res)
            Tensor(shape=[3], dtype=int64, place=Place(cpu), stop_gradient=True,
            [0, 2, 1])
    Úbitwise_andTr:   )r   r	   r˜   r–   r;   s       r5   r˜   r˜   ˆ  ó<   € ôD Ô C KÜ×!Ñ! ! QÓ'Ð'ÜØ  a¨d¸Àtôð r7   c                 óì   — t        | j                  |j                  «      }|| j                  k7  r%t        dj                  || j                  «      «      ‚t	        «       rt        j                  | |«      S y)z™
    Inplace version of ``bitwise_and`` API, the output Tensor will be inplaced with input ``x``.
    Please refer to :ref:`api_paddle_bitwise_and`.
    r>   N)r   r?   r,   r@   r   r	   Úbitwise_and_rB   s       r5   r›   r›   ±  sh   € ô   §¡¨¯©Ó1€IØ�A—G‘GÒÜØt×{Ñ{Ø˜1Ÿ7™7óó
ð 	
ô
 ÔÜ×"Ñ" 1 aÓ(Ð(ð  r7   c                 óh   — t        «       r|€t        j                  | |«      S t        d| |||d¬«      S )a|  

    Apply ``bitwise_or`` on Tensor ``X`` and ``Y`` .

    .. math::
        Out = X | Y

    Note:
        ``paddle.bitwise_or`` supports broadcasting. If you want know more about broadcasting, please refer to please refer to `Introduction to Tensor`_ .

        .. _Introduction to Tensor: ../../guides/beginner/tensor_en.html#chapter5-broadcasting-of-tensor

    Args:
        x (Tensor): Input Tensor of ``bitwise_or`` . It is a N-D Tensor of bool, uint8, int8, int16, int32, int64.
        y (Tensor): Input Tensor of ``bitwise_or`` . It is a N-D Tensor of bool, uint8, int8, int16, int32, int64.
        out (Tensor, optional): Result of ``bitwise_or`` . It is a N-D Tensor with the same data type of input Tensor. Default: None.
        name (str, optional): The default value is None.  Normally there is no need for
            user to set this property.  For more information, please refer to :ref:`api_guide_Name`.

    Returns:
        Tensor: Result of ``bitwise_or`` . It is a N-D Tensor with the same data type of input Tensor.

    Examples:
        .. code-block:: python

            >>> import paddle
            >>> x = paddle.to_tensor([-5, -1, 1])
            >>> y = paddle.to_tensor([4,  2, -3])
            >>> res = paddle.bitwise_or(x, y)
            >>> print(res)
            Tensor(shape=[3], dtype=int64, place=Place(cpu), stop_gradient=True,
            [-1, -1, -3])
    Ú
bitwise_orTr:   )r   r	   r�   r–   r;   s       r5   r�   r�   Â  s<   € ôD Ô C KÜ× Ñ   AÓ&Ð&äØ  Q¨T°sÀdôð r7   c                 óì   — t        | j                  |j                  «      }|| j                  k7  r%t        dj                  || j                  «      «      ‚t	        «       rt        j                  | |«      S y)z—
    Inplace version of ``bitwise_or`` API, the output Tensor will be inplaced with input ``x``.
    Please refer to :ref:`api_paddle_bitwise_or`.
    r>   N)r   r?   r,   r@   r   r	   Úbitwise_or_rB   s       r5   rŸ   rŸ   ì  rI   r7   c                 óh   — t        «       r|€t        j                  | |«      S t        d| |||d¬«      S )a‰  

    Apply ``bitwise_xor`` on Tensor ``X`` and ``Y`` .

    .. math::
        Out = X ^\wedge Y

    Note:
        ``paddle.bitwise_xor`` supports broadcasting. If you want know more about broadcasting, please refer to please refer to `Introduction to Tensor`_ .

        .. _Introduction to Tensor: ../../guides/beginner/tensor_en.html#chapter5-broadcasting-of-tensor

    Args:
        x (Tensor): Input Tensor of ``bitwise_xor`` . It is a N-D Tensor of bool, uint8, int8, int16, int32, int64.
        y (Tensor): Input Tensor of ``bitwise_xor`` . It is a N-D Tensor of bool, uint8, int8, int16, int32, int64.
        out (Tensor, optional): Result of ``bitwise_xor`` . It is a N-D Tensor with the same data type of input Tensor. Default: None.
        name (str, optional): The default value is None.  Normally there is no need for
            user to set this property.  For more information, please refer to :ref:`api_guide_Name`.

    Returns:
        Tensor: Result of ``bitwise_xor`` . It is a N-D Tensor with the same data type of input Tensor.

    Examples:
        .. code-block:: python

            >>> import paddle
            >>> x = paddle.to_tensor([-5, -1, 1])
            >>> y = paddle.to_tensor([4,  2, -3])
            >>> res = paddle.bitwise_xor(x, y)
            >>> print(res)
            Tensor(shape=[3], dtype=int64, place=Place(cpu), stop_gradient=True,
            [-1, -3, -4])
    Úbitwise_xorTr:   )r   r	   r¡   r–   r;   s       r5   r¡   r¡   ý  r™   r7   c                 óì   — t        | j                  |j                  «      }|| j                  k7  r%t        dj                  || j                  «      «      ‚t	        «       rt        j                  | |«      S y)z™
    Inplace version of ``bitwise_xor`` API, the output Tensor will be inplaced with input ``x``.
    Please refer to :ref:`api_paddle_bitwise_xor`.
    r>   N)r   r?   r,   r@   r   r	   Úbitwise_xor_rB   s       r5   r£   r£   &  rD   r7   c                 óf   — t        «       r|€t        j                  | «      S t        d| d||d¬«      S )aÐ  

    Apply ``bitwise_not`` on Tensor ``X``.

    .. math::
        Out = \sim X

    Note:
        ``paddle.bitwise_not`` supports broadcasting. If you want know more about broadcasting, please refer to please refer to `Introduction to Tensor`_ .

        .. _Introduction to Tensor: ../../guides/beginner/tensor_en.html#chapter5-broadcasting-of-tensor

    Args:
        x (Tensor): Input Tensor of ``bitwise_not`` . It is a N-D Tensor of bool, uint8, int8, int16, int32, int64.
        out (Tensor, optional): Result of ``bitwise_not`` . It is a N-D Tensor with the same data type of input Tensor. Default: None.
        name (str, optional): The default value is None.  Normally there is no need for
            user to set this property.  For more information, please refer to :ref:`api_guide_Name`.

    Returns:
        Tensor: Result of ``bitwise_not`` . It is a N-D Tensor with the same data type of input Tensor.

    Examples:
        .. code-block:: python

            >>> import paddle
            >>> x = paddle.to_tensor([-5, -1, 1])
            >>> res = paddle.bitwise_not(x)
            >>> print(res)
            Tensor(shape=[3], dtype=int64, place=Place(cpu), stop_gradient=True,
            [ 4,  0, -2])
    NÚbitwise_notFr:   )r   r	   r¥   r–   rP   s      r5   r¥   r¥   7  s:   € ô@ Ô C KÜ×!Ñ! !Ó$Ð$äØ  d°¸3È%ôð r7   c                 óB   — t        «       rt        j                  | «      S y)z™
    Inplace version of ``bitwise_not`` API, the output Tensor will be inplaced with input ``x``.
    Please refer to :ref:`api_paddle_bitwise_not`.
    N)r   r	   Úbitwise_not_rS   s     r5   r§   r§   _  rT   r7   c                 ó®  — t        «       rt        j                  | ||||«      S t        | dg d¢d«       t        |dg d¢d«       t	        |dt
        d«       t	        |dt
        d«       t	        |dt        d«       t        di t        «       ¤Ž}|j                  d¬«      }| |d	œ}d
|i}	t        |«      t        |«      |dœ}
|j                  d||	|
¬«       |S )a
  
    Check if all :math:`x` and :math:`y` satisfy the condition:

    .. math::

        \left| x - y \right| \leq atol + rtol \times \left| y \right|

    elementwise, for all elements of :math:`x` and :math:`y`. The behaviour of this
    operator is analogous to :math:`numpy.isclose`, namely that it returns :math:`True` if
    two tensors are elementwise equal within a tolerance.

    Args:
        x(Tensor): The input tensor, it's data type should be float16, float32, float64, complex64, complex128.
        y(Tensor): The input tensor, it's data type should be float16, float32, float64, complex64, complex128.
        rtol(rtoltype, optional): The relative tolerance. Default: :math:`1e-5` .
        atol(atoltype, optional): The absolute tolerance. Default: :math:`1e-8` .
        equal_nan(equalnantype, optional): If :math:`True` , then two :math:`NaNs` will be compared as equal. Default: :math:`False` .
        name (str, optional): Name for the operation. For more information, please
            refer to :ref:`api_guide_Name`. Default: None.

    Returns:
        Tensor: The output tensor, it's data type is bool.

    Examples:
        .. code-block:: python

            >>> import paddle

            >>> x = paddle.to_tensor([10000., 1e-07])
            >>> y = paddle.to_tensor([10000.1, 1e-08])
            >>> result1 = paddle.isclose(x, y, rtol=1e-05, atol=1e-08,
            ...                          equal_nan=False, name="ignore_nan")
            >>> print(result1)
            Tensor(shape=[2], dtype=bool, place=Place(cpu), stop_gradient=True,
            [True , False])
            >>> result2 = paddle.isclose(x, y, rtol=1e-05, atol=1e-08,
            ...                          equal_nan=True, name="equal_nan")
            >>> print(result2)
            Tensor(shape=[2], dtype=bool, place=Place(cpu), stop_gradient=True,
            [True , False])
            >>> x = paddle.to_tensor([1.0, float('nan')])
            >>> y = paddle.to_tensor([1.0, float('nan')])
            >>> result1 = paddle.isclose(x, y, rtol=1e-05, atol=1e-08,
            ...                          equal_nan=False, name="ignore_nan")
            >>> print(result1)
            Tensor(shape=[2], dtype=bool, place=Place(cpu), stop_gradient=True,
            [True , False])
            >>> result2 = paddle.isclose(x, y, rtol=1e-05, atol=1e-08,
            ...                          equal_nan=True, name="equal_nan")
            >>> print(result2)
            Tensor(shape=[2], dtype=bool, place=Place(cpu), stop_gradient=True,
            [True, True])
    r^   )r   r   r   r   r   Úiscloser`   ra   rb   r   r    rc   r%   rf   rg   )r©   )r   r	   r©   r   r   ri   r   r   r+   r-   rW   r.   rj   s              r5   r©   r©   i  sä   € ôp ÔÜ�~‰~˜a  D¨$°	Ó:Ð:ä ØØÚHØô		
ô 	!ØØÚHØô		
ô 	�4˜¤¨	Ô2Ü�4˜¤¨	Ô2Ü�9˜k¬4°Ô;äÑ3¬&«(Ñ3ˆØ×7Ñ7¸fÐ7ÓEˆà qÑ)ˆØ˜#�,ˆÜ˜T›¬C°«IÀIÑNˆØ×ÑØ 6°7À%ð 	ô 	
ð ˆ
r7   )NNT)NN)N)gñhãˆµøä>g:Œ0âŽyE>FN);rr   Úbase.data_feederr   r   Úcommon_ops_importr   Úlayer_function_generatorr   r�   Ú	frameworkr‘   r’   r�   r	   Úpaddle.tensor.creationr
   Úpaddle.tensor.mathr   Úpaddle.utils.inplace_utilsr   r   r   r   Ú__all__r6   r9   rA   rF   rH   rK   rM   rO   rR   rV   r[   r_   ro   rw   ry   r{   r}   r   r�   rƒ   r…   rˆ   r‹   r�   r”   r–   r˜   r›   r�   rŸ   r¡   r£   r¥   r§   r©   © r7   r5   Ú<module>r³      sy  ðó" ç CÝ (Ý 1à	�‰×	Ñ	×	#Ñ	#×	)Ñ	)×	0Ñ	0€å Ý 'Ý .Ý Cç LÑ Là
€óCóL*ðZ ò)ó ð)ó )ðX ò(ó ð(ó *ðZ ò)ó ð)ó 'ðT ò&ó ð&ó&óR+ñ\ ƒòHó ðHñV ƒòSó ðSðl ò#ó ð#ñ  ƒòIó ðIðX ò+ó ð+ñ  ƒòIó ðIðX ò*ó ð*ñ  ƒòJó ðJðZ ò(ó ð(ñ  ƒòJó ðJðZ ò'ó ð'ñ  ƒòJó ðJðZ ò'ó ð'ò  'óF(óV&ðR ò)ó ð)ó 'ðT ò(ó ð(ó &ðR ò)ó ð)ó %ðP ò&ó ð&ñ ƒòSó ñSr7   