
    `Vg                       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      Z edd      Z	 d	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 	 	 ddZ G d de      Z G d de      Zy)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ExtensionIndexc                    t        |       t        t              st              j                  dk(  r]|r* fd} |_        j
                  |_        t        |      }|S  fd} fd} |_        j
                  |_        t        ||      }|S t              s}|S 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                0    t        | j                        S N)getattr_data)selfnames    ^/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/pandas/core/indexes/extension.pycachedz"_inherit_from_data.<locals>.cached=   s    tzz400    c                2   t        | j                        }r}t        |t        | j                              r&t        |       j	                  || j
                        S t        |t              r|j                  |       S t        || j
                        S |S )Nr   )	r   r   
isinstancetype_simple_newr   r   	set_indexr   )r   resultr   wraps     r   fgetz _inherit_from_data.<locals>.fgetF   sx     T2!&$tzz*:;#Dz55f4995MM#FL9%//55 dii88r   c                4    t        | j                  |       y r   )setattrr   )r   valuer   s     r   fsetz _inherit_from_data.<locals>.fsetP   s    

D%0r   c                |   d|v r!t        dt        |       j                          | j                  g|i |}r}t	        |t        | j                              r&t        |       j                  || j                        S t	        |t              r|j                  |       S t        || j                        S |S )Ninplacezcannot use inplace with r    )

ValueErrorr"   __name__r   r!   r#   r   r   r$   r   )r   argskwargsr%   attrr&   s       r   methodz"_inherit_from_data.<locals>.method_   s    F" #;DJ<O<O;P!QRR$**6t6v6Ffd4::&67:11&tyy1II5!++D11V$))44Mr   )r   r!   propertyr"   r/   __doc__r	   callable)	r   delegatecacher&   r   r3   r'   r+   r2   s	   `  `    @r   _inherit_from_datar9   #   s    ( 8T"D$!T$Z%8%8<O%O1 #FO!\\FN#F+FX MQ1 !DM<<DLdD)F0 M- d^( M
	 Mr   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.
    c                N    D ]  }t        |      }t        | ||         | S )N)r8   r&   )r9   r)   )clsr   methr8   r7   namesr&   s      r   wrapperzinherit_names.<locals>.wrapper   s5     	%D%dHEMDCt$	% 
r   )r<   type[_ExtensionIndexT]returnr@    )r>   r7   r8   r&   r?   s   ```` r   inherit_namesrC   q   s      Nr   c                  f    e Zd ZU dZded<   d Z eej                        dd       Ze	d	d       Z
y)
r   z>
    Index subclass for indexes backed by ExtensionArray.
    z+IntervalArray | NDArrayBackedExtensionArrayr   c                8    | j                   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     zz11%88r   Nc                    	  ||       }t        |t        j                        rt        |      }t        |t              st	        d      |S # t
        $ r' | j                  t              j                  |      cY S w xY w)Nz,The map function must return an Index object)	r!   npndarrayr   	TypeError	Exceptionastypeobjectmap)r   mapper	na_actionr%   s       r   rO   zExtensionIndex.map   sm    	3D\F &"**-vfe, NOOM 	3;;v&**622	3s   A	A -A<;A<c                6    | j                   j                         S r   )r   isnar   s    r   _isnanzExtensionIndex._isnan   s     zz  r   r   )rA   znpt.NDArray[np.bool_])r/   
__module____qualname__r5   __annotations__rG   r
   r   rO   r	   rU   rB   r   r   r   r      sD     769 	^3 3  ! !r   c                  ,    e Zd ZU dZded<   ddZddZy)	r   zK
    Index subclass for indexes backed by NDArrayBackedExtensionArray.
    r   r   c                .    | j                   j                  S r   )r   _ndarrayrT   s    r   _get_engine_targetz.NDArrayBackedExtensionIndex._get_engine_target   s    zz"""r   c                    |j                   | j                  j                  j                   k(  sJ | j                  j                  |      S r   )dtyper   r[   _from_backing_data)r   r%   s     r   _from_join_targetz-NDArrayBackedExtensionIndex._from_join_target   s9    ||tzz2288888zz,,V44r   N)rA   
np.ndarray)r%   ra   rA   r   )r/   rV   rW   r5   rX   r\   r`   rB   r   r   r   r      s     '&#5r   )FF)r   strr7   r"   r8   boolr&   rc   )
r>   z	list[str]r7   r"   r8   rc   r&   rc   rA   z:Callable[[type[_ExtensionIndexT]], type[_ExtensionIndexT]])r5   
__future__r   typingr   r   r   numpyrI   pandas._typingr   r   pandas.util._decoratorsr	   r
   pandas.core.dtypes.genericr   pandas.core.indexes.baser   pandas.core.arraysr   pandas.core.arrays._mixinsr   r   r   r9   rC   r   r   rB   r   r   <module>rm      s    #  
 4 *0FT67-5EF  BGK
KK&*K:>K^ IN $-1AE?2'!U '!T5. 5r   