
    Owg                        d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	 ddl
mZ ddlmZmZ erddlmZ dd	Zdd
Zd Zd Zy)z;
Boilerplate functions used in defining binary operations.
    )annotations)wraps)TYPE_CHECKINGCallable)item_from_zerodim)is_matching_na)ABCIndex	ABCSeries)Fc                     d fd}|S )z
    Boilerplate for pandas conventions in arithmetic and comparison methods.

    Parameters
    ----------
    name : str

    Returns
    -------
    decorator
    c                    t        |       S )N)_unpack_zerodim_and_defer)methodnames    M/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/core/ops/common.pywrapperz)unpack_zerodim_and_defer.<locals>.wrapper%   s    (66    )r   r   returnr    )r   r   s   ` r   unpack_zerodim_and_deferr      s    7 Nr   c                z     |j                  d      j                  d      }|dv t                fd       }|S )aM  
    Boilerplate for pandas conventions in arithmetic and comparison methods.

    Ensure method returns NotImplemented when operating against "senior"
    classes.  Ensure zero-dimensional ndarrays are always unpacked.

    Parameters
    ----------
    method : binary method
    name : str

    Returns
    -------
    method
    __>   eqgegtleltnec                    r!t        | t              rt        |t              rn$t        |dd       }||| j                  kD  rt
        S t        |      } | |      S )N__pandas_priority__)
isinstancer	   r
   getattrr    NotImplementedr   )selfotherpriois_cmpr   s      r   
new_methodz-_unpack_zerodim_and_defer.<locals>.new_method>   s[    jx0Zy5Q5"7>D$222))!%(dE""r   )removeprefixremovesuffixr   )r   r   stripped_namer(   r'   s   `   @r   r   r   +   sI      %%d+88>MBBF
6]# # r   c                f    t        |t        t        f      rt        | |      }|S | j                  }|S )a  
    Find the appropriate name to pin to an operation result.  This result
    should always be either an Index or a Series.

    Parameters
    ----------
    left : {Series, Index}
    right : object

    Returns
    -------
    name : object
        Usually a string
    )r!   r
   r	   _maybe_match_namer   )leftrightr   s      r   get_op_result_namer0   Q   s6     %)X./ u- K yyKr   c                   t        | d      }t        |d      }|rU|rS	 | j                  |j                  k(  r| j                  S t        | j                  |j                        r| j                  S y|r| j                  S |r|j                  S y# t        $ r1 t        | j                  |j                        r| j                  cY S Y yt        $ r Y yw xY w)a  
    Try to find a name to attach to the result of an operation between
    a and b.  If only one of these has a `name` attribute, return that
    name.  Otherwise return a consensus name if they match or None if
    they have different names.

    Parameters
    ----------
    a : object
    b : object

    Returns
    -------
    name : str or None

    See Also
    --------
    pandas.core.common.consensus_name_attr
    r   N)hasattrr   r   	TypeError
ValueError)aba_hasb_hass       r   r-   r-   g   s    ( AvEAvE	vvvv/vv 
vv	vv  	affaff-vv 		s   $B +B 5CCCN)r   strr   zCallable[[F], F])r   r9   )__doc__
__future__r   	functoolsr   typingr   r   pandas._libs.libr   pandas._libs.missingr   pandas.core.dtypes.genericr	   r
   pandas._typingr   r   r   r0   r-   r   r   r   <module>rB      sA    # 
 / /
  &#L,+r   