
    OwgD                        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    T/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/core/indexes/extension.pycachedz"_inherit_from_data.<locals>.cached:   s    tzz400    c                2   t        | j                        }r}t        |t        | j                              r&t        |       j	                  || j
                        S t        |t              r|j                  |       S t        || j
                        S |S )Nr   )	r   r   
isinstancetype_simple_newr   r   	set_indexr	   )r   resultr   wraps     r   fgetz _inherit_from_data.<locals>.fgetC   sx     T2!&$tzz*:;#Dz55f4995MM#FL9%//55 dii88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 |}r}t	        |t        | j                              r&t        |       j                  || j                        S t	        |t              r|j                  |       S t        || j                        S |S )Ninplacezcannot use inplace with r   )

ValueErrorr   __name__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$))44Mr   )returnNone)r   r   propertyr   r,   __doc__r   callable)	r   delegatecacher#   r   r0   r$   r(   r/   s	   `  `    @r   _inherit_from_datar8       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)r7   r#   )r8   r&   )clsr   methr7   r6   namesr#   s      r   wrapperzinherit_names.<locals>.wrapper}   s5     	%D%dHEMDCt$	% 
r   )r;   type[_ExtensionIndexT]r1   r?    )r=   r6   r7   r#   r>   s   ```` r   inherit_namesrA   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)r1   znpt.NDArray[np.bool_])r,   
__module____qualname__r4   __annotations__rE   r   rI   r@   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   _ndarrayrH   s    r   _get_engine_targetz.NDArrayBackedExtensionIndex._get_engine_target   s    zz"""r   c                    |j                   | j                  j                  j                   k(  sJ | j                  j                  |      S r   )dtyper   rP   _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)r1   
np.ndarray)r"   rV   r1   r
   )r,   rJ   rK   r4   rL   rQ   rU   r@   r   r   rN   rN      s     '&#5r   rN   )FF)r   strr6   r   r7   boolr#   rX   )
r=   z	list[str]r6   r   r7   rX   r#   rX   r1   z:Callable[[type[_ExtensionIndexT]], type[_ExtensionIndexT]])r4   
__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   r8   rA   r   rN   r@   r   r   <module>rc      s    #  3 3 *
 1F-5EF  BGK
KK&*K:>K^ IN $-1AE?2!U !25. 5r   