
    EgD                        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          Z	 dd dZ	 dd!dZ G d de          Z G 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                    t          |           t          t                    st                    j        dk    rZ|r( fd} |_        j        |_        t          |          }n[ fd}d fd} |_        j        |_        t          ||          }n+t                    s}n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                .    t          | j                  S N)getattr_data)selfr   s    R/var/www/sysmax/venv/lib/python3.11/site-packages/pandas/core/indexes/extension.pycachedz"_inherit_from_data.<locals>.cached:   s    tz4000    c                L   t          | j                  }rt          |t          | j                            r)t          |                               || j                  S t          |t                    r|                    |           S t          || j                  S |S )Nr   )	r   r   
isinstancer   _simple_newr   r   	set_indexr	   )r   resultr   r   s     r   fgetz _inherit_from_data.<locals>.fgetC   s     T22 9!&$tz*:*:;; 6#Dzz55f495MMM#FL99 6%//555 di8888r!   returnNonec                4    t          | j        |           d S r   )setattrr   )r   valuer   s     r   fsetz _inherit_from_data.<locals>.fsetM   s    
D%00000r!   c                   d|v r$t          dt          |           j                    | j        g|R i |}rt	          |t          | j                            r)t          |                               || j                  S t	          |t                    r|                    |           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"" !QDJJ<O!Q!QRRRT$*6t666v66F 5fd4:&6&677 2::11&ty1III55 2!++D111V$)4444Mr!   )r)   r*   )r   r$   propertyr   r2   __doc__r   callable)	r   r   r   r   r    r6   r(   r.   r5   s	   `  `    @r   _inherit_from_datar:       s'   ( 8T""D$!! 4&T$ZZ%8<O%O%O 	*1 1 1 1 1 #FO!\FN#F++FF     1 1 1 1 1 1 !DM<DLdD))FFd^^ &

	 
	 
	 
	 
	 
	 Mr!   names	list[str]r)   :Callable[[type[_ExtensionIndexT]], type[_ExtensionIndexT]]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.
    clstype[_ExtensionIndexT]r)   c                Z    D ]&}t          |          }t          | ||           '| S )N)r   r   )r:   r,   )r?   r   methr   r   r;   r   s      r   wrapperzinherit_names.<locals>.wrapper}   sB     	% 	%D%dHEMMMDCt$$$$
r!   )r?   r@   r)   r@    )r;   r   r   r   rC   s   ```` r   inherit_namesrE   n   s:             Nr!   c                  <    e Zd ZU dZded<   d Zed	d            ZdS )
r   z>
    Index subclass for indexes backed by ExtensionArray.
    z+IntervalArray | NDArrayBackedExtensionArrayr   c                6    | 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     z11%888r!   r)   npt.NDArray[np.bool_]c                4    | j                                         S r   )r   isnar   s    r   _isnanzExtensionIndex._isnan   s     z   r!   N)r)   rJ   )r2   
__module____qualname__r8   __annotations__rI   r   rN   rD   r!   r   r   r      s]           76669 9 9 ! ! ! ^! ! !r!   c                  .    e Zd ZU dZded<   ddZdd	Zd
S )NDArrayBackedExtensionIndexzK
    Index subclass for indexes backed by NDArrayBackedExtensionArray.
    r   r   r)   
np.ndarrayc                    | j         j        S r   )r   _ndarrayrM   s    r   _get_engine_targetz.NDArrayBackedExtensionIndex._get_engine_target   s    z""r!   r'   r
   c                n    |j         | j        j        j         k    sJ | j                            |          S r   )dtyper   rV   _from_backing_data)r   r'   s     r   _from_join_targetz-NDArrayBackedExtensionIndex._from_join_target   s3    |tz288888z,,V444r!   N)r)   rT   )r'   rT   r)   r
   )r2   rO   rP   r8   rQ   rW   r[   rD   r!   r   rS   rS      sV           '&&&# # # #5 5 5 5 5 5r!   rS   )FF)r   r   r   r   r   r   r   r   )
r;   r<   r   r   r   r   r   r   r)   r=   )r8   
__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   r:   rE   r   rS   rD   r!   r   <module>rf      s    # " " " " "          3 2 2 2 2 2 3 3 3 3 3 3 * * * * * * 	G       
 100000FFFFFF7-5EFFF  BGK K K K K^ IN    2! ! ! ! !U ! ! !25 5 5 5 5. 5 5 5 5 5r!   