o
    5c                     @  s   d Z ddlmZ ddlmZmZmZ ddlZddl	m
Z
mZ ddlmZmZ ddlmZ ddlmZ er@dd	lmZ dd
lmZ edddZedddZ	d"d#ddZ	d"d$ddZG d d deZG d!d deZdS )%z?
Shared methods for Index subclasses backed by ExtensionArray.
    )annotations)TYPE_CHECKINGCallableTypeVarN)	ArrayLikenpt)cache_readonlydoc)ABCDataFrame)Index)IntervalArray)NDArrayBackedExtensionArray_TNDArrayBackedExtensionIndex)bound_ExtensionIndexTExtensionIndexFnamestrdelegatetypecacheboolwrapc                   s   t | t tst jdkrA|r&fdd}|_ j|_t|}|S fdd}fdd}|_ j|_t||}|S t sI }|S  fd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                   s   t | j S N)getattr_dataselfr    S/var/www/html/gps/gps/lib/python3.10/site-packages/pandas/core/indexes/extension.pycached=   s   z"_inherit_from_data.<locals>.cachedc                   sZ   t | j }r+t|t| jrt| j|| jdS t|tr$|| S t|| jdS |S )Nr    )	r   r   
isinstancer   _simple_newr   r
   	set_indexr   r   result)r   r   r!   r"   fgetF   s   

z _inherit_from_data.<locals>.fgetc                   s   t | j | d S r   )setattrr   r   valuer    r!   r"   fsetP   s   z _inherit_from_data.<locals>.fsetc                   s   d|v rt dt| j  | jg|R i |}r?t|t| jr.t| j|| jdS t|tr8|| S t	|| jdS |S )Ninplacezcannot use inplace with r    )

ValueErrorr   __name__r   r$   r%   r   r
   r&   r   )r   argskwargsr(   )attrr   r!   r"   method_   s   

z"_inherit_from_data.<locals>.method)r   r$   propertyr   r0   __doc__r   callable)r   r   r   r   r#   r4   r)   r-   r!   )r3   r   r   r"   _inherit_from_data#   s*   
,

r8   names	list[str]return:Callable[[type[_ExtensionIndexT]], type[_ExtensionIndexT]]c                   s   d fd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                   s*   D ]}t | d}t| || q| S )N)r   r   )r8   r*   )r=   r   methr   r   r9   r   r!   r"   wrapper   s   zinherit_names.<locals>.wrapperN)r=   r>   r;   r>   r!   )r9   r   r   r   rA   r!   r@   r"   inherit_namesq   s   rB   c                   @  sD   e Zd ZU dZded< dd ZeejdddZe	dddZ
dS )r   z>
    Index subclass for indexes backed by ExtensionArray.
    z+IntervalArray | NDArrayBackedExtensionArrayr   c                 C  s   | j |S )zE
        Convert value to be insertable to underlying array.
        )r   _validate_setitem_valuer+   r!   r!   r"   _validate_fill_value   s   z#ExtensionIndex._validate_fill_valueNc                 C  sX   z|| }t |tjrt|}t |tstd|W S  ty+   | t| Y S w )Nz,The map function must return an Index object)	r$   npndarrayr   	TypeError	Exceptionastypeobjectmap)r   mapper	na_actionr(   r!   r!   r"   rK      s   
zExtensionIndex.mapr;   npt.NDArray[np.bool_]c                 C  s
   | j  S r   )r   isnar   r!   r!   r"   _isnan   s   
zExtensionIndex._isnanr   )r;   rN   )r0   
__module____qualname__r6   __annotations__rD   r	   r   rK   r   rP   r!   r!   r!   r"   r      s   
 c                   @  s.   e Zd ZU dZded< dddZdd
dZdS )r   zK
    Index subclass for indexes backed by NDArrayBackedExtensionArray.
    r   r   r;   
np.ndarrayc                 C  s   | j jS r   )r   _ndarrayr   r!   r!   r"   _get_engine_target   s   z.NDArrayBackedExtensionIndex._get_engine_targetr(   r   c                 C  s    |j | jjj ks
J | j|S r   )dtyper   rU   _from_backing_datar'   r!   r!   r"   _from_join_target   s   z-NDArrayBackedExtensionIndex._from_join_targetN)r;   rT   )r(   rT   r;   r   )r0   rQ   rR   r6   rS   rV   rY   r!   r!   r!   r"   r      s
   
 
)FF)r   r   r   r   r   r   r   r   )
r9   r:   r   r   r   r   r   r   r;   r<   )r6   
__future__r   typingr   r   r   numpyrE   pandas._typingr   r   pandas.util._decoratorsr   r	   pandas.core.dtypes.genericr
   pandas.core.indexes.baser   pandas.core.arraysr   pandas.core.arrays._mixinsr   r   r   r8   rB   r   r   r!   r!   r!   r"   <module>   s&    O*