o
    ôT·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
    Úgetset_descriptorc                   s   t | jˆ ƒS ©N)ÚgetattrÚ_data©Úself©r   © ú`/home/dinkstrade/pdmp-scanner/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 )NÚ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   r1   Ú__doc__r   Úcallable)r   r   r   r   r    r5   r(   r.   r   )r4   r   r   r   Ú_inherit_from_data    s*   
,Ø

êñr9   Ú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   )r9   r+   )r=   r   Úmeth©r   r   r:   r   r   r   Úwrapper}   s   zinherit_names.<locals>.wrapperN)r=   r>   r)   r>   r   )r:   r   r   r   rA   r   r@   r   Úinherit_namesn   s   rB   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   Ú_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   Úisnar   r   r   r   Ú_isnan™   s   
zExtensionIndex._isnanN)r)   rE   )r1   Ú
__module__Ú__qualname__r7   Ú__annotations__rD   r   rG   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   rM   Ú_from_backing_datar&   r   r   r   Ú_from_join_targetª   s   z-NDArrayBackedExtensionIndex._from_join_targetN)r)   rL   )r'   rL   r)   r	   )r1   rH   rI   r7   rJ   rN   rP   r   r   r   r   rK       s
   
 
rK   )FF)r   r   r   r   r   r   r   r   )
r:   r;   r   r   r   r   r   r   r)   r<   )r7   Ú
__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   r9   rB   r   rK   r   r   r   r   Ú<module>   s$    ÿOÿ