U
    sVcd                     @   sJ   d dl Z d dlZd dlZd dlZd dlmZ d dl	m
Z
 G dd dZdS )    N)IntervalArrayc                   @   sL  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zejd/ejd0gd0d1gd2d3gfejd0d1gd0d1gd2d3d4gfgd5d6 Zd7d8 Z d9d: Z!ejd;d3d4d<gd4d<d=d>d4d<d=gfd?d@dAgd@dAdBdCd@dAdBgfgdDdE Z"ejdFd3d4d<gd3dGd<gfdHd4d<gdHdGd<gfgdIdJ Z#dKdL Z$ejdMdNdGgdOdP Z%ejdMdNdGgdQdR Z&dSdT Z'dUdV Z(ej)dWdXdYZ*dZd[ Z+ejd\dGdNgd]d^ Z,ejd_dGdNgejd\dGdNgd`da Z-dbdc Z.ddde Z/ejdfdgdGdNgdGdNidNdNgfdhd3d4gdidjdkdidjgfdld3d4gdidjdkdidjgfdmdndogdpdqdrdpdqgfdsdndogdpdqdrdpdqgfdtdudvgd?d@dwd?d@gfe0dhe1e2d3d4e2d4d<ge2d3d4e2didjie1e2didje2d4d<gfe0dme1e2dxdye2dzd{ge2dxdye2d|d}ie1e2d|d}e2dzd{gfe3d~ej4dd~dgej4dd~dej4dd~diej4dd~dgfg	dd Z5dd Z6dd Z7dd Z8dd Z9ejddNdGgdd Z:dd Z;ejdd4e<j=dgdd Z>dS )TestSeriesReplacec              	   C   s  t jdddgtd}|dd }t jddd gtd}t|| t td}d|j	d< |dd }t tdtdtj
ddd gtdd}|j	d d kstt|| t d	d
dddddg}|dd }t d	d
dd d dd g}|j	d d kstt|| d S )Nr    dtype)   r   )   r   r           )r      r   
         ab)pdSeriesobjectreplacetmassert_series_equalZ	DataFramenpzerosilocarrayAssertionErrorassert_frame_equal)selfserresultexpecteddf r"   L/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/series/methods/test_replace.pytest_replace_explicit_none   s(    
z,TestSeriesReplace.test_replace_explicit_nonec                 C   sp   t jd d t dgtd}|tjd i}t|| |j	tksDt
|tjd }t|| |j	tkslt
d S )Nz2021-12-16 17:31r   )r   r   	Timestampr   r   r   nanr   r   r   r   )r   r   resr"   r"   r#   !test_replace_noop_doesnt_downcast'   s    z3TestSeriesReplace.test_replace_noop_doesnt_downcastc                 C   sv  d}t tj|}tj|dd< d|dd< |jtjgddd}|d ksPt|d}t	
|| |d	tj}tj||d	k< t	
|| t jttj|t	|td
}tj|d d< d|dd< d|dd< |tjddgd}|d d dk st|dd dk s t|dd dk s:tt |d d  sVt|tjdddddi}|d d dk st|dd dk st|dd dk stt |d d  st|tjddgdddg}t	
|| |jtjddgddd}|d ks$t|d d dk s>t|dd dk sXt|dd dk srtd S )Nd   r         r   r   Tinplacer	   r      foobarr   r   )r   r   r   randomrandnr&   r   r   fillnar   r   fabsmakeDateIndexr   allisna)r   Nr   return_valueexprsrs2r"   r"   r#   test_replace3   s@    
$zTestSeriesReplace.test_replacec              	   C   s   t tjdtjg}t|tjd|d t tjdddtjd t j	g}t|tjd|d |
 }d|d< t|tjd| d S )Nr   r/   r0   r*   )r   r   r   r&   infr   r   r   r5   NaTcopy)r   r   Zfilledr"   r"   r#   test_replace_nan_with_infe   s    z+TestSeriesReplace.test_replace_nan_with_infc              
   C   s   t |j}t|tjd|d d}t	j
t|d |dddgtjdg W 5 Q R X |ddgtjdg}t|| t dddddg}|dddddgdddddg}t|t dddddg d S )Nr   z:Replacement lists must match in length\. Expecting 3 got 2matchr
   r   r   r*   )r   r   indexr   r   r   r   r&   r5   pytestraises
ValueError)r   Zdatetime_seriesr   msgr   r"   r"   r#   +test_replace_listlike_value_listlike_targeto   s    " z=TestSeriesReplace.test_replace_listlike_value_listlike_targetc                 C   sr   t dtjdddg}| }|tjg}t|| t dtjdddg}| }|tj}t|| d S )Nr   r   r   r*   )r   r   r   r&   Zffillr   r   r   r   r   r    r   r"   r"   r#   test_replace_gh5319   s    z%TestSeriesReplace.test_replace_gh5319c                 C   sz   t t jddd}| }t d|jd< |t dt di}t|| |t dt d}t|| d S )N20130101r.   periodsZ20120101r   Z20130103)	r   r   
date_rangerB   r%   locr   r   r   rL   r"   r"   r#   test_replace_datetime64   s    z)TestSeriesReplace.test_replace_datetime64c                 C   sf   t jddd}t t jt jdddg}|tjt jgt jj}t jt jj|gtd}t	
|| d S )Nz
2015/01/01UTC)tzr   )r   r%   r   rA   r   r   r&   minr   r   r   )r   tssr   r    r"   r"   r#   test_replace_nat_with_tz   s
    z*TestSeriesReplace.test_replace_nat_with_tzc                 C   sf   t jddd}t |}||d |d i}t |d |d |d |d |d g}t|| d S )Nr   r.   rO   r
   r   r   r*   )r   Ztimedelta_ranger   r   r   r   )r   Ztdir   r   r    r"   r"   r#   test_replace_timedelta_td64   s
    
(z-TestSeriesReplace.test_replace_timedelta_td64c              
   C   s   t dddddg}|dddg}t|t dddddg | }|jdddgdd}|d kshtt|t dddddg | }d}tjt	|d	( |jdddgdd
d}|d kstW 5 Q R X t|| d S )Nr   r
   r   r   r*   Tr,   zVInvalid fill method\. Expecting pad \(ffill\) or backfill \(bfill\)\. Got crash_cymbalrD   Zcrash_cymbal)r-   method)
r   r   r   r   r   rB   r   rG   rH   rI   )r   r   r   rX   r;   rJ   r"   r"   r#   test_replace_with_single_list   s    z/TestSeriesReplace.test_replace_with_single_listc              	      s  t jtddd  fdd}dgdg }}|||  ||d |d   t dd	d
ddg}dgdg }}|||| t dd	d
ddg}ddgddg }}|||| t dd	d
dt dg}ddgdt dg }}|||| t jdd	d
ddgdd}ddgddg }}|||| t t jdddd}|t|d |d	 |d
 gdd
dg}t jdd
dg|dd  	  td}t
|| d S )Nr.   int64r   c                    sL      } | |}|j| |dd}|d ks0tt|| t|| d S )NTr,   )rB   r   r   r   r   )Zto_repvalr    Zscr   r;   r   r"   r#   check_replace   s    zATestSeriesReplace.test_replace_mixed_types.<locals>.check_replacer   g      @r   r
   r   g      @r*   r   rN   Tr   z1/1/2001z	1/10/2001Dfreq      ?)r   r   r   Zaranger%   rQ   astyper   r   tolistr   r   )r   r`   trveZdrr   r    r"   r_   r#   test_replace_mixed_types   s*    	*$z*TestSeriesReplace.test_replace_mixed_typesc                 C   s,   t dddg}|dd}t|| d S )NTFZfunz
in-the-sunr   r   r   r   r   )r   rX   r   r"   r"   r#   #test_replace_bool_with_string_no_op   s    z5TestSeriesReplace.test_replace_bool_with_string_no_opc                 C   s<   t dddg}|dd}t dddg}t|| d S )NTFZ2urk   r   rX   r   r    r"   r"   r#   test_replace_bool_with_string   s    z/TestSeriesReplace.test_replace_bool_with_stringc                 C   s@   t dddg}|dd}t dgt| }t|| d S )NTF)r   r   r   lenr   r   rm   r"   r"   r#   test_replace_bool_with_bool   s    z-TestSeriesReplace.test_replace_bool_with_boolc                 C   s@   t dddg}|ddd}t dddg}t|| d S )NTFZasdbyes)ZasdfTrk   rm   r"   r"   r#   %test_replace_with_dict_with_bool_keys   s    z7TestSeriesReplace.test_replace_with_dict_with_bool_keysc                 C   s|   t jdd g|ddt j}t jt jt jg|d}t|| t jddg|ddt j}|jdt jdd t|| d S )Nr   r   r
   Tr,   )r   r   r   NAr   r   )r   Zany_int_ea_dtyper   r    r"   r"   r#   test_replace_Int_with_na  s    z*TestSeriesReplace.test_replace_Int_with_nac                 C   s  d}t jttj|t|td}tj	|d d< d|dd< d|dd	< |
tj	ddgd
}|d d d
k szt|dd d
k st|dd	 d
k stt |d d  st|
tj	d
ddddi}|d d d
k st|dd dk st|dd	 dk s(tt |d d  sDt|
tj	ddgd
ddg}t|| |j
tj	ddgd
dd}|d kst|d d d
k st|dd d
k st|dd	 d
k std S )Nr)   r   r.   r/   r+   r   r0   r   r   r   r1   r2   Tr,   )r   r   r   r6   r3   r4   r   r7   r   r&   r   r8   r   r9   r   )r   r:   r   r=   r>   r;   r"   r"   r#   test_replace2
  s,    $zTestSeriesReplace.test_replace2c                 C   sL   t jddtjg|d}t jddtjg|d}|ddd}t|| d S )Nonetwor   12rv   rw   )r   r   r   r&   r   r   r   )r   Znullable_string_dtyper   r    r   r"   r"   r#   +test_replace_with_dictlike_and_string_dtype,  s    z=TestSeriesReplace.test_replace_with_dictlike_and_string_dtypec              	   C   sV   t td}t||i  tt t g }W 5 Q R X t||| d S )NZabcd)r   r   listr   r   r   Zassert_produces_warningFutureWarning)r   rX   Zempty_seriesr"   r"   r#    test_replace_with_empty_dictlike3  s
    z2TestSeriesReplace.test_replace_with_empty_dictlikec                 C   s>   t dddg}|dtj}t dddg}t|| d S Nr
   r   r   ry   r   r   r   r   r&   r   r   rm   r"   r"   r#   test_replace_string_with_number<  s    z1TestSeriesReplace.test_replace_string_with_numberc                 C   s<   t ddg}t ddg}|ddd}t|| d S )Nr   r   )r   r   rk   )r   rX   r    r   r"   r"   r#   (test_replace_replacer_equals_replacementC  s    z:TestSeriesReplace.test_replace_replacer_equals_replacementc                 C   s>   t dddg}|dtj}t dddg}t|| d S r   r   rm   r"   r"   r#    test_replace_unicode_with_numberK  s    z2TestSeriesReplace.test_replace_unicode_with_numberc                 C   sR   t ddddddg}|ddgtj}t dtjdtjddg}t|| d S )Nr
   r   r   4r*   r.   r   rm   r"   r"   r#   $test_replace_mixed_types_with_stringR  s    z6TestSeriesReplace.test_replace_mixed_types_with_stringzcategorical, numericAB)
categoriesr
   r   c                 C   sR   t |}|ddd}t |d}d|jjkrB|jd}t|| d S )Nr
   r   )r   r   category)	r   r   r   re   catr   add_categoriesr   r   )r   Zcategoricalnumericr   r   r    r"   r"   r#   test_replace_categoricalY  s    	
z*TestSeriesReplace.test_replace_categoricalc                 C   s  t jdddd}t |}|d}| }|jd}d|d< |j }|d dksZt|	|d d}t
|| |d dkst|j	|d ddd	}|d kstt
|| |d
 }|j	|d |d
 dd	}|d kst|d
 |d   kr|ksn td S )N
2016-01-01r   
US/PacificrP   rU   r   r/   r   Tr,   r   r
   )r   rQ   r   re   rB   r   r   Zremove_unused_categoriesr   r   r   r   )r   ZdtirX   cr    r   r;   Zfirst_valuer"   r"   r#   test_replace_categorical_singlek  s$    


z1TestSeriesReplace.test_replace_categorical_singlec                 C   s   t dddddg}|dgdg}t dddddg}t|| t dddg}|dgdg}t dddg}t|| d S )Nr   r
   r   r   r*   Z100000000000000000000Z100000000000000000001rk   rm   r"   r"   r#   "test_replace_with_no_overflowerror  s    z4TestSeriesReplace.test_replace_with_no_overflowerrorzser, to_replace, expr   r*   )r
   r   r   rx   ry   3r   )rx   ry   r   c                 C   s.   t |}t |}||}t|| d S Nrk   )r   r   
to_replacer<   seriesr    r   r"   r"   r#   test_replace_commutative  s    


z*TestSeriesReplace.test_replace_commutativezser, expTxc                 C   s0   t |}|dd}t |}t|| d S )Nr   Trk   )r   r   r<   r   r   r    r"   r"   r#   test_replace_no_cast  s    

z&TestSeriesReplace.test_replace_no_castc              	   C   s@   t dddg}d}tjt|d |dd  W 5 Q R X d S )Nr   r   c zZExpecting 'to_replace' to be either a scalar, array-like, dict or None, got invalid type.*rD   c                 S   s   |   S r   )strip)r   r"   r"   r#   <lambda>      zCTestSeriesReplace.test_replace_invalid_to_replace.<locals>.<lambda>)r   r   rG   rH   	TypeErrorr   )r   r   rJ   r"   r"   r#   test_replace_invalid_to_replace  s
    z1TestSeriesReplace.test_replace_invalid_to_replaceframeFc              	   C   sN   t dddg}|r| }d}tjt|d |jdgdd W 5 Q R X d S )Nr   r   r   z4'to_replace' must be 'None' if 'regex' is not a boolrD   r/   )r   regex)r   r   to_framerG   rH   rI   r   )r   r   objrJ   r"   r"   r#   test_replace_nonbool_regex  s    z,TestSeriesReplace.test_replace_nonbool_regexc                 C   sd   t jg tjd}|r| }|jdddd}|d ks8t|jdddd}t|| ||k	s`td S )Nr   r*   r.   Tr,   F)	r   r   r   float64r   r   r   r   assert_equal)r   r   r   r'   r"   r"   r#   test_replace_empty_copy  s    z)TestSeriesReplace.test_replace_empty_copyc              	   C   s   t ddd|dg}ddd}d}d}tjt|d ||| W 5 Q R X d}dd	d}d
}tjt|d ||| W 5 Q R X d S )Nr
   r   r   T)r   r   r/   zASeries.replace cannot use dict-like to_replace and non-None valuerD   r0   z<Series.replace cannot use dict-value and non-None to_replace)r   r   rG   rH   rI   r   )r   Zfixed_now_tsr   r   valuerJ   r"   r"   r#   "test_replace_only_one_dictlike_arg  s    

z4TestSeriesReplace.test_replace_only_one_dictlike_argc                 C   s4   |t jdddgdd}|dd}t|| d S )Nr
   r   r   Int64r   r   )r   r   r   r   r   )r   Zframe_or_seriesr   r   r"   r"   r#   test_replace_extension_other  s    z.TestSeriesReplace.test_replace_extension_otherr_   c           	      C   s   |  }|j|d dd}tj|d |d gt|dd   |jd}t|| |j|d dd}t||   |	 }|j|d ddd}|d kst
t|| |j|d ddd}|d kst
t||   d S )	Nr
   pad)r[   r   r   r   T)r[   r-   )r   r   r   r   r|   r   r   r   r   rB   r   )	r   r   r!   r'   r    Zres_dfser2res2Zres_df2r"   r"   r#   _check_replace_with_method  s    ,z,TestSeriesReplace._check_replace_with_methodc                 C   s0   t jddt jdg|d}t |}| | d S )Nr
   r   r*   r   )r   r   rs   r   r   )r   Zany_numeric_ea_dtypeZarrr   r"   r"   r#   !test_replace_ea_dtype_with_method  s    
z3TestSeriesReplace.test_replace_ea_dtype_with_methodas_categoricalc                 C   s6   t jtd}t |}|r(|d}| | d S )Nr*   r   )r   ZIntervalIndexZfrom_breaksranger   re   r   )r   r   idxr   r"   r"   r#   !test_replace_interval_with_method  s
    

z3TestSeriesReplace.test_replace_interval_with_method	as_periodc                 C   sV   t jdddd}|r$|d d}t |}t j|jd< |rH|d}| | d S )Nr   r.   r   r   ra   r1   r   )	r   rQ   Ztz_localizeZ	to_periodr   rA   r   re   r   )r   r   r   r   r   r"   r"   r#   %test_replace_datetimelike_with_method  s    

z7TestSeriesReplace.test_replace_datetimelike_with_methodc                 C   sL   t dddg}td}|j|didd}t dddg}t|| d S )Nr   r   r   z^a$zTr   )r   r   recompiler   r   r   )r   rX   r   r   r    r"   r"   r#    test_replace_with_compiled_regex  s
    
z2TestSeriesReplace.test_replace_with_compiled_regexc                 C   sh   t jddddddt jgdd}dddd	d
}|j|dd}t jddd	dddt jgdd}t|| d S )NAABBCCZDDEEr   stringr   zCC-REPL)r   r   r   r   Tr   )r   r   rs   r   r   r   )r   r   Zregex_mappingr   r<   r"   r"   r#   test_pandas_replace_na#  s    z(TestSeriesReplace.test_pandas_replace_naz,dtype, input_data, to_replace, expected_databoolr]   r   r   )r
   r   r   r   皙?皙@g333333$@g     4@)r   r   ZFloat64r   rv   rw   rz   rd   g@gffffff@g@g333333%@g4@Mz2020-05rb   z2020-06c                 C   s6   t j||d}||}t j||d}t|| d S )Nr   rk   )r   r   Z
input_datar   Zexpected_datar   r   r    r"   r"   r#   test_replace_dtype0  s    
z$TestSeriesReplace.test_replace_dtypec           
      C   s   t jddtjgdd}|ddd}t jddtjgdd}t|| t jdtjgdd}|dd	}t jd	tjgdd}t|| t jdd	gdd}|dt j}t jt jd	gdd}	t||	 d S )
Nrv   rw   r   r   rx   ry   rz   r   r   )r   r   r   r&   r   r   r   rs   )
r   r   r'   r    r   r   Z	expected2Zser3Zres3Z	expected3r"   r"   r#   test_replace_string_dtypeT  s    z+TestSeriesReplace.test_replace_string_dtypec                 C   sD   t jddgdd}|ddgd}t jddgdd}t|| d S )Nabcdefr   r   zany other stringZxyzrk   r   r   r'   r    r"   r"   r#   )test_replace_string_dtype_list_to_replacef  s    z;TestSeriesReplace.test_replace_string_dtype_list_to_replacec                 C   sD   t jddgdd}|jdddd}t jddgdd}t|| d S )	Nr   r   r   r   .CTr   rk   r   r"   r"   r#   test_replace_string_dtype_regexm  s    z1TestSeriesReplace.test_replace_string_dtype_regexc              	   C   sx  t jddddgt  d}|ddij|jks4t|ddj|jksLt|ddij|jksft|ddj|jks~t|jddgddgd	}|j|jkstt jd
dddgt  d}|d
dij|jkst|d
dj|jkst|d
dij|jkst|d
dj|jks&ttjt	dd |d
di W 5 Q R X tjt	dd |d
d W 5 Q R X d S )Nrd          @gˡE@g@r   	   g      "@g      $@)r   r   r
   r   r   r*   zInvalid valuerD   g      #@)
r   r   ZFloat64Dtyper   r   r   Z
Int64DtyperG   rH   r   )r   Zfloatsr'   Zintsr"   r"   r#   test_replace_nullable_numerict  s     z/TestSeriesReplace.test_replace_nullable_numericr   c                 C   s8   t dg}t dg}|jdd|d}t|| d S )N0r
   )r   r   r   rk   )r   r   r   r    r   r"   r"   r#   test_replace_regex_dtype_series  s    z1TestSeriesReplace.test_replace_regex_dtype_seriesc              	   C   sv   t jddddddddg|d}t jdddg|d}dd t|j|jD }||}|dddd}t|| d S )Nr
   r   r   r   c                 S   s   i | ]\}}||qS r"   r"   ).0oldnewr"   r"   r#   
<dictcomp>  s      zFTestSeriesReplace.test_replace_different_int_types.<locals>.<dictcomp>)r   r   r
   )r   r   zipvaluesrF   r   r   r   )r   Zany_int_numpy_dtypeZlabsmapsZmap_dictr   r    r"   r"   r#    test_replace_different_int_types  s    
z2TestSeriesReplace.test_replace_different_int_typesr^   r   c                 C   s<   t d|g}||d }t jdd gtd}t|| d S )Nr
   r   )r   r   r   r   r   r   )r   r^   r   r   r    r"   r"   r#   %test_replace_value_none_dtype_numeric  s    z7TestSeriesReplace.test_replace_value_none_dtype_numericN)?__name__
__module____qualname__r$   r(   r?   rC   rK   rM   rS   rY   rZ   r\   rj   rl   rn   rp   rr   rt   ru   r{   r~   r   r   r   r   rG   markZparametrizer   ZCategoricalr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ZIntervalDtyper   ZIntervalZPeriodDtypeZPeriodr   r   r   r   r   r   r   r   r&   r   r"   r"   r"   r#   r      s   2


+	"	

 &


	




r   )r   Znumpyr   rG   Zpandasr   Zpandas._testingZ_testingr   Zpandas.core.arraysr   r   r"   r"   r"   r#   <module>   s   