a
    OfD                     @  s   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dZddddddddZddddd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TypeVar)cache_readonly)ABCDataFrame)IndexN)	ArrayLikenpt)IntervalArray)NDArrayBackedExtensionArray_ExtensionIndexTExtensionIndex)boundFstrtypebool)namedelegatecachewrapc                   s   t | t ts"t jdkr|rJfdd}|_ j|_t|}qfdd}ddfdd	}|_ j|_t||}n*t s }n 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
    Zgetset_descriptorc                   s   t | j S N)getattr_dataselfr    V/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/core/indexes/extension.pycached:   s    z"_inherit_from_data.<locals>.cachedc                   sZ   t | j }rVt|t| jr4t| j|| jdS t|trH|| S t|| jdS |S )Nr   )	r   r   
isinstancer   _simple_newr   r   	set_indexr   r   result)r   r   r   r   fgetC   s    

z _inherit_from_data.<locals>.fgetNonereturnc                   s   t | j | d S r   )setattrr   r   valuer   r   r   fsetM   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rp|| S t	|| jdS |S )NZ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   r.   __doc__r   callable)r   r   r   r   r   r2   r%   r,   r   )r1   r   r   r   _inherit_from_data    s$    


r6   z	list[str]z:Callable[[type[_ExtensionIndexT]], type[_ExtensionIndexT]])namesr   r   r   r(   c                   s   dd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.
    ztype[_ExtensionIndexT])clsr(   c                   s*   D ] }t | d}t| || q| S )N)r   r   )r6   r)   )r8   r   methr   r   r7   r   r   r   wrapper}   s    zinherit_names.<locals>.wrapperr   )r7   r   r   r   r;   r   r:   r   inherit_namesn   s    r<   c                   @  s4   e Zd ZU dZded< dd Zed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   Z_validate_setitem_valuer*   r   r   r   _validate_fill_value   s    z#ExtensionIndex._validate_fill_valueznpt.NDArray[np.bool_]r'   c                 C  s
   | j  S r   )r   Zisnar   r   r   r   _isnan   s    zExtensionIndex._isnanN)r.   
__module____qualname__r4   __annotations__r=   r   r>   r   r   r   r   r      s
   
c                   @  s8   e Zd ZU dZded< ddddZddd	d
dZdS )NDArrayBackedExtensionIndexzK
    Index subclass for indexes backed by NDArrayBackedExtensionArray.
    r   r   z
np.ndarrayr'   c                 C  s   | j jS r   )r   _ndarrayr   r   r   r   _get_engine_target   s    z.NDArrayBackedExtensionIndex._get_engine_targetr	   )r$   r(   c                 C  s    |j | jjj ksJ | j|S r   )Zdtyper   rC   Z_from_backing_datar#   r   r   r   _from_join_target   s    z-NDArrayBackedExtensionIndex._from_join_targetN)r.   r?   r@   r4   rA   rD   rE   r   r   r   r   rB      s   
rB   )FF)FF)r4   
__future__r   typingr   r   r   Zpandas.util._decoratorsr   Zpandas.core.dtypes.genericr   Zpandas.core.indexes.baser   numpynpZpandas._typingr	   r
   Zpandas.core.arraysr   Zpandas.core.arrays._mixinsr   r   r6   r<   r   rB   r   r   r   r   <module>   s"    O 