U
    f/eR                    @   s  d dl mZm Z 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
 d dlmZ d dlZd dlmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ  d dl!m"Z" d dl#m$Z$m%Z% dZ&d	Z'e'e&fd
dZ(dd Z)dd Z*ej+e) dd ddd Z,ej+e) dd ddd Z-ej+e* dd ddd Z.ej+dd Z/G dd dZ0dd  Z1G d!d" d"Z2ej+d#d$ Z3ej+d%d& Z4G d'd( d(Z5ej+d)d* Z6ej+d+d, Z7G d-d. d.Z8ej9j:d/ed0d1gd0d1gd2d3ed4d5gd2d6ed7d8gd2d6ed7d8gd2d6ed d8d2d9ed:d;gd2d6gd<d d=d>d? Z;ej9:d@dAdBgdddCdCd1fdDddAdBgddCdEd1fdddAdBgdEdCd1fdAdBgdddCdCdfdFddAdBgddCdEdfdddAdBgdEdCdfgdGdH Z<ej9:dId d dJdKidLdMgfd d dJdNid dMgfd d dJdOidPdQgfd d dJdRdSgidPdQgfdTd dJdUidTd gfdVdVdJdWidXdVgfdYdYdJdUidYdZgfdTdTdJdWid[dTgfdTdYdJdWidTdYgfdTdTdJd\idTd[gfd d dJd]id^d gfdTdTi d[d_gfd d i dPdQgfgd`da Z=ej9:dbd&edcdddegdfdgej>gdhdidjgdkfdAedcddd7degdfdgdlej>gdhdiej>djgdkfgdmdn Z?ej9:dodpdqdrgdsdt Z@ej9:dJd$d&hd d dugdvdw ZAej9:dxdydTdTeBdTdzfgd{d| ZCej9:d}d~dgej9:ddEdCgdd ZDdd ZEdd ZFdd ZGdd ZHej9:dddgdd ZIdd ZJej9:dddgej9:ddTdEdddgfdTdEdddgfgdd ZKej9:dddgej9:dddTiddgfddTiddgfgdd ZLej9:dddgej9:dddEiddEigdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdS )    )datedatetime	timedeltaN)is_categorical_dtypeis_object_dtype)CategoricalDtype)CategoricalCategoricalIndex	DataFrameDatetimeIndexFloat64Index
Int64IndexIntervalIndex
MultiIndexPeriodIndex
RangeIndexSeriesTimedeltaIndexUInt64Index)concat)
MergeErrormerge2      c                 C   s^   t t| }tt|||  }t||k rPtt ||d |t|   }t| |S N)listrangenpZasarraytilelenrandomshuffle)ngroupsnZunique_groupsarr r%   I/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/reshape/merge/test_merge.pyget_test_data.   s    "
r'   c                   C   sT   t dgddt dgddt dgt dgt dgt tdgt tjdd	d
ggS )N   int64dtypeInt64gGz?fooT
2018-01-01
US/Easterntz)r   pd	Timestampr%   r%   r%   r&   
get_series9   s    r4   c                   C   s8   t tjgddt tjgddt tjgddt tjggS )Nr,   r*   floatobject)r   r   nanr2   NaTr%   r%   r%   r&   get_series_naE   s
    
r9   c                 C   s   | j jS r   r+   namexr%   r%   r&   <lambda>N       r>   )paramsidsc                 C   s   | j S )zV
    A parametrized fixture returning a variety of Series of different
    dtypes
    paramrequestr%   r%   r&   series_of_dtypeN   s    rF   c                 C   s   | j jS r   r:   r<   r%   r%   r&   r>   W   r?   c                 C   s   | j S )zk
    A duplicate of the series_of_dtype fixture, so that it can be used
    twice by a single function
    rB   rD   r%   r%   r&   series_of_dtype2W   s    rG   c                 C   s   | j jS r   r:   r<   r%   r%   r&   r>   `   r?   c                 C   s   | j S )zU
    A parametrized fixture returning a variety of Series with all NA
    values
    rB   rD   r%   r%   r&   series_of_dtype_all_na`   s    rH   c                  C   sR   t ddgddgddgd} t ddddd	gddddd	gdddddgd
}| |fS )Nr   r(      ab)col1col_conflictcol_left         )rL   rM   	col_rightr
   )df1df2r%   r%   r&   dfs_for_indicatori   s    rV   c                   @   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d#d$ Zd%d& Zd'd( Zejd)d*d*d+d*d,d-d.d*d/d.d,d0gd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Zejd=d>d?d?d@d?d?gfd*d@d?d?d?d?gfgejdAdBdCgdDdE Z dFdG Z!dHdI Z"dJdK Z#dLdM Z$dNdO Z%dPdQ Z&ejdRdSdTdUdVdWdXdYgdZd[ Z'd\d] Z(d^d_ Z)d`da Z*dbdc Z+ddde Z,dfdg Z-dhdi Z.djdk Z/dldm Z0dndo Z1dpdq Z2drds Z3dtdu Z4dvdw Z5dxdy Z6ejdAdCdzgejd{e7d?d|d}ge7d?d|d}d~d~d~gfe8dddge8ddde9j:e9j:e9j:gfe;d?d|dge;d?d|dd~d~d~gfe<d?d|dge;d?d|dd~d~d~gfe=>dddge=>ddde?j@e?j@e?j@gfeAdddgdSdeAddde9j:e9j:e9j:gdSdfeBdddgeBddde9j:e9j:e9j:gfgdd ZCdd ZDejdAdBdCgdd ZEdd ZFdd ZGd~S )	TestMergec                 C   s   t t t tjttjtd| _| j| jd dk | _t ttd dttd td dtjtd d| _t d	d
ddddd	gtjdd| _	t dtjdidd
dd	gd| _
d S )N)key1key2data1data2rY   r(   rQ   )r#   rI   )r"   r#   )rX   rY   valuerJ   rK   cde   keyv1v2rP   index)r
   r'   r   r    randnNdfNGROUPSrU   leftright)selfmethodr%   r%   r&   setup_methodw   s$    


zTestMerge.setup_methodc                 C   sR   t  }t dddgiddgdd}t||ddd}t dg ig dd}t|| d S )	NrJ   r(   rI   r   r)   )rf   r+   T
left_indexright_indexr
   r   tmassert_frame_equal)rm   df_emptyZdf_aresultexpectedr%   r%   r&   test_merge_inner_join_empty   s
    z%TestMerge.test_merge_inner_join_emptyc                 C   s4   t | j| j}t | j| jddgd}t|| d S )NrX   rY   on)r   ri   rU   rt   ru   )rm   joinedexpr%   r%   r&   test_merge_common   s    zTestMerge.test_merge_commonc                 C   sZ   t ddddgddddgddddgddddgd}|t}|}t||}t|| d S )Nr(   r   rI   rO   )r   r(   rI   rO   )r
   astyper5   r   rt   ru   rm   rk   rl   rx   rw   r%   r%   r&   test_merge_non_string_columns   s    ,

z'TestMerge.test_merge_non_string_columnsc                 C   sN   | j d}| jd}t||dd}t| j | jddd}t|| d S )NrX   rz   )ri   	set_indexrU   r   rt   ru   rm   rk   rl   rw   rx   r%   r%   r&   test_merge_index_as_on_arg   s
    z$TestMerge.test_merge_index_as_on_argc                 C   s   t dddddddgtjdd}t dtjd	iddddgd
}t||ddddd}t||ddddd}t||jd d |jf  t||ddddd}t||ddddd}t||jd d |jf  d S )NrJ   rK   r]   r^   r_   r`   ra   rd   rP   re   rb   Trk   F)left_onrr   howsortrl   )right_onrq   r   r   )	r
   r   r    rg   r   rt   ru   loccolumns)rm   rk   rl   Zmerged1merged2r%   r%   r&   (test_merge_index_singlekey_right_vs_left   sL                         z2TestMerge.test_merge_index_singlekey_right_vs_leftc                 C   s   t dddddddgtjdd}t dtjd	iddddgd
}t||dddd}|j|ddj|j }t	|| t||dddd}|j|ddj|j }t	||jd d |j
f  d S )NrJ   rK   r]   r^   r_   r`   ra   rd   rP   re   rb   Tinnerr   rr   r   rz   )r   rq   r   )r
   r   r    rg   r   joinr   rf   rt   ru   r   r   r%   r%   r&    test_merge_index_singlekey_inner   s     z*TestMerge.test_merge_index_singlekey_innerc              	   C   s   d}t jtjj|d t| j| jdd W 5 Q R X d}t jtjj|d t| j| jdd W 5 Q R X d}t jtjj|d t| j| jddd	 W 5 Q R X d
}t jt|d  t| j	| j
dgddgd W 5 Q R X d S )Nz&Must pass right_on or right_index=TruematchT)rq   z$Must pass left_on or left_index=True)rr   zRCan only pass argument "on" OR "left_on" and "right_on", not a combination of bothrb   )r   r{   z)len\(right_on\) must equal len\(left_on\)rX   rY   r   r   )pytestraisesr2   errorsr   r   rk   rl   
ValueErrorri   rU   rm   msgr%   r%   r&   test_merge_misspecified   s    z!TestMerge.test_merge_misspecifiedc              	   C   s   d}t jt|d  t| j| jddddgd W 5 Q R X d}t jt|d  t| j| jdddgdd W 5 Q R X t jt|d$ t| j| jdddgddgd W 5 Q R X d S )	Nz>right_index parameter must be of type bool, not <class 'list'>r   rk   FrX   rY   r   rq   rr   z=left_index parameter must be of type bool, not <class 'list'>)r   r   r   r   ri   rU   r   r%   r%   r&   &test_index_and_on_parameters_confusion   s4    z0TestMerge.test_index_and_on_parameters_confusionc                 C   sT   t | j| jdd}| jd  d  }t||ks8td|ksDtd|ksPtd S )Nrb   rz   rI   Zv1_xZv1_y)r   rk   Zvalue_countssumr   AssertionError)rm   mergedZexp_lenr%   r%   r&   test_merge_overlap  s
    zTestMerge.test_merge_overlapc                 C   s  t ddddgddddgd}t ddd	dgd
dddgd}|j|ddddd}tddddddtjgdd}t|d | tdtjddddd	gdd}t|d | tddddddtjgdd}t|d | tdtjd
dd
ddgdd}t|d | d S )Nr-   barZbazr(   rI   rO   rP   )lkeyr\   ZquxrQ      r`   r   )rkeyr\   r   r   outerT)r   r   r   r   r;   value_xvalue_y)r
   r   r   r   r7   rt   assert_series_equal)rm   rk   rl   r   r}   r%   r%   r&   %test_merge_different_column_key_names  s"        z/TestMerge.test_merge_different_column_key_namesc                 C   sz   t dddtdd}t dddtdd}t||d	d	d	d
}d|d< |d dk sZtd|d< |d dk svtd S )Nr   r(   rJ   rK   
   re   r-   r   r]   r^   Trq   rr   copyr   rJ   peekaboor^   )r
   r   r   allr   )rm   rk   rl   r   r%   r%   r&   test_merge_copy#  s    zTestMerge.test_merge_copyc                 C   s   t dddtdd}t dddtdd}t||d	d	d
d}|r||jjd |jjd ks^t|jjd |jjd kstn8d|d< |d dk std|d< |d dk std S )Nr   r(   r   r   re   r-   r   r   TFr   rI   r   rJ   r   r^   )r
   r   r   _mgrarraysr   r   )rm   using_array_managerrk   rl   r   r%   r%   r&   test_merge_nocopy/  s    zTestMerge.test_merge_nocopyc                 C   s   t dddddgttddddgd}t ddddd	dgttd
d}t||ddd}t dddddddd	dg	tddddddd	tjtjg	dddddddd	dg	ddddgd}t|| d S )Nr(   rI   rO   rQ   rb   r\   r\   rb   r   rP   r   )rb   rvaluer   r{   r   r   )rb   r\   r   r   )	r
   r   r   r   r   arrayr7   rt   ru   )rm   rk   rl   r|   rx   r%   r%   r&   "test_intelligently_handle_join_keyE  s     "z,TestMerge.test_intelligently_handle_join_keyc                 C   s   t dgdgd}t dgdgd}t||dd}|d jd	ksDtt d
gdgd}t dgdgd}t||dd}|d jdkstt ddgi}t ddgi}tdg}tdg}t||||dd}|d jd	kstd S )Nr(   r   ra   rI      r   r   rb   r)   TFr   r6   valr   r   r   key_0)r
   r   r+   r   r   r   )rm   rT   rU   ri   r   r   r%   r%   r&   test_merge_join_key_dtype_castX  s    z(TestMerge.test_merge_join_key_dtype_castc                 C   s  t dddddgtddddgd}t d	td
i}tddddddg}t||d|dd}t|||ddd}t|d |d  |d   st	|d   st	t dtdidgd}t d	td
i}tdddddg}tddddddg}t||||dd}t|d t
dddddddddg	dd t dtdi}t d	td
i}tjddddddgtjd}t||d|dd}t|d t
|dd d S )Nr(   rI   rO   rQ   r   r\   rb   r   r   r   rP   r   r   r   r   r   r*   T)rq   r   r   )r
   r   aranger   r   rt   r   Znotnar   r   r   r)   )rm   rk   rl   rb   r   r   r   r   r%   r%   r&   test_handle_join_key_pass_arrayo  s2      z)TestMerge.test_handle_join_key_pass_arrayc              	   C   sx   t  }tddgi|gd}tdddgi||gd}dd  dd  d	d
 dd
 }tjt|d t|| W 5 Q R X d S )Nr=   rJ   re   yrK   r]   z>No common columns to perform merge on. Merge options: left_on=z, right_on=z, left_index=Fz, right_index=r   )r   nowr
   r   r   r   r   )rm   dtrT   rU   r   r%   r%   r&   &test_no_overlap_more_informative_error  s    z0TestMerge.test_no_overlap_more_informative_errorc                 C   s   t ddd}t ddd}t ddd}t ddd}tddgi|gd	}td
ddgi||gd	}t|| tddddgi|||gd	}td
ddddddgi||||||gd	}t|| tdddgi||gd	}td
ddgi||gd	}t|| d S )N  rQ   r(   rI   rO   rP   r=   rJ   re   r   rK   r]   qr^   r_   fghr   r
   _check_merge)rm   r   dt2dt3Zdt4rT   rU   r%   r%   r&   test_merge_non_unique_indexes  s     
 
z'TestMerge.test_merge_non_unique_indexesc                 C   sv   t ddd}t ddd}t ddd}tdddd	d
gi||||gd}tddddddgi|||||gd}t|| d S )Nr   rQ   r(   rI   rO   r=   rJ   rK   r]   r^   re   r   r_   r   r   z hir   )rm   r   r   r   rT   rU   r%   r%   r&   (test_merge_non_unique_index_many_to_many  s      z2TestMerge.test_merge_non_unique_index_many_to_manyc                 C   sZ   t dgdgd}t dg i}t||ddd}t|| t||ddd}t|| d S )Nr(   rI   r   rb   rk   r   rl   rs   )rm   rk   rl   rw   r%   r%   r&   test_left_merge_empty_dataframe  s    z)TestMerge.test_left_merge_empty_dataframekwargTrp   r=   rq   r   rJ   r   rr   r   c                 C   sj   t dddgd}t dddgd}t ddddddgtjg tdtd	}t||fd
|i|}t|| d S )NrJ   rK   r]   r   r=   r   zr*   )r   rf   r+   r   )r
   r2   Indexr6   r   rt   ru   )rm   	join_typer   rk   rl   exp_inrw   r%   r%   r&   !test_merge_left_empty_right_empty  s    z+TestMerge.test_merge_left_empty_right_emptyc              	      st  t dddgd t dddgdd	d
gdddggdddgdt tjtjgd tdtjtjgd tdtjtjgd tddddgdd	dgdd
dgdddddddgd}|dd }|jt|_ fdd} fdd}ddddddfD ]}||| ||| qddd}||| dddg|d< ||| ddd}||| tjtjgd td|d< ||| d S )NrJ   rK   r]   r   r(   rI   rO   rP   rQ   r   r`   r   	   r=   r   r   r*   rJ   rK   r]   r=   r   r   r   c                    sH   t  fddi|}t||  t  fddi|}t||  d S )Nr   r   rk   r   rt   ru   r}   r   rw   rk   rl   r%   r&   check1  s    z>TestMerge.test_merge_left_empty_right_notempty.<locals>.check1c                    sH   t  fddi|}t||  t  fddi|}t||  d S )Nr   rl   r   r   r   r   r%   r&   check2  s    z>TestMerge.test_merge_left_empty_right_notempty.<locals>.check2Trp   r   r   r   r
   r   r   r7   r6   rf   r   )rm   exp_outr   r   r   r   r%   r   r&   $test_merge_left_empty_right_notempty  s:    *





z.TestMerge.test_merge_left_empty_right_notemptyc              
      s   t dddgdddgddd	ggd
ddgdt dddgdt dddgdddgddd	gtjtjgd tdtjtjgd tdtjtjgd tddd
dddddgddd jt_fdd  fddd S )Nr(   rI   rO   rP   rQ   r   r`   r   r   rJ   rK   r]   r   r=   r   r   r*   r   r   c                    sH   t  fddi|}t||  t  fddi|}t||  d S )Nr   r   rl   r   r   r   r%   r&   r   #  s    z>TestMerge.test_merge_left_notempty_right_empty.<locals>.check1c                    s   t fddi|}t||  t fddi|}t||  ddddddddd	ddd
fD ]} | | qhd S )Nr   rk   r   Trp   r=   r   rJ   r   r   r   r   r   r   r   r   rk   rl   r%   r&   r   )  s    
z>TestMerge.test_merge_left_notempty_right_empty.<locals>.check2r   rm   r%   r   r&   $test_merge_left_notempty_right_empty  s     *z.TestMerge.test_merge_left_notempty_right_emptyc                 C   s~   t ||dddgd}|d d }t t|jd dt|jd dt|jd ddddd	gd}|j|dd
}t|| d S )Nr   rb   r\   r   r   r*   )r   rb   r   r   r   rz   )r
   r   dtypesr   rt   ru   )rm   rF   rG   ri   rv   rx   actualr%   r%   r&   test_merge_empty_frame9  s    z TestMerge.test_merge_empty_framec                 C   sd   t ||dddgd}t ||dddgd}t |||ddddgd}|j|dd}t|| d S )	Nr   rb   r\   r   rb   r   r   r   r   rz   rs   )rm   rF   rH   Zdf_leftZdf_rightrx   r   r%   r%   r&   test_merge_all_na_columnK  s"    z"TestMerge.test_merge_all_na_columnc                 C   s  t jjddddt jjddddtdddtddd	td
ddtdddtddd	tdd	dtddd	tdddtd
ddtdddg
d}t|}|j }|  t|t jdd}|j	|ddd}t	||ddd}t
|| |j |j k s
td S )Nr   r   sizer   r(      i  rI   rP   i  rO   i  rQ   )Zvar1Zvar2var3r`   )r   Zvar8r   Fr{   r   )r   r    randintr   r
   	from_dictr   uniquer   r   rt   ru   r   r   )rm   r^   ri   r   newrw   r}   r%   r%   r&   test_merge_nosort`  s,    











zTestMerge.test_merge_nosort)r   valuesFr(   r   r   rk   rl   c                 C   sB   t ddddgi}|j|d||d}t |dgd}t|| d S )NrJ   r(   r   )r{   r   r   r   rs   )rm   r   r   r   ri   rw   rx   r%   r%   r&    test_merge_same_order_left_right~  s    z*TestMerge.test_merge_same_order_left_rightc                 C   s   t ddgddgd}t dgdgd}|j|ddd}t ddd	ddd	dtjd	dtjd	ddd	d
d  ddddg }tj||dd d S )Nr   r(   i1i2r   i3r   _)r{   rsuffix        r   r(   )r   r   i1_r   Nr   r  r   F)Zcheck_dtype)r
   r   r   r7   r   reset_indexrt   ru   rm   rT   rU   rw   rx   r%   r%   r&   test_merge_nan_right  s"    

	

zTestMerge.test_merge_nan_rightc                 C   s   t ddgddgd}t dgdgd}|j|dd	d
}t ddddtjdddddtjddd	dddg }t|| d S )Nr   r(   g      ?      ?r   gffffff?r   r  r   )r  r{   r  r  )r   r  r   r   r   r  r   )r
   r   r   r7   rt   ru   r  r%   r%   r&   test_merge_nan_right2  s    


zTestMerge.test_merge_nan_right2c                    s@   G  fdddt   | j}|j| jdd}t| s<td S )Nc                       s   e Zd Ze fddZdS )z0TestMerge.test_merge_type.<locals>.NotADataFramec                    s    S r   r%   r   NotADataFramer%   r&   _constructor  s    z=TestMerge.test_merge_type.<locals>.NotADataFrame._constructorN)__name__
__module____qualname__propertyr  r%   r  r%   r&   r    s   r  rX   rz   )r
   ri   r   rU   
isinstancer   )rm   Znadrw   r%   r  r&   test_merge_type  s    
zTestMerge.test_merge_typec                 C   s   t dddddtddd}ttdd	}|j|d
d}|j|d
d}tt dddddt dddddgtddtddgd}|r|t}t|| d S )Ni     rQ   8   r   iW  )r^   tr   r   T)Zignore_index)	r   r   r
   r   appendr   r6   rt   ru   )rm   r   r^   ri   rw   rx   r%   r%   r&   test_join_append_timedeltas  s    
z%TestMerge.test_join_append_timedeltasc                 C   s   t d}tt||gddgd}tt|gdgd}|j|ddd}tt||gtddt|tjgtddd	}t	|| d S )
Ni ABre   rrk   )r  r   ZAB)0Z0r)
r   Ztimedelta64r
   r   r   r   r2   r8   rt   ru   )rm   tdlhsrhsrw   rx   r%   r%   r&   test_join_append_timedeltas2  s    
z&TestMerge.test_join_append_timedeltas2c                 C   s   t dddgi}td d gddgdd}dD ]j}||d}|d jdksPt|j|ddd	}t ddgtjd
d
gdddddgd}t	
|| q*d S )N	entity_ide   f   daysrf   r;   )zdatetime64[D]zdatetime64[h]zdatetime64[m]zdatetime64[s]zdatetime64[ms]zdatetime64[us]datetime64[ns]r&  Tr   natr*   r!  r$  r   r
   r   r   Zto_framer+   r   r   r   r   rt   ru   )rm   rT   sr+   rU   rw   r}   r%   r%   r&   test_other_datetime_unit  s    
z"TestMerge.test_other_datetime_unitunitDr   mr*  msusnsc                 C   s   t dddgi}td d gddgdd}d| d}||d}|d jdksTt|j|dd	d
}t ddgtjddg|ddddgd}t	
|| d S )Nr!  r"  r#  r$  r%  zm8[]zm8[ns]Tr   r'  r*   r(  r   r)  )rm   r,  rT   r*  r+   rU   rw   r}   r%   r%   r&   test_other_timedelta_unit  s    z#TestMerge.test_other_timedelta_unitc              	   C   s   t dddgdddgddd	gd
}t dddgdddgddd	gd
}dddg|_dddg|_t dddgdddgddd	gdddgddd	gd}dddddg|_tt||| dddg|_d}tjt|d t|| W 5 Q R X d S )Nr(   rI   rO   rP   rQ   r   r`   r   r   rb   rc   rd   rb   r-   r   )rb   rc   rd   Zv3Zv4rX   z;Data columns not unique: Index\(\['foo'\], dtype='object'\)r   )r
   r   rt   ru   r   r   r   r   )rm   ri   rU   rx   r   r%   r%   r&   &test_overlapping_columns_error_message	  s$    ""	z0TestMerge.test_overlapping_columns_error_messagec                 C   s   t tjddddddgd}t tjdddddddgd}t tjdd	ddddtjtjgtjdddgd
}t||ddd}t|| d S )N20151010rI   r/   periodsr1   r(   r   20151011rO   rP   r   rb   r   r   )r
   r2   
date_ranger   r7   r   rt   ru   r   r%   r%   r&   test_merge_on_datetime64tz!  s$    z$TestMerge.test_merge_on_datetime64tzc              
   C   s   t ddgtjddddd}t ddgtjddddd}t dddgttjddddtjg tjgttjdddd d	}t||d
dd}t|| |d jdkst	|d jdkst	d S )Nr(   rI   r6  r/   r7  r   rO   r9  r   rb   r   r   r   zdatetime64[ns, US/Eastern]r   )
r
   r2   r:  r   r8   r   rt   ru   r+   r   r   r%   r%   r&   test_merge_datetime64tz_values;  s0    	z(TestMerge.test_merge_datetime64tz_valuesc                 C   s   t jdd}tt jd|jdgdgt jd|jdgdddd	gd
}|d d }|j|dd}tttdt|dt|dttdt|dddddddgd
}t	|| d S )NUTCr0   Z2018g      @Z2019)r   r\   date2r   r\   r>  r   r   rz   r*   )r   date2_xr   r   date2_yr   r?  r   r@  )
r2   ZDatetimeTZDtyper
   r3   r1   r   r   r5   rt   ru   )rm   Zdtzrl   rk   rw   rx   r%   r%   r&    test_merge_on_datetime64tz_emptyV  s(    
z*TestMerge.test_merge_on_datetime64tz_emptyc                 C   s   t tjddddddgd}d|d	< t td
ddgdd}|d jdjd|d< t||ddd}t tjddddddgd tj	gd  tj	gd dgd  d}t
|| d S )Nz2017-10-29 01:00rP   HzEurope/Madrid)r8  freqr1   r   r   r(   r\   z2017-10-29 03:00:00z2017-10-29 04:00:00z2017-10-29 05:00:00rI   )r   r\   r=  r   r   r{   r`   rO   )r   r   r   )r
   r2   r:  to_datetimer   Ztz_localizeZ
tz_convertr   r   r7   rt   ru   r  r%   r%   r&   +test_merge_datetime64tz_with_dst_transitiono  s:       	z5TestMerge.test_merge_datetime64tz_with_dst_transitionc                 C   s   t jdddd}tttt||dgd}t||g}|j|dddd	}tt	tj
dtjd
ddddddg| jd}t|| d S )Nz
2016-01-01   Mr8  rC  Zpnumrf   r   Tr   )rq   rr   r   r*   rI   r(   Zpnum_xZpnum_yr   rf   )r2   period_ranger
   r   r   r   r   r   r   r   r   r)   repeatreshape
sort_indexrf   rt   ru   )rm   rf   ri   rU   rw   rx   r%   r%   r&   "test_merge_non_unique_period_index  s    $z,TestMerge.test_merge_non_unique_period_indexc                 C   s   t tjddddddgd}t tjdddddddgd}t tjdd	ddddtjtjgtjdddgd
}t||ddd}t|| d S )Nr6  rI   r-  rI  r(   r   r9  rO   rP   r   rb   r   r   )r
   r2   rM  r   r7   r   rt   ru   r   r%   r%   r&   test_merge_on_periods  s     zTestMerge.test_merge_on_periodsc                 C   s   t ddgtjddddd}t ddgtjddddd}tjdddd}tjdddd}t dddgt|tjg tjgt| d	}t||d
dd}t|| |d jdkst	|d jdkst	d S )Nr(   rI   r6  r-  rI  r   rO   r9  r   rb   r   r   r   z	Period[D]r   )
r
   r2   rM  r   r8   r   rt   ru   r+   r   )rm   rk   rl   Zexp_xZexp_yrx   rw   r%   r%   r&   test_merge_period_values  s$    z"TestMerge.test_merge_period_valuesc           
      C   sZ  |\}}|  }|  }tddddddgddtjtjtjtjgddtjtjtjtjgtjdddddgtjdddddgd	}td
dddddgd
ddgd|d< |ddddddg }t||dddd}t|| |j|dddd}t|| t|| t|| |}|jddid}t||dddd}	t|	| |j|dddd}	t|	| d S )Nr   r(   rI   rO   rP   rQ   rJ   rK   )rL   col_conflict_xrN   col_conflict_yrR   	left_onlyboth
right_only
categories_mergerL   rT  rN   rU  rR   r   Tr{   r   Z	indicatorZcustom_namer   )	r   r
   r   r7   r   r   rt   ru   rename)
rm   rV   rT   rU   Zdf1_copyZdf2_copyZ	df_resulttestZdf_result_custom_nameZtest_custom_namer%   r%   r&   test_indicator  sn    	
       zTestMerge.test_indicatorc              	   C   sh   |\}}d}t jt|d t||dddd W 5 Q R X t jt|d |j|dddd W 5 Q R X d S )Nz<indicator option can only accept boolean or string argumentsr   rL   r   rQ   r\  )r   r   r   r   )rm   rV   rT   rU   r   r%   r%   r&   #test_merge_indicator_arg_validation  s    z-TestMerge.test_merge_indicator_arg_validationc                 C   s   |\}}t ||dddd}|jdk s,t|j |dddd}|jdk sPtt ||dddd}|jdk stt|j |dddd}|jdk stt ||dddd}|jd	k st|j |dddd}|jd	k std S )
NrL   rk   Tr\  rX  rl   rV  r   rW  )r   r[  r   r   )rm   rV   rT   rU   Ztest2Ztest3Ztest4r%   r%   r&   %test_merge_indicator_result_integrity  s    z/TestMerge.test_merge_indicator_result_integrityc              
   C   s  |\}}dD ]}t dddg|ddgi}d| d}tjt|d t||ddd	d
 W 5 Q R X tjt|d |j|ddd	d
 W 5 Q R X qt ddgddgd}d}tjt|d t||dddd
 W 5 Q R X tjt|d |j|dddd
 W 5 Q R X d S )N)Z_right_indicatorZ_left_indicatorr[  rL   r(   rI   zECannot use `indicator=True` option when data contains a column named z;|Cannot use name of an existing column for indicator columnr   r   Tr\  )rL   custom_column_namez:Cannot use name of an existing column for indicator columnrb  r
   r   r   r   r   )rm   rV   rT   r  r   Zdf_badcolumnr   r%   r%   r&   test_merge_indicator_invalid#  s4    
   z&TestMerge.test_merge_indicator_invalidc                 C   s   t ddgddgd}t dddgdddgd}t ddddgddddgd}td	d
ddgd	dd
gd|d< t||ddgddd}t|| |j|ddgddd}t|| d S )Nr   r(   rJ   rK   )rL   col2rO   r=   r   rV  rW  rX  rY  r[  rL   re  r   Tr\  r
   r   r   rt   ru   )rm   Zdf3Zdf4Zhand_coded_resultZtest5r%   r%   r&   %test_merge_indicator_multiple_columnsE  s    

z/TestMerge.test_merge_indicator_multiple_columnsc              	   C   s^  t ddddgddddgd	td
d}t dddddgdddddgdtdd}| }| }t||dddd}t|| t|| t 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gd}t||dddd}t|| t ddddgddddgddddgdtd
d}t||ddd}t|| t|| t|| t||ddd}t|| t ddddgddddgddddgddddgtd
d}|d}	t|	|dddd }t|| |t dgd!gdd
gd}
t||
ddd"d d#}tj	t
|d$ t||
dddd W 5 Q R X tj	t
|d$ t||
ddd W 5 Q R X |jt dgd%gdd&gddd'}t||ddd(d d)}tj	t
|d$ t||dddd W 5 Q R X tj	t
|d$ t||ddd W 5 Q R X t||
dd*d d+}tj	t
|d$ t||
ddd(d W 5 Q R X d,}tj	t
|d$ t||
dd"d W 5 Q R X d-}tj	t|d$ t||dd.d W 5 Q R X t ddddgd/d0d/d0gddddgdtd
d}t dddgd/d0d/gdddgd1td&d}t dddgd/d0d/gdddgdddgd2td&d}d3}tj	t
|d$ t||ddd W 5 Q R X t||ddgdd}t|| d S )4NrJ   rK   r]   r^   catdogZweaselZhorser   rP   re   r_   ZmeowZbarkzum... weasel noise?ZnayZchirprJ   r]   rQ   Tz1:1)rq   rr   validate)a_xrK   a_yr]   rl  rm  rJ  Z
one_to_onerJ   rK   r]   )r{   rk  )rK   rJ   r]   rL  )rq   r   rk  ZmooZone_to_manyzBMerge keys are not unique in right dataset; not a one-to-one merger   ZcowrO   )r   Zmany_to_onezAMerge keys are not unique in left dataset; not a one-to-one mergeZmany_to_manyzCMerge keys are not unique in right dataset; not a many-to-one mergezBMerge keys are not unique in left dataset; not a one-to-many mergez!Not a valid argument for validateZ	jibberishr   r(   )rJ   rK   r^   rJ   rK   r]   r^   zQMerge keys are not unique in either left or right dataset; not a one-to-one merge)r
   r   r   r   rt   ru   r   r  r   r   r   r   )rm   rk   rl   Z	left_copyZ
right_copyrw   rx   Z
expected_2Z
expected_3Zleft_index_resetZright_w_dupsr   Zleft_w_dupsZexpected_multir%   r%   r&   test_validationX  s&   	




    


	




 


		zTestMerge.test_validationc              	   C   s:   t g g g d}tjdd t||dd W 5 Q R X d S )Nrn  raise)divider   rz   )r
   r   Zerrstater   )rm   rJ   r%   r%   r&   )test_merge_two_empty_df_no_division_error  s    z3TestMerge.test_merge_two_empty_df_no_division_errorr   zindex,expected_indexrI   rP   N
2001-01-01z
2002-02-02z
2003-03-03rO   )r(   rI   )rI   rO   )rO   rP   
2001-01-02
2001-01-03)rC  Z1dZ2dZ3dc              	   C   s   t dddgdddgd|d}t ddddddd	gi}|j|d
d|d}t dddgdddgdddgtjddgtjddgtjd	d	ggdd
dgd}|j|dd t|| d S )Nr   r(   rI   rJ   rb   re   rK   rO   rP   rQ   rb   Tr   rJ   r   )inplace)r
   r   r   r7   r   rt   ru   )rm   r   rf   expected_indexrT   rU   rw   rx   r%   r%   r&   $test_merge_on_index_with_more_values  s    '


z.TestMerge.test_merge_on_index_with_more_valuesc                 C   s   t dddgdddgd}t ddddgi}t dddd gddddgddddgddd	dgdddtjgd
}|j|d	ddd}t|| d S )Nr(   rI   rO   r   rw  rK   rJ   rb   rK   rJ   rb   rL  Trl   r   )r
   r   r7   r   rt   ru   r   r%   r%   r&   test_merge_right_index_rightP  s    "z&TestMerge.test_merge_right_index_rightc                 C   s   t ddgddgd}t ddgddgd}|j|dd	g|d
}|dkr`t ddgddgd}nt ddgddgd}t|| d S )Nri  Zpig(   r  )animal	max_speedZquetzalP   r~  r  r   rl   rs   )rm   r   left_dfright_dfrw   rx   r%   r%   r&   test_merge_preserves_row_order_  s    z(TestMerge.test_merge_preserves_row_orderc                 C   s   t dddgtdddgtddd}t ddddgitddd	gd
}|j|dddd}t dddd gtdddd	gddddgddddtjgd
}|jdddgd}t	|| d S )Nr(   rI   rO   rJ   rK   abcrY  rw  r]   re   rb   Trl   r   r{  r   r   )
r
   r   r   r	   r   r   r7   Zreindexrt   ru   r   r%   r%   r&   8test_merge_take_missing_values_from_index_of_other_dtypek  s      

zBTestMerge.test_merge_take_missing_values_from_index_of_other_dtypec                 C   sn   t tddd dddddgd	}t tdd
d ddddgd	}|jjD ]}d|j_qR|| d S )Nr   )rP   rQ   r(   rJ   rK   r]   r^   r_   r   )rQ   rP   r=   r   F)	r
   r   r   rO  r   r   flagsZ	writeabler   )rm   rZ   r[   r$   r%   r%   r&   test_merge_readonly  s      

zTestMerge.test_merge_readonly)Hr  r  r  ro   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   markparametrizer   r   r   r   r   r   r   r  r
  r  r  r   r+  r3  r5  r;  r<  rA  rF  rQ  rR  rS  r_  r`  ra  rd  rg  rp  rs  r	   r   r2   r8   r   r   r   from_tuplesr   r7   r   r   rz  r|  r  r  r  r%   r%   r%   r&   rW   v   s   	

	
1* "
 ?
" ;  "
rW   c                 C   sN   dD ]D}| j ||d}t|  | |dd}|d}tj||dd qd S )N)r   rk   r   r   T)r   r   rf   F)Zcheck_names)r   r   r  r   rt   ru   )r=   r   r   rw   rx   r%   r%   r&   r     s
    
r   c                   @   sp  e Zd Zejdddgeddgdgdd Zejde	j
e	je	je	je	jgejde	j
e	je	je	jgd	d
 Zejddddgdddgdddgdddgdfdddgddgddgddgdfddgdddgddgddgdfgdd Zdd Zdd Zdd Zdd Zejddddgedd dgdfd!ddgedd dgdfddged"d#ged$fddged"d#ged$fgd%d& Zejdeddgd'd$dd d(gfeddgd)d$dd d(gfdddgd*d+d,gfd!ddgd*d+d,gfdddgd*d+d,gfejd-dd.d/d0d1gfejd-dd.d/ddgfejd-dd.d/d!dgfejd2dd3ejd2dd4d5fg	d6d7 Zd8S )9TestMergeDtypes
right_valsr-   r   categoryc              
   C   sv   t ddgtddgdddgddgtddgdd	tddgd
d	d}t d|i}t||dd}t|jjsrtd S )Nr-   r   r  r(   rI         ?       @uint64r*   int32)r  r  Cr-  EFr  rz   )r
   r   r   r   r   r  r+   r   )rm   r  rk   rl   rw   r%   r%   r&   test_different  s    
zTestMergeDtypes.test_differentd1d2c           
      C   s@  t |}t |}tt jdddgd |dddgd t jt d	t jdd
}tddg}tdt jddg|di|d}|j|ddgd}|	 }	|j
dkrt d}t jt j|d|	d< d|	j|	jdk|	jdk@ df< d|	j|	jdk|	jdk@ df< t||	 |j|ddgdd}|	jddgddd t||	 d S )Nr   r(   rI   r   r*   r-   r   r      )k1k2v)rI   r   )r(   r-   rd   rQ   r`   re   r  r  rz   r   float64Tr   Z	mergesort)kindrx  )r   r+   r
   r   r   r)   r   r  r   r   r  r7   r   r  r  rt   ru   Zsort_values)
rm   r  r  Zdtype1Zdtype2rk   rf   rl   rw   rx   r%   r%   r&   test_join_multi_dtypes  s*    




z&TestMergeDtypes.test_join_multi_dtypeszint_vals, float_vals, exp_valsr(   rI   rO   r  r        @XYc                 C   sd   t d|i}t d|i}t |}|j|ddd}t|| |j|ddd}t||ddg  d S )Nr  r  r   rs   )rm   Zint_valsZ
float_valsZexp_valsr  r  rx   rw   r%   r%   r&   test_merge_on_ints_floats  s    z)TestMergeDtypes.test_merge_on_ints_floatsc                 C   s   t ddgddgdddgd}t d	gd
gdddgd}|j|ddd}t ddgddgtjdgddddgd}t|| d S )Nr  r  r   r   ra   rb   rc   r   rI      )rb   rd   rd   rk   r   g      i@r4  )r
   r   r   r7   rt   ru   r  r%   r%   r&   test_merge_key_dtype_cast  s    z)TestMergeDtypes.test_merge_key_dtype_castc              	   C   s   t ddddgi}t ddddgi}t dgdgd	}tt" |j|ddd
}t|| W 5 Q R X tt* |j|ddd
}t||ddg  W 5 Q R X t dtjtjdgi}td * |j|ddd
}t||ddg  W 5 Q R X d S )Nr  r(   rI   rO   r  皙?g      @r  r  r   )r
   rt   assert_produces_warningUserWarningr   ru   r   r7   )rm   r  r  rx   rw   r%   r%   r&   !test_merge_on_ints_floats_warning  s    z1TestMergeDtypes.test_merge_on_ints_floats_warningc                 C   st   t dtddgtdi}t dddgi}t dddgitd}t||dd}t|| t||dd}t|| d S Nrb   TFr*   rz   )r
   r   r6   r   rt   ru   rm   rT   rU   rx   rw   r%   r%   r&   (test_merge_incompat_infer_boolean_object  s    z8TestMergeDtypes.test_merge_incompat_infer_boolean_objectc                 C   sx   t dtddtjgtdi}t dddgi}t dddgitd}t||dd}t|| t||dd}t|| d S r  )r
   r   r   r7   r6   r   rt   ru   r  r%   r%   r&   5test_merge_incompat_infer_boolean_object_with_missing  s    zETestMergeDtypes.test_merge_incompat_infer_boolean_object_with_missingzdf1_vals, df2_valsr   rJ   rK   r  FTr*   c                 C   s\   t d|i}t d|i}t||dgd}t|jjs8tt||dgd}t|jjsXtd S )Nr  rz   )r
   r   r   r  r+   r   )rm   df1_valsdf2_valsrT   rU   rw   r%   r%   r&   !test_merge_incompat_dtypes_are_ok%  s    z1TestMergeDtypes.test_merge_incompat_dtypes_are_okr  r]   r  r  12z1/1/2011r-  rI  z
2011-01-01z
2011-01-02Z20130101)r8  r/   r7  c              	   C   s   t d|i}t d|i}d|d j d|d j d}t|}tjt|d t||dgd W 5 Q R X d|d j d|d j d}t|}tjt|d t||dgd W 5 Q R X d S )Nr  zYou are trying to merge on z and z9 columns. If you wish to proceed you should use pd.concatr   rz   )r
   r+   reescaper   r   r   r   )rm   r  r  rT   rU   r   r%   r%   r&    test_merge_incompat_dtypes_error=  s    

z0TestMergeDtypes.test_merge_incompat_dtypes_errorN)r  r  r  r   r  r  r   r   r  r   r)   r  Zint16Zint8Zuint8r  Zfloat32Zfloat16r  r  r  r  r  r  r6   boolr  r2   r:  r  r%   r%   r%   r&   r    s^    
  &  

r  c                   C   sN   t jd ttt jjddgddtddgt jjdddgddd	S )
N  r-   r   )r   r   onetwoZthreer  )r   r    seedr
   r   choicer   CDTr%   r%   r%   r&   rk   n  s    
rk   c                   C   s4   t jd ttddgtddgddgdS )Nr  r-   r   r(   rI   )r  Z)r   r    r  r
   r   r   r  r%   r%   r%   r&   rl   {  s    "rl   c                
   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	
ddd dd dd gdd Zdd Zdd Zej	
dddgej	
dddddgddgddgfddddgddgddgfddddgddgddgfgdd Zd d! Zd"S )#TestMergeCategoricalc                 C   sV   t ||dd}|j }ttddgdtdtdgdddgd	}t|| d S )
Nr  rz   r-   r   rY  OZY_xZY_yre   	r   r   rP  r   r   r   r+   rt   r   )rm   rk   r   rw   rx   r%   r%   r&   test_identical  s    
z#TestMergeCategorical.test_identicalc                 C   sV   t ||dd}|j }ttddgdtdtdgddd	gd
}t|| d S )Nr  rz   r-   r   rY  r  r)   r  r  re   r  rm   rk   rl   r   rw   rx   r%   r%   r&   
test_basic  s    
zTestMergeCategorical.test_basicc                 C   sD  t ddddddddddddd}t d	d	d	d	d	dd
d
d
d
d
dd}t||dddd}| }| }|d d|d< t||dddd}|d tdg|d< t|| | }|d d|d< t||dddd}t|| | }|d d|d< | }|d d|d< t||dddd}t|| d S )NrJ   rK   r]   r^   r_   )r   r(   rI   rO   rP   nullr   r   r   r   rk   )r   r   r   r  )r
   r   r   r   r   rt   ru   )rm   rl   rk   ri   rx   Zcrightrw   Zcleftr%   r%   r&   test_merge_categorical  s6    z+TestMergeCategorical.test_merge_categoricalc                 C   s   t tdddgdddgddddgd}t tdddgdddgdd	d
dgd}t||dgd}t tdddgdddgdd
d	gd}t|| d S )Nr  r  r  rY  ZA0B0ZC0)FooLeftZC1B1A1)r  Rightr  rz   )r  r  r  rf  r  r%   r%   r&   'tests_merge_categorical_unordered_equal  s$    z<TestMergeCategorical.tests_merge_categorical_unordered_equalc                 C   s   |j |jdd}t||dd}|j }ttddgdt	dtd	d
gdgdddgd}t
|| |jj|jjst|jj|jjstd S )Nr  )r  r  rz   r-   r   rY  r  r(   rI   r  r  re   )assignr  r   r   r   rP  r   r   r   r+   rt   r   r  r   Z#_categories_match_up_to_permutationr   r  r%   r%   r&   test_other_columns  s    
z'TestMergeCategorical.test_other_columnschangec                 C   s   | S r   r%   r<   r%   r%   r&   r>     r?   zTestMergeCategorical.<lambda>c                 C   s   |  tdddgS )Nr-   r   Zbahr   r  r<   r%   r%   r&   r>     r?   c                 C   s   |  tddS )NTorderedr  r<   r%   r%   r&   r>     r?   c           	      C   s   ||j d}|j|d}t|j jjs.tt||d|d}|j	 }t
tdtdtdgdddgd	}t|| d S )
Nr6   )r  r  r   r  r)   r  r  re   )r  r   r  r   r   r+   r   r   r   rP  r   r   rt   r   )	rm   r  r   rk   rl   r  r   rw   rx   r%   r%   r&   test_dtype_on_merged_different  s    
 z3TestMergeCategorical.test_dtype_on_merged_differentc                    s   d t dddddddd	d
dg
  dddddgd    fdddD  fdddD d}|dd }t||t|jd}t|| d S )NrQ   rJ   rK   r]   r^   r_   r   r   r   r   jr  wr=   r   r   rI   c                    s$   g | ]}|gd    D ]}|qqS )rI   r%   .0Zeachletterr.  r%   r&   
<listcomp>  s    zKTestMergeCategorical.test_self_join_multiple_categories.<locals>.<listcomp>)r.  r#   upoc                    s    g | ]}|g  D ]}|qqS r%   r%   r  r  r%   r&   r    s    )
ZaaZbbccddeeffZgghhiiZjjro  c                 S   s
   |  dS )Nr  )r   r<   r%   r%   r&   r>   /  r?   zITestMergeCategorical.test_self_join_multiple_categories.<locals>.<lambda>rz   )r
   applyr   r   r   rt   ru   )rm   ri   rw   r%   r  r&   "test_self_join_multiple_categories  s    

z7TestMergeCategorical.test_self_join_multiple_categoriesc                 C   s,  t tddddgtddddggddgd}|d d	|d< t tddddgtddd
dggddgd}|d d	|d< t td ddgtd dtjgtd tjdggdddgd}t||ddgd}t	|| t td ddggdddgd}t||ddgd}t	|| d S )Ni  r(   r  rI   ?r   Znum2r   r  rO   ffffff?Znum4rt  ru  rv  r   rD  r   )
r
   r   r   r2   r3   r   r7   r   rt   ru   )rm   ri   rU   Zexpected_outerZresult_outerZexpected_innerZresult_innerr%   r%   r&   test_dtype_on_categorical_dates6  s2      z4TestMergeCategorical.test_dtype_on_categorical_datesr  TFz.category_column,categories,expected_categoriesrI   r(   FalseTruec           	      C   s   t ddddg|d}|d t||d|d< t ddgddgd	}||}t ddg|ddgd
}|d t||d|d< t|| d S )Nr(   rI   rO   rP   )idrh  rh  r  r   )r  num)r  rh  r  )r
   r   r  r   rt   ru   )	rm   Zcategory_columnrZ  Zexpected_categoriesr  rT   rU   rw   rx   r%   r%   r&   /test_merging_with_bool_or_int_cateorical_columnV  s    
zDTestMergeCategorical.test_merging_with_bool_or_int_cateorical_columnc                 C   s\   t tddtjgdddd}t||dd}t tddtjgddddd}t|| d S )	Nr(   rI   r,   r*   r  r  r  rz   )r  B_xZB_y)r
   r   r   r7   r   rt   ru   )rm   ri   rw   rx   r%   r%   r&   test_merge_on_int_arrayl  s    z,TestMergeCategorical.test_merge_on_int_arrayN)r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r%   r%   r%   r&   r    s2   
+
( r  c                   C   s   t ddddgidddgdS )NrJ   r   r   r   rI   r(   re   rS   r%   r%   r%   r&   r  v  s    r  c                   C   s   t ddddgidddgdS )	NrK   ,  d   r  rO   r(   rI   re   rS   r%   r%   r%   r&   r  {  s    r  c                   @   sr  e Zd Zejdddeddgddgdd	d
gdfddeddgddgdd
d	gdfddedddgddejgdd	d
dgdfddedddgejddgddd
d	gdfddeejddgdddgddd
d	gdfddeddejgdddgdd
d	dgdfddedddejgejdddgddd
d	dgdfddedddejgejdddgddd
d	dgdfgdd Z	dS )TestMergeOnIndexeszhow, sort, expectedr   Fr   r   r  r  r   rI   r(   re   Trk   r   rl   r  rO   r   c                 C   s$   t ||dd||d}t|| d S )NT)rq   rr   r   r   r   )rm   r  r  r   r   rx   rw   r%   r%   r&   test_merge_on_indexes  s    0     z(TestMergeOnIndexes.test_merge_on_indexesN)
r  r  r  r   r  r  r
   r   r7   r  r%   r%   r%   r&   r    sV   ""$$  
	
/r  rf   r  r  	index_col)rZ  r;   r  r  r   r(   rI   )startstopr;   r.   z
2018-01-02c                 C   s
   t | jS r   )typer  r<   r%   r%   r&   r>     r?   )rA   c                 C   sb   t dddgi| d}t dddgi| d}|j|dgd	}t ddgddgd
| d}t|| d S )N	left_datar(   rI   re   
right_datar  r  r  rz   )r  r  rs   )rf   rk   rl   rw   rx   r%   r%   r&   test_merge_index_types  s
    r  z-on,left_on,right_on,left_index,right_index,nmr   r   F)NNNTTr  T)NNNTTNc              
   C   s   t dddddgitjddgddggd	d
gdd}tddddgtjddgddggd	d
gd|d}t ddgddgdtjddgdggd	d
gdd}|d k	rt||| ||||d}	t|	| n4d}
tjt	|
d t||| ||||d}	W 5 Q R X d S )Nr  r(   rI   rO   rP   rJ   rK   r   r   r   namesre   r%  r  )r{   r   r   rq   rr   z$Cannot merge a Series without a namer   )
r
   r   from_productr   r   rt   ru   r   r   r   )r{   r   r   rq   rr   nmrJ   rK   rx   rw   r   r%   r%   r&   test_merge_series  sF    
	r   z!col1, col2, kwargs, expected_colssuffixes) _dupr  Z0_dup)Nr  )_x_yZ0_xZ0_yr  r  rJ   )Nr  r  )r  Nz0.0_xrK   b_yrl  )Nr  )Z_aNZ0_arm  c                 C   s   t | dddgi}t |dddgi}t ddgddgddgg|d}|j|fddd	|}t|| t||fddd	|}t|| d S )
Nr(   rI   rO   rP   rQ   r   r   Trp   rs   )rL   re  kwargsZexpected_colsrJ   rK   rx   rw   r%   r%   r&   test_merge_suffix  s    r  zhow,expectedr  r  r  <   F   X       )r  r  ZB2r  c                 C   sb   t dddgdddgd}t dddgd	d
dgd}t||d| dd}dddg|_t|| d S )Nr  r  r(   r	  r
  r  r  r  r  r  r  r  )r  r  )r{   r   r  r  )r
   r   r   rt   ru   )r   rx   r  r  rw   r%   r%   r&   test_merge_duplicate_suffix$  s
    r  zcol1, col2, suffixes)rJ   rJ   )NN)rJ   rJ   )r  N)r   r   )Nr  c              	   C   sX   t | dddgi}t |dddgi}d}tjt|d t||dd|d	 W 5 Q R X d S )
Nr(   rI   rO   rP   rQ   z'columns overlap but no suffix specifiedr   Trq   rr   r  rc  )rL   re  r  rJ   rK   r   r%   r%   r&   test_merge_suffix_errorB  s
    r  r   c              	   C   sT   t ddddgi}t ddddgi}tt t||ddd	d
hd W 5 Q R X d S )NrJ   r(   rI   rO   rK   rP   rQ   Trk   rl   r  )r
   rt   r  FutureWarningr   )r  rJ   rK   r%   r%   r&   test_merge_suffix_warnsQ  s    r  zcol1, col2, suffixes, msg)rJ   rJ   rn  z(too many values to unpack \(expected 2\)z1not enough values to unpack \(expected 2, got 1\)c              	   C   sT   t | dddgi}t |dddgi}tjt|d t||dd|d W 5 Q R X d S )	Nr(   rI   rO   rP   rQ   r   Tr  rc  )rL   re  r  r   rJ   rK   r%   r%   r&   test_merge_suffix_length_errorZ  s    r  	cat_dtyper  r  reversec           	      C   s   t dddgddt dddgddd}ttdddg|d dd	d
gdd}dddg}dd	d
g}|r||  |  tt|||  |dd}|j|ddd}tdd	d
gdd	d
gtdddg|d dd}t|| d S )NrJ   rK   r]   FrZ  r  )r  r  r  r(   rI   rO   r-   rk   r-   r-   rl   Trp   rk   rl   r-   )	r   r
   r   r   r   r  r   rt   ru   )	r  r  Z
cat_dtypesrT   Zdata_fooZ
data_rightrU   rw   rx   r%   r%   r&   test_merge_equal_cat_dtypesi  s8    "

r  c                  C   s   t dddgdd} ttddg| ddgdd	}ttdddg| d
ddgdd	}|j|ddd}tddgd
dgtddg| dd	}t|| d S )NrJ   rK   r]   Fr  r(   rI   r  r-   rO   r  Trp   r  )r   r
   r   r   r   r   rt   ru   )r  rT   rU   rw   rx   r%   r%   r&   test_merge_equal_cat_dtypes2  s$     r  c                  C   sj   t dttddtddgddi} |  }|d d|d< t|| ddd	}|  }t|| d S )
NrJ   r   r(   rI   intervalr*   r  r   rD  )	r
   r   r2   ZIntervalr   r   r   rt   ru   )rl   rk   rw   rx   r%   r%   r&   test_merge_on_cat_and_ext_array  s    "r  c            	         s   ddddg} dddg}t j| |fdd	gd
}t|d}d|d< t|d}d|d< d d|j|d fd} fdd| D fdd| D  }t j||gdd	gd
}t|d}d|d< t|| d S )NrJ   rK   r]   r^   r  r  3r   r   r  r   r  r  r  r  r{   r  c                    s   g | ]}|  qS r%   r%   r  r  )l_sufr%   r&   r    s     z1test_merge_multiindex_columns.<locals>.<listcomp>c                    s   g | ]}|  qS r%   r%   r   )r_sufr%   r&   r    s    )r   r  r
   r   rt   ru   )	lettersZnumbersrf   Zframe_xZframe_yrw   Zexpected_labelsry  rx   r%   )r!  r"  r&   test_merge_multiindex_columns  s(    


 
r$  c                  C   s   t dddgdddgd} t dddgtd	d
dgd}t| |ddd}t dddgdddgtd	d
dgd}t|| d S )NrJ   rK   r]   r  r  4)r=   r   r  2000Z2001Z2002)r   r   rk   r   rD  r8   )r=   r   r   )r
   r2   rE  r   rt   ru   rT   rU   rw   rx   r%   r%   r&    test_merge_datetime_upcast_dtype  s    r(  n_categoriesrQ      c                 C   s   t dgtt|  }tt| d dg|d}tdggdgt dgt| dd}t||dddd	}td
d t| d D ddg|d}t|| d S )Nr   r(   r\   rL  r   rY  rk   Tr   c                 S   s&   g | ]}|d k r|dgn|t jgqS )rI   g      @)r   r7   )r  r   r%   r%   r&   r    s     z9test_categorical_non_unique_monotonic.<locals>.<listcomp>r   r   )	r	   r   r   r
   r   r   r   rt   ru   )r)  rq   rT   rU   rw   rx   r%   r%   r&   %test_categorical_non_unique_monotonic  s    r+  c                  C   s  t ddddddgdddgddddddgd} t| } t ddddddgdddgddddddgddd	d
ddgd}t|ddgd }t| | ddgddgdd}|jddgdd}| j|ddgd}t|| t ddddddgdddgddddddddgd} t| } t ddddddgdddgddddddddgddd	d
ddgd}t|ddgd }t| | ddgddgdd}|jddgdd}| j|ddgd}t|| d S )NrJ   rK   r]   r   r(   )Cat1Int1r  g333333?r  r  r	  g?)CatIntFactorr.  r/  r0  r,  r-  rk   r   )Zaxisrz   Tr  )	r   r
   r   r   r  Zdropr   rt   ru   )rJ   rK   rx   rw   r%   r%   r&   &test_merge_join_categorical_multiindex  s\        r1  funcr   Z
merge_asof)r  err_msg)r   rq   r   rq   )r   rr   r   rr   c              	   C   sx   t ddgddgd}t ddgddgd}d	|d
  d|d  d}tjt|d tt| ||f| W 5 Q R X d S )Nr(   rI   rO   rP   r   rQ   r   rj  zCan only pass argument "r   " OR "z" not both\.r   r
   r   r   r   getattrr2   r2  r  r3  rk   rl   r   r%   r%   r&   /test_merge_join_cols_error_reporting_duplicates1	  s
    
r8  c              	   C   sx   t ddgddgd}t ddgddgd}d	|d
  d|d  d}tjt|d tt| ||f| W 5 Q R X d S )Nr(   rI   rO   rP   r   rQ   r   rj  zMust pass "r   r4  z"\.r   r5  r7  r%   r%   r&   ,test_merge_join_cols_error_reporting_missingB	  s
    
r9  r  c              	   C   sj   t ddgddgd}t ddgddgd}d	}tjt|d
" tt| ||fddi| W 5 Q R X d S )Nr(   rI   rO   rP   r   rQ   r   rj  zZCan only pass argument "on" OR "left_index" and "right_index", not a combination of both\.r   r{   rJ   r5  )r2  r  rk   rl   r   r%   r%   r&   1test_merge_join_cols_error_reporting_on_and_indexS	  s    
r:  c                  C   sv   t ddgddgd} t ddgddgd}t| |dddd}t ddgddgddgddgddgd}t|| d S )	Nr(   r-   )r=   r   rl   Tr=   )r   rq   r   )r=   Zx_xZz_xZx_yZz_yrs   rk   rl   rw   rx   r%   r%   r&   test_merge_right_left_indexg	  s    	r<  c                  C   s   t dgdgdddg} t ddgidg}t g g dtjdddg}t| |dgdd}t|| t|| ddgd	}t|| d S )
Nr(   rI   r   rJ   rK   r*   Tr   r   )r
   r   r   r)   r   rt   ru   )rT   rU   rx   rw   r%   r%   r&   $test_merge_result_empty_index_and_onx	  s    r=  c               	   C   s   t dddgddd} t dddgdd}t ddddgddddgddddggddddgd	}tt t| |dd
}W 5 Q R X t|| tt t|| ddd W 5 Q R X t|| d S )Nr(   rI   rO   )rJ   rK   b_xr   rJ   r>  r  r   rz   )r  r  r  r
   rt   r  r  r   ru   )rk   rl   rx   rw   r%   r%   r&   -test_merge_suffixes_produce_dup_columns_warns	  s      
r@  c                  C   sp   t dddgdddggdddgd} t ddgdd}t| |dd}t ddddggdd	d	d
gd}t|| d S )Nr(   rI   rJ   rK   r   rO   r   rz   r>  r  rs   r;  r%   r%   r&   3test_merge_duplicate_columns_with_suffix_no_warning	  s
    "rA  c               	   C   s   t ddddgddddggddddgd} t ddgdd}tt t| |dd	}W 5 Q R X t dddddggddddd
gd}t|| d S )Nr(   rI   rJ   rK   r>  r   rO   r   rz   r  r?  r;  r%   r%   r&   Btest_merge_duplicate_columns_with_suffix_causing_another_duplicate	  s    ("rB  c                  C   s   t ddgddggtddgd} t dd	gd
dggddgd}t|| dddd}t dd	ddgd
dddggtddddgd}t|| d S )Nr(   rI   rO   rP   rJ   g     \@r   r   r   r  r   r=   r   r   Tr   )r
   r2   r   r   rt   ru   r'  r%   r%   r&   %test_merge_string_float_column_result	  s    " rC  c               	   C   sX   t dgdgdgd} t dgdgdgd}tjtdd t| |dgdd	 W 5 Q R X d S )
Nr  r     )datar   rf   i  zCan only pass argumentr   T)r{   rq   )r
   r   r   r   r   )Zdf_1Zdf_2r%   r%   r&   /test_mergeerror_on_left_index_mismatched_dtypes	  s    rF  )Ur   r   r   r    r  Znumpyr   r   Zpandas.core.dtypes.commonr   r   Zpandas.core.dtypes.dtypesr   Zpandasr2   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Zpandas._testingZ_testingrt   Zpandas.api.typesr  Zpandas.core.reshape.concatr   Zpandas.core.reshape.merger   r   rh   rj   r'   r4   r9   ZfixturerF   rG   rH   rV   rW   r   r  rk   rl   r  r  r  r  r  r  r  r   r  r7   r  r  r  tupler  r  r  r  r$  r(  r+  r1  r8  r9  r:  r<  r=  r@  rA  rB  rC  rF  r%   r%   r%   r&   <module>   sL  <	



          $ T

 t

7

(


	


# 
8		
