o
    $jl                     @  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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TypeVar)cache_readonly)ABCDataFrame)IndexN)	ArrayLikenpt)IntervalArray)NDArrayBackedExtensionArray_ExtensionIndexTExtensionIndex)boundFnamestrdelegatetypecacheboolwrapc                   s   t | t tst jdkrB|r&fdd}|_ j|_t|}|S fdd}dfdd	}|_ j|_t||}|S t sJ }|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
    Zgetset_descriptorc                   s   t | j S N)getattr_dataselfr    ^/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/pandas/core/indexes/extension.pycached:   s   z"_inherit_from_data.<locals>.cachedc                   s^   t | j }r-t|t| jrt| j|| jdS t|tr$|| S t|| j|j	dS |S )Nr   r   dtype)
r   r   
isinstancer   _simple_newr   r   	set_indexr   r!   r   result)r   r   r   r   fgetC   s   

z _inherit_from_data.<locals>.fgetreturnNonec                   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 |}rAt|t| jr.t| j|| jdS t|tr8|| S t	|| j|j
dS |S )NZinplacezcannot use inplace with r   r    )
ValueErrorr   __name__r   r"   r#   r   r   r$   r   r!   )r   argskwargsr&   )attrr   r   r   method\   s   

z"_inherit_from_data.<locals>.methodN)r(   r)   )r   r"   propertyr   r/   __doc__r   callable)r   r   r   r   r   r3   r'   r-   r   )r2   r   r   r   _inherit_from_data    s*   
,

r7   names	list[str]r(   :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   )r7   r*   )r;   r   methr   r   r8   r   r   r   wrapper}   s   zinherit_names.<locals>.wrapperN)r;   r<   r(   r<   r   )r8   r   r   r   r?   r   r>   r   inherit_namesn   s   r@   c                   @  s0   e Zd ZU dZde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   Z_validate_setitem_valuer+   r   r   r   _validate_fill_value   s   z#ExtensionIndex._validate_fill_valuer(   npt.NDArray[np.bool_]c                 C  s
   | j  S r   )r   Zisnar   r   r   r   _isnan   s   
zExtensionIndex._isnanN)r(   rB   )r/   
__module____qualname__r5   __annotations__rA   r   rC   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 )NDArrayBackedExtensionIndexzK
    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   )r!   r   rI   Z_from_backing_datar%   r   r   r   _from_join_target   s   z-NDArrayBackedExtensionIndex._from_join_targetN)r(   rH   )r&   rH   r(   r	   )r/   rD   rE   r5   rF   rJ   rK   r   r   r   r   rG      s
   
 
rG   )FF)r   r   r   r   r   r   r   r   )
r8   r9   r   r   r   r   r   r   r(   r:   )r5   
__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   r7   r@   r   rG   r   r   r   r   <module>   s$    O