o
    5c                      @  s   d dl mZ d dl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m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 d d	lmZm Z  erXd dl!Z!ed
ddZ"G dd de Z#dd Z$G dd deZ%dS )    )annotationsN)TYPE_CHECKINGAnyCallableMappingTypeVar)libmissing)DtypeDtypeObjnptAbstractMethodError)cache_readonly)is_bool_dtypeis_float_dtypeis_integer_dtypeis_object_dtypeis_string_dtypepandas_dtype)BaseMaskedArrayBaseMaskedDtypeTNumericArray)boundc                   @  s   e Zd ZU ded< ded< d"ddZed#d
dZed#ddZed#ddZ	d$ddZ
ed%ddZed&ddZed'dd Zd!S )(NumericDtypenp.dtype_default_np_dtypezCallable[[Any], bool]_checkerreturnstrc                 C  s   | j  dS )NzDtype())nameself r$   P/var/www/html/gps/gps/lib/python3.10/site-packages/pandas/core/arrays/numeric.py__repr__3   s   zNumericDtype.__repr__boolc                 C  
   | j dkS )Nikindr"   r$   r$   r%   is_signed_integer6      
zNumericDtype.is_signed_integerc                 C  r(   )Nur*   r"   r$   r$   r%   is_unsigned_integer:   r-   z NumericDtype.is_unsigned_integerc                 C  s   dS )NTr$   r"   r$   r$   r%   _is_numeric>   s   zNumericDtype._is_numericarray$pyarrow.Array | pyarrow.ChunkedArrayr   c                 C  s
  ddl }ddlm} |  }|| j}|j|s7t|j }|j	dvr2t
d|  d|j d||}t||jrA|g}n|j}g }|D ]}	||	| jd\}
}||
 | d	d
}|| qH|sv|tjg | jdtjg tjdS t|dkr|d S ||S )zW
        Construct IntegerArray/FloatingArray from pyarrow Array/ChunkedArray.
        r   N)pyarrow_array_to_numpy_and_mask)r)   r.   fzExpected array of z type, got z instead)dtypeFcopy   )pyarrow%pandas.core.arrays.arrow._arrow_utilsr3   construct_array_typefrom_numpy_dtypetypeequalsr   to_pandas_dtyper+   	TypeErrorcast
isinstanceArraychunksnumpy_dtyper7   appendnpr1   bool_len_concat_same_type)r#   r1   r9   r3   array_classpyarrow_typert_dtyperD   resultsarrdatamasknum_arrr$   r$   r%   __from_arrow__B   s4   


zNumericDtype.__from_arrow__Mapping[str, NumericDtype]c                 C     t | Nr   )clsr$   r$   r%   _str_to_dtype_mappingt   s   z"NumericDtype._str_to_dtype_mappingr5   NumericDtype | str | np.dtypec              
   C  st   t |tr|dr| }t |ts8|  }z|tt| }W |S  ty7 } zt	d| |d}~ww |S )zS
        Convert a string representation or a numpy dtype to NumericDtype.
        )IntUIntFloatzinvalid dtype specified N)
rB   r    
startswithlowerr   rX   rG   r5   KeyError
ValueError)rW   r5   mappingerrr$   r$   r%   _standardize_dtypex   s   
zNumericDtype._standardize_dtypevalues
np.ndarrayr7   c                 C  rU   )z{
        Safely cast the values to the given dtype.

        "safe" in this context means the casting is lossless.
        r   )rW   rd   r5   r7   r$   r$   r%   
_safe_cast   s   zNumericDtype._safe_castN)r   r    )r   r'   )r1   r2   r   r   )r   rT   )r5   rY   r   r   )rd   re   r5   r   r7   r'   r   re   )__name__
__module____qualname____annotations__r&   r   r,   r/   propertyr0   rS   classmethodrX   rc   rf   r$   r$   r$   r%   r   /   s"   
 

2r   c           
      C  s  |j }d }|d u rt| dr|| jr| j}|d ur||}| }t| |rK| j| j} }|d ur;| j|j	dd} |rE| 
 } |
 }| |||fS tj| |d} d }t| js^t| jrtj| dd}|dkrjn>|dkr~|jd}	t| j d	|	 n)t| r||rtj| ||d
} nt| st| s|jd}	t| j d	|	 | jdkrtd|d u rt| }n
t|t| ksJ |jdkrtd|d u r|}n|j}| r| 
 } |j| |< |dv r| j||d} n|j| |dd} | |||fS )Nr5   Fr6   T)skipnaemptyboolean_z cannot be converted to r5   r7   r8   zvalues must be a 1D list-likezmask must be a 1D list-like)stringunicode)r   hasattrr5   rc   r;   rB   _data_maskastyperE   r7   rG   r1   r   r   r   infer_dtyperg   stripr@   r   r   r   ndim
libmissingis_numeric_narI   r=   any_internal_fill_valuerf   )
rd   rQ   r5   r7   	dtype_clsdefault_dtypecheckerinferred_typerW   r!   r$   r$   r%   _coerce_to_data_and_mask   s`   





r   c                      st   e Zd ZU dZded< 	d d! fddZed"ddZeddd#ddZ	edddd$ddZ
ejejfZ  ZS )%r   z8
    Base class for IntegerArray and FloatingArray.
    ztype[NumericDtype]
_dtype_clsFrd   re   rQ   npt.NDArray[np.bool_]r7   r'   r   Nonec                   sl   | j j}t|tjr||js!| j jdkrdnd}td| d|jtjkr+tdt	 j
|||d d S )Nr4   floatingintegerzvalues should be z1 numpy array. Use the 'pd.array' function insteadz0FloatingArray does not support np.float16 dtype.r6   )r   r   rB   rG   ndarrayr5   r+   r@   float16super__init__)r#   rd   rQ   r7   r   descr	__class__r$   r%   r      s   

zNumericArray.__init__r   c                 C  s   | j  }|t| jj S rV   )r   rX   r    ru   r5   )r#   ra   r$   r$   r%   r5      s   
zNumericArray.dtyper6   r5   r   tuple[np.ndarray, np.ndarray]c          	      C  s2   | j }|j}d }t||||||\}}}}||fS rV   )r   r   r   )	rW   valuer5   r7   r   r   rQ   rd   rp   r$   r$   r%   _coerce_to_array   s   zNumericArray._coerce_to_arrayNrq   rW   type[T]Dtype | Noner   c                C  s(   ddl m} ||dd}| j|||dS )Nr   )
to_numericraise)errorsrq   )pandas.core.tools.numericr   _from_sequence)rW   stringsr5   r7   r   scalarsr$   r$   r%   _from_sequence_of_strings  s   z&NumericArray._from_sequence_of_strings)F)rd   re   rQ   r   r7   r'   r   r   )r   r   )r5   r   r7   r'   r   r   )rW   r   r5   r   r7   r'   r   r   )rg   rh   ri   __doc__rj   r   r   r5   rl   r   r   rG   r   numbersNumber_HANDLED_TYPES__classcell__r$   r$   r   r%   r      s   
 )&
__future__r   r   typingr   r   r   r   r   numpyrG   pandas._libsr   r	   r{   pandas._typingr
   r   r   pandas.errorsr   pandas.util._decoratorsr   pandas.core.dtypes.commonr   r   r   r   r   r   pandas.core.arrays.maskedr   r   r9   r   r   r   r   r$   r$   r$   r%   <module>   s      	eG