
    }ochl                        d Z ddlmZ ddlmZmZmZ ddlmZ ddl	m
Z
 ddlmZ er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)TYPE_CHECKINGCallableTypeVar)cache_readonly)ABCDataFrame)IndexN)	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
                  |_        |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    l/mnt/ACDE16A4DE16673C/PROJECTS/MIS_PORTAL/venv/lib/python3.12/site-packages/pandas/core/indexes/extension.pycachedz"_inherit_from_data.<locals>.cached:   s    tzz400    c                H   t        | j                        }rt        |t        | j                              r&t        |       j	                  || j
                        S t        |t              r|j                  |       S t        || j
                  |j                        S |S )Nr   r   dtype)
r   r   
isinstancetype_simple_newr   r   	set_indexr	   r   )r   resultr   wraps     r   fgetz _inherit_from_data.<locals>.fgetC   s~     T2!&$tzz*:;#Dz55f4995MM#FL9%//55 diiv||LLr   c                4    t        | j                  |       y r   )setattrr   )r   valuer   s     r   fsetz _inherit_from_data.<locals>.fsetM   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                        S |S )Ninplacezcannot use inplace with r   r   )
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<<HHMr   )returnNone)r   r    propertyr!   r.   __doc__r   callable)	r   delegatecacher%   r   r2   r&   r*   r1   s	   `  `    @r   _inherit_from_datar:       s    ( 8T"D$!T$Z%8%8<O%O1 #FO!\\FN#F+FX MQ1 !DM<<DLdD)F0 M- d^( M
	 Mr   c                      d fd}|S )a  
    Class decorator to pin attributes from an ExtensionArray to a 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)r9   r%   )r:   r(   )clsr   methr9   r8   namesr%   s      r   wrapperzinherit_names.<locals>.wrapper}   s5     	%D%dHEMDCt$	% 
r   )r=   type[_ExtensionIndexT]r3   rA    )r?   r8   r9   r%   r@   s   ```` r   inherit_namesrC   n   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)r3   znpt.NDArray[np.bool_])r.   
__module____qualname__r6   __annotations__rG   r   rK   rB   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   _ndarrayrJ   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   rR   _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)r3   
np.ndarray)r$   rW   r3   r
   )r.   rL   rM   r6   rN   rS   rV   rB   r   r   rP   rP      s     '&#5r   rP   )FF)r   strr8   r!   r9   boolr%   rY   )
r?   z	list[str]r8   r!   r9   rY   r%   rY   r3   z:Callable[[type[_ExtensionIndexT]], type[_ExtensionIndexT]])r6   
__future__r   typingr   r   r   pandas.util._decoratorsr   pandas.core.dtypes.genericr   pandas.core.indexes.baser	   numpynppandas._typingr
   r   pandas.core.arraysr   pandas.core.arrays._mixinsr   r   r:   rC   r   rP   rB   r   r   <module>rd      s    #  3 3 *
 1F-5EF  BGK
KK&*K:>K^ IN $-1AE?2!U !25. 5r   