
    i&                        d dl mZ d dlZd dl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mZ d d	lmZmZ erd d
lmZmZ d dlZd dlmZm Z  d dl!m"Z"  G d de      Z#ddZ$ G d de      Z%y)    )annotationsN)TYPE_CHECKINGAnySelf)	is_nan_na)libmissingAbstractMethodError)cache_readonly)is_integer_dtypeis_string_dtypepandas_dtype)BaseMaskedArrayBaseMaskedDtype)CallableMapping)DtypeObjnpt)ExtensionDtypec                      e Zd ZU ded<   ded<   ddZedd       Zedd       Zedd       Z		 	 	 	 dd	Z
edd
       Zedd       Zedd       Zy)NumericDtypenp.dtype_default_np_dtypezCallable[[Any], bool]_checkerc                     | j                    dS )NzDtype())nameselfs    W/app/cer_product_mecsu/.venv/lib/python3.12/site-packages/pandas/core/arrays/numeric.py__repr__zNumericDtype.__repr__4   s    ))G$$    c                     | j                   dk(  S )Nikindr   s    r    is_signed_integerzNumericDtype.is_signed_integer7       yyCr"   c                     | j                   dk(  S )Nur%   r   s    r    is_unsigned_integerz NumericDtype.is_unsigned_integer;   r(   r"   c                     y)NT r   s    r    _is_numericzNumericDtype._is_numeric?   s    r"   c                   ddl }ddlm} | j                         } |j                  | j
                        }|j
                  j                  |      s|j                  j                  |j
                        s^t        |j
                  j                               }|j                  dvrt        d|  d|j
                   d      |j                  |      }t        ||j                        r|j!                         } ||| j"                        \  }}|j$                  j                  d	k(  r"t'               rd
|t)        j*                  |      <    ||j-                         | d
      S )zW
        Construct IntegerArray/FloatingArray from pyarrow Array/ChunkedArray.
        r   N)pyarrow_array_to_numpy_and_maskiufzExpected array of z type, got z insteaddtypefFcopy)pyarrow%pandas.core.arrays.arrow._arrow_utilsr0   construct_array_typefrom_numpy_dtypetypeequalstypesis_nullr   to_pandas_dtyper&   	TypeErrorcast
isinstanceChunkedArraycombine_chunksnumpy_dtyper3   r   npisnanr6   )	r   arrayr7   r0   array_classpyarrow_typert_dtypedatamasks	            r    __from_arrow__zNumericDtype.__from_arrow__C   s'    		
 //1/w//		:zz  .w}}7L7LJJ8

 $EJJ$>$>$@AH}}E)  (k%**XN  JJ|,EeW112((*E4U$BRBRS
d::??c!ik#(D$ 499;E::r"   c                    t        |       Nr
   )clss    r    _get_dtype_mappingzNumericDtype._get_dtype_mappingi   s    !#&&r"   c                   t        |t              r!|j                  d      r|j                         }t        |t              s+| j                         }	 |t        j                  |         }|S |S # t        $ r}t        d|       |d}~ww xY w)zS
        Convert a string representation or a numpy dtype to NumericDtype.
        )IntUIntFloatzinvalid dtype specified N)
rB   str
startswithlowerr   rR   rF   r3   KeyError
ValueError)rQ   r3   mappingerrs       r    _standardize_dtypezNumericDtype._standardize_dtypem   s    
 eS!u'7'78P'Q KKME%.,,.GN0 u  N #;E7!CD#MNs   A/ /	B8BBc                    t        |       )z{
        Safely cast the values to the given dtype.

        "safe" in this context means the casting is lossless.
        r
   )rQ   valuesr3   r6   s       r    
_safe_castzNumericDtype._safe_cast   s     "#&&r"   N)returnrW   )rb   bool)rH   z$pyarrow.Array | pyarrow.ChunkedArrayrb   r   )rb   zMapping[np.dtype, NumericDtype])r3   zNumericDtype | str | np.dtyperb   r   )r`   
np.ndarrayr3   r   r6   rc   rb   rd   )__name__
__module____qualname____annotations__r!   r   r'   r+   propertyr.   rN   classmethodrR   r^   ra   r-   r"   r    r   r   0   s    ##%          $;9$;	$;L ' '  " ' 'r"   r   c                
   |j                   }|j                  }d }d }|*t        | d      r || j                        r| j                  }||j	                  |      } |       j                         }t        | |      r]| j                  | j                  }} || j                  |j                  d      } |r | j                         } |j                         }| |fS | }	|st        j                  |       } nt        j                  | |      } d }| j                  t        k(  st!        | j                        rUt#        j$                  | d      }|dk(  r||j&                  j)                  d      }
t+        | j                   d|
       | j                  j,                  d	k(  ri ||      rat        j.                  t1        |       t        j2                  
      }|st        j                  | |
      } nft        j                  | ||      } nM| j                  j,                  dvr5|j&                  j)                  d      }
t+        | j                   d|
       | j4                  dk7  rt+        d      |T| j                  j,                  dv r0t        j.                  t1        |       t        j2                  
      }n%| j                  j,                  dk(  rt7               rt        j8                  |       }nt        j.                  t1        |       t        j2                  
      }|j&                  j)                  d      j;                  d      rt        j8                  |       }|j=                         rot?        d      t7               rtA        jB                  |       }nDtA        jB                  |        tA        jD                  |       }nt1        |      t1        |       k(  sJ |j4                  dk7  rt+        d      ||}n|j                  }tG        |      r| j                  j,                  dk(  rt1        |       dkD  r|jI                         r"t        jJ                  | jL                  |
      } nt        jN                  |       }tQ        | |         |	|   k7  rZt#        j$                  |	d      }|dvr(|j=                         st        j                  |	|
      } nt        j                  |	d
      } |j=                         r| j                         } |jR                  | |<   |dv r| j                  ||      } | |fS |jU                  | |d      } | |fS )Nr3   Fr5   T)skipnaboolean_z cannot be converted to br2   r3   r6   r1      zvalues must be a 1D list-likeiur4   )IUz'Cannot cast NaN value to Integer dtype.zmask must be a 1D list-liker   )floatingzmixed-integer-floatobject)stringunicode)+r   r   hasattrr3   r^   r9   rB   _data_maskastyperE   r6   rF   asarrayrH   rv   r   r   infer_dtypere   stripr@   r&   zeroslenbool_ndimr   rG   rX   anyr[   
libmissingis_numeric_nais_pdna_or_noner   allonesshape	nanargmaxint_internal_fill_valuera   )r`   r3   r6   	dtype_clscheckerdefault_dtyperM   inferred_typerQ   originalr   wrongidxs                r    _coerce_to_data_and_maskr      sE     G//MDM}16<< LLE,,U3
+
*
*
,C&#||V\\]]5#4#45]AF[[]F99;Dt|HF#&t,M||v!>t<I%%-%%++C0Dv||n,DTFKLL			c	!genxxF2884ZZm<FXXfMEF			%	'!!'',6<<.(@GHH{{a788|<<$88CKrxx8D\\#% {xx'xxF288<%%++C0;;JGHHV,Eyy{()RSS[++F3D $$V,--f5D4yCK'''yyA~566 }!!6<<#4#4#;Fa88:WWV\\7F,,v&C6#;8C=0 # F!)LL HHJZZ>FZZAF xxz 55t-- u40 4< %%fe%%@4<r"   c                       e Zd ZU dZded<   	 d
	 	 	 	 	 	 	 d fdZedd       Zedd	 	 	 	 	 dd       Z	edd	 	 	 	 	 dd	       Z
ej                  ej                  fZ xZS )NumericArrayz8
    Base class for IntegerArray and FloatingArray.
    type[NumericDtype]
_dtype_clsFc                V   | 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        | )  |||       y )Nr4   ru   integerzvalues should be z1 numpy array. Use the 'pd.array' function insteadz0FloatingArray does not support np.float16 dtype.r5   )r   r   rB   rF   ndarrayr3   r&   r@   float16super__init__)r   r`   rM   r6   r   descr	__class__s         r    r   zNumericArray.__init__  s     //**62::.76<<3H ??''3.  
 #E7 +2 2  <<2::%NOO 	D1r"   c                h    | j                   j                         }|| j                  j                     S rP   )r   rR   rz   r3   )r   r\   s     r    r3   zNumericArray.dtype  s)    //446tzz''((r"   r5   c               D    | j                   }t        ||||      \  }}||fS rP   )r   r   )rQ   valuer3   r6   r   r`   rM   s          r    _coerce_to_arrayzNumericArray._coerce_to_array   s+     NN	/udINt|r"   c               L    ddl m}  ||dd      }| j                  |||      S )Nr   )
to_numericraisenumpy_nullable)errorsdtype_backendrp   )pandas.core.tools.numericr   _from_sequence)rQ   stringsr3   r6   r   scalarss         r    _from_sequence_of_stringsz&NumericArray._from_sequence_of_strings(  s.     	9WWDTU!!'T!BBr"   )F)r`   rd   rM   znpt.NDArray[np.bool_]r6   rc   rb   None)rb   r   )r3   r   r6   rc   rb   ztuple[np.ndarray, np.ndarray])r3   r   r6   rc   rb   r   )re   rf   rg   __doc__rh   r   r   r3   rj   r   r   rF   r   numbersNumber_HANDLED_TYPES__classcell__)r   s   @r    r   r      s     #" MR2 2(=2EI2	20 ) ) 5:&.2	&  =BC .C6:C	C C jj'..1Nr"   r   )r6   rc   r   r   )&
__future__r   r   typingr   r   r   numpyrF   pandas._configr   pandas._libsr   r	   r   pandas.errorsr   pandas.util._decoratorsr   pandas.core.dtypes.commonr   r   r   pandas.core.arrays.maskedr   r   collections.abcr   r   r7   pandas._typingr   r   pandas.core.dtypes.dtypesr   r   r   r   r-   r"   r    <module>r      st    "    $ . 2 
 
 
 9V'? V'rpf52? 52r"   