U
    >vfk                     @   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                   @   s  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ejd#d$d%gd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zejd4ejd5gd5d6gd7d8gfejd5d6gd5d6gd7d8d9gfgd:d; Z d<d= Z!d>d? Z"ejd@d8d9dAgd9dAdBdCd9dAdBgfdDdEdFgdEdFdGdHdEdFdGgfgdIdJ Z#ejdKd8d9dAgd8d$dAgfdLd9dAgdLd$dAgfgdMdN Z$dOdP Z%ejdQd%d$gdRdS Z&ejdQd%d$gdTdU Z'dVdW Z(dXdY Z)ej*dZd[d\Z+d]d^ Z,ejd_d$d%gd`da Z-ejdbd$d%gejd_d$d%gdcdd Z.dedf Z/dgdh Z0ejdidjd$d%gd$d%id%d%gfdkd8d9gdldmdndldmgfdod8d9gdldmdndldmgfdpdqdrgdsdtdudsdtgfdvdqdrgdsdtdudsdtgfdwdxdygdDdEdzdDdEgfe1dke2e3d8d9e3d9dAge3d8d9e3dldmie2e3dldme3d9dAgfe1dpe2e3d{d|e3d}d~ge3d{d|e3ddie2e3dde3d}d~gfe4dej5dddgej5dddej5dddiej5dddgfg	dd Z6dd Z7dd Z8dd Z9dd Z:ejdd%d$gdd Z;dd Z<ejdd9e=j>dgdd Z?dd Z@ejdddogdd ZAejdddgdd ZBdS )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ti}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      r   
         ab)pdSeriesobjectreplacetmassert_series_equal	DataFramenpzerosastypeilocarrayAssertionErrorassert_frame_equal)selfserresultexpecteddf r$   L/tmp/pip-unpacked-wheel-vdrwu74i/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_replace4   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   r1   r2   r,   )r   r   r   r(   infr   r   r   r7   NaTcopy)r   r    Zfilledr$   r$   r%   test_replace_nan_with_inff   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(   r7   pytestraises
ValueError)r   Zdatetime_seriesr    msgr!   r$   r$   r%   +test_replace_listlike_value_listlike_targetp   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20130101r0   periodsZ20120101r   Z20130103)	r   r   
date_rangerD   r'   locr   r   r   rN   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   rC   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   r0   rQ   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_cymbalrF   Zcrash_cymbal)r/   method)
r   r   r   r   r   rD   r   rI   rJ   rK   )r   r    r!   rZ   r=   rL   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 )Nr0   int64r   c                    sL      } | |}|j| |dd}|d ks0tt|| t|| d S )NTr.   )rD   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   rP   Tr   z1/1/2001z	1/10/2001Dfreq      ?)r   r   r   Zaranger'   rS   r   r   r   tolistr   r   )r   rb   trveZdrr!   r"   r$   ra   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   rZ   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2url   r   rZ   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   rn   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asdfTrl   rn   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   r0   r1   r-   r   r2   r   r   r   r3   r4   Tr.   )r   r   r   r8   r5   r6   r   r9   r   r(   r   r:   r   r;   r   )r   r<   r    r?   r@   r=   r$   r$   r%   test_replace2  s,    $zTestSeriesReplace.test_replace2r/   TFc                 C   s^   t dddg}t dddg}|jdddgdddg|d}|rNt|| nt|| d S )Nr
   r   r   r,   r.   rl   )r   r/   r    r"   r)   r$   r$   r%   test_replace_cascade-  s    z&TestSeriesReplace.test_replace_cascadec                 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rx   ry   )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   s@   t td}t||i  t g }t||| d S )NZabcd)r   r   listr   r   r   )r   rZ   Zempty_seriesr$   r$   r%    test_replace_with_empty_dictlikeA  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   r{   r   r   r   r   r(   r   r   rn   r$   r$   r%   test_replace_string_with_numberI  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   rl   )r   rZ   r"   r!   r$   r$   r%   (test_replace_replacer_equals_replacementP  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   rn   r$   r$   r%    test_replace_unicode_with_numberX  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,   r0   r   rn   r$   r$   r%   $test_replace_mixed_types_with_string_  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   r   catr   add_categoriesr   r   )r   Zcategoricalnumericr    r!   r"   r$   r$   r%   test_replace_categoricalf  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rR   rW   r   r1   r   Tr.   r   r
   )r   rS   r   r   rD   r   r   Zremove_unused_categoriesr   r   r   r   )r   ZdtirZ   cr"   r!   r=   Zfirst_valuer$   r$   r%   test_replace_categorical_singlex  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100000000000000000001rl   rn   r$   r$   r%   "test_replace_with_no_overflowerror  s    z4TestSeriesReplace.test_replace_with_no_overflowerrorzser, to_replace, expr   r,   )r
   r   r   rz   r{   3r   )rz   r{   r   c                 C   s.   t |}t |}||}t|| d S Nrl   )r   r    
to_replacer>   seriesr"   r!   r$   r$   r%   test_replace_commutative  s    


z*TestSeriesReplace.test_replace_commutativezser, expxc                 C   s0   t |}|dd}t |}t|| d S )Nr   Trl   )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.*rF   c                 S   s   |   S r   )strip)r   r$   r$   r%   <lambda>      zCTestSeriesReplace.test_replace_invalid_to_replace.<locals>.<lambda>)r   r   rI   rJ   	TypeErrorr   )r   r   rL   r$   r$   r%   test_replace_invalid_to_replace  s
    z1TestSeriesReplace.test_replace_invalid_to_replaceframec              	   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 boolrF   r1   )r   regex)r   r   to_framerI   rJ   rK   r   )r   r   objrL   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,   r0   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   r1   zASeries.replace cannot use dict-like to_replace and non-None valuerF   r2   z<Series.replace cannot use dict-value and non-None to_replace)r   r   rI   rJ   rK   r   )r   Zfixed_now_tsr    r   valuerL   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_otherra   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   rD   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   rt   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   r   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   r0   r   r   rc   r3   r   )	r   rS   Ztz_localizeZ	to_periodr   rC   r   r   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   rZ   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   rt   r   r   r   )r   r    Zregex_mappingr!   r>   r$   r$   r%   test_pandas_replace_na0  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   rx   ry   r|   rf   g@gffffff@g@g333333%@g4@Mz2020-05rd   z2020-06c                 C   s6   t j||d}||}t j||d}t|| d S )Nr   rl   )r   r   Z
input_datar   Zexpected_datar    r!   r"   r$   r$   r%   test_replace_dtype=  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 )
Nrx   ry   r   r   rz   r{   r|   r   r   )r   r   r   r(   r   r   r   rt   )
r   r    r)   r"   r   r   Z	expected2Zser3Zres3Z	expected3r$   r$   r%   test_replace_string_dtypea  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xyzrl   r   r    r)   r"   r$   r$   r%   )test_replace_string_dtype_list_to_replaces  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   rl   r   r$   r$   r%   test_replace_string_dtype_regexz  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 )Nrf          @gˡE@g@r   	   g      "@g      $@r   r   r
   r   r   r,   zInvalid valuerF   g      #@)
r   r   ZFloat64Dtyper   r   r   Z
Int64DtyperI   rJ   r   )r   Zfloatsr)   Zintsr$   r$   r%   test_replace_nullable_numeric  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   rl   )r   r   r   r"   r!   r$   r$   r%   test_replace_regex_dtype_series  s    z1TestSeriesReplace.test_replace_regex_dtype_seriesc              	   C   sp   t jddddddddg|d}t jdddg|d}tt|j|j}||}|dddd}t|| d S )Nr
   r   r   r   )r   r   r
   )	r   r   dictzipvaluesrH   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_numericc                 C   s   t jddddgi}|d dgtjg|d< t jddtjdgi}t|| t jddd dgi}|d d gtjg|d< t|| t jddd dgi}|d tj|d< t|| d S )NZTestz0.5Tz0.6)	r   r   	from_dictr   r   r(   r   r   r7   )r   r#   r"   r$   r$   r%    test_replace_change_dtype_series  s    z2TestSeriesReplace.test_replace_change_dtype_seriesr   r   c                 C   sf   t jddt jg|d}t jddt jg|d}|jddd}t|| |jdddd t|| d S )Nr   r
   r   r   r   Tr   r   r/   r   )r   r   r    r"   r!   r$   r$   r%   test_replace_na_in_obj_column  s    z/TestSeriesReplace.test_replace_na_in_obj_columnr   g      ?c                 C   s\   t |dg}t |t jg}|jdt jd}t|| |jdt jdd t|| d S )Nr
   r   Tr   r   )r   r`   r    r"   r!   r$   r$   r%   #test_replace_numeric_column_with_na  s    z5TestSeriesReplace.test_replace_numeric_column_with_naN)C__name__
__module____qualname__r&   r*   rA   rE   rM   rO   rU   r[   r\   r^   rk   rm   ro   rq   rs   ru   rv   rI   markZparametrizerw   r}   r   r   r   r   r   r   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$   r$   r%   r      s   2


+	"


 &

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






r   )r   Znumpyr   rI   Zpandasr   Zpandas._testingZ_testingr   Zpandas.core.arraysr   r   r$   r$   r$   r%   <module>   s   