U
    sVcbm                    @   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 d dlmZ d dlmZ d dlmZm Z 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 Z0G dd dZ1d d! Z2G d"d# d#Z3ej,d$d% Z4ej,d&d' Z5G d(d) d)Z6ej,d*d+ Z7ej,d,d- Z8G d.d/ d/Z9ej:j;d0ed1d2gd1d2gd3d4ed5d6gd3d7e d8d9gd3d7e!d8d9gd3d7ed d9d3d:ed;d<gd3d7gd=d d>d?d@ Z<ej:;dAdBdCgdddDdDd2fdEddBdCgddDdFd2fdddBdCgdFdDd2fdBdCgdddDdDdfdGddBdCgddDdFdfdddBdCgdFdDdfgdHdI Z=dJdK Z>ej:;dLd d dMdNidOdPgfd d dMdQid dPgfd d dMdRidSdTgfd d dMdUdVgidSdTgfdWd dMdXidWd gfdYdYdMdZid[dYgfd\d\dMdXid\d]gfdWdWdMdZid^dWgfdWd\dMdZidWd\gfdWdWdMd_idWd^gfd d dMd`idad gfdWdWi d^dbgfd d i dSdTgfgdcdd Z?ej:;ded'edfdgdhgdidjej@gdkdldmgdnfdBedfdgd8dhgdidjdoej@gdkdlej@dmgdnfgdpdq ZAej:;drdsdtdugdvdw ZBej:;dMd%d'hd d dxgdydz ZCej:;d{d|dWdWeDdWd}fgd~d ZEej:;dddgej:;ddFdDgdd ZFdd ZGdd ZHdd ZIdd ZJej:;dddgdd ZKdd ZLej:;dddgej:;ddWdFdddgfdWdFdddgfgdd ZMej:;dddgej:;dddWiddgfddWiddgfgdd ZNej:;dddgej:;dddFiddFigdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVej:;dddgdd ZWdd ZXdS )    )datedatetime	timedeltaN)is_categorical_dtypeis_object_dtype)CategoricalDtype)
CategoricalCategoricalIndex	DataFrameDatetimeIndexIntervalIndex
MultiIndexPeriodIndex
RangeIndexSeriesTimedeltaIndex)Float64Index
Int64Index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-xj8nt62q/pandas/tests/reshape/merge/test_merge.pyget_test_data0   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_series;   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_naG   s
    
r9   c                 C   s   | j jS r   r+   namexr%   r%   r&   <lambda>P       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_dtypeP   s    rF   c                 C   s   | j jS r   r:   r<   r%   r%   r&   r>   Y   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_dtype2Y   s    rG   c                 C   s   | j jS r   r:   r<   r%   r%   r&   r>   b   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_nab   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_indicatork   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selfr%   r%   r&   setup_methody   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)rn   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   )rn   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   rn   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   rn   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)rn   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   rn   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)rn   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)rn   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   Zpeekaboor^   )r
   r   r   allr   )rn   rk   rl   r   r%   r%   r&   test_merge_copy%  s    zTestMerge.test_merge_copyc                 C   sz   t dddtdd}t dddtdd}t||d	d	d
d}t|d j|d jsZtt|d j|d jsvtd S )Nr   r(   r   r   re   r-   r   r   TFr   rJ   r^   )r
   r   r   r   Zshares_memoryZ_valuesr   )rn   using_array_managerrk   rl   r   r%   r%   r&   test_merge_nocopy1  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   )rn   rk   rl   r|   rx   r%   r%   r&   "test_intelligently_handle_join_key:  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   boolvalr   r   r   key_0)r
   r   r+   r   r   r   )rn   rT   rU   ri   r   r   r%   r%   r&   test_merge_join_key_dtype_castM  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d	}t d
tdidd}tjddddddgdd}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+   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)   )rn   rk   rl   rb   r   r   r   r   r%   r%   r&   test_handle_join_key_pass_arrayd  s4     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   )rn   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)rn   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   )rn   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   )rn   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   )rn   	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   )rn   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   )rn   rF   rG   ri   rv   rx   actualr%   r%   r&   test_merge_empty_frame0  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   )rn   rF   rH   Zdf_leftZdf_rightrx   r   r%   r%   r&   test_merge_all_na_columnB  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   )rn   r^   ri   r   newrw   r}   r%   r%   r&   test_merge_nosortW  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   )rn   r   r   r   ri   rw   rx   r%   r%   r&    test_merge_same_order_left_rightu  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   rn   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%   rm   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   )rn   Znadrw   r%   r	  r&   test_merge_type  s    
zTestMerge.test_merge_typec                 C   s   t tdddddgtddgd}t tdd	}t||gd
d}t||g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   r   r   r   r6   rt   ru   )rn   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   )rn   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   )rn   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&  )rn   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   )rn   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   r3  r/   r4  r   rO   r6  r   rb   r   r   r   zdatetime64[ns, US/Eastern]r   )
r
   r2   r7  r   r8   r   rt   ru   r+   r   r   r%   r%   r&   test_merge_datetime64tz_values4  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   )rn   Zdtzrl   rk   rw   rx   r%   r%   r&    test_merge_on_datetime64tz_emptyO  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)r5  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   r7  to_datetimer   Ztz_localizeZ
tz_convertr   r   r7   rt   ru   r  r%   r%   r&   +test_merge_datetime64tz_with_dst_transitionh  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r5  r@  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   )rn   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 )Nr3  rI   r*  rF  r(   r   r6  rO   rP   r   rb   r   r   )r
   r2   rJ  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   r3  r*  rF  r   rO   r6  r   rb   r   r   r   z	Period[D]r   )
r
   r2   rJ  r   r8   r   rt   ru   r+   r   )rn   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   rQ  rN   rR  rR   r   Tr{   r   Z	indicatorZcustom_namer   )	r   r
   r   r7   r   r   rt   ru   rename)
rn   rV   rT   rU   df1_copy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   rY  )r   r   r   r   )rn   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   TrY  rU  rl   rS  r   rT  )r   rX  r   r   )rn   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_indicatorrX  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   TrY  )rL   custom_column_namez:Cannot use name of an existing column for indicator columnra  r
   r   r   r   r   )rn   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   rS  rT  rU  rV  rX  rL   rd  r   TrY  r
   r   r   rt   ru   )rn   Zdf3Zdf4Zhand_coded_resultZtest5r%   r%   r&   %test_merge_indicator_multiple_columns>  s    

z/TestMerge.test_merge_indicator_multiple_columnsc              	   C   sb  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|t dgd!gdd
gdg}
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|t dgd%gdd&gdg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]   rk  rl  rG  Z
one_to_onerJ   rK   r]   )r{   rj  )rK   rJ   r]   rI  )rq   r   rj  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   )rn   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_validationQ  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 )Nrm  raise)divider   rz   )r
   r   Zerrstater   )rn   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)r@  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   )rn   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   rv  rK   rJ   rb   rK   rJ   rb   rI  Trl   r   r
   r   r7   r   rt   ru   r   r%   r%   r&   test_merge_right_index_rightI  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 )Nrh  Zpig(   r  )animal	max_speedZquetzalP   r~  r  r   rl   rs   )rn   r   left_dfright_dfrw   rx   r%   r%   r&   test_merge_preserves_row_orderX  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   abcrV  rv  r]   re   rb   Trl   r   rz  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_dtyped  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   rL  Z_mgrZarraysflagsZ	writeabler   )rn   rZ   r[   r$   r%   r%   r&   test_merge_readonlyy  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(  r0  r2  r8  r9  r>  rC  rN  rO  rP  r^  r_  r`  rc  rf  ro  rr  r	   r   r2   r8   r   r   r   from_tuplesr   r7   r   r   ry  r|  r  r  r  r%   r%   r%   r&   rW   x   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                   @   s|  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ejd8ddgd9fg d:fdgd;fdgd<fgd=d> Zejd8dd gd9fg d:fd gd;fdgd<fgd?d@ ZejdAd:d#ddBgd"dCdggfd9d#ddBgd"dCdggfd<d#ddBgd"dCdggfd;d"dCdgd#ddBggfgdDdE Z dFdG Z!ejdHdIdJdKdLdMdNdOdPdQdRg
dSdT Z"dUS )V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   )rn   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)kindrw  )r   r+   r
   r   r   r)   r   r  r   r   r  r7   r   r  r  rt   ru   Zsort_values)
rn   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   )rn   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@r1  )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   )rn   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   rn   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   )rn   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*  rF  z
2011-01-01z
2011-01-02Z20130101)r5  r/   r4  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   )rn   r  r  rT   rU   r   r%   r%   r&    test_merge_incompat_dtypes_error6  s    

z0TestMergeDtypes.test_merge_incompat_dtypes_errorzexpected_data, howr   r   rl   rk   c                 C   sR   t dgdg|d}t dgdg|d}t|||d}t |dg|d}t|| d S )N)r(   idr   rI   r   rs   )rn   Zany_numeric_ea_dtyper   expected_datar  r  rw   rx   r%   r%   r&   test_merge_EA_dtypef  s
    z#TestMergeDtypes.test_merge_EA_dtypec                 C   sR   t dgdg|d}t dgdg|d}t|||d}t |dg|d}t|| d S )N)rJ   r  r   )rK   r   rs   )rn   r   r  Zany_string_dtyper  r  rw   rx   r%   r%   r&   test_merge_string_dtypew  s
    z'TestMergeDtypes.test_merge_string_dtypezhow, expected_datarP   rQ   c                 C   s\   t ddgddgd}t ddgddgd}t|||d	}t |d
ddgd}t|| d S )NTFr(   rQ   r  r  rO   rP   r  r  r   r  r  r  r   rs   )rn   r   r  rT   rU   rw   rx   r%   r%   r&   test_merge_bool_dtype  s
    z%TestMergeDtypes.test_merge_bool_dtypec           	      C   s   t ddddd gdddddgd	t d
}| }t dddtjdgdddtjdgd|d
}| }t||dg|d}t|| t|| tt	
dt t	
dgtdddgd}t|j| d S )Nr  r  345678)lvl0zlvl1-ar  zlvl1-b)datar+   9Z11)r  r  zlvl1-cr  )rk   rl   r{   r   Or  r  re   )r
   r2   ZStringDtyper   ZNAr   rt   ru   r   r   r+   r   r  r   r   )	rn   r   Zstring_dtyperT   r[  rU   r\  r   rx   r%   r%   r&   test_merge_ea_with_string  s0    z)TestMergeDtypes.test_merge_ea_with_stringzleft_empty, how, exp)Frk   rk   )Frl   empty)Fr   r  )Fr   rk   )Fcrossempty_cross)Trk   r  )Trl   rl   )Tr   r  )Tr   rl   )Tr  r  c                 C   s   t ddgddgd}t dgdgddd	}|r<|d
}n
|d
}|j||d}|dkr~t ddgddgtjtjgd}nl|dkrt tjgdgdgd}nJ|dkrt dddgdd}|r|dddg }n|dkrt ddddgdd}t|| d S )NrI   r(   rO   rP   r  rQ   r  r)   r*   r   r   rk   )r  r  r  rl   )r  r  r  r  r  r  r  r   r  ZA_xZA_y)r
   headr   r   r7   rt   ru   )rn   Z
left_emptyr   r}   rk   rl   rw   rx   r%   r%   r&   test_merge_empty  s"    
"z TestMergeDtypes.test_merge_emptyN)#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   r   r  r2   r7  r  r  r  r  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     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ej	d	d
dg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   rV  r  ZY_xZY_yre   	r   r   rM  r   r   r   r+   rt   r   )rn   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   rV  r  r)   r  r  re   r  rn   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   )rn   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  rV  ZA0B0ZC0)FooLeftZC1B1A1)r  Rightr  rz   )r  r  r  re  r  r%   r%   r&   'tests_merge_categorical_unordered_equal=  s$    z<TestMergeCategorical.tests_merge_categorical_unordered_equalorderedTFc                 C   s   t ddg|d}tdddgtdddg|dddd	gd
ddg}tdddgtdddg|ddddgdddg}t||dddd}tdddgtdddg|dddd	gddtjgdddg}t|| d S )NZP2ZP1rW  r  r  r*  r*   r   r(   rI   )r  prJ   r  r  r  r   r  r   )r  r  r  rk   Tr   g      &@g      (@)r  r  rJ   r  )	r   r
   r   r   r   r   r7   rt   ru   )rn   r  ZpcatrT   rU   rw   rx   r%   r%   r&   5test_multiindex_merge_with_unordered_categoricalindexV  s8    
zJTestMergeCategorical.test_multiindex_merge_with_unordered_categoricalindexc                 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   rV  r  r(   rI   r  r  re   )assignr  r   r   r   rM  r   r   r   r+   rt   r   r  r   Z#_categories_match_up_to_permutationr   r  r%   r%   r&   test_other_columnss  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r  r  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   rM  r   r   rt   r   )	rn   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 r  r%   .0Zeachletterr+  r%   r&   
<listcomp>  s    zKTestMergeCategorical.test_self_join_multiple_categories.<locals>.<listcomp>)r+  r#   ur  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jjrn  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   )rn   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num4rs  rt  ru  r   rA  r   )
r
   r   r   r2   r3   r   r7   r   rt   ru   )rn   ri   rU   Zexpected_outerZresult_outerZexpected_innerZresult_innerr%   r%   r&   test_dtype_on_categorical_dates  s2      z4TestMergeCategorical.test_dtype_on_categorical_datesz.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   )r  rg  rg  r  r   )r  num)r  rg  r  )r
   r   r  r   rt   ru   )	rn   Zcategory_columnrW  Zexpected_categoriesr  rT   rU   rw   rx   r%   r%   r&   /test_merging_with_bool_or_int_cateorical_column  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  rz   )r  B_xZB_y)r
   r   r   r7   r   rt   ru   )rn   ri   rw   rx   r%   r%   r&   test_merge_on_int_array  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&   r    s6   
+

( 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    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   )rn   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)rW  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>   S  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_typesI  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_seriesa  sF    
	r  c               	   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d}t ddgddgdtjddgdggd	d
gdd}tt t| |d	d
gd}W 5 Q R X t|| d S )Nr  r(   rI   rO   rP   rJ   rK   r   r   r   r  re   r  r  r"  )r  r  rz   )	r
   r   r  r   rt   r  FutureWarningr   ru   rJ   rK   rx   rw   r%   r%   r&   test_merge_series_multilevel  s     
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_yrk  )Nr!  )Z_aNZ0_arl  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   rd  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  rb  )rL   rd  r  rJ   rK   r   r%   r%   r&   test_merge_suffix_error  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  r  r   )r  rJ   rK   r%   r%   r&   test_merge_suffix_warns  s    r.  zcol1, col2, suffixes, msg)rJ   rJ   rm  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,  rb  )rL   rd  r  r   rJ   rK   r%   r%   r&   test_merge_suffix_length_error 	  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]   Fr  )r  r  r  r(   rI   rO   r-   rk   r-   r-   rl   Trp   rk   rl   r-   )	r   r
   r   r   r   r1  r   rt   ru   )	r0  r1  Z
cat_dtypesrT   Zdata_fooZ
data_rightrU   rw   rx   r%   r%   r&   test_merge_equal_cat_dtypes	  s8    "

r5  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   r2  r-   rO   r3  Trp   r4  )r   r
   r   r   r   r   rt   ru   )r0  rT   rU   rw   rx   r%   r%   r&   test_merge_equal_cat_dtypes24	  s$     r6  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   rA  )	r
   r   r2   ZIntervalr   r   r   rt   ru   )rl   rk   rw   rx   r%   r%   r&   test_merge_on_cat_and_ext_arrayJ	  s    "r8  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  r  r   r   r  r   r  r  r!  r"  r{   r  c                    s   g | ]}|  qS r%   r%   r  r  )l_sufr%   r&   r  l	  s     z1test_merge_multiindex_columns.<locals>.<listcomp>c                    s   g | ]}|  qS r%   r%   r:  )r_sufr%   r&   r  l	  s    )r   r  r
   r   rt   ru   )	lettersZnumbersrf   Zframe_xZframe_yrw   Zexpected_labelsrx  rx   r%   )r;  r<  r&   test_merge_multiindex_columnsX	  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  r  )r=   r   r  2000Z2001Z2002)r   r   rk   r   rA  r8   )r=   r   r   )r
   r2   rB  r   rt   ru   rT   rU   rw   rx   r%   r%   r&    test_merge_datetime_upcast_dtypex	  s    rA  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\   rI  r   rV  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   )rB  rq   rT   rU   rw   rx   r%   r%   r&   %test_categorical_non_unique_monotonic	  s    rD  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FactorrG  rH  rI  rE  rF  rk   r   )Zaxisrz   Tr  )	r   r
   r   r   r  Zdropr   rt   ru   r  r%   r%   r&   &test_merge_join_categorical_multiindex	  s\        rJ  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   ri  zCan only pass argument "r   " OR "z" not both\.r   r
   r   r   r   getattrr2   rK  r$  rL  rk   rl   r   r%   r%   r&   /test_merge_join_cols_error_reporting_duplicates	  s
    
rQ  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   ri  zMust pass "r   rM  z"\.r   rN  rP  r%   r%   r&   ,test_merge_join_cols_error_reporting_missing	  s
    
rR  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   ri  zZCan only pass argument "on" OR "left_index" and "right_index", not a combination of both\.r   r{   rJ   rN  )rK  r$  rk   rl   r   r%   r%   r&   1test_merge_join_cols_error_reporting_on_and_index	  s    
rS  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_index
  s    	rU  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_on
  s    rV  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   rW  r#  r   rz   )r"  r!  r9  r
   rt   r  r  r   ru   )rk   rl   rx   rw   r%   r%   r&   -test_merge_suffixes_produce_dup_columns_warns*
  s      
rY  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   rW  r#  rs   rT  r%   r%   r&   3test_merge_duplicate_columns_with_suffix_no_warning:
  s
    "rZ  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   rW  r   rO   r   rz   r#  rX  rT  r%   r%   r&   Btest_merge_duplicate_columns_with_suffix_causing_another_duplicateD
  s    ("r[  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_resultO
  s    " r]  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     )r  r   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_dtypesZ
  s    r_  r+   r,   c                 C   s   t ddgddgd| d}t tjtjgddgd| d}t||dd	d
}t ddtjtjgddtjtjgtjtjddgd| d}t|| t||dd	d
}t tjtjddgddtjtjgtjtjddgd| d}t|| d S )Nr(   rI   )rb   rL   r*   rO   rP   )rb   rd  rb   r   r   )rb   rL   rd  )rb   rd  rL   r{  )r+   rk   rl   rw   rx   r%   r%   r&   test_merge_outer_with_NaNb
  s(    r`  c                  C   sl   t ddgitjdgddd} t ddgitjdgddd}t| |ddd}t dgdd}t|| d S )	NrJ   r(   r]   r   re   r^   r   )rk  rl  r\  rT  r%   r%   r&    test_merge_different_index_names
  s
    ra  )Yr   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   Zpandas._testingZ_testingrt   Zpandas.api.typesr  Zpandas.core.apir   r   r   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  r%  r7   r+  r-  r.  tupler/  r5  r6  r8  r>  rA  rD  rJ  rQ  rR  rS  rU  rV  rY  rZ  r[  r]  r_  r`  ra  r%   r%   r%   r&   <module>   sZ  0	



            Q

  

7

(


	


# 
8		

