U
    >vfL                     @  s   d dl mZ d dlmZ d dlZd dl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Zejd	dd
dZG dd dZG dd dZdS )    )annotations)datetimeN)	DataFrameIndexSeries	Timestamp
date_rangezdict[str, list[int | str]])returnc                   C  s   t tdt ddS )N   ab..ab)listrange r   r   K/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/frame/methods/test_replace.pymix_ab   s    r   zdict[str, list[float | str]]c                   C  s"   t tdt dddtjdgdS )Nr
   r   r   r   dr   r   c)r   r   npnanr   r   r   r   mix_abc   s    r   c                   @  sj	  e Zd Zdd Zejdddgejdgddejejgdgd	 d
g d
dddgdfddgddgddddgdddd
gd
dddgdfddgddgddddgdddd
gd
dddgdfgejdddgejdddg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/d0 Zd1d2 Zd3d4 Zejd5ejd6d7d6ejd8gd9d: Zejd;d<d=d>d?d@gdAdB ZejdCdDdEgdFdGdHdIdJgfdGd6d6gdKejidGejejgfgdLdM ZdNdO ZdPdQ ZdRdS ZdTdU ZdVdW ZdXdY ZdZd[ Z d\d] Z!d^d_ Z"d`da Z#dbdc Z$ejdddedfdggdhdi Z%djdk Z&dldm Z'dndo Z(dpdq Z)drds Z*dtdu Z+dvdw Z,ejdxe-dydzd{d	gidzd|e-dyd|d{d	gife-dydzd{d	giej.d}dzd|e-dyd|d{d	giej.d}fe-dydzd{d	giej/d}dzd|e-dyd|d{d	giej/d}fe-d~dddgidde-d~dddgife-ddddgidd|e-ddddgife-de0e1ddde1ddde1dddgie1ddde1ddde-de0e1dddgd	 ife-e1dddgdgddde-e1dddgdgdfe-de1dddzgie1dddze1dddze-de1dddzgife-e2dd	ddd|ejd{gde3ddde3ddde-e3ddde3ddde3dddgd|ejd{gdfe-dzdgd{dggdde-ddgd{dggfe-dzdgd{dggdzde-ddgd{dggfe-dzdgd{dggdde-ddgd{dggfe-dzdgd{dggdzde-ddgd{dggfgdd Z4dd Z5dd Z6dd Z7dd Z8dd Z9dd Z:dd Z;dd Z<dd Z=dd Z>dd Z?dd Z@dd ZAdd ZBdd ZCdd ZDdd ZEddÄ ZFddń ZGddǄ ZHejdd|ddzdzd{gdejdgdddFgdʜfejdd|dzd{gdddgdddFgdʜfdGdd|dzd{gdejdgdddFgdʜfd|d{gddzdzd{gdejdgdddFgdʜfdzd{gdd|d|d|gdejdgdddFgdʜfddd|d{d{gdejdgdddFgdʜfddFgdd|dzd{gdejdgdddgdʜfgddЄ ZIejddzdzdHd	d	gd{d{ggfdzd{dHd	dzgd{d	ggfgddӄ ZJejddzd{d	gdddgdלdddd؜dzd{d	gdddgdלfdzd{d	gdddgdלddddݜdzd{d	gdddgdלfgdd߄ ZKejde3deLdze/dzeMdzeNdzgdd ZOdd ZPdd ZQejddddddfdegejdejejgdd ZRejdejdgdd ZSejdeTdeUd|dgdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\ejd dzgdgd|gd|gfdzgdzgd|gd|gfdgdgd|gdgfdgdzgd|gdgfgejde]e^ej_gdd Z`ejdd{ejdgdd ZadS (	  TestDataFrameReplacec                 C  s  t j|j|jd d df< t j|j|jdd  df< | }|jt jddd}|d ksZtt||	d |}t j|j
dd|jdf< t j|j
d	d |jdf< |t jd}|j	dd
}t|| | }|jt jgdgdd}|d kstt||	d d S )N   Ar   Tinplace   foovalue)r   r   locindexcopyreplaceAssertionErrortmassert_frame_equalfillnailoccolumnsget_loc)selfdatetime_framefloat_string_frametsframereturn_valuemfresultexpectedr   r   r   test_replace_inplace   s     z)TestDataFrameReplace.test_replace_inplacezto_replace,values,expected\s*\.\s*ze|f|gcrapr   r      hlor   
\s*(\.)\s*z(e|f|g)\1\1\1_crap..Ze_crapZf_crapZg_crapefgr   TFuse_value_regex_argsc                 C  sp   t tdtdtdd}|r2|j|||d}n|j||d|d}|rX|d ksTt|}t |}t|| d S )Nr   efghhelor   )r$   regexr   TrI   r   )r   r   r(   r)   r*   r+   )r0   
to_replacevaluesr7   r   rF   dfr6   r   r   r   test_regex_replace_list_obj6   s    *z0TestDataFrameReplace.test_regex_replace_list_objc           	      C  s^  t |}ddg}tjdg}ttdtdtdd}t |}|j||dd	}t |d dd
tjtjgddddgd}t|| ddg}ddg}|j||dd	}t |d ddddgd}t|| dddg}dddg}|j||dd	}t |d ddddgd}t|| dddg}dddg}|j||d}t |d ddddgd}t|| d S )Nr9   r   r:   r
   r   Zhalor   TrI   r   r<   r=   r>   r?   (a|b)r@   rA   a_crapb_craprB   r   (b)rI   r$   )r   r   r   r   r   r(   r*   r+   )	r0   r   dfmixto_replace_resrL   Zmix2Zdfmix2resexpecr   r   r   test_regex_replace_list_mixedn   s8    





z2TestDataFrameReplace.test_regex_replace_list_mixedc                 C  s  t |}ddg}tjdg}| }|j||ddd}|d ks@tt |d ddtjtjgd}t|| dd	g}d
dg}| }|j||ddd}|d kstt |d ddddgd}t|| dddg}d
ddg}| }|j||ddd}|d kstt |d ddddgd}t|| dddg}d
ddg}| }|j||dd}|d ksbtt |d ddddgd}t|| d S )Nr9   r   r:   Tr   rI   r   r   r?   rP   r@   rA   rQ   rR   rB   rS   rI   r$   r   )r   r   r   r'   r(   r)   r*   r+   )r0   r   rU   rV   rL   rW   r4   rX   r   r   r   %test_regex_replace_list_mixed_inplace   s:    




z:TestDataFrameReplace.test_regex_replace_list_mixed_inplacec                 C  s  t |}|jddidtjidd}| }|jddidtjiddd}|d ksRtt |d ddtjtjg|d d}t|| t|| |jdd	idd
idd}| }|jdd	idd
iddd}|d kstt |d ddddg|d d}t|| t|| |jdd	idd
id}| }|jdd	idd
idd}|d ksPtt |d ddddg|d d}t|| t|| t |d tjdddg|d d}|jddtjidd}| }|jddtjiddd}|d kstt|| t|| |jddtjidd}| }|jddtjidd}|d ksHtt |d tjdddg|d d}t|| t|| d S )Nr   r9   TrO   rZ   r   r   r   r?   z\1tyz.tyrT   r[   .rJ   r   r(   r   r   r'   r)   r*   r+   )r0   r   rU   rW   res2r4   rX   r   r   r   test_regex_replace_dict_mixed   sx            z2TestDataFrameReplace.test_regex_replace_dict_mixedc           	      C  s   t |}|jddtjiidd}| }| }|jddtjiiddd}|d ksVt|jddtjiid}|jddtjiidd}|d kstt |d ddtjtjg|d d	}t|| t|| t|| t|| d S )
Nr   r9   TrO   rZ   rJ   r   r   r   r^   )	r0   r   rU   rW   r_   Zres4r4   res3rX   r   r   r   test_regex_replace_dict_nested  s(      z3TestDataFrameReplace.test_regex_replace_dict_nestedc                 C  sR   |}t ddddgi|d}t ddddgi|d}|jd	d
idd}t|| d S )NfirstabcZbcaZcabdtypez.bczbc.zc.br   r]   TrO   r   r(   r*   r+   )r0   any_string_dtyperf   rM   r7   r6   r   r   r   2test_regex_replace_dict_nested_non_first_character  s
    zGTestDataFrameReplace.test_regex_replace_dict_nested_non_first_characterc                 C  sT   t dddddgdd}t dddddgdd}|ddddi}t|| d S )	NQT   )Typetmpr      rm   )rj   rk   rg   r0   rM   r7   r6   r   r   r   %test_regex_replace_dict_nested_gh4115!  s    z:TestDataFrameReplace.test_regex_replace_dict_nested_gh4115c                 C  s   t |}t |d ttjgd tjtjtjdgd}|jddgtjdd}| }| }|jddgtjddd	}|d kst|jddgtjdd
}|d kstt|| t|| t|| d S )Nr   r
   r   r   r9   za|bTrO   rJ   r[   )	r   r   arrayr   r(   r'   r)   r*   r+   )r0   r   rM   rX   rW   r_   ra   r4   r   r   r   !test_regex_replace_list_to_scalar'  s4         z6TestDataFrameReplace.test_regex_replace_list_to_scalarc                 C  s   t |}|jdddd}| }|jddddd}|d ks>t| }|jdddd}|d ksbtt |d ddddg|d	 d
}t|| t|| t|| d S )Nr9   r   TrO   rZ   r[   r   r   r   r   )r   r(   r'   r)   r*   r+   r0   r   rM   rW   r_   r4   ra   rX   r   r   r   !test_regex_replace_str_to_numeric?  s     z6TestDataFrameReplace.test_regex_replace_str_to_numericc                 C  s   t |}|jddgddd}| }|jddgdddd}|d ksFt| }|jddgddd}|d ksntt |d ddddgddtjd	gd
}t|| t|| t|| d S )Nr9   r   r   TrO   rJ   r[   r   r   r   )r   r(   r'   r)   r   r   r*   r+   rt   r   r   r   (test_regex_replace_regex_list_to_numericN  s     z=TestDataFrameReplace.test_regex_replace_regex_list_to_numericc           
      C  s   t |}tddi}tdtji}|j||dd}| }|j||ddd}|d ksXt| }|j||dd}|d ks|tt |d ddtjtjg|d d	}	t||	 t||	 t||	 d S )
Nr   r9   TrO   rZ   r[   r   r   r   )	r   r   r   r   r(   r'   r)   r*   r+   )
r0   r   rM   s1s2rW   r_   r4   ra   rX   r   r   r   $test_regex_replace_series_of_regexes^  s     z9TestDataFrameReplace.test_regex_replace_series_of_regexesc                 C  sV   t |}t ddddg|d |d d}|dd}t|| |jjtjksRtd S )	Nr   ro   rl   r;   r   r   r   r   )	r   r(   r*   r+   r   rf   r   Zobject_r)   )r0   r   rM   rX   rW   r   r   r   /test_regex_replace_numeric_to_object_conversionp  s
     zDTestDataFrameReplace.test_regex_replace_numeric_to_object_conversionrK    )r{   ,)r|   r{   c                 C  sb   t dddgdddgdddgd}|j|d}t d	ddgdtjdgdddgd}t|| d S )
Nz1,000r   3r{   r   r   col1col2col3rO   Z1000r   r(   r   r   r*   r+   )r0   rK   rM   r6   r7   r   r   r   +test_joint_simple_replace_and_regex_replacew  s    
z@TestDataFrameReplace.test_joint_simple_replace_and_regex_replacemetacharz[]z()z\dz\wz\sc                 C  sB   t d|dgi}|d|dii}t dddgi}t|| d S )Nr   elseZparenrg   )r0   r   rM   r6   r7   r   r   r   test_replace_regex_metachar  s    z0TestDataFrameReplace.test_replace_regex_metacharzdata,to_replace,expectedZxaxZxbxr   r   r   ZxcxZxdxz^\s*$c           	      C  s:   |}|||d}|j |dd}|||d}t|| d S )Nre   TrO   r(   r*   assert_equal)	r0   datarK   r7   frame_or_seriesrh   rf   objr6   r   r   r   test_regex_replace_string_types  s
    z4TestDataFrameReplace.test_regex_replace_string_typesc                 C  s8  t j|j|jd d df< t j|j|jdd  df< |t jd}t||d t|dt j| t j|j|jd d df< t j|j|jdd  df< d|j|jd d df< tddgd}t||dd	 td
t	
dfdt	
dfg}|d
t j}tt jt	
dfdt	
dfg}t|| d S )Nr   r   r       חBr   r   )r&      -Z20150101Z20150102)r   r   r%   r&   r(   r*   r+   r,   r   pdZto_datetime)r0   r1   zero_filledrM   df1Zexpected_dfr   r   r   test_replace  s$    z!TestDataFrameReplace.test_replacec                 C  s   t dt dt dd}t|}ddg}tjdg}|||}tdd	tjtjgdd
ddgddddgd}t|| dd
g}ddg}|||}tdd	ddgddddgddddgd}t|| d S )Nr   rG   rH   r   r]   rC   r:   r   r   rD   rE   r<   r=   r>   rB   )r   r   r   r   r(   r*   r+   )r0   r   ZdfobjrV   rL   rW   rX   r   r   r   test_replace_list  s,    





z&TestDataFrameReplace.test_replace_listc              	   C  s   t ddgg tjdgg}td|i}t||}|}|g tj}t|| d}tj	t
|jddd |tjg i W 5 Q R X tj	t
|jd	dd |tjd
dgi W 5 Q R X d S )Nr   r   ro   colzwNumPy boolean array indexing assignment cannot assign {size} input values to the 1 output values where the mask is truer   )sizematchrl   dummyZalt)r   r   r   r   r*   get_objr(   r   pytestraises
ValueErrorformat)r0   r   Zserr   r7   r6   msgr   r   r   test_replace_with_empty_list  s    z1TestDataFrameReplace.test_replace_with_empty_listc                 C  s   t ddddddd}|dddd}t ddddddd}t|| |d| }t|| t ddddddd}tddd}||ddd}t ddddddd}t|| ||| }t|| d S )	N        ro   r          @r   )Zzeroone      ?      ?)r   r(   r*   r+   meanr   )r0   rM   r6   r7   sr   r   r   test_replace_series_dict  s    z-TestDataFrameReplace.test_replace_series_dictc                 C  sT   t dddgdddgg}dddd}||}ttjgd }|j}t|| d S )Nr!   barbahro   rl   r;   )r!   r   r   )r   r(   r   r   int64dtypesr*   assert_series_equal)r0   rM   mreprX   rW   r   r   r   test_replace_convert  s    
z)TestDataFrameReplace.test_replace_convertc                 C  s   |}t j|jdd|jdf< t j|jdd |jdf< |t jd}|jdd}t|| t|dt j| |t jd}|jdd}t|| t|dt j| d S )	Nr   r    r!   r"   r   ir#   r   )	r   r   r-   r.   r/   r(   r,   r*   r+   )r0   r2   r5   r6   r7   r   r   r   test_replace_mixed  s    z'TestDataFrameReplace.test_replace_mixedc                 C  s   t tddgddtddgddd}t tddgddtd	dgddd}|dd	}t|| |jdd	d
d}|d kstt|| d S )Nr   r   float64re   r   ro   r   r   r   r   Tr   )r   r   r(   r*   r+   r)   )r0   rM   r7   r6   r4   r   r   r   &test_replace_mixed_int_block_upcasting  s    z;TestDataFrameReplace.test_replace_mixed_int_block_upcastingc                 C  s   t tddgddtddgddtddgddd	}t tddgddtd
dgddtddgddd	}|dd
}t|| d S )Nr   r   r   re   r   ro   r   rl   r   r   Cr   r   r   r(   r*   r+   rp   r   r   r   &test_replace_mixed_int_block_splitting4  s    z;TestDataFrameReplace.test_replace_mixed_int_block_splittingc                 C  s   t tddgddtddgddd}t tdd	gd
dtddgddd}|dd	}t|| t td	dgd
dtdd	gd
dd}|ddgd	dg}t|| d S )Nr   r   r   re   r   ro   r   r   r!   objectrl   r   r   rp   r   r   r   test_replace_mixed2G  s&    z(TestDataFrameReplace.test_replace_mixed2c                 C  s|   t tddgddtddgddd}|d|  }| d}| }|d |jd< |d |jd	< t	|| d S )
Nr;   r   r   re   r   r   r   r   ro   )ro   ro   )
r   r   r(   r   Zto_dictr'   astyper-   r*   r+   )r0   rM   r6   r7   r   r   r   r   test_replace_mixed3a  s     z(TestDataFrameReplace.test_replace_mixed3c                 C  sX   t dddtjgddddgd}|d	 d
|d	< |dtj}t|d	 |d	  d S )Nro   rl   r;   Zsomestringshereher   r   Int64r{   )r   r   r   r   r(   r*   r   r0   rM   rW   r   r   r   1test_replace_nullable_int_with_string_doesnt_castm  s     zFTestDataFrameReplace.test_replace_nullable_int_with_string_doesnt_castrf   booleanr   ZFloat64c                 C  sV   t dddg|d}tdddg|d}|dd}tdddg|d}t|| d S )	Nro   r   re   r   r   xr   Xr   r   r(   r*   r+   )r0   rf   Znullable_serrM   r6   r7   r   r   r   !test_replace_with_nullable_columnu  s
    z6TestDataFrameReplace.test_replace_with_nullable_columnc                 C  sf   t dtddi}t dddddgi}|ddddi}t|| |ddd}t|| d S )	Nr   ro   r   r   rl   r;   r   )ro   r
   r   r   r(   r*   r+   rp   r   r   r   test_replace_simple_nested_dict~  s    z4TestDataFrameReplace.test_replace_simple_nested_dictc                 C  sj   t dtddi}t dddddgi}|dddd	}t|| |ddddd	i}t|| d S )
Nr   ro   r   r   rl   r;   r   r   )ro   r
   r   rp   r   r   r   6test_replace_simple_nested_dict_with_nonexistent_value  s    zKTestDataFrameReplace.test_replace_simple_nested_dict_with_nonexistent_valuec                 C  sN   t ddd giddi}|tjd i}t ddd gitd}t|| d S )Nr$   *   r   re   )r   r   r(   r   NAr   r*   r+   r0   rM   r6   r7   r   r   r   test_replace_NA_with_None  s    z.TestDataFrameReplace.test_replace_NA_with_Nonec                 C  sB   t tjtjg}|tjd tjd i}t d d g}t|| d S N)r   r   NaTr(   r   NaNr*   r+   r   r   r   r   test_replace_NAT_with_None  s    z/TestDataFrameReplace.test_replace_NAT_with_Nonec                 C  sn   t ddddgdd}tt ddddgd	d|d
}|dd i}tt ddd dgdd|d
}t|| d S )Nr   r   categoryre   r   r
   r;   rl   r   )idr         @g      @r   r   r   )r0   Z
cat_seriesrM   r6   r7   r   r   r   (test_replace_with_None_keeps_categorical  s    z=TestDataFrameReplace.test_replace_with_None_keeps_categoricalc                 C  s   |j d }|j d }tj|j d< d|j d< |jtjdid}|jjtjdidj}t|| |jtjdddid}| }d|j d< d|j d< |}t|| ||j d< ||j d< d S )Nr   ro   r   ro   r   rK   r   )r-   r   r   r(   rk   r*   r+   r'   )r0   r1   Z
orig_valueZorig2r6   r7   r3   r   r   r   test_replace_value_is_none  s    





z/TestDataFrameReplace.test_replace_value_is_nonec                 C  s  |  tj}tj|j|jd d df< tj|j|jdd  df< |tjd}t	||
d t	|dtj| tj|j|jd d df< tj|j|jdd  df< d|j|jd d df< |d }tj||dk< ||d< |j
dd}t	||j
dd d S )Nr   r   r   r   r   bfill)method)r'   r   r   float32r   r%   r&   r(   r*   r+   r,   )r0   r1   r3   r   r   r6   r   r   r   test_replace_for_new_dtypes  s    z0TestDataFrameReplace.test_replace_for_new_dtypesz"frame, to_replace, value, expectedZintsro   rl   r   re   Zboolscomplexy              ?y               @y              @y                Z
datetime64i  r      r   i     r    r!   )dtstrr   r   ih  
   i  20130101
US/EasternZperiodstzr   20130102r   2013010420130103r   r   r   c                 C  s   | ||}t|| d S r   )r(   r*   r+   )r0   framerK   r$   r7   r6   r   r   r   test_replace_dtypes  s    jz(TestDataFrameReplace.test_replace_dtypesc           	   	     s  t jddd ddddtt jdt jgdddgddd	gd}| } fd
d| D }t|t| |dddgdddg}tt jdt jgdddgddd	gd}t|| ddddtt jdt jgdddgddd	gd}|t j}fdd| D }t|t| t jddg dddg| }| }t	 D ](\}}|j||dd}|d ksXt
qXt|| d}tjt|d | dd   W 5 Q R X d S )Nr   r{   r   r   missingrl   r   asdffdc                   s&   i | ]\}}||  | | qS r   r(   .0kvto_reprL   r   r   
<dictcomp>Q  s      zLTestDataFrameReplace.test_replace_input_formats_listlike.<locals>.<dictcomp>c                   s$   i | ]\}}|| tj | qS r   )r(   r   r   r   )rL   r   r   r   `  s      Tr   z:Replacement lists must match in length\. Expecting 3 got 2r   ro   )r   r   r   infr(   itemsr*   r+   r'   zipr)   r   r   r   )	r0   rM   filledr7   r6   r   r$   r4   r   r   r   r   #test_replace_input_formats_listlikeI  s>       
z8TestDataFrameReplace.test_replace_input_formats_listlikec              	     s   t tjdtjgdddgdddgd}tjddd | d} fdd	| D }t|t | d
}tj	t
|d | tjddg W 5 Q R X tjddg | d}| } D ] }|j|ddd}|d kstqt|| d S )Nr   rl   r   r{   r   r   r   c                   s"   i | ]\}}||  | d qS )r   r   r   r   r   r   r   y  s      zJTestDataFrameReplace.test_replace_input_formats_scalar.<locals>.<dictcomp>z.value argument must be scalar, dict, or Seriesr   r   Tr   )r   r   r   r   r(   r   r*   r+   r   r   	TypeErrorr'   r)   )r0   rM   r   r7   r   r6   r   r4   r   r  r   !test_replace_input_formats_scalarq  s"     z6TestDataFrameReplace.test_replace_input_formats_scalarc                 C  s   d S r   r   )r0   r   r   r   test_replace_limit  s    z'TestDataFrameReplace.test_replace_limitc                 C  sR   t dddddd}ddd	d
dd}t d
dd	ddd}||}t|| d S NStrongly AgreeAgreeNeutralDisagreeStrongly Disagree)r   ro   rl   r;   r
   r
   rl   r;   r   ro   )r  r
  r	  r  r  r   r(   r*   r   r0   Zanswerweightsr7   r6   r   r   r   test_replace_dict_no_regex  s"    

z/TestDataFrameReplace.test_replace_dict_no_regexc                 C  sV   t dddddd}t ddd	d
dd}t d
dd	ddd}||}t|| d S r  r  r  r   r   r   test_replace_series_no_regex  s&    		
z1TestDataFrameReplace.test_replace_series_no_regexc                 C  s   t dtjdgi}|jtjdddid}|jdtjfddgd}|jdtjgddgd}t dddgi}t|| t|| t|| d S )Nr   ro   r   r   r   rK   r$   r   r   r   r(   r*   r+   )r0   rM   Zres1r_   ra   r7   r   r   r   6test_replace_dict_tuple_list_ordering_remains_the_same  s    zKTestDataFrameReplace.test_replace_dict_tuple_list_ordering_remains_the_samec                 C  sP   t ddddgddddgddddgddddgd}|d	di}t|| d S )
Nro   rl   r;   0ZvrZbtZvo)ZfolZT_oppZT_DirZT_Enhz\Drg   r   r   r   r   )test_replace_doesnt_replace_without_regex  s    



z>TestDataFrameReplace.test_replace_doesnt_replace_without_regexc                 C  sF   t ddgtdd}|dd}t ddg|jd}t|| d S )NTFabr   r   )r   r   r(   r   r*   r+   r   r   r   r   test_replace_bool_with_string  s    z2TestDataFrameReplace.test_replace_bool_with_stringc                 C  s2   t tjdddk}|dd}t|| d S )Nrl   r   r   Zfdsa)r   r   randomrandr(   r*   r+   r0   rM   r6   r   r   r   (test_replace_pure_bool_with_string_no_op  s    z=TestDataFrameReplace.test_replace_pure_bool_with_string_no_opc                 C  sD   t tjdddk}|dd}t tjdtd}t|| d S )Nrl   r   FT)rl   rl   re   )	r   r   r  r  r(   onesboolr*   r+   r   r   r   r   test_replace_bool_with_bool  s    z0TestDataFrameReplace.test_replace_bool_with_boolc                 C  sL   t ddgddgd}|ddd}t ddgddgd}t|| d S )NTFr   ro   Zasdbyes)r   Trg   r   r   r   r   %test_replace_with_dict_with_bool_keys  s    z:TestDataFrameReplace.test_replace_with_dict_with_bool_keysc                 C  sV   t ddgddgd}|ddi}t|| |d ddi}t||d  d S )	Nro   rl   r;   r
   )Y0ZY1Zreplace_stringtestr"  )r   r(   r*   r+   r   r  r   r   r   !test_replace_dict_strings_vs_ints  s
    z6TestDataFrameReplace.test_replace_dict_strings_vs_intsc                 C  s<   t dddgi}|tjtj gtj}|}t|| d S )Nr   T)r   r(   r   r   r   r*   r+   )r0   rM   rrC   r   r   r   test_replace_truthy  s    z(TestDataFrameReplace.test_replace_truthyc              	   C  sj   t dttddi}|dtttddtddi}|tttddtdd}t|| d S )Nr   ro   r   rl      )r   r   r   r(   dictr   r*   r+   r   r   r   r   -test_nested_dict_overlapping_keys_replace_int  s    $ zBTestDataFrameReplace.test_nested_dict_overlapping_keys_replace_intc                 C  sp   t dd}|t}t ddt}td|i}|tt||}|dtt||i}t	|| d S )Nro   r   rl   r'  r   )
r   Zaranger   r   r   r(   r(  r   r*   r+   )r0   r   ZastrZbstrrM   r6   r7   r   r   r   -test_nested_dict_overlapping_keys_replace_str   s    
zBTestDataFrameReplace.test_nested_dict_overlapping_keys_replace_strc                 C  s   t ddddgi}|ddddi}t ddddgi}t|| t ddddgi}|dddd	i}t ddddgi}t|| d S )
Nr   TFYN)TFr   ro   r  rg   )r0   rM   rW   expectr   r   r   test_replace_swapping_bug
  s    z.TestDataFrameReplace.test_replace_swapping_bugc                   s   dt jddddt jddddt jddddt jdd	ddt jddddt jddddt jd
ddddi tdddddddgdgd}t|jjt d  ksttd fdd|jjD i}|jd dkst|	 }t
|| d S )Nfnamei     M)yearmonthfreqro   i  r   r
   i  	   out_augmented_AUG_2011.jsonout_augmented_JAN_2011.jsonout_augmented_MAY_2012.jsonout_augmented_SUBSIDY_WEEK.jsonout_augmented_AUG_2012.jsonout_augmented_MAY_2011.jsonout_augmented_SEP_2013.jsonr;  r=  r:  r9  r<  r7  r8  r.   c                   s   g | ]} d  | qS r/  r   r   r   r   r   r   
<listcomp>2  s     z<TestDataFrameReplace.test_replace_period.<locals>.<listcomp>r   z	Period[M])r   Periodr   setr/  rL   keysr)   r   r(   r*   r+   rp   r   rA  r   test_replace_period  s<      	 
z(TestDataFrameReplace.test_replace_periodc              	     s   dt dt dt dt dt dt dt dd	i td
ddddddgdgd}t|jjt d  kspttd fdd|jjD i}| }t	|| d S )Nr/  z2011-08z2011-01z2012-05z2011-04z2012-08z2011-05z2013-09r6  r;  r=  r:  r9  r<  r7  r8  r>  c                   s   g | ]} d  | qS r?  r   r@  rA  r   r   rB  Q  s     z>TestDataFrameReplace.test_replace_datetime.<locals>.<listcomp>)
r   r   rD  r/  rL   rE  r)   r(   r*   r+   rp   r   rA  r   test_replace_datetime7  s2    	 
z*TestDataFrameReplace.test_replace_datetimec                 C  s&  t tdddddtjdgd}|tjd}t tddddtdddgd	d
d}t|| |d}t|| |dtj}t tddddtjtjdgd}t|| |t	dddt	ddd}t t	dddt	dddt	dddgdtjdgd}t|| |
 }tj|jd< |dtjit	ddd}t|| |
 }tj|jd< |dtjit	ddd}t t	dddt	ddddt	dddgdtjdgd}t|| |
 }tj|jd< |dtjit	d}t t	dddt	dt	dddgdtjdgd}t|| d S )Nr   r;   r   r   r   rl   r   ro   r   re   r   r   r   r   r   r   z
US/Pacific)r   r   r   r   r(   r   r*   r+   r,   r   r'   r-   r   r   Z
tz_convertr   r   r   r   test_replace_datetimetzU  s|    
















z,TestDataFrameReplace.test_replace_datetimetzc              	   C  sh   t |}t||i  t||tg td t||di i t||tdi i d S )Nre   r   )r   r*   r+   r(   r   r   )r0   r   rM   r   r   r    test_replace_with_empty_dictlike  s
    z5TestDataFrameReplace.test_replace_with_empty_dictlikezto_replace, method, expectedr   r   g      @Zffillpad)ro   rl   c                 C  sL   t dddgdtjdgdddgd	}|j|d |d
}t |}t|| d S )Nr   ro   rl   r   r   r   r   r   r   )rK   r$   r   r  )r0   rK   r   r7   rM   r6   r   r   r   test_replace_method  s    "$z(TestDataFrameReplace.test_replace_methodzreplace_dict, final_datac              	   C  s   t ddgddggddgdd}t|}tj|d d df ddgd	}|d dkrZddgnddg}tj|d d df |d	}t ||d
}||d}t|| d}	tj	t
|	d t|| W 5 Q R X |j|ddd}
|
d kst
t|| d S )Nro   rl   r   r   r   )r.   rf   r   r;   )
categoriesr   zHAttributes of DataFrame.iloc\[:, 0\] \(column name=\"a\"\) are differentr   Tr   )r   r   rr   r   ZCategoricalr(   r*   r+   r   r   r)   )r0   Zreplace_dictZ
final_datarM   r   Zex_catr   r7   r6   r   r4   r   r   r   "test_categorical_replace_with_dict  s    
z7TestDataFrameReplace.test_categorical_replace_with_dictzdf, to_replace, expr
   r'  )r   r   )r
   r   r'  4567)rN  rO  rP  c                 C  s*   t |}t |}||}t|| d S r   rg   )r0   rM   rK   expr7   r6   r   r   r   test_replace_commutative  s    
z-TestDataFrameReplace.test_replace_commutativereplacerZ20170827c                 C  s4   t dg}|||d}t |g}t|| d S )Nr   r   rg   )r0   requestrT  rM   r6   r7   r   r   r   test_replace_replacer_dtype  s    

z0TestDataFrameReplace.test_replace_replacer_dtypec                 C  sP   t ddddddgidd}|dd	}t dd	ddddgidd}t|| d S )
Ngrpro   rl   r;   r
   r   r   re   r   rg   r   r   r   r   !test_replace_after_convert_dtypes   s    z6TestDataFrameReplace.test_replace_after_convert_dtypesc              	   C  sJ   t dddgdddgd}d}tjt|d	 |d
d  W 5 Q R X d S )Nr   zb r   zd ze zf )r   twozZExpecting 'to_replace' to be either a scalar, array-like, dict or None, got invalid type.*r   c                 S  s   |   S r   )strip)r   r   r   r   <lambda>0      zFTestDataFrameReplace.test_replace_invalid_to_replace.<locals>.<lambda>)r   r   r   r  r(   )r0   rM   r   r   r   r   test_replace_invalid_to_replace'  s
    z4TestDataFrameReplace.test_replace_invalid_to_replacefloatr   r   r$   c                 C  s<   t td|d}|jd tj tjg|d}t|| d S )Nrl   re   r  )r   r   Zeyer(   r   r*   r+   )r0   rf   r$   rM   r6   r   r   r   "test_replace_no_replacement_dtypes2  s    z7TestDataFrameReplace.test_replace_no_replacement_dtypesreplacementc                 C  s|   t dddgdddgddd	gd
}td|_t dddgdddg|dd	gd
}td|_|d d||d< t|| d S )Nro   rl   r;   r
   r   r'  r   r0  r5  )r   A1r   ZAABr   )r   r   r.   r(   r*   r+   )r0   r`  r6   r7   r   r   r   #test_replace_with_duplicate_columns:  s    "

z8TestDataFrameReplace.test_replace_with_duplicate_columnsz2020-01c                 C  sB   t d|gd i}t||}| }|dd}t|| d S )NZPerr;   r   r   )r   r*   r   r'   r(   r   )r0   r   r$   r   r7   r6   r   r   r   test_replace_ea_ignore_floatI  s
    z1TestDataFrameReplace.test_replace_ea_ignore_floatc                 C  sP  ddddgddddgd	d
ddgddddgddddgd}t |dddd}|d jjddddgdd|d< |d jjddddgdd|d< ddddgddddgd	d
ddgddddgddddgd}t |dddd}|d jjddddgdd|d< |d jjddddgdd|d< |dd}|dd}|dd}t|| d S )!zt
        Test for #23305: to ensure category dtypes are maintained
        after replace with direct values
        ro   rl   r;   r
   r   r   r   r   g      ?g      @g      @g      @cat1Zcat2Zcat3Zcat4obj1obj2Zobj3Zobj4)r   r   r   col4Zcol5r   r   )r   rg  r   T)Zorderedrg  zcatXobj9N)r   r   catZreorder_categoriesr(   r*   r+   r0   Z
input_dictZinput_dfexpected_dictr7   r6   r   r   r    test_replace_value_category_typeS  sL    







 


 








 


 
z5TestDataFrameReplace.test_replace_value_category_typec                 C  sv   dgdgdgd}t |ddddd}dgdgd	gd}t |ddddd}|ddd	d
}t|| dS )zf
        Test to ensure category dtypes are maintained
        after replace with dict values
        r   re  rd  r~   rh  r   ri  rk  rj  )r   re  rd  N)r   r   r(   r*   r+   rm  r   r   r   test_replace_dict_category_type  s    



z4TestDataFrameReplace.test_replace_dict_category_typec                 C  sH   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$ri  TrO   )r   recompiler(   r*   r+   )r0   rM   rI   r6   r7   r   r   r    test_replace_with_compiled_regex  s
    
z5TestDataFrameReplace.test_replace_with_compiled_regexc                 C  sZ   t dtddtddgi}|dtdddii}t dddgi}t|| d S )Nr   r   ro   r   )r   r   Intervalr(   r*   r+   r   r   r   r   test_replace_intervals  s     z+TestDataFrameReplace.test_replace_intervalsc                 C  sN   dddddi}t dtdi}||}t dtdi}t|| d S )NZpositivero   r   )u   正面u   中立u   负面r;   )r   r   r  r(   r*   r+   )r0   Zcolumns_values_mapr   r6   r7   r   r   r   test_replace_unicode  s
    
z)TestDataFrameReplace.test_replace_unicodec                 C  s8   |dg d}| }|d tji}t|| d S )Nr>   z|S)r   r'   r(   r   r   r*   r   )r0   r   r   r7   r   r   r   test_replace_bytes  s    z'TestDataFrameReplace.test_replace_bytesz!data, to_replace, value, expectedr   boxc           	      C  s0   ||}||}| |||}t|| d S r   r   )	r0   r   rK   r$   r7   rx  r   r   r6   r   r   r   !test_replace_list_with_mixed_type  s    z6TestDataFrameReplace.test_replace_list_with_mixed_typevalc                 C  sj   t dd|gi}||d }t ddd gitd}t|| t dd|gi}||d i}t|| d S )Nr   ro   re   )r   r(   r   r*   r+   )r0   rz  rM   r6   r7   r   r   r   %test_replace_value_none_dtype_numeric  s    z:TestDataFrameReplace.test_replace_value_none_dtype_numericN)b__name__
__module____qualname__r8   r   markparametrizer   r   rN   rY   r\   r`   rb   ri   rq   rs   ru   rv   ry   rz   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   Zint32Zint16r   r   r   r   r   r  r  r  r  r  r  r  r  r  r  r!  r$  r&  r)  r*  r.  rF  rG  rH  rI  rK  rM  rS  Zint8r   r   rV  rX  r]  r_  rb  rC  rt  rc  ro  rp  rs  ru  rv  rw  r   tuplerr   ry  r{  r   r   r   r   r      s  






%)(E 


	

& 













i
(
	
"R	$$ 
2







	3		r   c                	   @  s   e Zd Zejdededdedeeddgejddej	fdgejd	d
dgejdd
dgejdd
dgdd Z
ejddd
gdd Zdd Zdd ZdS )TestDataFrameReplaceRegexr   r   rG   r   r
   zto_replace,valuer9   )r?   z\1\1\1compile_regexTFregex_kwargr   c                 C  s   t |}| }|rt|}|r,|}	d }nd}	|j||||	d}
|rV|
d ksRt|}
|tjkrhtj}nd}||j|d dkdf< t	
|
| d S )NTrZ   z...r   r]   )r   r'   rq  rr  r(   r)   r   r   r%   r*   r+   )r0   r   rK   r$   r  r  r   rM   r7   rI   r6   Zexpected_replace_valr   r   r   test_regex_replace_scalar  s"    

z3TestDataFrameReplaceRegex.test_regex_replace_scalarrI   c                 C  s   t dgdgd}t dgdgd}|jdd|d}t|| t dgdgd}t dgdgd}|jdd|d}t|| d S )Nr  r   ro   )rK   r$   rI   1rg   )r0   rI   r   Zexpected_df1Z
result_df1Zdf2Zexpected_df2Z
result_df2r   r   r   test_replace_regex_dtype_frame	  s    z8TestDataFrameReplaceRegex.test_replace_regex_dtype_framec                 C  sZ   t dddgdddgd}|dtjd}t dtjdgtjddgd}t|| d S )Nr   ro   rl   r   r  r   r   r   r   r   +test_replace_with_value_also_being_replaced  s    zETestDataFrameReplaceRegex.test_replace_with_value_also_being_replacedc                 C  sP   t ddd dgdd ddgddd}| }|jddgd	d gd
}t|| d S )Nr   rY  Zthreer   r   re   r]   def_r  )r   r'   r(   r*   r+   rp   r   r   r   'test_replace_categorical_no_replacement  s    

zATestDataFrameReplaceRegex.test_replace_categorical_no_replacementN)r|  r}  r~  r   r  r  r   r   r   r   r  r  r  r  r   r   r   r   r    s$    
r  )
__future__r   r   rq  Znumpyr   r   Zpandasr   r   r   r   r   r   Zpandas._testingZ_testingr*   Zfixturer   r   r   r  r   r   r   r   <module>   s0              K