U
    NZfn                  1   @   s  d dl Z d dlZd dlmZ d dlZd dlZd dlmZmZm	Z	m
Z
mZ d dlmZ ejddddgddd	 Zejd
dgddd Zejdd egddgddd Zejddgddd Zejd
dgddd Zejdd ejfdd ejfdd ejfgddd Zejd i d!ejifdd"d#d!ejifgd$d% Zejd&d'd(gd)d* Zejd+d,d-d.d/gd0d1d2d3gd
dd
d
ggd4d5 Z ejd6d,d7d8gd9fd:d,d7d8gd;fgd<d= Z!ejd>dd,d7d8gfdd,d7ej"gfgd?d@ Z#ejdAdBdd
dd8gfdd0dCej"gfgdDdE Z$dFdG Z%ejdHd,d-d.d/gd!ejifd0d1d2d3gi fd
dd
d
gi fgdIdJ Z&ejdKd!dLii gdMdN Z'ejdOdPdPdQggdRdS Z(ejdTe )dUd0ge )dVdWgdUd0gdVdWgfe*e )dUd0gdWgdUd0gdWgfgdXdY Z+dZd[ Z,d\d] Z-ejd^d,d_d`gdadb Z.dcdd Z/dedf Z0dgdh Z1ejdidjddkd fddld fgdmdn Z2ejd+d,dod-gd0ej"d-ej"ggdpdq Z3ejdrdsdtdugej*d,dod-gdvdwfdxdydzge*d{d|d}gfgd~d Z4dd Z5dd Z6dd Z7ejddde
ddogd0d8gfde
ej"d0ej"gfgdd Z8dd Z9dd Z:ejd+dsdod-gd,dod-gej*dddgddwgejdi ejfddiejfddie;ej<j=fddie;ej>d d  fgdd Z?ejdd"dgejd+dsdod-gd,dod-gej*dddgddwgdd Z@dd ZAdd ZBejCdejdd"ddgejdddod-gej*d_dod-gejDdwfddddddgej*ddddddgejDdwfgdd ZEejdd"ejFfdejFfdejGfgdd ZHejddd"eejjIeejjJgfdd"eejFjIeejFjJgfdd"eejKjIeejKjJgfdvd"eejjIeejjJgfddeejLjIeejLjJgfddeejGjIeejGjJgfddeejMjIeejMjJgfddeejNjIeejNjJgfdd"eejjIeejjJd, gfdd"eejFjIeejFjJd, gfdvd"eejKjIeejKjJd, gfdd"eejjId, eejFjJgfdd"eejFjId, eejKjJgfdvd"eejKjId, eejjJgfddeejLjIeejLjJd, gfddeejGjIeejGjJd, gfddeejMjIeejMjJd, gfgdd ZOdd ZPejde
d dge
d dgejNdwfgdd ZQejdTdddddgddej"ej"dgfdddgddej"gfgddʄ ZRejdAde
dddgfdgdd̈́ ZSejdd"ddgejdd"ddgddф ZTddӄ ZUejddddddddddddddddddddddddddddddddddddddddddddd ddg.dd ZVejddsdtdge
d,doej"gddwfdsdtduge
d,dod-gddwfdsdtd-ge
d,dod-gddwfdsdtdge
d,dodgddwfdsddge
d,ej"dgddwfdsdtd	ge
d,dodgddwfgd
d ZWdd ZXdd ZYejdd,d,gdd"dfd0ejZgdd"dfd0d_gdd"dfd,ejZgdd"dfddgdd"dfd,d,gdd"dfeejjJd, d,gdd"dfd,d,gdddfd0d0gdddfd0d_gdddfd,ejZgdddfddgdddfeejNjJd, d,gdddfd,d,gdddfd0d0gdddfd0d_gdddfd,ejZgdddfddgdddfddgdddfd,d,gdddfd,d_gdddfd,d,gdddfd,d_gdddffdd Z[dd Z\dd Z]ejd^d d!gd"d# Z^ejd$d%d&d'gd(d) Z_ejd$d%d&d'd*d+d,gd-d. Z`ejd/d0d1d2d3d4d5gd6d7 Zaejd8dd9gd:d;ggd<d= Zbejd!dddd>d?d@dAdBgdCdD ZcdEdF ZddGdH ZedIdJ ZfdS (K      N)iinfo)
ArrowDtype	DataFrameIndexSeries
to_numericignoreraisecoerce)paramsc                 C   s   | j S Nparamrequest r   F/tmp/pip-unpacked-wheel-nbcvw55c/pandas/tests/tools/test_to_numeric.pyerrors   s    r   TFc                 C   s   | j S r   r   r   r   r   r   signed   s    r   c                 C   s   | S r   r   xr   r   r   <lambda>       r   identitystr)r   idsc                 C   s   | j S r   r   r   r   r   r   	transform   s    r   l   N"2) l      Fx:^V c                 C   s   | j S r   r   r   r   r   r   	large_val!   s    r   c                 C   s   | j S r   r   r   r   r   r   multiple_elts&   s    r   c                 C   s   t | ddS )Nidxname)r   r   r   r   r   r   -   r   c                 C   s   t | ddS )Nserr    )r   r   r   r   r   r   .   r   c                 C   s   t t| jS r   )nparrayr   valuesr   r   r   r   r   /   r   c                 C   s   | j S r   r   r   r   r   r   transform_assert_equal+   s    r&   zinput_kwargs,result_kwargsdtypeintegerr   downcastc                 C   s4   t g td}t|f| }t g f|}t|| d S Nr'   r   objectr   tmassert_series_equal)Zinput_kwargsZresult_kwargsr"   resultexpectedr   r   r   
test_empty6   s    	r3   last_val7   c                 C   s4   t dd| g}t|}t dddg}t|| d S )N1-3.14   Q	r6   r   r   r/   r0   )r4   r"   r1   r2   r   r   r   test_seriesF   s    r<   datar9                  ?      @      @g      @c                 C   s*   t | tddd}t|}t|| d S )NABCDZEFG)indexr!   )r   listr   r/   r0   )r=   r"   r1   r   r   r   test_series_numericO   s    
rG   zdata,msgr:   apple,Unable to parse string "apple" at position 2Zorangez-Unable to parse string "orange" at position 0c              	   C   s2   t | }tjt|d t|dd W 5 Q R X d S )Nmatchr	   r   r   pytestraises
ValueErrorr   )r=   msgr"   r   r   r   
test_error_   s    rR   zerrors,exp_datac                 C   s2   t dddg}t|| d}t |}t|| d S )Nr9   r:   rH   rL   r;   )r   exp_datar"   r1   r2   r   r   r   test_ignore_errorp   s    rT   z
errors,exp)r	   rI   g        c              	   C   sd   t dddg}t|tr@tjt|d t|| d W 5 Q R X n t|| d}t |}t|| d S )NTFrH   rJ   rL   	r   
isinstancer   rN   rO   rP   r   r/   r0   )r   expr"   r1   r2   r   r   r   test_bool_handling{   s    

rX   c                  C   s2   dddg} t | }tdddg}t|| d S )Nr7   r8   r5   r9   r:   r6   r   r#   r$   r/   assert_numpy_array_equal)r"   resr2   r   r   r   	test_list   s    
r\   zdata,arr_kwargsc                 C   s&   t | }tj| f|}t|| d S r   rY   )r=   Z
arr_kwargsr1   r2   r   r   r   test_list_numeric   s    
r]   kwargsOc                 C   s6   dddg}t |f| }t|}t |}t|| d S )Nr9   r:   r6   r;   )r^   r=   r"   r1   r2   r   r   r   test_numeric   s
    
r`   columnsabc                 C   st   t dtdtddgddddgd	}t ddtjd
gddddgd	}| }||  t|| < t	|| d S )Ng333333?Q	@Zinfinityz0.1rA   g       @rB   rC   rb   rc   皙?)
r   decimalDecimalr#   infcopyapplyr   r/   assert_frame_equal)ra   dfr2   Zdf_copyr   r   r   test_numeric_df_columns   s    
 rn   zdata,exp_datard   g?rf   c                 C   s:   t d| i}|d t|d< t d|i}t|| d S )Nrb   )r   rk   r   r/   rl   )r=   rS   rm   r2   r   r   r   test_numeric_embedded_arr_likes   s    ro   c                  C   s>   t dddg} t| dd}t tjtjtjg}t|| d S )Nrb   rc   cr
   rL   )r   r   r#   nanr/   r0   )r"   r1   r2   r   r   r   test_all_nan   s    rr   c              	   C   sX   t dddgdddgd}| d k	r*d| ini }tjtd	d
 t|f| W 5 Q R X d S )Nr9   r:   r6   456re   r   z	1-d arrayrJ   )r   rN   rO   	TypeErrorr   )r   rm   r^   r   r   r   test_type_check   s    rw   valg?i!N  c                 C   s*   |r
|  n| } t || t| ks&td S r   r   floatAssertionError)rx   r   r   r   r   r   test_scalar   s    r|   c           	   	   C   s   |d k	rd|ini }|r|  n| }||}t |t}|rl|dkrld}tjt|d t|f| W 5 Q R X n,|dkr|rt|n|}tt|f|| d S )Nr   Nr	   #Integer out of range. at position 0rJ   r
   )	rV   r   rN   rO   rP   r   rz   r/   assert_almost_equal)	r   r   r   r   r^   rx   val_is_stringrQ   r2   r   r   r   test_really_large_scalar   s    
r   c              	   C   s  |d k	rd|ini }|r|  n| }||}d}|g||g  }t |t}	|dk}
|dkr|	s`|r|	rjd}nd}tjt|d t|f| W 5 Q R X n|t|f|}|
r|	rt|n|}|g}|r|
r|tj	 t}q|| t
}nt |ttfrtnt
}t|tj||d d S )	Nr   stringr
   r}   r~   z-Unable to parse string "string" at position 1rJ   r,   )rV   r   rN   rO   rP   r   rz   appendr#   rq   r.   intr/   r   r$   )r   r   r   r   r   r^   rx   Z	extra_eltarrr   ZcoercingrQ   r1   Zexp_valr2   	exp_dtyper   r   r   test_really_large_in_arr  s0    

r   c              	   C   s   |d k	rd|ini }t |r |  n| g}|r8|d|  |dkrzt|}d| }tjt|d t|f| W 5 Q R X nFt|f|}|dkrdd |D }	t}
n|}	t}
t	
|tj|	|
d	 d S )
Nr   r   r}   z"Integer out of range. at position rJ   r
   c                 S   s   g | ]}t |qS r   )rz   ).0ir   r   r   
<listcomp>C  s     z7test_really_large_in_arr_consistent.<locals>.<listcomp>r,   )r   insertr   rN   rO   rP   r   rz   r.   r/   r   r#   r$   )r   r   r   r   r^   r   rE   rQ   r1   r2   r   r   r   r   #test_really_large_in_arr_consistent.  s     
r   zerrors,checker)r	   z+Unable to parse string "fail" at position 0c                 C   s   | dkS )Nfailr   r   r   r   r   r   P  r   c                 C   s
   t | S r   )r#   isnanr   r   r   r   r   Q  r   c              	   C   sN   d}t |tr6tjt|d t|| d W 5 Q R X n|t|| dsJtd S )Nr   rJ   rL   )rV   r   rN   rO   rP   r   r{   )r   checkerZscalarr   r   r   test_scalar_failL  s
    	
r      c                 C   s&   |\}}|| } t | }|||  d S r   r   )r=   r&   r   assert_equalr1   r   r   r   test_numeric_dtypes^  s    r   zdata,expr7   23int64r,   z1.5z2.7z3.4      ?g@g333333@c                 C   s*   |\}}t || }||}||| d S r   r   )r=   rW   r&   r   r   r1   r2   r   r   r   test_strg  s    r   c                 C   s<   |\}}t jdd| d}t||}||j}||| d S )NZ20130101r>   )periodstz)pdZ
date_ranger   asi8)Ztz_naive_fixturer&   r   r   r   r1   r2   r   r   r   test_datetime_likev  s
    
r   c                 C   s<   | \}}t jdddd}t||}||j}||| d S )Nz1 daysr>   D)r   freq)r   Ztimedelta_ranger   r   )r&   r   r   r   r1   r2   r   r   r   test_timedelta  s
    
r   c                 C   sb   |\}}t jddddd}||}t|tsB| jtjjdd t	|}||j
}||| d S )Nz2011-01r>   M )r   r   r!   z)Missing PeriodDtype support in to_numeric)reason)r   Zperiod_rangerV   r   nodeZ
add_markerrN   markZxfailr   r   )r   r&   r   r   r   inpr1   r2   r   r   r   test_period  s    

r   zerrors,expected)r	   z!Invalid object type at position 0      $@c              	   C   s`   t ddgddg}t|trDtjt|d t|| d W 5 Q R X nt|| d}t|| d S )Nr   r   rA   rH   rJ   rL   )	r   rV   r   rN   rO   rv   r   r/   r0   )r   r2   r"   r1   r   r   r   test_non_hashable  s    

r   c               	   C   s<   dddg} d}d}t jt|d t| |d W 5 Q R X d S )Nr7   r   r>   zunsigned-integerz#invalid downcasting method providedrJ   r*   rN   rO   rP   r   )r=   Zinvalid_downcastrQ   r   r   r   test_downcast_invalid_cast  s
    
r   c               	   C   s<   dddg} d}d}t jt|d t| |d W 5 Q R X d S )Nr7   r   r>   invalidzinvalid error value specifiedrJ   rL   r   )r=   Zinvalid_error_valuerQ   r   r   r   test_errors_invalid_value  s
    
r   z
1970-01-02z
1970-01-03z
1970-01-04zdatetime64[D]zkwargs,exp_dtyper*   rz   unsignedZUnsignedIntegerc                 C   s0   t | f|}tjdddg|d}t|| d S )Nr9   r   r>   r,   rY   )r=   r^   r   r1   r2   r   r   r   test_downcast_basic  s    r   signed_downcastc                 C   sD   t t jd d }t jdddg|d}t| |d}t|| d S )NZIntegerr   r9   r   r>   r,   r   )r#   r'   	typecodesr$   r   r/   rZ   )r=   r   Zsmallest_int_dtyper2   r[   r   r   r   test_signed_downcast  s    r   c                  C   s6   dddg} t j| td}t| ddd}t|| d S )NZfoor   r>   r,   r   r   r)   )r#   r$   r.   r   r/   rZ   r=   r2   r[   r   r   r   !test_ignore_downcast_invalid_data  s    
r   c                  C   s<   dddg} t jdddgt jd}t| dd}t|| d S )Nz-1r   r>   r,   r   r   )r#   r$   r   r   r/   rZ   r   r   r   r   $test_ignore_downcast_neg_to_unsigned  s    
r   z7ignore:invalid value encountered in cast:RuntimeWarningzdata,expectedz1.1g     @i N  i  gR@iP  g     j@c                 C   s   t | |d}t|| d S Nr   )r   r/   rZ   )r=   r2   r*   r[   r   r   r   )test_ignore_downcast_cannot_convert_float  s    r   zdowncast,expected_dtypec                 C   s:   dddg}t jdddg|d}t|| d}t|| d S )NZ256i  i     r,   r   )r#   r$   r   r/   rZ   )r*   expected_dtyper=   r2   r[   r   r   r   test_downcast_not8bit  s    
r   zdtype,downcast,min_maxint8int16int32uint8uint16uint32uint64c                 C   s"   t t||d}|j| kstd S r   )r   r   r'   r{   )r'   r*   Zmin_maxseriesr   r   r   test_downcast_limits$  s    r   c                  C   s@   t dttjjtjgtjd} t| dd}| j|jks<td S )Ng     pAr,   rz   r   )	r   r#   Zfinfofloat64maxrq   r   r'   r{   )r   r1   r   r   r    test_downcast_float64_to_float32@  s     r   zser,expectedl            c                 C   s   t | dd}t|| d S )Nr   r   )r   r/   r0   )r"   r2   r1   r   r   r   test_downcast_uint64H  s    r      i,  r   NaNl     p;6$ 12345678901234567890
1234567890ITEMl   
>V3&Z
 iIc                 C   s,   t t| dd}t|td}t|| d S )Nr
   rL   r,   )r   r   rz   r/   r0   )r=   rS   r1   r2   r   r   r   test_coerce_uint64_conflictZ  s    r   )r	   Unable to parse stringc              	   C   s\   t dddg}t|tr@tjt|d t|| d W 5 Q R X nt|| d}t|| d S )Nr   r   r   rJ   rL   rU   )r   rW   r"   r1   r   r   r   test_non_coerce_uint64_conflictq  s    
r   dc1dc2c                 C   s$   t jtg | dtg |ddd d S )Nr   F)Zcheck_dtype)r/   rZ   r   )r   r   r   r   r   test_downcast_empty  s
    

r   c                  C   sP   t ddd} t| sttddtjg}t tdddgdd} t| | d S )Nr   r
   rL       @   Z32Z64)r   r#   r   r{   r   rq   r/   r0   )r1   r"   r   r   r   ,test_failure_to_convert_uint64_string_to_NaN  s
    r   strrepz243.164z245.968z249.585z259.745z265.742z272.567z279.196z280.366z275.034z271.351z272.889z270.627z280.828z290.383z308.153z319.945z336.0z344.09z351.385z356.178z359.82z361.03z367.701z380.812z387.98z391.749z391.171z385.97z385.345z386.121z390.996z399.734z413.073z421.532z430.221z437.092z439.746z446.01z451.191z460.463z469.779z472.025z479.49z474.864z467.54z471.978c                 C   s   t | }|t| kstd S r   ry   )r   r1   r   r   r   test_precision_float_conversion  s    5r   zvalues, expectedInt64g      @Float64z3.5c                 C   s$   t | |d}t|}t|| d S r+   r;   )r%   nullable_string_dtyper2   sr1   r   r   r   $test_to_numeric_from_nullable_string  s    r   c                 C   sB   ddg}t || d}t|dd}t tjdgdd}t|| d S )Nrb   r7   r,   r
   rL   r9   r   )r   r   r   NAr/   r0   )r   r%   r"   r1   r2   r   r   r   +test_to_numeric_from_nullable_string_coerce  s
    r   c                 C   s8   ddg}t || d}| }t|dd}t|| d S )Nrb   r7   r,   r   rL   )r   rj   r   r/   r0   )r   r%   r"   r2   r1   r   r   r   +test_to_numeric_from_nullable_string_ignore  s
    r   z+data, input_dtype, downcast, expected_dtypeInt8i  ZInt16Float32iUInt64ZUInt8r   ZInt32c                 C   s8   t j| |d}t||d}t j| |d}t|| d S )Nr,   r   )r   r$   r   r/   assert_extension_array_equal)r=   Zinput_dtyper*   r   r   r1   r2   r   r   r   test_downcast_nullable_numeric  s    r   c                  C   s^   t jddt jgdd} t| dd}t jddt jgdd}t|| t j| d< t|| d S )Nr9   r   r   r,   r(   r   r   )r   r$   r   r   r/   r   )r   r1   r2   r   r   r   %test_downcast_nullable_mask_is_copied  s    
r   c                  C   s"   t d} td}| |kstd S )Nz1.7e+308gv;w0B)r   r#   r   r{   )r1   r2   r   r   r   #test_to_numeric_scientific_notation*  s    
r   g  PeBg      Gc                 C   s&   t | g}t|dd}t|| d S )Nrz   r   r;   )rx   r2   r1   r   r   r   4test_to_numeric_large_float_not_downcast_to_float_321  s    
r   z
val, dtype)r9   r   )r   r   )Tbooleanc                 C   s8   t | gtd}t|dd}t | g|d}t|| d S )Nr,   numpy_nullabledtype_backendr-   )rx   r'   r"   r1   r2   r   r   r   test_to_numeric_dtype_backend9  s    r   )r9   int64[pyarrow])r   float64[pyarrow])Tbool[pyarrow]c                 C   sZ   d|krt d d}nd}t| d gtd}t||d}t| tjg|d}t|| d S )Npyarrowr   r,   r   	rN   importorskipr   r.   r   r   r   r/   r0   )rx   r'   r   r"   r1   r2   r   r   r    test_to_numeric_dtype_backend_naD  s    
r   zval, dtype, downcast)r9   r   r(   )r   r   rz   )r9   r   r   )r9   int8[pyarrow]r(   )r   zfloat[pyarrow]rz   )r9   r   r   c                 C   s\   d|krt d d}nd}t| d gtd}t|||d}t| tjg|d}t|| d S )Nr   r   r,   r   r*   r   )rx   r'   r*   r   r"   r1   r2   r   r   r   )test_to_numeric_dtype_backend_downcasting\  s    
r   zsmaller, dtype_backendr   zuint8[pyarrow]r   c                 C   sT   |dkrt d tdtjgdd}t||dd}tdtjg| d}t|| d S )Nr   r9   r   r,   r   r   rN   r   r   r   r   r   r/   r0   )Zsmallerr   r"   r1   r2   r   r   r   .test_to_numeric_dtype_backend_downcasting_uintt  s    
r   r   r   zuint64[pyarrow]r   r   c                 C   sR   d| krt d tdtjg| d}t|dd}tdtjg| d}t|| d S )Nr   r9   r,   r   r   r   )r'   r"   r1   r2   r   r   r   .test_to_numeric_dtype_backend_already_nullable  s    
r   c              	   C   s   t dddg}| }tjtdd t|| d W 5 Q R X t|| dd}t|| t|| d	d}| d
krrd}nd}t tj	tj	tj	g|d}t|| d S )Nrb   rc   r   r   rJ   r   r   )r   r   r
   r   zdouble[pyarrow]r   r,   )
r   rj   rN   rO   rP   r   r/   r0   r#   rq   )r   r"   r2   r1   r'   r   r   r   #test_to_numeric_dtype_backend_error  s    r   c               	   C   s<   t dddg} d}tjt|d t| dd W 5 Q R X d S )Nr9   r   r>   zPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.rJ   numpyr   rM   )r"   rQ   r   r   r   test_invalid_dtype_backend  s
    r   c                  C   sZ   t d} ttdt|  d}t|ddd}tddd gt|  d}t	|| d S )Nr   Z12xr,   r
   )r   r   r9   r   )
rN   r   r   rF   r   r   r   r   r/   r0   )par"   r1   r2   r   r   r   test_coerce_pyarrow_backend  s
    
r  )grg   r   r#   r   rN   Zpandasr   r   r   r   r   r   Zpandas._testingZ_testingr/   Zfixturer   r   r   r   r   r   Zassert_index_equalr0   rZ   r&   r   Zparametrizer   r   r3   r<   rG   rR   rq   rT   rX   r\   r]   r`   rn   rh   r$   ro   rr   rw   r|   r   r   r   r   r   r   r   r   r   r   r   r   r'   Zfloat32charr   r   r   r   r   filterwarningsr   r   r   r   r   minr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   <module>   s  






	



	



 
	
	


	
"

	
'



"

		


	
 
	         

	
	





3 " 		   


