o
    5c
A                     @  s  d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
mZ d dlZd dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d d	l m!Z! d d
l"m#Z#m$Z$m%Z% d dl&m'Z'm(Z( d dl)m*Z*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@ e	dddZAerd dlmBZBmCZC d dlDmEZE d!ddZFG d d dee:ZGdS )"    )annotations)wraps)TYPE_CHECKINGAnyLiteralSequenceTypeVarcastoverloadN)lib)NDArrayBacked)	ArrayLikeDtypeFPositionalIndexer2DPositionalIndexerTupleScalarIndexerSequenceIndexerShapeTakeIndexernpttype_tAbstractMethodError)doc)validate_bool_kwargvalidate_fillna_kwargsvalidate_insert_loc)is_dtype_equalpandas_dtype)DatetimeTZDtypeExtensionDtypePeriodDtype)array_equivalent)missing)takeuniquevalue_counts)quantile_with_mask)shift)ExtensionArray)extract_array)check_array_indexer)
nargminmaxNDArrayBackedExtensionArrayTNDArrayBackedExtensionArray)bound)NumpySorterNumpyValueArrayLike)Seriesmethr   returnc                   s   t   fdd}tt|S )z~
    Decorator to ravel a 2D array before passing it to a cython operation,
    then reshape the result to our own shape.
    c                   sf   | j dkr | g|R i |S | jj}| d} |g|R i |}|jr)dnd}|j| j|dS )N   Kr   C)order)ndim_ndarrayflagsravelf_contiguousreshapeshape)selfargskwargsr<   flatresultr9   r4    P/var/www/html/gps/gps/lib/python3.10/site-packages/pandas/core/arrays/_mixins.pymethodR   s   

zravel_compat.<locals>.method)r   r	   r   )r4   rI   rG   rF   rH   ravel_compatL   s   

rJ   c                   @  s  e Zd ZU dZded< ded< dd Zdd	 ZdydzddZdd
ddd{ddZd|dd Z	e
d!d" Zd}d#d$Zd%d& Zd~dd)d*Zd~dd+d,Zdd-d.Ze
eej	ddd3d4Zeej	5	
ddd=d>Zdd@dAZeejddCdDZdEdF ZddHdIZdJdK ZeddNdOZeddQdOZddTdOZddYdZZeej	
ddd[d\Zdd^d_Zdd`daZddbdcZ ddedfZ!dddidjZ"ddndoZ#ddqdrZ$e
ddwdxZ%d
S )r/   zB
    ExtensionArray that is backed by a single NumPy ndarray.
    
np.ndarrayr;   r   _internal_fill_valuec                 C     |S )zA
        Wrap numpy type in our dtype.type if necessary.
        rG   )rA   xrG   rG   rH   	_box_funcm   s   z%NDArrayBackedExtensionArray._box_funcc                 C  s   t | Nr   rA   valuerG   rG   rH   _validate_scalars   s   z,NDArrayBackedExtensionArray._validate_scalarNdtypeDtype | Noner5   r   c                 C  s   |d u s	|| j u r| | jS t|tr| j|S t|}| j}t|ttfr5|	 }||d|dS |dkrHddl
m} ||d|dS |dkr[ddl
m} ||d|dS |j|dS )Ni8rT   zM8[ns]r   )DatetimeArrayzm8[ns])TimedeltaArray)rT   _from_backing_datar;   
isinstancetypeviewr   r"   r    construct_array_typepandas.core.arraysrX   rY   )rA   rT   arrclsrX   rY   rG   rG   rH   r]   y   s    
z NDArrayBackedExtensionArray.viewFr   
allow_fill
fill_valueaxisrA   r.   indicesr   rc   boolrd   re   intc                C  s,   |r|  |}t| j||||d}| |S )Nrb   )rS   r%   r;   rZ   )rA   rf   rc   rd   re   new_datarG   rG   rH   r%      s   

z NDArrayBackedExtensionArray.takec                 C  s8   t | t |ur
dS t| j|jsdS tt| j|jS )NF)r\   r   rT   rg   r#   r;   )rA   otherrG   rG   rH   equals   s
   z"NDArrayBackedExtensionArray.equalsc                 C  s   |j |jj ks	J ||S rP   )rT   r;   rZ   )ra   valuesoriginalrG   rG   rH   _from_factorized   s   
z,NDArrayBackedExtensionArray._from_factorizedc                 C  s   | j S rP   r;   rA   rG   rG   rH   _values_for_argsort   s   z/NDArrayBackedExtensionArray._values_for_argsortc                 C  s   | j | jfS rP   )r;   rL   rp   rG   rG   rH   _values_for_factorize   s   z1NDArrayBackedExtensionArray._values_for_factorizeTskipnac                 C  &   t |d |s| jrtt| d|dS )Nrs   argminre   r   _hasnaNotImplementedErrorr-   rA   re   rs   rG   rG   rH   ru         

z"NDArrayBackedExtensionArray.argminc                 C  rt   )Nrs   argmaxrv   rw   rz   rG   rG   rH   r|      r{   z"NDArrayBackedExtensionArray.argmaxc                 C  s   t | j}| |S rP   )r&   r;   rZ   )rA   ri   rG   rG   rH   r&      s   

z"NDArrayBackedExtensionArray.uniquera   "type[NDArrayBackedExtensionArrayT]	to_concat&Sequence[NDArrayBackedExtensionArrayT]c                 C  sN   dd |D }t |dkrtd|dd |D }tj||d}|d |S )	Nc                 S  s   h | ]}t |jqS rG   )strrT   .0rN   rG   rG   rH   	<setcomp>   s    z@NDArrayBackedExtensionArray._concat_same_type.<locals>.<setcomp>r6   z'to_concat must have the same dtype (tz)c                 S  s   g | ]}|j qS rG   ro   r   rG   rG   rH   
<listcomp>   s    zANDArrayBackedExtensionArray._concat_same_type.<locals>.<listcomp>rv   r   )len
ValueErrornpconcatenaterZ   )ra   r~   re   dtypes
new_valuesnew_arrrG   rG   rH   _concat_same_type   s   
z-NDArrayBackedExtensionArray._concat_same_typeleftrR   $NumpyValueArrayLike | ExtensionArraysideLiteral['left', 'right']sorterr1   npt.NDArray[np.intp] | np.intpc                 C  s   |  |}| jj|||dS )N)r   r   )_validate_searchsorted_valuer;   searchsorted)rA   rR   r   r   npvaluerG   rG   rH   r      s   
	z(NDArrayBackedExtensionArray.searchsortedr2   c                 C  s   t |tr	| S |S rP   )r[   r*   to_numpyrQ   rG   rG   rH   r      s   
z8NDArrayBackedExtensionArray._validate_searchsorted_valuer6   c                 C  s$   |  |}t| j|||}| |S rP   )_validate_shift_valuer)   r;   rZ   )rA   periodsrd   re   r   rG   rG   rH   r)      s   

z!NDArrayBackedExtensionArray.shiftc                 C  s
   |  |S rP   )rS   )rA   rd   rG   rG   rH   r     s   
z1NDArrayBackedExtensionArray._validate_shift_valueNonec                 C  s"   t | |}| |}|| j|< d S rP   )r,   _validate_setitem_valuer;   )rA   keyrR   rG   rG   rH   __setitem__  s   

z'NDArrayBackedExtensionArray.__setitem__c                 C  rM   rP   rG   rQ   rG   rG   rH   r     s   z3NDArrayBackedExtensionArray._validate_setitem_valuer   r   c                 C     d S rP   rG   rA   r   rG   rG   rH   __getitem__  s   z'NDArrayBackedExtensionArray.__getitem__(SequenceIndexer | PositionalIndexerTuplec                 C  r   rP   rG   r   rG   rG   rH   r        r   "NDArrayBackedExtensionArrayT | Anyc                 C  st   t |r| j| }| jdkr| |S | |S t|dd}t| |}| j| }t |r3| |S | |}|S )Nr6   T)extract_numpy)	r   
is_integerr;   r:   rO   rZ   r+   r,   	is_scalar)rA   r   rE   rG   rG   rH   r     s   









rI   r   masknpt.NDArray[np.bool_]c                 C  s(   t j|| jd}|| jj||jd d S )Nr:   limitr   )r$   get_fill_funcr:   r;   T)rA   rI   r   r   funcrG   rG   rH   _fill_mask_inplace1  s   z.NDArrayBackedExtensionArray._fill_mask_inplacec                 C  s   t ||dd\}}|  }t||t| }| rH|d ur>tj|| jd}| jj	
 }||||j	d |j	}| |}|S | 
 }|||< |S |d urQ| | | 
 }|S )NF)validate_scalar_dict_valuer   r   )r   isnar$   check_value_sizer   anyr   r:   r;   r   copyrZ   r   )rA   rR   rI   r   r   r   npvaluesr   rG   rG   rH   fillna9  s,   



z"NDArrayBackedExtensionArray.fillna
int | Nonec                 C  s&   |d u s	| j dkr| |S | |S )Nr6   )r:   rO   rZ   )rA   re   rE   rG   rG   rH   _wrap_reduction_resultb  s   

z2NDArrayBackedExtensionArray._wrap_reduction_resultc                 C  s   |  |}t| j|| dS )a	  
        Analogue to np.putmask(self, mask, value)

        Parameters
        ----------
        mask : np.ndarray[bool]
        value : scalar or listlike

        Raises
        ------
        TypeError
            If value cannot be cast to self.dtype.
        N)r   r   putmaskr;   )rA   r   rR   rG   rG   rH   _putmaskj  s   
z$NDArrayBackedExtensionArray._putmaskc                 C  s$   |  |}t|| j|}| |S )a  
        Analogue to np.where(mask, self, value)

        Parameters
        ----------
        mask : np.ndarray[bool]
        value : scalar or listlike

        Raises
        ------
        TypeError
            If value cannot be cast to self.dtype.
        )r   r   wherer;   rZ   )rA   r   rR   
res_valuesrG   rG   rH   _where|  s   

z"NDArrayBackedExtensionArray._wherelocc                 C  sV   t |t| }| |}t| jd| tj|g| jjd| j|d f}| |S )a  
        Make new ExtensionArray inserting new item at location. Follows
        Python list.append semantics for negative values.

        Parameters
        ----------
        loc : int
        item : object

        Returns
        -------
        type(self)
        NrW   )	r   r   rS   r   r   r;   asarrayrT   rZ   )rA   r   itemcodenew_valsrG   rG   rH   insert  s   

z"NDArrayBackedExtensionArray.insertdropnar3   c                 C  s~   | j dkrtddlm}m} |r| |    j}n| j}t|d|d}| t	
|jj}|||jjd}||j||jdS )z
        Return a Series containing counts of unique values.

        Parameters
        ----------
        dropna : bool, default True
            Don't include counts of NA values.

        Returns
        -------
        Series
        r6   r   )Indexr3   F)sortr   )name)indexr   )r:   ry   pandasr   r3   r   r;   r'   rZ   r   r   r   _datar   _values)rA   r   r   r3   rl   rE   	index_arrr   rG   rG   rH   r'     s   
z(NDArrayBackedExtensionArray.value_countsqsnpt.NDArray[np.float64]interpolationc                 C  s>   t |  }| j}| j}t|||||}| |}| |S rP   )r   r   r   r;   rL   r(   _cast_quantile_resultrZ   )rA   r   r   r   r`   rd   r   rG   rG   rH   	_quantile  s   

z%NDArrayBackedExtensionArray._quantiler   c                 C  rM   )z
        Cast the result of quantile_with_mask to an appropriate dtype
        to pass to _from_backing_data in _quantile.
        rG   )rA   r   rG   rG   rH   r     r   z1NDArrayBackedExtensionArray._cast_quantile_result$type_t[NDArrayBackedExtensionArrayT]r@   r   r!   c                 C  s*   | j g |d}tj||jjd}||S )z
        Analogous to np.empty(shape, dtype=dtype)

        Parameters
        ----------
        shape : tuple[int]
        dtype : ExtensionDtype
        rW   )_from_sequencer   emptyr;   rT   rZ   )ra   r@   rT   r`   backingrG   rG   rH   _empty  s   
z"NDArrayBackedExtensionArray._emptyrP   )rT   rU   r5   r   )rA   r.   rf   r   rc   rg   rd   r   re   rh   r5   r.   )r5   rg   )r5   rK   )r   T)re   rh   rs   rg   )rA   r.   r5   r.   )r   )ra   r}   r~   r   re   rh   r5   r.   )r   N)rR   r   r   r   r   r1   r5   r   )rR   r   r5   r2   )r6   Nr   )r5   r   )r   r   r5   r   )rA   r.   r   r   r5   r.   )rA   r.   r   r   r5   r   )rI   r   r   r   r5   r   )NNN)re   r   )r   r   r5   r   )rA   r.   r   r   r5   r.   )rA   r.   r   rh   r5   r.   )T)r   rg   r5   r3   )rA   r.   r   r   r   r   r5   r.   )r   rK   r5   rK   )ra   r   r@   r   rT   r!   r5   r.   )&__name__
__module____qualname____doc____annotations__rO   rS   r]   r%   rk   classmethodrn   rq   rr   ru   r|   r&   r   r*   r   r   r   r)   r   r   r   r
   r   r   r   r   r   r   r   r'   r   r   r   rG   rG   rG   rH   r/   `   sf   
 %









(


"
!

)r4   r   r5   r   )H
__future__r   	functoolsr   typingr   r   r   r   r   r	   r
   numpyr   pandas._libsr   pandas._libs.arraysr   pandas._typingr   r   r   r   r   r   r   r   r   r   r   pandas.errorsr   pandas.util._decoratorsr   pandas.util._validatorsr   r   r   pandas.core.dtypes.commonr   r   pandas.core.dtypes.dtypesr    r!   r"   pandas.core.dtypes.missingr#   pandas.corer$   pandas.core.algorithmsr%   r&   r'    pandas.core.array_algos.quantiler(   "pandas.core.array_algos.transformsr)   pandas.core.arrays.baser*   pandas.core.constructionr+   pandas.core.indexersr,   pandas.core.sortingr-   r.   r1   r2   r   r3   rJ   r/   rG   rG   rG   rH   <module>   s:    $
4
