o
    ŀg+                     @  s  d Z ddlmZ ddlmZmZ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 dd	lmZmZ dd
lmZmZ ddlmZ ddlmZ ddl m!Z!m"Z" erjddl#m$Z$m%Z%m&Z&m'Z'm(Z( G dd dZ)G dd deZ*G dd de*Z+d ddZ,d!ddZ-dS )"zc
Base class for the internal managers. Both BlockManager and ArrayManager
inherit from this class.
    )annotations)TYPE_CHECKINGAnyLiteralcastfinalN)using_copy_on_writewarn_copy_on_write)algoslibAbstractMethodError)validate_bool_kwarg)find_common_typenp_can_hold_element)ExtensionDtypeSparseDtype)PandasObject)extract_array)Indexdefault_index)	ArrayLikeAxisIntDtypeObjSelfShapec                   @  s   e Zd Zdd ZdS )_AlreadyWarnedc                 C  s
   d| _ d S NF)warned_alreadyself r!   N/var/www/html/myenv/lib/python3.10/site-packages/pandas/core/internals/base.py__init__8   s   
z_AlreadyWarned.__init__N)__name__
__module____qualname__r#   r!   r!   r!   r"   r   7   s    r   c                   @  sn  e Zd ZU ded< edVddZedWdd	ZedWd
dZedXddZ	edYddZ
				dZd[ddZe		d\d]d d!Zd^d#d$Zed_d&d'Z	d`dad*d+Z	d`dad,d-Zedbd.d/Zedcd3d4Zeddd6d7Zededfd9d:Zedgdhd=d>Zedid?d@ZedbdAdBZe		djdkdGdHZdidIdJZdidKdLZdldNdOZdmdPdQZdbdRdSZdndTdUZdS )oDataManagerzlist[Index]axesreturnr   c                 C     t | Nr   r   r!   r!   r"   itemsF      zDataManager.itemsintc                 C  
   t | jS r+   )lenr,   r   r!   r!   r"   __len__J      
zDataManager.__len__c                 C  r/   r+   )r0   r(   r   r!   r!   r"   ndimN   r2   zDataManager.ndimr   c                 C  s   t dd | jD S )Nc                 s  s    | ]}t |V  qd S r+   )r0   ).0axr!   r!   r"   	<genexpr>T   s    z$DataManager.shape.<locals>.<genexpr>)tupler(   r   r!   r!   r"   shapeR   s   zDataManager.shapeaxisr   
new_labelsNonec                 C  sR   t | j| }t |}|dkrt | jdkrd S ||kr'td| d| dd S )N   r   z#Length mismatch: Expected axis has z elements, new values have z	 elements)r0   r(   r,   
ValueError)r    r9   r:   old_lennew_lenr!   r!   r"   _validate_set_axisV   s   zDataManager._validate_set_axisNFT
allow_dupsboolcopy
only_slicer   c                 C  r*   r+   r   )r    new_axisindexerr9   
fill_valuerA   rC   rD   r!   r!   r"   reindex_indexerg   s   
zDataManager.reindex_indexer	new_indexc                 C  s*   | j | |\}}| j||||d|dS )z4
        Conform data manager to new index.
        F)r9   rG   rC   rD   )r(   reindexrH   )r    rI   r9   rG   rD   rF   r!   r!   r"   reindex_axiss   s   zDataManager.reindex_axisotherc                 C  r*   )z
        To be implemented by the subclasses. Only check the column values
        assuming shape and indexes have already been checked.
        r   )r    rL   r!   r!   r"   _equal_values   s   zDataManager._equal_valuesobjectc                 C  sZ   t |t| s	dS | j|j}}t|t|krdS tdd t||D s(dS | |S )z5
        Implementation for DataFrame.equals
        Fc                 s  s    | ]
\}}| |V  qd S r+   )equals)r4   ax1ax2r!   r!   r"   r6      s    z%DataManager.equals.<locals>.<genexpr>)
isinstancetyper(   r0   allziprM   )r    rL   	self_axes
other_axesr!   r!   r"   rO      s   
zDataManager.equals
align_keyslist[str] | Nonec                 K  r*   r+   r   r    frX   kwargsr!   r!   r"   apply      zDataManager.applyc                 K  r*   r+   r   rZ   r!   r!   r"   apply_with_block   r^   zDataManager.apply_with_blockc                 C  s   | j d|dS )Nr]   )func)r]   )r    r`   r!   r!   r"   isna   s   zDataManager.isnalimit
int | Noneinplacec              	   C  s2   |d urt jd |d}| jd||||t t dS )N)rb   fillna)valuerb   rd   downcast	using_cowalready_warned)libalgosvalidate_limitr_   r   r   )r    rf   rb   rd   rg   r!   r!   r"   re      s   zDataManager.fillnaalignc                 C  s6   |rddg}n	dg}t |dd}| jd|||t dS )NrL   condTextract_numpywhere)rX   rL   rm   rh   )r   r_   r   )r    rL   rm   rl   rX   r!   r!   r"   rp      s   
zDataManager.wherewarnc                 C  sR   |rddg}n	dg}t |dd}d }t rt }|sd|_| jd|||t |dS )NnewmaskTrn   putmask)rX   rs   rr   rh   ri   )r   r	   r   r   r_   r   )r    rs   rr   rl   rq   rX   ri   r!   r!   r"   rt      s"   
zDataManager.putmaskdecimalsrh   c                 C  s   | j d||dS )Nround)ru   rh   )r_   )r    ru   rh   r!   r!   r"   rv      s
   zDataManager.roundc                 C  s@   t |d}t|rJ t|rJ | jd|||t t dS )Nrd   replace)
to_replacerf   rd   rh   ri   )r   r   is_list_liker_   r   r   )r    rx   rf   rd   r!   r!   r"   rw      s   
zDataManager.replacec                 K  s    | j 	di |t t dS )N_replace_regexrh   ri   )rz   r_   r   r   )r    r\   r!   r!   r"   replace_regex  s   
zDataManager.replace_regexsrc_list	list[Any]	dest_listregexc              	   C  s2   t |d}| jd||||t t d}|  |S )zdo a list replacerd   replace_list)r~   r   rd   r   rh   ri   )r   r_   r   r   _consolidate_inplace)r    r~   r   rd   r   bmr!   r!   r"   r     s   
		zDataManager.replace_listc                 K  $   | j 	dd|i|t t dS )Ninterpolaterd   r{   )r   r|   r    rd   r\   r!   r!   r"   r   "     
zDataManager.interpolatec                 K  r   )Npad_or_backfillrd   r{   )r   r|   r   r!   r!   r"   r   +  r   zDataManager.pad_or_backfillperiodsc                 C  s   |t ju rd }| jd||dS )Nshift)r   rG   )r   
no_defaultr_   )r    r   rG   r!   r!   r"   r   4  s   
zDataManager.shiftc                 C     dS )NTr!   r   r!   r!   r"   is_consolidated=     zDataManager.is_consolidatedc                 C  s   | S r+   r!   r   r!   r!   r"   consolidate@  r   zDataManager.consolidatec                 C  s   d S r+   r!   r   r!   r!   r"   r   C  r   z DataManager._consolidate_inplace)r)   r   )r)   r.   )r)   r   )r9   r   r:   r   r)   r;   )NFTF)
r9   r   rA   rB   rC   rB   rD   rB   r)   r   r   )rI   r   r9   r   rD   rB   r)   r   )rL   r   r)   rB   )rL   rN   r)   rB   r+   )rX   rY   r)   r   )r)   r   )rb   rc   rd   rB   r)   r   )rl   rB   r)   r   )TT)rl   rB   rq   rB   r)   r   )F)ru   r.   rh   rB   r)   r   )rd   rB   r)   r   )FF)
r~   r   r   r   rd   rB   r   rB   r)   r   )r   r.   r)   r   )r)   rB   )r)   r;   )r$   r%   r&   __annotations__propertyr,   r   r1   r3   r8   r@   rH   rK   rM   rO   r]   r_   ra   re   rp   rt   rv   rw   r}   r   r   r   r   r   r   r   r!   r!   r!   r"   r'   A   sh   
 


	
	
	
r'   c                   @  sN   e Zd ZedddZeedddZddddZdd Ze	dddZ
dS )SingleDataManagerr)   
Literal[1]c                 C  r   )Nr<   r!   r   r!   r!   r"   r3   H  s   zSingleDataManager.ndimr   c                 C  s
   | j d S )zW
        Quick access to the backing array of the Block or SingleArrayManager.
        r   )arraysr   r!   r!   r"   arrayL  s   
zSingleDataManager.arrayTrq   rB   r;   c                 C  sT   | j }t|tjrt|j|}t|tjr$|jdkr$t|dkr$|d }|||< dS )a'  
        Set values with indexer.

        For Single[Block/Array]Manager, this backs s[indexer] = value

        This is an inplace version of `setitem()`, mutating the manager/values
        in place, not returning a new Manager (and Block), and thus never changing
        the dtype.
        r<   )r   .N)r   rR   npndarrayr   dtyper3   r0   )r    rF   rf   rq   arrr!   r!   r"   setitem_inplaceU  s   
"z!SingleDataManager.setitem_inplacec                 C  s.   | j }||}tt|}t| ||}|S r+   )r   r   r0   rS   
from_array)r    r`   r   resindexmgrr!   r!   r"   grouped_reducem  s
   z SingleDataManager.grouped_reducer   r   r   c                 C  r*   r+   r   )clsr   r   r!   r!   r"   r   u  r-   zSingleDataManager.from_arrayN)r)   r   )r)   r   )T)rq   rB   r)   r;   )r   r   r   r   )r$   r%   r&   r   r3   r   r   r   r   classmethodr   r!   r!   r!   r"   r   G  s    r   dtypeslist[DtypeObj]r)   DtypeObj | Nonec                 C  s   t | sdS t| S )z
    Find the common dtype for `blocks`.

    Parameters
    ----------
    blocks : List[DtypeObj]

    Returns
    -------
    dtype : np.dtype, ExtensionDtype, or None
        None is returned when `blocks` is empty.
    N)r0   r   )r   r!   r!   r"   interleaved_dtypez  s   r   r   r   np.dtypec                 C  sT   t | tr| j} ttj| } | S t | trtd} | S | ttkr(td} | S )NrN   )rR   r   subtyper   r   r   r   str)r   r!   r!   r"   ensure_np_dtype  s   



r   )r   r   r)   r   )r   r   r)   r   ).__doc__
__future__r   typingr   r   r   r   r   numpyr   pandas._configr   r	   pandas._libsr
   rj   r   pandas.errorsr   pandas.util._validatorsr   pandas.core.dtypes.castr   r   pandas.core.dtypes.dtypesr   r   pandas.core.baser   pandas.core.constructionr   pandas.core.indexes.apir   r   pandas._typingr   r   r   r   r   r   r'   r   r   r   r!   r!   r!   r"   <module>   s,    	
  
3