
    i                       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 erddlmZ dd	lZdd
lmZmZ ddlmZ ddlmZ  edd      Z	 d	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 	 	 ddZ G d de      Z G d de      Zy	)z?
Shared methods for Index subclasses backed by ExtensionArray.
    )annotations)	signature)TYPE_CHECKINGTypeVar)cache_readonly)ABCDataFrame)Index)CallableN)	ArrayLikenpt)IntervalArray)NDArrayBackedExtensionArray_ExtensionIndexTExtensionIndex)boundc                    t        |       t        t              st              j                  dk(  r^|r* fd} |_        j
                  |_        t        |      }|S  fd}d fd} |_        j
                  |_        t        ||      }|S t              s}|S fd} |_        j
                  |_        t              |_	        |S )a  
    Make an alias for a method of the underlying ExtensionArray.

    Parameters
    ----------
    name : str
        Name of an attribute the class should inherit from its EA parent.
    delegate : class
    cache : bool, default False
        Whether to convert wrapped properties into cache_readonly
    wrap : bool, default False
        Whether to wrap the inherited result in an Index.

    Returns
    -------
    attribute, method, property, or cache_readonly
    getset_descriptorc                0    t        | j                        S N)getattr_data)selfnames    Z/app/cer_product_mecsu/.venv/lib/python3.12/site-packages/pandas/core/indexes/extension.pycachedz"_inherit_from_data.<locals>.cached=   s    tzz400    c                J   t        | j                        }rt        |t        | j                              r&t        |       j	                  || j
                        S t        |t              r|j                  |       S t        || j
                  |j                  d      S |S )Nr   Fr   dtypecopy)
r   r   
isinstancetype_simple_newr   r   	set_indexr	   r    )r   resultr   wraps     r   fgetz _inherit_from_data.<locals>.fgetF   s     T2!&$tzz*:;#Dz55f4995MM#FL9%//55 diiv||RWXXr   c                4    t        | j                  |       y r   )setattrr   )r   valuer   s     r   fsetz _inherit_from_data.<locals>.fsetP   s    

D%0r   c                   d|v r!t        dt        |       j                          | j                  g|i |}rt	        |t        | j                              r&t        |       j                  || j                        S t	        |t              r|j                  |       S t        || j                  |j                  d      S |S )Ninplacezcannot use inplace with r   Fr   )
ValueErrorr#   __name__r   r"   r$   r   r   r%   r	   r    )r   argskwargsr&   attrr'   s       r   methodz"_inherit_from_data.<locals>.method_   s    F" #;DJ<O<O;P!QRR$**6t6v6Ffd4::&67:11&tyy1II5!++D11V$))6<<eTTMr   )returnNone)
r   r"   propertyr#   r0   __doc__r   callabler   __signature__)	r   delegatecacher'   r   r4   r(   r,   r3   s	   `  `    @r   _inherit_from_datar=   #   s    ( 8T"D$!T$Z%8%8<O%O1 #FO!\\FN#F+FZ MS1 !DM<<DLdD)F2 M/ d^* M!
	 (Mr   c                      d fd}|S )a  
    Class decorator to pin attributes from an ExtensionArray to an Index subclass.

    Parameters
    ----------
    names : List[str]
    delegate : class
    cache : bool, default False
    wrap : bool, default False
        Whether to wrap the inherited result in an Index.
    c                N    D ]  }t        |      }t        | ||         | S )N)r<   r'   )r=   r*   )clsr   methr<   r;   namesr'   s      r   wrapperzinherit_names.<locals>.wrapper   s5     	%D%dHEMDCt$	% 
r   )r@   type[_ExtensionIndexT]r5   rD    )rB   r;   r<   r'   rC   s   ```` r   inherit_namesrF   r   s      Nr   c                  4    e Zd ZU dZded<   d Zedd       Zy)r   z>
    Index subclass for indexes backed by ExtensionArray.
    z+IntervalArray | NDArrayBackedExtensionArrayr   c                8    | j                   j                  |      S )zE
        Convert value to be insertable to underlying array.
        )r   _validate_setitem_value)r   r+   s     r   _validate_fill_valuez#ExtensionIndex._validate_fill_value   s     zz11%88r   c                6    | j                   j                         S r   )r   isnar   s    r   _isnanzExtensionIndex._isnan   s     zz  r   N)r5   znpt.NDArray[np.bool_])r0   
__module____qualname__r8   __annotations__rJ   r   rN   rE   r   r   r   r      s(     769 ! !r   c                  ,    e Zd ZU dZded<   ddZddZy)	NDArrayBackedExtensionIndexzK
    Index subclass for indexes backed by NDArrayBackedExtensionArray.
    r   r   c                .    | j                   j                  S r   )r   _ndarrayrM   s    r   _get_engine_targetz.NDArrayBackedExtensionIndex._get_engine_target   s    zz"""r   c                    |j                   | j                  j                  j                   k(  sJ | j                  j                  |      S r   )r    r   rU   _from_backing_data)r   r&   s     r   _from_join_targetz-NDArrayBackedExtensionIndex._from_join_target   s9    ||tzz2288888zz,,V44r   N)r5   
np.ndarray)r&   rZ   r5   r   )r0   rO   rP   r8   rQ   rV   rY   rE   r   r   rS   rS      s     '&#5r   rS   )FF)r   strr;   r#   r<   boolr'   r\   )
rB   z	list[str]r;   r#   r<   r\   r'   r\   r5   z:Callable[[type[_ExtensionIndexT]], type[_ExtensionIndexT]])r8   
__future__r   inspectr   typingr   r   pandas.util._decoratorsr   pandas.core.dtypes.genericr   pandas.core.indexes.baser	   collections.abcr
   numpynppandas._typingr   r   pandas.core.arraysr   pandas.core.arrays._mixinsr   r   r=   rF   r   rS   rE   r   r   <module>ri      s    # 
 3 3 *(
 1F-5EF  BGL
LL&*L:>L` IN $-1AE?2!U !25. 5r   