
    Bil                        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dS )"z?
Shared methods for Index subclasses backed by ExtensionArray.
    )annotations)TYPE_CHECKINGCallableTypeVar)cache_readonly)ABCDataFrame)IndexN)	ArrayLikenpt)IntervalArray)NDArrayBackedExtensionArray_ExtensionIndexTExtensionIndex)boundFnamestrdelegatetypecacheboolwrapc                    t          |           t          t                    st                    j        dk    rZ|r( fd} |_        j        |_        t          |          }n[ fd}d fd} |_        j        |_        t          ||          }n+t                    s}n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                .    t          | j                  S N)getattr_data)selfr   s    u/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/pandas/core/indexes/extension.pycachedz"_inherit_from_data.<locals>.cached:   s    tz4000    c                X   t          | j                  }rt          |t          | j                            r)t          |                               || j                  S t          |t                    r|                    |           S t          || j        |j	                  S |S )Nr   r   dtype)
r   r   
isinstancer   _simple_newr   r   	set_indexr	   r%   )r   resultr   r   s     r   fgetz _inherit_from_data.<locals>.fgetC   s     T22 M!&$tz*:*:;; 6#Dzz55f495MMM#FL99 6%//555 div|LLLLr!   returnNonec                4    t          | j        |           d S r   )setattrr   )r   valuer   s     r   fsetz _inherit_from_data.<locals>.fsetM   s    
D%00000r!   c                   d|v r$t          dt          |           j                    | j        g|R i |}rt	          |t          | j                            r)t          |                               || j                  S t	          |t                    r|                    |           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"" !QDJJ<O!Q!QRRRT$*6t666v66F Ifd4:&6&677 2::11&ty1III55 2!++D111V$)6<HHHHMr!   )r+   r,   )r   r&   propertyr   r4   __doc__r   callable)	r   r   r   r   r    r8   r*   r0   r7   s	   `  `    @r   _inherit_from_datar<       s'   ( 8T""D$!! 4&T$ZZ%8<O%O%O 	*1 1 1 1 1 #FO!\FN#F++FF     1 1 1 1 1 1 !DM<DLdD))FFd^^ &

	 
	 
	 
	 
	 
	 Mr!   names	list[str]r+   :Callable[[type[_ExtensionIndexT]], type[_ExtensionIndexT]]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.
    clstype[_ExtensionIndexT]r+   c                Z    D ]&}t          |          }t          | ||           '| S )N)r   r   )r<   r.   )rA   r   methr   r   r=   r   s      r   wrapperzinherit_names.<locals>.wrapper}   sB     	% 	%D%dHEMMMDCt$$$$
r!   )rA   rB   r+   rB    )r=   r   r   r   rE   s   ```` r   inherit_namesrG   n   s:             Nr!   c                  <    e Zd ZU dZded<   d Zed	d            ZdS )
r   z>
    Index subclass for indexes backed by ExtensionArray.
    z+IntervalArray | NDArrayBackedExtensionArrayr   c                6    | 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     z11%888r!   r+   npt.NDArray[np.bool_]c                4    | j                                         S r   )r   isnar   s    r   _isnanzExtensionIndex._isnan   s     z   r!   N)r+   rL   )r4   
__module____qualname__r:   __annotations__rK   r   rP   rF   r!   r   r   r      s]           76669 9 9 ! ! ! ^! ! !r!   c                  .    e Zd ZU dZded<   ddZdd	Zd
S )NDArrayBackedExtensionIndexzK
    Index subclass for indexes backed by NDArrayBackedExtensionArray.
    r   r   r+   
np.ndarrayc                    | j         j        S r   )r   _ndarrayrO   s    r   _get_engine_targetz.NDArrayBackedExtensionIndex._get_engine_target   s    z""r!   r)   r
   c                n    |j         | j        j        j         k    sJ | j                            |          S r   )r%   r   rX   _from_backing_data)r   r)   s     r   _from_join_targetz-NDArrayBackedExtensionIndex._from_join_target   s3    |tz288888z,,V444r!   N)r+   rV   )r)   rV   r+   r
   )r4   rQ   rR   r:   rS   rY   r\   rF   r!   r   rU   rU      sV           '&&&# # # #5 5 5 5 5 5r!   rU   )FF)r   r   r   r   r   r   r   r   )
r=   r>   r   r   r   r   r   r   r+   r?   )r:   
__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<   rG   r   rU   rF   r!   r   <module>rg      s    # " " " " "          3 2 2 2 2 2 3 3 3 3 3 3 * * * * * * 	G       
 100000FFFFFF7-5EFFF  BGK K K K K^ IN    2! ! ! ! !U ! ! !25 5 5 5 5. 5 5 5 5 5r!   