a
    Of+                     @  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rd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ddZ,dd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    S/var/www/ai-form-bot/venv/lib/python3.9/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                   @  s  e Zd ZU ded< eddddZedddd	Zeddd
dZeddddZ	eddddddZ
dPddddddddZedQdddddddZdddd d!Zed"ddd#d$ZdRd%dd&d'd(ZdSd%dd&d)d*Zeddd+d,Zed-ddd.d/d0Zeddd1d2d3ZedTdddd4d5d6ZedUdddd7d8d9Zeddd:d;d<Zeddd=d>ZedVd?d?dddd@dAdBZddd:dCdDZddd:dEdFZdddGdHdIZdddJdKZdddLdMZdddNdOZdS )WDataManagerzlist[Index]axesr   returnc                 C  s   t | d S Nr   r   r    r    r!   itemsF   s    zDataManager.itemsintc                 C  s
   t | jS r*   )lenr+   r   r    r    r!   __len__J   s    zDataManager.__len__c                 C  s
   t | jS r*   )r-   r'   r   r    r    r!   ndimN   s    zDataManager.ndimr   c                 C  s   t dd | jD S )Nc                 s  s   | ]}t |V  qd S r*   )r-   ).0axr    r    r!   	<genexpr>T       z$DataManager.shape.<locals>.<genexpr>)tupler'   r   r    r    r!   shapeR   s    zDataManager.shaper   None)axis
new_labelsr)   c                 C  sP   t | j| }t |}|dkr.t | jdkr.n||krLtd| d| dd S )N   r   z#Length mismatch: Expected axis has z elements, new values have z	 elements)r-   r'   r+   
ValueError)r   r7   r8   Zold_lenZnew_lenr    r    r!   _validate_set_axisV   s    zDataManager._validate_set_axisNFTboolr   )r7   
allow_dupscopy
only_slicer)   c                 C  s   t | d S r*   r   )r   Znew_axisindexerr7   
fill_valuer=   r>   r?   r    r    r!   reindex_indexerg   s    
zDataManager.reindex_indexer)	new_indexr7   r?   r)   c                 C  s*   | j | |\}}| j||||d|dS )z4
        Conform data manager to new index.
        F)r7   rA   r>   r?   )r'   ZreindexrB   )r   rC   r7   rA   r?   r@   r    r    r!   reindex_axiss   s    zDataManager.reindex_axis)otherr)   c                 C  s   t | dS )z
        To be implemented by the subclasses. Only check the column values
        assuming shape and indexes have already been checked.
        Nr   )r   rE   r    r    r!   _equal_values   s    zDataManager._equal_valuesobjectc                 C  sZ   t |t| sdS | j|j }}t|t|kr4dS tdd t||D sPdS | |S )z5
        Implementation for DataFrame.equals
        Fc                 s  s   | ]\}}| |V  qd S r*   )equals)r0   Zax1Zax2r    r    r!   r2      r3   z%DataManager.equals.<locals>.<genexpr>)
isinstancetyper'   r-   allziprF   )r   rE   Z	self_axesZ
other_axesr    r    r!   rH      s    zDataManager.equalszlist[str] | None)
align_keysr)   c                 K  s   t | d S r*   r   r   frM   kwargsr    r    r!   apply   s    zDataManager.applyc                 K  s   t | d S r*   r   rN   r    r    r!   apply_with_block   s    zDataManager.apply_with_blockc                 C  s   | j d|dS )NrQ   )func)rQ   )r   rS   r    r    r!   isna   s    zDataManager.isnaz
int | None)limitinplacer)   c              	   C  s2   |d urt jd |d}| jd||||t t dS )N)rU   fillna)valuerU   rV   downcast	using_cowalready_warned)libalgosZvalidate_limitrR   r   r   )r   rX   rU   rV   rY   r    r    r!   rW      s    zDataManager.fillna)alignr)   c                 C  s6   |rddg}ndg}t |dd}| jd|||t dS )NrE   condTZextract_numpywhere)rM   rE   r^   rZ   )r   rR   r   )r   rE   r^   r]   rM   r    r    r!   r`      s    
zDataManager.where)r]   warnr)   c                 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maskTr_   putmask)rM   rc   rb   rZ   r[   )r   r	   r   r   rR   r   )r   rc   rb   r]   ra   rM   r[   r    r    r!   rd      s"    
zDataManager.putmask)decimalsrZ   r)   c                 C  s   | j d||dS )Nround)re   rZ   )rR   )r   re   rZ   r    r    r!   rf      s
    zDataManager.round)rV   r)   c                 C  s@   t |d}t|rJ t|r&J | jd|||t t dS )NrV   replace)
to_replacerX   rV   rZ   r[   )r   r   Zis_list_likerR   r   r   )r   rh   rX   rV   r    r    r!   rg      s    
zDataManager.replacec                 K  s   | j di |t t dS )N_replace_regexrZ   r[   )ri   rR   r   r   )r   rP   r    r    r!   replace_regex  s     zDataManager.replace_regexz	list[Any])src_list	dest_listrV   regexr)   c              	   C  s2   t |d}| jd||||t t d}|  |S )zdo a list replacerV   replace_list)rm   rn   rV   ro   rZ   r[   )r   rR   r   r   _consolidate_inplace)r   rm   rn   rV   ro   Zbmr    r    r!   rp     s    	
	zDataManager.replace_listc                 K  s"   | j dd|i|t t dS )NinterpolaterV   rj   )rr   rk   r   rV   rP   r    r    r!   rr   "  s     zDataManager.interpolatec                 K  s"   | j dd|i|t t dS )Npad_or_backfillrV   rj   )rt   rk   rs   r    r    r!   rt   +  s     zDataManager.pad_or_backfill)periodsr)   c                 C  s   |t ju rd }| jd||dS )Nshift)ru   rA   )r   Z
no_defaultrR   )r   ru   rA   r    r    r!   rv   4  s    
zDataManager.shiftc                 C  s   dS )NTr    r   r    r    r!   is_consolidated=  s    zDataManager.is_consolidatedc                 C  s   | S r*   r    r   r    r    r!   consolidate@  s    zDataManager.consolidatec                 C  s   d S r*   r    r   r    r    r!   rq   C  s    z DataManager._consolidate_inplace)NFTF)NF)N)N)TT)F)FF)r#   r$   r%   __annotations__propertyr+   r   r.   r/   r5   r;   rB   rD   rF   rH   rQ   rR   rT   rW   r`   rd   rf   rg   rl   rp   rr   rt   rv   rw   rx   rq   r    r    r    r!   r&   A   sf   
          			r&   c                   @  sb   e Zd ZeddddZeeddddZdd	d
dddZdd Ze	dddddZ
dS )SingleDataManagerz
Literal[1]r(   c                 C  s   dS )Nr9   r    r   r    r    r!   r/   H  s    zSingleDataManager.ndimr   c                 C  s
   | j d S )zW
        Quick access to the backing array of the Block or SingleArrayManager.
        r   )Zarraysr   r    r    r!   arrayL  s    zSingleDataManager.arrayTr<   r6   )ra   r)   c                 C  sT   | j }t|tjrt|j|}t|tjrH|jdkrHt|dkrH|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.
        r9   )r   .N)r|   rI   npZndarrayr   dtyper/   r-   )r   r@   rX   ra   arrr    r    r!   setitem_inplaceU  s    
"z!SingleDataManager.setitem_inplacec                 C  s.   | j }||}tt|}t| ||}|S r*   )r|   r   r-   rJ   
from_array)r   rS   r   resindexZmgrr    r    r!   grouped_reducem  s
    z SingleDataManager.grouped_reducer   )r   r   c                 C  s   t | d S r*   r   )clsr   r   r    r    r!   r   u  s    zSingleDataManager.from_arrayN)T)r#   r$   r%   rz   r/   r   r|   r   r   classmethodr   r    r    r    r!   r{   G  s   r{   zlist[DtypeObj]zDtypeObj | None)dtypesr)   c                 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)r-   r   )r   r    r    r!   interleaved_dtypez  s    r   r   znp.dtype)r~   r)   c                 C  sP   t | tr| j} ttj| } n.t | tr4td} n| ttkrLtd} | S )NrG   )rI   r   subtyper   r}   r~   r   str)r~   r    r    r!   ensure_np_dtype  s    


r   ).__doc__
__future__r   typingr   r   r   r   r   numpyr}   Zpandas._configr   r	   Zpandas._libsr
   r\   r   Zpandas.errorsr   Zpandas.util._validatorsr   Zpandas.core.dtypes.castr   r   Zpandas.core.dtypes.dtypesr   r   Zpandas.core.baser   Zpandas.core.constructionr   Zpandas.core.indexes.apir   r   Zpandas._typingr   r   r   r   r   r   r&   r{   r   r   r    r    r    r!   <module>   s*   	
  3