o
    7?e'                     @  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 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rhddl"m#Z#m$Z$m%Z%m&Z&m'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)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                   @  sn  e Zd ZU ded< edUddZedVdd	ZedVd
dZedWddZ	edXddZ
				dYdZddZe		d[d\d d!Zd]d#d$Zed^d&d'Z	d_d`d*d+Z	d_d`d,d-Zedad.d/Zedbd3d4Zedcd6d7Zedddcd8d9Zededfd<d=Zedgd>d?Zedad@dAZe		dhdidFdGZdgdHdIZdgdJdKZdjdMdNZdkdOdPZdadQdRZdldSdTZdS )mDataManagerzlist[Index]axesreturnr   c                 C     t | Nr   self r"   [/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/pandas/core/internals/base.pyitems9      zDataManager.itemsintc                 C  
   t | jS r   )lenr$   r    r"   r"   r#   __len__=      
zDataManager.__len__c                 C  r'   r   )r(   r   r    r"   r"   r#   ndimA   r*   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>G   s    z$DataManager.shape.<locals>.<genexpr>)tupler   r    r"   r"   r#   shapeE   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)r(   r   r$   
ValueError)r!   r1   r2   Zold_lenZnew_lenr"   r"   r#   _validate_set_axisI   s   zDataManager._validate_set_axisNFT
allow_dupsboolcopy
only_slicer   c                 C  r   r   r   )r!   Znew_axisindexerr1   
fill_valuer7   r9   r:   r"   r"   r#   reindex_indexerZ   s   
zDataManager.reindex_indexer	new_indexc                 C  s*   | j | |\}}| j||||d|dS )z4
        Conform data manager to new index.
        F)r1   r<   r9   r:   )r   Zreindexr=   )r!   r>   r1   r<   r:   r;   r"   r"   r#   reindex_axisf   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!   r@   r"   r"   r#   _equal_values|   s   zDataManager._equal_valuesobjectc                 C  sV   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)r,   Zax1Zax2r"   r"   r#   r.      s    z%DataManager.equals.<locals>.<genexpr>)
isinstancer   r   r(   allziprA   )r!   r@   Z	self_axesZ
other_axesr"   r"   r#   rC      s   

zDataManager.equals
align_keyslist[str] | Nonec                 K  r   r   r   r!   frG   kwargsr"   r"   r#   apply      zDataManager.applyc                 K  r   r   r   rI   r"   r"   r#   apply_with_block   rM   zDataManager.apply_with_blockc                 C  s   | j d|dS )NrL   )func)rL   )r!   rO   r"   r"   r#   isna   s   zDataManager.isnalimit
int | Noneinplacec                 C  s.   |d urt jd |d}| jd||||t dS )N)rQ   fillna)valuerQ   rS   downcast	using_cow)libalgosZvalidate_limitrN   r   )r!   rU   rQ   rS   rV   r"   r"   r#   rT      s   zDataManager.fillnaalignc                 C  s6   |rddg}n	dg}t |dd}| jd|||t dS )Nr@   condTZextract_numpywhere)rG   r@   rZ   rW   r   rN   r   )r!   r@   rZ   rY   rG   r"   r"   r#   r\         
zDataManager.wherec                 C  s6   |rddg}n	dg}t |dd}| jd|||t dS )NnewmaskTr[   putmask)rG   r`   r_   rW   r]   )r!   r`   r_   rY   rG   r"   r"   r#   ra      r^   zDataManager.putmaskdecimalsrW   c                 C  s   | j d||dS )Nround)rb   rW   )rN   )r!   rb   rW   r"   r"   r#   rc      s
   zDataManager.roundc                 C  s<   t |d}t|rJ t|rJ | jd|||t dS )NrS   replace)
to_replacerU   rS   rW   )r   r
   Zis_list_likerN   r   )r!   re   rU   rS   r"   r"   r#   rd      s   
zDataManager.replacec                 K  s   | j 	di |dt iS )N_replace_regexrW   )rf   rN   r   )r!   rK   r"   r"   r#   replace_regex   s   zDataManager.replace_regexsrc_list	list[Any]	dest_listregexc                 C  s.   t |d}| jd||||t d}|  |S )zdo a list replacerS   replace_list)ri   rk   rS   rl   rW   )r   rN   r   _consolidate_inplace)r!   ri   rk   rS   rl   Zbmr"   r"   r#   rm      s   
	zDataManager.replace_listc                 K      | j 	dd|i|dt iS )NinterpolaterS   rW   )rp   rg   r!   rS   rK   r"   r"   r#   rp     s   zDataManager.interpolatec                 K  ro   )Npad_or_backfillrS   rW   )rr   rg   rq   r"   r"   r#   rr     s   zDataManager.pad_or_backfillperiodsc                 C  s   |t ju rd }| jd||dS )Nshift)rs   r<   )r
   Z
no_defaultrN   )r!   rs   r<   r"   r"   r#   rt     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!  rw   zDataManager.consolidatec                 C  s   d S r   r"   r    r"   r"   r#   rn   $  rw   z DataManager._consolidate_inplace)r   r   )r   r&   )r   r   )r1   r   r2   r   r   r3   )NFTF)
r1   r   r7   r8   r9   r8   r:   r8   r   r   )NF)r>   r   r1   r   r:   r8   r   r   )r@   r   r   r8   )r@   rB   r   r8   r   )rG   rH   r   r   )r   r   )rQ   rR   rS   r8   r   r   )rY   r8   r   r   )T)F)rb   r&   rW   r8   r   r   )rS   r8   r   r   )FF)
ri   rj   rk   rj   rS   r8   rl   r8   r   r   )rs   r&   r   r   )r   r8   r   r3   )__name__
__module____qualname____annotations__propertyr$   r   r)   r+   r0   r6   r=   r?   rA   rC   rL   rN   rP   rT   r\   ra   rc   rd   rh   rm   rp   rr   rt   rv   rx   rn   r"   r"   r"   r#   r   4   sh   
 




	
r   c                   @  sL   e Zd ZedddZeedddZdd	d
Zdd Ze	dddZ
dS )SingleDataManagerr   
Literal[1]c                 C  ru   )Nr4   r"   r    r"   r"   r#   r+   )  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#   array-  s   
zSingleDataManager.arrayr3   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.
        r4   )r   .N)r   rD   npZndarrayr   dtyper+   r(   )r!   r;   rU   arrr"   r"   r#   setitem_inplace6  s   
"z!SingleDataManager.setitem_inplacec                 C  s.   | j }||}tt|}t| ||}|S r   )r   r   r(   type
from_array)r!   rO   r   resindexZmgrr"   r"   r#   grouped_reduceN  s
   z SingleDataManager.grouped_reducer   r   r   c                 C  r   r   r   )clsr   r   r"   r"   r#   r   V  r%   zSingleDataManager.from_arrayN)r   r   )r   r   ry   )r   r   r   r   )rz   r{   r|   r~   r+   r   r   r   r   classmethodr   r"   r"   r"   r#   r   (  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)r(   r   )r   r"   r"   r#   interleaved_dtype[  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 )NrB   )rD   r   subtyper   r   r   r   str)r   r"   r"   r#   ensure_np_dtypen  s   



r   )r   r   r   r   )r   r   r   r   ),__doc__
__future__r   typingr   r   r   r   r   numpyr   Zpandas._configr   Zpandas._libsr	   rX   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#   <module>   s(    	 u
3