o
    g]                    @   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g dcdddeej>gg dfdgfdAeg dhdddediej>gdjdkej>dlgdgfgdmdn Z?ej9:dog dpdqdr Z@ej9:dJd$d&hd d dsgdtdu ZAej9:dvdwdTdTeBdTdxfgdydz ZCej9:d{d|d}gej9:d~dEdCgdd 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 ZTej9:dddgdd ZUd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 r(tt ||d |t|   }t| |S N)listrangenpasarraytilelenrandomshuffle)ngroupsnunique_groupsarr r'   c/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/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   r6   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   nanr4   NaTr'   r'   r'   r(   get_series_naE   s
   
r;   c                 C      | j jS r   r-   namexr'   r'   r(   <lambda>N       rA   )paramsidsc                 C      | j S )zV
    A parametrized fixture returning a variety of Series of different
    dtypes
    paramrequestr'   r'   r(   series_of_dtypeN      rJ   c                 C   r<   r   r=   r?   r'   r'   r(   rA   W   rB   c                 C   rE   )zk
    A duplicate of the series_of_dtype fixture, so that it can be used
    twice by a single function
    rF   rH   r'   r'   r(   series_of_dtype2W   rK   rL   c                 C   r<   r   r=   r?   r'   r'   r(   rA   `   rB   c                 C   rE   )zU
    A parametrized fixture returning a variety of Series with all NA
    values
    rF   rH   r'   r'   r(   series_of_dtype_all_na`   rK   rM   c                  C   s@   t ddgddgddgd} t g dg dg dd	}| |fS )
Nr   r*      ab)col1col_conflictcol_left)r*   rN            )rN   rN   rN   rN   rN   )rQ   rR   	col_rightr
   )df1df2r'   r'   r(   dfs_for_indicatori   s   r[   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>g d?fd*g d@fgejdAdBdCgdDdE Z dFdG Z!dHdI Z"dJdK Z#dLdM Z$dNdO Z%dPdQ Z&ejdRg dSdTdU Z'dVdW Z(dXdY Z)dZd[ Z*d\d] Z+d^d_ Z,d`da Z-dbdc Z.ddde Z/dfdg Z0dhdi Z1djdk Z2dldm Z3dndo Z4dpdq Z5drds Z6ejdAdCdtgejdue7g dve7g dwfe8g dxe8dydzd{e9j:e9j:e9j:gfe;g d|e;g d}fe<g d|e;g d}fe=>g d~e=>ddde?j@e?j@e?j@gfeAg dddeAdydde9j:e9j:e9j:gddfeBg deBddde9j:e9j:e9j:gfgdd ZCdd ZDejdAdBdCgdd ZEdd ZFdd ZGdS )	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 g d	tjd
d| _	t dtjdig dd| _
d S )N)key1key2data1data2r^   r*   rV   )r$   rN   )r#   r$   )r]   r^   valuerO   rP   cdere   rO      keyv1v2rU   rd   rP   rc   rO   index)r
   r)   r   r!   randnNdfNGROUPSrZ   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 )	NrO   r*   rN   r   r+   )rm   r-   T
left_indexright_indexr
   r   tmassert_frame_equal)rt   df_empty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 )Nr]   r^   on)r   rp   rZ   r{   r|   )rt   joinedexpr'   r'   r(   test_merge_common   s   zTestMerge.test_merge_commonc                 C   sJ   t g dg dg dg dd}|t}|}t||}t|| d S )N)r*   r   r*   r   )r   r*   r   r   )r   r   rN   r   )r*   r   r   rT   r   r*   rN   rT   )r
   astyper7   r   r{   r|   rt   rr   rs   r   r   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 )Nr]   r   )rp   	set_indexrZ   r   r{   r|   rt   rr   rs   r   r   r'   r'   r(   test_merge_index_as_on_arg   s
   z$TestMerge.test_merge_index_as_on_argc                 C   s   t g dtjdd}t dtjdig d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 )Nrb   rf   rg   rj   rU   rk   rl   rh   Trr   F)left_onry   howsortrs   )right_onrx   r   r   )	r
   r   r!   rn   r   r{   r|   loccolumns)rt   rr   rs   merged1merged2r'   r'   r(   (test_merge_index_singlekey_right_vs_left   s$    z2TestMerge.test_merge_index_singlekey_right_vs_leftc                 C   s   t g dtjdd}t dtjdig d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 )Nrb   rf   rg   rj   rU   rk   rl   rh   Tinnerr   ry   r   r   )r   rx   r   )r
   r   r!   rn   r   joinr   rm   r{   r|   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 d    n1 sw   Y  d}t jtjj|d t| j| jdd W d    n1 sCw   Y  d}t jtjj|d t| j| jddd	 W d    n1 shw   Y  d
}t jt|d t| j	| j
dgddgd W d    d S 1 sw   Y  d S )Nz&Must pass right_on or right_index=TruematchT)rx   z$Must pass left_on or left_index=True)ry   zRCan only pass argument "on" OR "left_on" and "right_on", not a combination of bothrh   )r   r   z)len\(right_on\) must equal len\(left_on\)r]   r^   r   r   )pytestraisesr4   errorsr   r   rr   rs   
ValueErrorrp   rZ   rt   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 d    n1 s!w   Y  d}t jt|d t| j| jdddgdd W d    n1 sGw   Y  t jt|d t| j| jdddgddgd W d    d S 1 snw   Y  d S )	Nz>right_index parameter must be of type bool, not <class 'list'>r   rr   Fr]   r^   r   rx   ry   z=left_index parameter must be of type bool, not <class 'list'>)r   r   r   r   rp   rZ   r   r'   r'   r(   &test_index_and_on_parameters_confusion   s:   "z0TestMerge.test_index_and_on_parameters_confusionc                 C   sT   t | j| jdd}| jd  d  }t||ksJ d|v s"J d|v s(J d S )Nrh   r   rN   v1_xv1_y)r   rr   value_countssumr    )rt   mergedexp_lenr'   r'   r(   test_merge_overlap  s
   zTestMerge.test_merge_overlapc                 C   s   t g dg dd}t g dg d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 )N)r/   barbazr/   r*   rN   rT   rU   )lkeyra   )r/   r   quxr/   )rV      rf   r   )rkeyra   r   r   outerT)r   r   r   r   r   r   r/   r>   r   rN   rT   r*   rU   value_xr   rV   r   rf   value_y)r
   r   r   r   r9   r{   assert_series_equal)rt   rr   rs   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 s-J d|d< |d dk s;J d S )Nr   r*   rO   rP   
   rl   r/   r   rc   rd   Trx   ry   copyr   rO   peekaboord   )r
   r   r   all)rt   rr   rs   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 u s/J |jjd |jjd u s=J d S d|d< |d dk sMJ d|d< |d dk s[J d S )Nr   r*   r   r   rl   r/   r   r   TFr   rN   r   rO   r   rd   )r
   r   r   _mgrarraysr   )rt   using_array_managerrr   rs   r   r'   r'   r(   test_merge_nocopy/  s    zTestMerge.test_merge_nocopyc                 C   s   t g dttddddgd}t g dttdd	}t||dd
d}t g dtdddddddtjtjg	g ddg dd}t|| d S )Nr*   r*   rN   rN   rT   rV   rh   ra   ra   rh   r   r*   r*   rN   rT   rU   rV   r   )rh   rvaluer   r   r   	r*   r*   r*   r*   rN   rN   rT   rU   rV   r   r*   rN   rT   rU   )	r   r*   r   r*   rN   rN   rT   rU   rV   )rh   ra   r   )ra   rh   r   )	r
   r   r   r   r   arrayr9   r{   r|   )rt   rr   rs   r   r   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s"J t d
gdgd}t dgdgd}t||dd}|d jdksDJ t ddgi}t ddgi}tdg}tdg}t||||dd}|d jd	kspJ d S )Nr*   r   rg   rN      r   r   rh   r+   TFr   boolvalr   r   r   key_0)r
   r   r-   r   r   )rt   rY   rZ   rp   r   r   r'   r'   r(   test_merge_join_key_dtype_castX  s   z(TestMerge.test_merge_join_key_dtype_castc                 C   s  t g dtddddgdd}t dtd	idd
}tjg ddd
}t||d|dd}t|||ddd}t|d |d  |d   sKJ |d   sUJ t dtdidgd}t dtd	i}tg d}tg d}t||||dd}t|d t	g ddd t dtdi}t dtd	i}tjg dtj
d
}t||d|dd}t|d t	|dd d S )Nr   rV   r   ra   rh   r+   r   r-   r   r   r,   r   r   r   r   r   r   r   rT   )r   r*   r*   rN   rN   rT   T)rx   r   r   )r
   r   aranger   r   r{   r   notnar   r   r+   )rt   rr   rs   rh   r   r   r   r   r'   r'   r(   test_handle_join_key_pass_arrayo  s2   z)TestMerge.test_handle_join_key_pass_arrayc                 C   s   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 d    d S 1 s@w   Y  d S )Nr@   rO   rl   yrP   rc   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   )rt   dtrY   rZ   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g di|||gd	}td
g di||||||gd	}t|| tdddgi||gd	}td
ddgi||gd	}t|| d S )N  rV   r*   rN   rT   rU   r@   rO   rl   r   rP   rc   )rO   rP   q)rc   rd   re   fghrd   r   r
   _check_merge)rt   r   dt2dt3dt4rY   rZ   r'   r'   r(   test_merge_non_unique_indexes  s   

z'TestMerge.test_merge_non_unique_indexesc                 C   sl   t ddd}t ddd}t ddd}tdg di||||gd}td	g d
i|||||gd}t|| d S )Nr   rV   r*   rN   rT   r@   rO   rP   rc   rd   rl   r   )re   r   r   z hir   )rt   r   r   r   rY   rZ   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*   rN   r   rh   rr   r   rs   rz   )rt   rr   rs   r   r'   r'   r(   test_left_merge_empty_dataframe  s   z)TestMerge.test_left_merge_empty_dataframekwargTrw   r@   rx   r   rO   r   ry   r   c                 C   s^   t g dd}t g dd}t g dtjg tdtd}t||fd|i|}t|| d S )NrO   rP   rc   r   r@   r   zrO   rP   rc   r@   r   r   r,   )r   rm   r-   r   )r
   r4   Indexr8   r   r{   r|   )rt   	join_typer   rr   rs   exp_inr   r'   r'   r(   !test_merge_left_empty_right_empty  s   z+TestMerge.test_merge_left_empty_right_emptyc                    sZ  t g dd t g dg dg dgg d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g d	g d
g ddg dd}|dd }|jt|_ fdd} fdd}ddddddfD ]}||| ||| qmddd}||| g d|d< ||| ddd}||| tjtjgd td|d< ||| d S )Nr   r   r*   rN   rT   rU   rV   r   rf   r   	   r   rT   r,   r*   rU   rf   rN   rV   r   rT   r   r   r   r   c                    H   t  fddi|}t||  t  fddi|}t||  d S )Nr   r   rr   r   r{   r|   r   r   r   rr   rs   r'   r(   check1     z>TestMerge.test_merge_left_empty_right_notempty.<locals>.check1c                    r   )Nr   rs   r   r  r  r  r'   r(   check2  r  z>TestMerge.test_merge_left_empty_right_notempty.<locals>.check2Trw   r@   r   rO   r   r   r*   rN   r   r
   r   r   r9   r8   rm   r   )rt   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 g dg dg dgg ddt g ddt g dg dg d	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g dddd jt_fdd  fddd S )Nr   r   r   r   r   r   r   r   r   rT   r,   r   r   c                    r   )Nr   r   rs   r  r  r  r'   r(   r  %  r  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 ]} | | q4d S )Nr   rr   r   Trw   r@   r   rO   r   r   r  r  r  r  r   r	  rr   rs   r'   r(   r  +  s   
z>TestMerge.test_merge_left_notempty_right_empty.<locals>.check2r  rt   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g dd}|j|dd}t|| d S )	Nr   rh   ra   r   r   r,   )r   rh   r   r   )r
   r   dtypesr   r{   r|   )rt   rJ   rL   rp   r}   r   actualr'   r'   r(   test_merge_empty_frame;  s   z TestMerge.test_merge_empty_framec                 C   sb   t ||dddgd}t ||dddgd}t |||dg dd}|j|dd}t|| d S )Nr   rh   ra   r   rh   r   r   r   rz   )rt   rJ   rM   df_leftdf_rightr   r  r'   r'   r(   test_merge_all_na_columnM  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 sJ d S )Nr   r   sizer   r*      i  rN   rU   i  rT   i  rV   )var1var2var3rf   )r  var8r  Fr   r   )r   r!   randintr   r
   	from_dictr  uniquer   r   r{   r|   r   )rt   rd   rp   r  newr   r   r'   r'   r(   test_merge_nosortb  s,   











 zTestMerge.test_merge_nosort)r   valuesF)r*   r*   r   r*   r*   )r   r*   r*   r*   r*   r   rr   rs   c                 C   s@   t dg di}|j|d||d}t |dgd}t|| d S )NrO   )r*   r   r*   )r   r   r   r   rz   )rt   r   r"  r   rp   r   r   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  g d }tj||dd d S )Nr   r*   i1i2r%  i3r%  _)r   rsuffix        r   r*   )r%  r&  i1_r(  Nr%  r&  r-  r(  F)check_dtype)r
   r   r   r9   r   reset_indexr{   r|   rt   rY   rZ   r   r   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g d }t|| d S )Nr   r*   g      ?      ?r$  gffffff?r'  r)  r%  )r*  r   r,  r+  )r%  r-  r&  r(  r.  )r
   r   r   r9   r{   r|   r1  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J 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__propertyr7  r'   r5  r'   r(   r6    s    r6  r]   r   )r
   rp   r   rZ   
isinstance)rt   nadr   r'   r5  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}|rG|t}t|| d S )Ni     rV   8   r   iW  )rd   tr   r   T)ignore_index)	r   r   r
   r   appendr   r8   r{   r|   )rt   r   rd   rp   r   r   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Brl   rrr   )r*  r   AB)00r)
r   timedelta64r
   r   r   r   r4   r:   r{   r|   )rt   tdlhsrhsr   r   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 ]5}||d}|d jdks(J |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rm   r>   )zdatetime64[D]zdatetime64[h]zdatetime64[m]zdatetime64[s]zdatetime64[ms]zdatetime64[us]datetime64[ns]rU  Tr   natr,   rP  rS  r   
r
   r   r   to_framer-   r   r   r   r{   r|   )rt   rY   sr-   rZ   r   r   r'   r'   r(   test_other_datetime_unit  s   
z"TestMerge.test_other_datetime_unitunit)Dr   mrZ  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s*J |j|dd	d
}t ddgtjddg|ddddgd}t	|| d S )NrP  rQ  rR  rS  rT  zm8[]zm8[ns]Tr   rV  r,   rW  r   rX  )rt   r\  rY   rZ  r-   rZ   r   r   r'   r'   r(   test_other_timedelta_unit  s   z#TestMerge.test_other_timedelta_unitc                 C   s   t g dg dg dd}t g dg dg dd}g d|_g d|_t g dg dg dg dg dd}g d|_tt||| g d	|_d
}tjt|d t|| W d    d S 1 sgw   Y  d S )Nr   r   r   rh   ri   rj   )rh   r/   r/   )rh   r   r   )rh   ri   rj   v3v4)rh   r/   r/   r   r   )r]   r/   r/   z;Data columns not unique: Index\(\['foo'\], dtype='object'\)r   )r
   r   r{   r|   r   r   r   r   )rt   rp   rZ   r   r   r'   r'   r(   &test_overlapping_columns_error_message  s&   


	
"z0TestMerge.test_overlapping_columns_error_messagec                 C      t tjddddddgd}t tjddddg d	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20151010rN   r1   periodsr3   r*   r   20151011rT   r   rU   r  rh   r   r   )r
   r4   
date_ranger   r9   r   r{   r|   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 g d	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sWJ |d jdks`J d S )Nr*   rN   ri  r1   rj  r   rT   rl  r   r  rh   r   r   r   zdatetime64[ns, US/Eastern]r   )	r
   r4   rm  r   r:   r   r{   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g dd}|d d }|j|d	d
}tttdt|dt|dttdt|ddg dd}t	|| d S )NUTCr2   2018g      @2019)r   ra   date2r   r   r   r   r,   )r   date2_xr   r   date2_y)
r4   DatetimeTZDtyper
   r5   r3   r   r   r7   r{   r|   )rt   dtzrs   rr   r   r   r'   r'   r(    test_merge_on_datetime64tz_emptyX  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g d
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:00rU   HzEurope/Madrid)rk  freqr3   r   r   r*   ra   )z2017-10-29 03:00:00z2017-10-29 04:00:00z2017-10-29 05:00:00rN   )r   ra   rp  r   r   r   rf   rT   )r   r   r   )r
   r4   rm  to_datetimer   tz_localize
tz_convertr   r   r9   r{   r|   r1  r'   r'   r(   +test_merge_datetime64tz_with_dst_transitionq  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rk  rz  pnumrm   r   Tr   )rx   ry   r   r,   rN   r*   pnum_xpnum_yr   rm   )r4   period_ranger
   r   r   r    r   r   r   r   r   r+   repeatreshape
sort_indexrm   r{   r|   )rt   rm   rp   rZ   r   r   r'   r'   r(   "test_merge_non_unique_period_index  s   $z,TestMerge.test_merge_non_unique_period_indexc                 C   rh  )Nri  rN   r]  r  r*   r   rl  rT   r   rU   r  rh   r   r   )r
   r4   r  r   r9   r   r{   r|   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 g d	t|tjg tjgt| d
}t||ddd}t|| |d jdks[J |d jdksdJ d S )Nr*   rN   ri  r]  r  r   rT   rl  r   r  rh   r   r   r   z	Period[D]r   )	r
   r4   r  r   r:   r   r{   r|   r-   )rt   rr   rs   exp_xexp_yr   r   r'   r'   r(   test_merge_period_values  s$   z"TestMerge.test_merge_period_valuesc           
      C   s@  |\}}|  }|  }tg d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g d
g dd|d< |g d }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 )Nr   r*   rN   rT   rU   rV   r*   rN   rO   rP   rT   rU   rV   )rQ   col_conflict_xrS   col_conflict_yrW   )	left_onlyboth
right_onlyr  r  r  r  r  r  
categories_merge)rQ   r  rS   r  rW   r  rQ   r   Tr   r   	indicatorcustom_namer   )	r   r
   r   r9   r   r   r{   r|   rename)
rt   r[   rY   rZ   df1_copydf2_copy	df_resulttestdf_result_custom_nametest_custom_namer'   r'   r(   test_indicator  sH   	

zTestMerge.test_indicatorc                 C   s   |\}}d}t jt|d t||dddd W d    n1 s!w   Y  t jt|d |j|dddd W d    d S 1 sBw   Y  d S )Nz<indicator option can only accept boolean or string argumentsr   rQ   r   rV   r  )r   r   r   r   )rt   r[   rY   rZ   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J |j |dddd}|jdk s(J t ||dddd}|jdk s:J |j |dddd}|jdk sLJ t ||dddd}|jd	k s^J |j |dddd}|jd	k spJ d S )
NrQ   rr   Tr  r  rs   r  r   r  )r   r  r   )rt   r[   rY   rZ   test2test3test4r'   r'   r(   %test_merge_indicator_result_integrity  s   z/TestMerge.test_merge_indicator_result_integrityc              	   C   sV  |\}}dD ]T}t dddg|ddgi}d| d}tjt|d t||ddd	d
 W d    n1 s5w   Y  tjt|d |j|ddd	d
 W d    n1 sUw   Y  qt ddgddgd}d}tjt|d t||dddd
 W d    n1 sw   Y  tjt|d |j|dddd
 W d    d S 1 sw   Y  d S )N)_right_indicator_left_indicatorr  rQ   r*   rN   zECannot use `indicator=True` option when data contains a column named z;|Cannot use name of an existing column for indicator columnr   r   Tr  )rQ   custom_column_namez:Cannot use name of an existing column for indicator columnr  r
   r   r   r   r   )rt   r[   rY   r)  r   df_badcolumnr   r'   r'   r(   test_merge_indicator_invalid%  s<   "z&TestMerge.test_merge_indicator_invalidc                 C   s   t ddgddgd}t g dg dd}t g dg d	d}tg d
g dd|d< t||ddgddd}t|| |j|ddgddd}t|| d S )Nr   r*   rO   rP   )rQ   col2)r*   r*   rT   )rP   r@   r   )r   r*   r*   rT   rO   rP   r@   r   )r  r  r  r  r  r  r  rQ   r  r   Tr  r
   r   r   r{   r|   )rt   df3df4hand_coded_resulttest5r'   r'   r(   %test_merge_indicator_multiple_columnsG  s   
z/TestMerge.test_merge_indicator_multiple_columnsc                 C   s  t g dg ddtdd}t g dg ddtd	d}| }| }t||d
d
dd}t|| t|| t g dg dg dg ddtdg dd}t||d
d
dd}t|| t g dg dg ddtdd}t||ddd}t|| t|| t|| t||ddd}t|| t g dg dg ddg d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 d    n1 sw   Y  tj	t
|d t||
ddd W d    n	1 sw   Y  |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 d    n	1 sWw   Y  tj	t
|d t||ddd W d    n	1 sww   Y  t||
dd!d d"}tj	t
|d t||
d
d
dd W d    n	1 sw   Y  d#}tj	t
|d t||
ddd W d    n	1 sw   Y  d$}tj	t|d t||dd%d W d    n	1 sw   Y  t g d&g d'g ddtdd}t g d(g d)g d*d+tdd}t g d(g d)g d,g d*dtdd}d-}tj	t
|d t||ddd W d    n	1 sAw   Y  t||dd.gdd}t|| d S )/Nr   )catdogweaselhorser   rU   rl   rO   rP   rc   rd   re   )meowbarkum... weasel noise?naychirprO   rc   rV   Tz1:1)rx   ry   validate)r  r  r  r  )a_xrP   a_yrc   r  
one_to_oner   rO   )r   r  rP   rO   rc   r  )rx   r   r  re   mooone_to_manyzBMerge keys are not unique in right dataset; not a one-to-one merger   cowrT   )r   many_to_onezAMerge keys are not unique in left dataset; not a one-to-one merge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 validate	jibberish)rO   rO   rP   rP   )r   r*   r   r*   rO   rO   rP   )r   r*   r   )r  r  r  )rO   rP   rd   )r  r  r  zQMerge keys are not unique in either left or right dataset; not a one-to-one mergerP   )r
   r   r   r   r{   r|   r   rC  r   r   r   r   )rt   rr   rs   	left_copy
right_copyr   r   
expected_2
expected_3left_index_resetright_w_dupsr   left_w_dupsexpected_multir'   r'   r(   test_validationZ  s,  	
	

					zTestMerge.test_validationc                 C   sP   t g g g d}tjdd t||dd W d    d S 1 s!w   Y  d S )Nr   raise)divider   r   )r
   r   errstater   )rt   rO   r'   r'   r(   )test_merge_two_empty_df_no_division_error  s   "z3TestMerge.test_merge_two_empty_df_no_division_errorr   zindex,expected_index)r*   rN   rU   )r*   rN   rU   NNN)
2001-01-01
2002-02-02
2003-03-03r  r  r  r   )r*   rN   rT   NNN)r*   rN   rN   rT   rT   rU   r  r  r  )r  
2001-01-02
2001-01-03r]  )rz  r  r  )1d2d3dr  r  r  c              	   C   s   t g dg dd|d}t dg di}|j|dd|d}t g d	g d
g dtjddgtjddgtjddggg dd}|j|dd t|| d S )Nr  rO   rh   rl   rP   r  rh   Tr   )r   r   r   r*   r*   r*   rN   rN   rN   rT   rU   rV   rO   rh   rP   r   )inplace)r
   r   r   r9   r   r{   r|   )rt   r   rm   expected_indexrY   rZ   r   r   r'   r'   r(   $test_merge_on_index_with_more_values  s   '


z.TestMerge.test_merge_on_index_with_more_valuesc                 C   sx   t g dg dd}t dg di}t g dg dg ddg dd	d
dtjgd}|j|dddd}t|| d S )Nr   )r   r*   r*   r  rP   r*   rN   rT   N)r   r*   r*   rN   )r*   rN   rN   rT   r  r   r*   rN   r  rh   Trs   r   r
   r   r9   r   r{   r|   r   r'   r'   r(   test_merge_right_index_rightR  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r0t ddgddgd}nt ddgddgd}t|| d S )Nr  pig(   r?  )animal	max_speedquetzalP   r  r  r   rs   rz   )rt   r   left_dfright_dfr   r   r'   r'   r(   test_merge_preserves_row_ordera  s   z(TestMerge.test_merge_preserves_row_orderc                 C   s   t g dtg dtddd}t dg ditg dd}|j|d	d
dd}t g dtg dg dddddtjgd}|jg dd}t	|| d S )Nr   r  abcr  r  rP   r   rl   rh   Trs   r   r  )rO   rO   rP   rc   )r*   r*   rN   rT   r  r   r*   rN   r   )
r
   r   r   r	   r   r   r9   reindexr{   r|   r   r'   r'   r(   8test_merge_take_missing_values_from_index_of_other_dtypem  s    
zBTestMerge.test_merge_take_missing_values_from_index_of_other_dtypec                 C   sd   t tddd g dd}t tddd g dd}|jjD ]}d|j_q$|| d S )	Nr   )rU   rV   r*   r  r   )rV   rU   r  F)	r
   r   r   r  r   r   flags	writeabler   )rt   r_   r`   r&   r'   r'   r(   test_merge_readonly  s   
zTestMerge.test_merge_readonlyN)Hr8  r9  r:  rv   r   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#  r2  r4  r>  rD  rO  r[  rc  rg  rn  ro  rx  r  r  r  r  r  r  r  r  r  r  r  r	   r   r4   r:   r   r   r   from_tuplesr   r9   r   r   r  r  r  r  r  r'   r'   r'   r(   r\   v   s    	!


	1*
 ?
" ;



"
r\   c                 C   sN   dD ]"}| j ||d}t|  | |dd}|d}tj||dd qd S )N)r   rr   r   r   T)r   r   rm   F)check_names)r   r   r0  r   r{   r|   )r@   r   r   r   r   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g dg dg dg ddfg dddgddgddgdfddgg d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g d eg d!dfg d"eg d!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&g d*feddgd+d&g d*fg d g d,fg d"g d,fg d g d,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/d2dgfejd3dd4ejd3dd5d6fg	d7d8 Zejd9ddgd:fg d;fdgd<fdgd=fgd>d? Zejd9d@dAgd:fg d;fdAgd<fd@gd=fgdBdC ZejdDd;g dEg dFgfd:g dEg dFgfd=g dEg dFgfd<g dFg dEgfgdGdH Z dIS )J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s9J d S )Nr/   r   r  r*   rN         ?       @uint64r,   int32)rE  rF  Cr]  EFrE  r   )r
   r   r   r   r   rE  r-   )rt   r  rr   rs   r   r'   r'   r(   test_different  s   
zTestMergeDtypes.test_differentd1d2c           
      C   s>  t |}t |}tt jg d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rUt 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   r,   r/   r   r     )k1k2v)rN   r   )r*   r/   rj   rV   rf   rl   r  r  r   r   float64rN   r*   Tr  	mergesort)kindr  )r   r-   r
   r   r   r+   r   r  r   r   r  r9   r   r  r  r{   r|   sort_values)
rt   r  r  dtype1dtype2rr   rm   rs   r   r   r'   r'   r(   test_join_multi_dtypes  s*   




z&TestMergeDtypes.test_join_multi_dtypeszint_vals, float_vals, exp_valsr   )r	  r
        @XYr	  r  r*   rT   rN   r
  c                 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   rz   )rt   int_vals
float_valsexp_valsrE  rF  r   r   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g dd}t|| d S )Nr	  r
  r   r   rg   rh   ri   r   rN      )rh   rj   rj   rr   r   g      i@rd  )r
   r   r   r9   r{   r|   r1  r'   r'   r(   test_merge_key_dtype_cast  s   z)TestMergeDtypes.test_merge_key_dtype_castc                 C   s0  t dg di}t dg di}t dgdgd}tt |j|ddd}t|| W d    n1 s7w   Y  tt |j|ddd}t||ddg  W d    n1 s^w   Y  t dtjtjdgi}td  |j|ddd}t||ddg  W d    d S 1 sw   Y  d S )	Nr   r   r!  )皙?g      @r  rT   r  r  r   )r
   r{   assert_produces_warningUserWarningr   r|   r   r9   )rt   rE  rF  r   r   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 Nrh   TFr,   r   )r
   r   r8   r   r{   r|   rt   rY   rZ   r   r   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   r9   r8   r   r{   r|   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  )rO   rP   rO   )r+  r	  r
  r   FTr,   c                 C   s\   t d|i}t d|i}t||dgd}t|jjsJ t||dgd}t|jjs,J d S )NrE  r   )r
   r   r   rE  r-   )rt   df1_valsdf2_valsrY   rZ   r   r'   r'   r(   !test_merge_incompat_dtypes_are_ok'  s   z1TestMergeDtypes.test_merge_incompat_dtypes_are_okr  r   r  )rI  12z1/1/2011r]  r  z
2011-01-01z
2011-01-02r+  20130101)rk  r1   rj  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 d    n1 s:w   Y  d|d j d|d j d}t|}tjt|d t||dgd W d    d S 1 snw   Y  d S )NrE  zYou are trying to merge on z and z9 columns. If you wish to proceed you should use pd.concatr   r   )r
   r-   reescaper   r   r   r   )rt   r0  r1  rY   rZ   r   r'   r'   r(    test_merge_incompat_dtypes_error?  s$   

"z0TestMergeDtypes.test_merge_incompat_dtypes_errorzexpected_data, howr   r   rs   rr   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   rN   r   rz   )rt   any_nullable_numeric_dtyper   expected_datar  r  r   r   r'   r'   r(   test_merge_EA_dtypeo  s   z#TestMergeDtypes.test_merge_EA_dtyperO   rP   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)rO   r9  r   )rP   r   rz   )rt   r   r<  any_string_dtyper  r  r   r   r'   r'   r(   test_merge_string_dtype  s
   z'TestMergeDtypes.test_merge_string_dtypezhow, expected_data)Tr*   rU   )FrV   rT   c                 C   sZ   t ddgddgd}t ddgddgd}t|||d	}t |g d
d}t|| d S )NTFr*   rV   rE  rF  rT   rU   )rE  r  r   rE  rF  r  r   rz   )rt   r   r<  rY   rZ   r   r   r'   r'   r(   test_merge_bool_dtype  s
   z%TestMergeDtypes.test_merge_bool_dtypeN)!r8  r9  r:  r   r  r  r   r   r  r   r+   r  int16int8uint8r  float32float16r  r%  r'  r+  r.  r/  r8   r   r2  r4   rm  r8  r=  r?  rB  r'   r'   r'   r(   r    s    
  




	


		r  c                   C   sL   t jd ttt jjddgddtddgt jjg ddddS )N  r/   r   )r   r  )onetwothreer  )r   r!   seedr
   r   choicer   CDTr'   r'   r'   r(   rr     s   
rr   c                   C   s4   t jd ttddgtddgddgdS )NrH  r/   r   r*   rN   )r   Z)r   r!   rL  r
   r   r   rN  r'   r'   r'   r(   rs     s   "rs   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g dddgddgfg dddgddgfg ddd gdd gfgd!d" Zd#d$ Zd%S )&TestMergeCategoricalc                 C   sT   t ||dd}|j }ttddgdtdtdgg dd}t|| d S )	Nr   r   r/   r   r  O)r   Y_xY_yrl   	r   r  r  r   r   r   r-   r{   r   )rt   rr   r   r   r   r'   r'   r(   test_identical  s   
z#TestMergeCategorical.test_identicalc                 C   sT   t ||dd}|j }ttddgdtdtdgg dd	}t|| d S )
Nr   r   r/   r   r  rQ  r+   r   r!  rO  rl   rT  rt   rr   rs   r   r   r   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 )NrO   rP   rc   rd   re   )r   r*   rN   rT   rU   nullr   r   r   r   rr   )r   r   r   r  )r
   r   r   r   r   r{   r|   )rt   rs   rr   rp   r   crightr   cleftr'   r'   r(   test_merge_categorical  s6   z+TestMergeCategorical.test_merge_categoricalc                 C   s   t tg dg ddg dd}t tg dg ddg dd}t||dgd	}t tg dg dg d
d}t|| d S )NrA  r  )A0B0C0)FooLeft)r  rF  rE  )C1B1A1)r`  Rightr`  r   )rd  rc  rb  )r`  ra  re  r  r1  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g dd}t
|| |jj|jjs?J |jj|jjsJJ d S )Nr  )rO  r   r   r/   r   r  rQ  r*   rN   rV  rl   )assignrO  r   r   r  r  r   r   r   r-   r{   r   r   r"  #_categories_match_up_to_permutationrW  r'   r'   r(   test_other_columns  s   
z'TestMergeCategorical.test_other_columnschangec                 C   s   | S r   r'   r?   r'   r'   r(   rA   /  s    zTestMergeCategorical.<lambda>c                 C   s   |  tg dS )N)r/   r   bahr   rN  r?   r'   r'   r(   rA   0  s    c                 C   s   |  tddS )NTorderedrl  r?   r'   r'   r(   rA   1  s    c           	      C   s   ||j d}|j|d}t|j jjsJ t||d|d}|j }t	t
dt
dt
dgg dd}t|| d S )	Nr8   )r   r   r   rQ  r+   rV  rl   )r   r   rg  r   r"  r-   r   r  r  r   r   r{   r   )	rt   rj  r   rr   rs   r   r   r   r   r'   r'   r(   test_dtype_on_merged_different,  s   
 z3TestMergeCategorical.test_dtype_on_merged_differentc                    sx   d t g d  g dd    fdddD  fddd	D d
}|dd }t||t|jd}t|| d S )NrV   )
rO   rP   rc   rd   re   r   r   r   r   j)rA  wr@   r   r   rN   c                    s$   g | ]}|gd    D ]}|qqS r:  r'   .0eachletterr^  r'   r(   
<listcomp>M  s    zKTestMergeCategorical.test_self_join_multiple_categories.<locals>.<listcomp>)r^  r$   upoc                    s    g | ]}|g  D ]}|q	qS r'   r'   rr  rv  r'   r(   rw  R  s    )
aabbccddeeffgghhiijjr   c                 S   s
   |  dS )Nr  )r   r?   r'   r'   r(   rA   f     
 zITestMergeCategorical.test_self_join_multiple_categories.<locals>.<lambda>r   )r
   applyr   r   r   r{   r|   )rt   rp   r   r'   rv  r(   "test_self_join_multiple_categoriesE  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g dd}t||ddgd}t	|| t td ddggg dd}t||ddgd}t	|| d S )Ni  r*   r(  rN   ?r   num2r   r  rT   ffffff?num4r  r  r  )r   r  r  r   r{  r   )
r
   r   r   r4   r5   r   r9   r   r{   r|   )rt   rp   rZ   expected_outerresult_outerexpected_innerresult_innerr'   r'   r(   test_dtype_on_categorical_datesm  s.   $$z4TestMergeCategorical.test_dtype_on_categorical_datesrn  TFz.category_column,categories,expected_categories)FTTF)rN   r*   r*   rN   r*   rN   )FalseTruer  r  r  r  c           	      C   s   t g d|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   )r9  r  r  rm  rN   rU   r*   r   )r9  num)r9  r  r  )r
   r   rN  r   r{   r|   )	rt   category_columnr  expected_categoriesrn  rY   rZ   r   r   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*   rN   r.   r,   r@  rE  r   )rE  B_xB_y)r
   r   r   r9   r   r{   r|   )rt   rp   r   r   r'   r'   r(   test_merge_on_int_array  s   z,TestMergeCategorical.test_merge_on_int_arrayN)r8  r9  r:  rU  rX  r\  rf  ri  r   r  r  ro  r  r  r  r  r'   r'   r'   r(   rP    s4    
+
( rP  c                   C      t dg dig ddS )NrO   r   r   r   rN   r*   r   rl   rX   r'   r'   r'   r(   r       r  c                   C   r  )NrP   ,  d   r&  rT   r*   rN   rl   rX   r'   r'   r'   r(   r    r  r  c                   @   sZ  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g dddejgdg ddfddeg dejddgdg ddfddeejddgg ddg ddfddeddejgg ddg ddfddedddejgejdddgdg ddfddedddejgejdddgdg ddfgdd Z	dS )TestMergeOnIndexeszhow, sort, expectedr   Fr   r   r&  r  r   rN   r*   rl   Trr   r  r  )r   r   r   r  rs   r  r  r  r&  r  r   r   r   r  r   c                 C   s$   t ||dd||d}t|| d S )NT)rx   ry   r   r   r  )rt   r  r  r   r   r   r   r'   r'   r(   test_merge_on_indexes  s   0z(TestMergeOnIndexes.test_merge_on_indexesN)
r8  r9  r:  r   r  r  r
   r   r9   r  r'   r'   r'   r(   r    sT    ""  	/r  rm   rE  rF  	index_col)r  r>   r	  r
  r   r*   rN   )startstopr>   r0   z
2018-01-02c                 C   s
   t | jS r   )typer8  r?   r'   r'   r(   rA     r  )rD   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*   rN   rl   
right_datar	  r
  r  r   )r  r  rz   )rm   rr   rs   r   r   r'   r'   r(   test_merge_index_types  s
   r  z-on,left_on,right_on,left_index,right_index,nmr   r   F)NNNTTrF  T)NNNTTNc              
   C   s  t dg ditjddgddggddgd	d
}tg d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 ur]t||| ||||d}	t|	| d S d}
tjt	|
d t||| ||||d}	W d    d S 1 s}w   Y  d S )NrE  r   rO   rP   r   r*   r   r   namesrl   rN   rT  rU   rT   r@  )r   r   r   rx   ry   z$Cannot merge a Series without a namer   )
r
   r   from_productr   r   r{   r|   r   r   r   )r   r   r   rx   ry   nmrO   rP   r   r   r   r'   r'   r(   test_merge_series  sH   
	"r  z!col1, col2, kwargs, expected_colssuffixes) _duprI  0_dup)Nr  )_x_y0_x0_yr  r  rO   )Nr  r+  )r  Nz0.0_xrP   b_yr  )Nr  )_aN0_ar  c                 C   s   t | g di}t |g d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   r   r*   rU   rN   rV   rT   r   r   Trw   rz   )rQ   r  kwargsexpected_colsrO   rP   r   r   r'   r'   r(   test_merge_suffix;  s   r  zhow,expectedr  <   F   X       )rE  rc  B2)r  r&  r*   r  r  r  r  r  c                 C   sX   t g dg dd}t g dg dd}t||d| dd}g d	|_t|| d S )
N)r  r&  r*   )r  r  r  r@  r  r  rE  )r  r  )r   r   r  )rE  r  r  )r
   r   r   r{   r|   )r   r   r  r  r   r'   r'   r(   test_merge_duplicate_suffix[  s
   
r  zcol1, col2, suffixes))rO   rO   )NN)rO   rO   )r  N)r   r   )Nr  c                 C   sj   t | g di}t |g di}d}tjt|d t||dd|d W d    d S 1 s.w   Y  d S )Nr   rT   rU   rV   z'columns overlap but no suffix specifiedr   Trx   ry   r  r  )rQ   r  r  rO   rP   r   r'   r'   r(   test_merge_suffix_errory  s   "r  r  c                 C   sf   t dg di}t dg di}tt t||ddddhd W d    d S 1 s,w   Y  d S )	NrO   r   rP   r  Trr   rs   r  )r
   r{   r)  FutureWarningr   )r  rO   rP   r'   r'   r(   test_merge_suffix_warns  s
   "r  zcol1, col2, suffixes, msg)rO   rO   r   z(too many values to unpack \(expected 2\)z1not enough values to unpack \(expected 2, got 1\)c                 C   sf   t | g di}t |g di}tjt|d t||dd|d W d    d S 1 s,w   Y  d S )Nr   r  r   Tr  r  )rQ   r  r  r   rO   rP   r'   r'   r(   test_merge_suffix_length_error  s
   "r  	cat_dtyperI  rJ  reversec           	      C   s   t g dddt g dddd}ttg d|d g ddd}g d}g d}|r8|  |  tt|||  |d	d}|j|d
d
d}tg dg dtg d|d dd}t|| d S )Nr   Fr  rn  )rI  rJ  rI  r   r/   rr   r/   r/   rs   Trw   rr   rs   r/   )	r   r
   r   r   r   r  r   r{   r|   )	r  r  
cat_dtypesrY   data_foo
data_rightrZ   r   r   r'   r'   r(   test_merge_equal_cat_dtypes  s8   r  c                  C   s   t g ddd} ttddg| ddgdd	}ttg d| g d
dd	}|j|ddd}tddgddgtddg| dd	}t|| d S )Nr   Fr  rO   rP   r*   rN   r  r/   )rT   rN   r*   r  Trw   rT   r  )r   r
   r   r   r   r   r{   r|   )r  rY   rZ   r   r   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 )
NrO   r   r*   rN   intervalr,   r  r   r{  )	r
   r   r4   Intervalr   r   r   r{   r|   )rs   rr   r   r   r'   r'   r(   test_merge_on_cat_and_ext_array  s   "r  c            	         s   g d} g d}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 )Nr   r3  r4  3r   r   r  r   r  r9  r  r  r   r  c                       g | ]}|  qS r'   r'   rs  ru  )l_sufr'   r(   rw    s    z1test_merge_multiindex_columns.<locals>.<listcomp>c                    r  r'   r'   r  )r_sufr'   r(   rw    s    )r   r  r
   r   r{   r|   )	lettersnumbersrm   frame_xframe_yr   expected_labelsr  r   r'   )r  r  r(   test_merge_multiindex_columns  s&   


r  c                  C   st   t g dg dd} t g dtg dd}t| |ddd	}t g dg dtg d
d}t|| d S )Nr   )r3  r4  4)r@   r   r  )200020012002)r   r   rr   r   r{  )r  r  r:   r   )r
   r4   r|  r   r{   r|   rY   rZ   r   r   r'   r'   r(    test_merge_datetime_upcast_dtype		  s   r  n_categoriesrV      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*   ra   r  r   r  rr   Tr   c                 S   s&   g | ]}|d k r|dgn|t jgqS )rN   g      @)r   r9   )rs  r   r'   r'   r(   rw  )	  s   & z9test_categorical_non_unique_monotonic.<locals>.<listcomp>r   r   )	r	   r   r   r
   r   r   r   r{   r|   )r  rx   rY   rZ   r   r   r'   r'   r(   %test_categorical_non_unique_monotonic	  s   r  c                  C   s`  t g dg dg dd} t| } t g dg dg dg d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 g dg dddg dd} t| } t g dg dddg dg d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 )N)rO   rP   rO   rc   rO   rP   r   )r   r*   r   r*   r   r   )Cat1Int1)rO   rP   rc   rO   rP   rc   )r   r   r   r*   r*   r*   )r(  g333333?r  r  r3  g?)CatIntFactorr  r  r  r  r  rr   r   r*   )axisr   r  Trm  )	r   r
   r   r   r0  dropr   r{   r|   )rO   rP   r   r   r'   r'   r(   &test_merge_join_categorical_multiindex0	  sT   r  funcr   
merge_asof)r  err_msg)r   rx   r   rx   )r   ry   r   ry   c                 C      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i | W d    d S 1 sBw   Y  d S )Nr*   rN   rT   rU   r   rV   r   r  zCan only pass argument "r   " OR "z" not both\.r   r
   r   r   r   getattrr4   r  r  r  rr   rs   r   r'   r'   r(   /test_merge_join_cols_error_reporting_duplicatesh	     
"r  c                 C   r  )Nr*   rN   rT   rU   r   rV   r   r  zMust pass "r   r  z"\.r   r  r   r'   r'   r(   ,test_merge_join_cols_error_reporting_missingy	  r  r  r  c                 C   s   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 d    d S 1 s9w   Y  d S )Nr*   rN   rT   rU   r   rV   r   r  zZCan only pass argument "on" OR "left_index" and "right_index", not a combination of both\.r   r   rO   r  )r  r  rr   rs   r   r'   r'   r(   1test_merge_join_cols_error_reporting_on_and_index	  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   rs   Tr@   )r   rx   r   )r@   x_xz_xx_yz_yrz   rr   rs   r   r   r'   r'   r(   test_merge_right_left_index	  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*   rN   r   rO   rP   r,   Tr   r   )r
   r   r   r+   r   r{   r|   )rY   rZ   r   r   r'   r'   r(   $test_merge_result_empty_index_and_on	  s   r  c                  C   s   t g dddd} t g ddd}t g dg dg dgg d	d
}tt t| |dd}W d    n1 s;w   Y  t|| tt t|| ddd W d    n1 s^w   Y  t|| d S )Nr   r*   rN   )rO   rP   b_xr   )r*   r*   rN   rN   )rN   r*   rN   rN   )rT   r*   rN   rN   rO   r  r  r  r   rO   r   )r  r  r  r
   r{   r)  r  r   r|   )rr   rs   r   r   r'   r'   r(   -test_merge_suffixes_produce_dup_columns_warns	  s   r  c                  C   sb   t g dg dgg dd} t ddgdd}t| |d	d
}t g dgg dd}t|| d S )Nr  r  )rO   rP   rP   r   r*   rT   rN   r   rO   r   )r*   r*   r*   rN   r  rz   r	  r'   r'   r(   3test_merge_duplicate_columns_with_suffix_no_warning	  s
   r  c                  C   s   t g dg dgg dd} t ddgdd}tt t| |d	d
}W d    n1 s.w   Y  t g dgg dd}t|| d S )N)r*   r*   r*   r*   )rN   rN   rN   rN   )rO   rP   rP   r  r   r*   rT   rN   r   rO   r   )r*   r*   r*   r*   rN   )rO   r  r  r  r  r  r	  r'   r'   r(   Btest_merge_duplicate_columns_with_suffix_causing_another_duplicate	  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 g dg dgtg dd}t|| d S )Nr*   rN   rT   rU   rO        \@r   r   r   r?  r  r@   r   r   Tr   )r   r   r*   rN   )r?  r  rT   rU   )r@   r   rO   r  )r
   r4   r   r   r{   r|   r  r'   r'   r(   %test_merge_string_float_column_result	  s   "r  c                  C   sn   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 d    d S 1 s0w   Y  d S )
Nr   r     )datar   rm   i  zCan only pass argumentr   T)r   rx   )r
   r   r   r   r   )df_1df_2r'   r'   r(   /test_mergeerror_on_left_index_mismatched_dtypes	  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*   rN   )rh   rQ   r,   rT   rU   )rh   r  rh   r   r   )rh   rQ   r  )rh   r  rQ   r  )r-   rr   rs   r   r   r'   r'   r(   test_merge_outer_with_NaN	  s(   r  )Vr   r   r   r!   r6  numpyr   r   pandas.core.dtypes.commonr   r   pandas.core.dtypes.dtypesr   pandasr4   r   r	   r
   r   r   r   r   r   r   r   r   r   r   pandas._testing_testingr{   pandas.api.typesrN  pandas.core.reshape.concatr   pandas.core.reshape.merger   r   ro   rq   r)   r6   r;   fixturerJ   rL   rM   r[   r\   r   r  rr   rs   rP  r  r  r  r  r  r  r  r  r9   r  r  r  tupler  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r  r  r'   r'   r'   r(   <module>   sT   <	



          &  


 t

7

(

	


# 
8		
