U
    _{fz                    @   sP  d dl mZm Z m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 d dlmZ d dlmZ d dlmZ d dl m!Z!m"Z" dd
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Z+dd  Z,G d!d" d"Z-ej&d#d$ Z.ej&d%d& Z/G d'd( d(Z0ej&d)d* Z1ej&d+d, Z2G d-d. d.Z3ej4j5d/d0d1 ej6D ed2d3gd2d3gd4d5ed d6d4d7ed8d9gd4d:g d;d d<d=d> Z7ej45d?d@dAgdddBdBd3fdCdd@dAgddBdDd3fddd@dAgdDdBd3fd@dAgdddBdBdfdEdd@dAgddBdDdfddd@dAgdDdBdfgdFdG Z8dHdI Z9ej45dJd d dKdLidMdNgfd d dKdOid dNgfd d dKdPidQdRgfd d dKdSdTgidQdRgfdUd dKdVidUd gfdWdWdKdXidYdWgfdZdZdKdVidZd[gfdUdUdKdXid\dUgfdUdZdKdXidUdZgfdUdUdKd]idUd\gfd d dKd^id_d gfdUdUi d\d`gfd d i dQdRgfgdadb Z:ej45dcd&edddedfgdgdhej;gdidjdkgdlfd@edddedmdfgdgdhdnej;gdidjej;dkgdlfgdodp Z<ej45dqdrdsdtgdudv Z=ej45dKd$d&hd d dwgdxdy Z>ej45dzd{dUdUe?dUd|fgd}d~ Z@ej45dddgej45ddDdBgdd ZAdd ZBdd ZCdd ZDdd ZEej45dddgdd ZFdd ZGej45dddgej45ddUdDdddgfdUdDdddgfgdd ZHej45dddgej45dddUiddgfddUiddgfgdd ZIej45dddgej45dddDiddDigdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRej45dddgdd ZSdd ZTdd ZUdd ZVej45dddgdd ZWej45ddAd$d@d&gej45dddgddǄ ZXdS )    )datedatetime	timedeltaN)is_categorical_dtypeis_object_dtype)CategoricalDtype)CategoricalCategoricalIndex	DataFrameDatetimeIndexIndexIntervalIndex
MultiIndexPeriodIndex
RangeIndexSeriesTimedeltaIndex)concat)
MergeErrormerge   2   c                 C   s`   t t| }tt|||  }t||k rPtt ||d |t|   }tj| |S N)listrangenpZasarraytilelenrandomshuffle)ngroupsnZunique_groupsarr r#   d/var/www/html/Darija-Ai-API/env/lib/python3.8/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_series3   s    r2   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   nanr0   NaTr#   r#   r#   r$   get_series_na?   s
    
r7   c                 C   s   | j jS r   r)   namexr#   r#   r$   <lambda>H       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_dtypeH   s    rD   c                 C   s   | j jS r   r8   r:   r#   r#   r$   r<   Q   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
    r@   rB   r#   r#   r$   series_of_dtype2Q   s    rE   c                 C   s   | j jS r   r8   r:   r#   r#   r$   r<   Z   r=   c                 C   s   | j S )zU
    A parametrized fixture returning a variety of Series with all NA
    values
    r@   rB   r#   r#   r$   series_of_dtype_all_naZ   s    rF   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         )rJ   rK   	col_rightr
   )df1df2r#   r#   r$   dfs_for_indicatorc   s    rT   c                   @   s  e Zd Zejdd Zejdd Zejdd Zej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/d0d0d1d0d2d3d4d0d5d4d2d6gd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#ejdCdDdEdEdFdEdEgfd0dFdEdEdEdEgfgejdGdHdIgdJdK Z$dLdM Z%dNdO Z&dPdQ Z'dRdS Z(dTdU Z)ejdVdWdXdYdZd[d\d]gd^d_ Z*ejdVdWdXdYdZd[d\d]gd`da Z+dbdc Z,ddde Z-dfdg Z.dhdi Z/djdk Z0dldm Z1dndo Z2dpdq Z3drds Z4dtdu Z5dvdw Z6dxdy Z7dzd{ Z8d|d} Z9d~d Z:ejdGdIdgejde;dEddge;dEdddddgfe<dddge<ddde=j>e=j>e=j>gffdd e?j@D eABdddgeABdddeCjDeCjDeCjDgfeEdddgdWdeEddde=j>e=j>e=j>gdWdfeFdddgeFddde=j>e=j>e=j>gffdd ZGdd ZHejdGdHdIgdd ZIdd ZJdd ZKdS )	TestMergec                 C   s:   t t t tjdtjdd}||d dk }|S )Nr   )key1key2data1data2rW   r&   r
   r%   r   r   randn)selfdfr#   r#   r$   r]   q   s    


zTestMerge.dfc                 C   s&   t tddtdddtjddS )N
   )r!   rN   )r    r!   )rV   rW   valuerZ   r\   r#   r#   r$   rS      s    

zTestMerge.df2c                 C   s$   t dddddddgtjddS )NrH   rI   cde   keyv1r
   r   r   r[   r`   r#   r#   r$   left   s    zTestMerge.leftc                 C   s    t dtjdiddddgdS )Nv2rN   rb   rI   ra   rH   indexrh   r`   r#   r#   r$   right   s    zTestMerge.rightc                 C   sP   t  }t dddgiddgdd}t||ddd}t dg idd	}t|| d S )
NrH   r&   rG   r   r'   )rl   r)   T
left_indexright_indexr(   r
   r   tmassert_frame_equal)r\   df_emptyZdf_aresultexpectedr#   r#   r$   test_merge_inner_join_empty   s
    z%TestMerge.test_merge_inner_join_emptyc                 C   s,   t ||}t ||ddgd}t|| d S )NrV   rW   onr   rr   rs   )r\   r]   rS   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   rG   rM   )r   r&   rG   rM   )r
   astyper3   r   rr   rs   r\   ri   rm   rv   ru   r#   r#   r$   test_merge_non_string_columns   s    ,

z'TestMerge.test_merge_non_string_columnsc                 C   sF   | d}| d}t||dd}t||dd d}t|| d S )NrV   rx   )	set_indexr   rr   rs   )r\   r]   rS   ri   rm   ru   rv   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 )NrH   rI   ra   rb   rc   rd   re   rj   rN   rk   rf   Tri   F)left_onrp   howsortrm   )right_onro   r   r   )	r
   r   r   r[   r   rr   rs   loccolumns)r\   ri   rm   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 )NrH   rI   ra   rb   rc   rd   re   rj   rN   rk   rf   Tinnerr   rp   r   rx   )r   ro   r   )r
   r   r   r[   r   joinr   rl   rr   rs   r   r\   ri   rm   ru   rv   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||dd W 5 Q R X d}t jtjj|d t||dd W 5 Q R X d}t jtjj|d t||ddd	 W 5 Q R X d
}t jt|d t||dgddgd W 5 Q R X d S )Nz&Must pass right_on or right_index=TruematchT)ro   z$Must pass left_on or left_index=True)rp   zRCan only pass argument "on" OR "left_on" and "right_on", not a combination of bothrf   )r   ry   z)len\(right_on\) must equal len\(left_on\)rV   rW   r   r   )pytestraisesr0   errorsr   r   
ValueError)r\   r]   rS   ri   rm   msgr#   r#   r$   test_merge_misspecified   s    z!TestMerge.test_merge_misspecifiedc              	   C   s   d}t jt|d t||ddddgd W 5 Q R X d}t jt|d t||dddgdd W 5 Q R X t jt|d  t||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   ri   FrV   rW   r   ro   rp   z=left_index parameter must be of type bool, not <class 'list'>r   r   r   r   )r\   r]   rS   r   r#   r#   r$   &test_index_and_on_parameters_confusion   s4    z0TestMerge.test_index_and_on_parameters_confusionc                 C   sN   t ||dd}|d  d  }t||ks2td|ks>td|ksJtd S )Nrf   rx   rG   Zv1_xZv1_y)r   Zvalue_countssumr   AssertionError)r\   ri   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&   rG   rM   rN   )lkeyr_   ZquxrO      rd   r   )rkeyr_   r   r   outerT)r   r   r   r   r9   value_xvalue_y)r
   r   r   r   r5   rr   assert_series_equal)r\   ri   rm   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&   rH   rI   r^   rk   r+   r   ra   rb   Tro   rp   copyr   rH   Zpeekaboorb   )r
   r   r   allr   )r\   ri   rm   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^   rk   r+   r   r   TFr   rH   rb   )r
   r   r   r   Zshares_memoryZ_valuesr   )r\   using_array_managerri   rm   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&   rG   rM   rO   rf   r_   r_   rf   r   rN   r   )rf   rvaluer   ry   r   r   )rf   r_   r   r   )	r
   r   r   r   r   arrayr5   rr   rs   )r\   ri   rm   r{   rv   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tjkstd S )Nr&   r^   re   rG      r   r   rf   r'   TFr   boolvalr   r   r   key_0)r
   r   r)   r   r   r   int_)r\   rR   rS   r]   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ddddddddg	tjdd}t|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&   rG   rM   rO   r   r_   rf   r'   r   r)   r   r   r(   rN   r   r   r   r   r8   r   T)ro   r   r   r   )r
   r   aranger   r   rr   r   Znotnar   r   r   r   r'   )	r\   ri   rm   rf   r   r   r   r   rv   r#   r#   r$   test_handle_join_key_pass_arrayd  s0    "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;   rH   rk   yrI   ra   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   )r\   dtrR   rS   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  rO   r&   rG   rM   rN   r;   rH   rk   r   rI   ra   qrb   rc   fghr   r
   _check_merge)r\   r   dt2dt3Zdt4rR   rS   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   rO   r&   rG   rM   r;   rH   rI   ra   rb   rk   r   rc   r   r   z hir   )r\   r   r   r   rR   rS   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&   rG   r   rf   ri   r   rm   rq   )r\   ri   rm   ru   r#   r#   r$   test_left_merge_empty_dataframe  s    z)TestMerge.test_left_merge_empty_dataframekwargTrn   r;   ro   r   rH   r   rp   r   c                 C   s^   t dddgd}t dddgd}t ddddddgtd}t||fd	|i|}t|| d S )
NrH   rI   ra   r   r;   r   zr   r   )r
   r4   r   rr   rs   )r\   	join_typer   ri   rm   exp_inru   r#   r#   r$   !test_merge_left_empty_right_empty  s
    z+TestMerge.test_merge_left_empty_right_emptyc              	      sf  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 } 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 )NrH   rI   ra   r   r&   rG   rM   rN   rO   r   rd   r   	   r;   r   r   r(   rH   rI   ra   r;   r   r   r   c                    sH   t  fddi|}t||  t  fddi|}t||  d S )Nr   r   ri   rz   r|   r   ru   ri   rm   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   rm   r   rz   r   r   r#   r$   check2  s    z>TestMerge.test_merge_left_empty_right_notempty.<locals>.check2Trn   r   r   r   )r
   r   r   r5   r4   )r\   exp_outr   r   r   r   r#   r   r$   $test_merge_left_empty_right_notempty  s8    *





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&   rG   rM   rN   rO   r   rd   r   r   rH   rI   ra   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   rm   rz   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   ri   r   Trn   r;   r   rH   r   r   rz   r   r   r   r   r   ri   rm   r#   r$   r     s    
z>TestMerge.test_merge_left_notempty_right_empty.<locals>.check2)r
   r   r   r5   r4   rl   r~   r`   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   rf   r_   r   r   r(   )r   rf   r   r   r   rx   )r
   r   dtypesr   rr   rs   )r\   rD   rE   r]   rt   rv   actualr#   r#   r$   test_merge_empty_frame(  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   rf   r_   r   rf   r   r   r   r   rx   rq   )r\   rD   rF   Zdf_leftZdf_rightrv   r   r#   r#   r$   test_merge_all_na_column:  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|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  rG   rN   i  rM   i  rO   )Zvar1Zvar2var3rd   )r   Zvar8r   Fry   r   )r   r   randintr   r
   	from_dictr   uniquer   r   rr   rs   r   r   )r\   rb   r]   r   newru   r|   r#   r#   r$   test_merge_nosortO  s,    












zTestMerge.test_merge_nosort)r   valuesFr&   r   r   ri   rm   c                 C   sB   t ddddgi}|j|d||d}t |dgd}t|| d S )NrH   r&   r   )ry   r   r   r   rq   )r\   r   r   r   r]   ru   rv   r#   r#   r$    test_merge_same_order_left_rightm  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   _)ry   rsuffix        r   r&   )r   r   i1_r   Nr   r   r   F)Zcheck_dtype)r
   r   r   r5   r   reset_indexrr   rs   r\   rR   rS   ru   rv   r#   r#   r$   test_merge_nan_righty  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   ry   r   r   )r   r   r   r   r   r   r   )r
   r   r   r5   rr   rs   r  r#   r#   r$   test_merge_nan_right2  s    


zTestMerge.test_merge_nan_right2c                    s<   G  fdddt   |}|j|dd}t| s8td S )Nc                       s   e Zd Ze fddZdS )z0TestMerge.test_merge_type.<locals>.NotADataFramec                    s    S r   r#   r`   NotADataFramer#   r$   _constructor  s    z=TestMerge.test_merge_type.<locals>.NotADataFrame._constructorN)__name__
__module____qualname__propertyr  r#   r  r#   r$   r    s   r  rV   rx   )r
   r   
isinstancer   )r\   r]   rS   Znadru   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     rO   8   r   iW  )rb   tr   r   T)Zignore_index)
r
   r   r   r   r   r   r~   r4   rr   rs   )r\   r   rb   r]   ru   rv   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Brk   rri   )r   r   ZAB)0Z0r)
r   Ztimedelta64r
   r   r   r   r0   r6   rr   rs   )r\   tdlhsrhsru   rv   r#   r#   r$   test_join_append_timedeltas2  s    
z&TestMerge.test_join_append_timedeltas2unitDr   msmsusnsc           
      C   s   t dddgi}td d gddgdd}d| d}|dkr@d	}n|}||d}|d j|ksft|j|dd
d}tjddg|d}t	j
jjj||jd}t ddg|dddgd}	|	d j|kstt||	 d S )N	entity_ide   f   daysrl   r9   zdatetime64[]r  r   r  zdatetime64[s]Tr   natr(   r!  r$  r   )r
   r   r~   to_framer)   r   r   r   r   r0   corearraysZDatetimeArrayZ_simple_newrr   rs   )
r\   r  rR   serr)   Z	exp_dtyperS   ru   r$  r|   r#   r#   r$   test_other_datetime_unit  s&    z"TestMerge.test_other_datetime_unitc           	   	   C   s   t dddgi}td d gddgdd}d| d}|dkrtd	}tjt|d
 || W 5 Q R X |dd}n"||d}|d j|kst|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[r&  r'  z/Supported resolutions are 's', 'ms', 'us', 'ns'r   zm8[s]Tr   r(  r(   r)  r   )r
   r   r   r   r   r~   r*  r)   r   r   r   r   rr   rs   )	r\   r  rR   r-  r)   r   rS   ru   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&   rG   rM   rN   rO   r   rd   r   r   rf   rg   rj   rf   r+   r   )rf   rg   rj   Zv3Zv4rV   z;Data columns not unique: Index\(\['foo'\], dtype='object'\)r   )r
   r   rr   rs   r   r   r   r   )r\   r]   rS   rv   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20151010rG   r-   periodsr/   r&   r   20151011rM   rN   r   rf   r   r   )r
   r0   
date_ranger   r5   r   rr   rs   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&   rG   r2  r-   r3  r   rM   r5  r   rf   r   r   r   zdatetime64[ns, US/Eastern]r   )
r
   r0   r6  r   r6   r   rr   rs   r)   r   r   r#   r#   r$   test_merge_datetime64tz_values3  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UTCr.   Z2018g      @Z2019)r   r_   date2r   r_   r:  r   r   rx   r(   )r   date2_xr   r   date2_yr   r;  r   r<  )
r0   ZDatetimeTZDtyper
   r1   r/   r   r   r3   rr   rs   )r\   Zdtzrm   ri   ru   rv   r#   r#   r$    test_merge_on_datetime64tz_emptyN  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:00rN   HzEurope/Madrid)r4  freqr/   r   r   r&   r_   z2017-10-29 03:00:00z2017-10-29 04:00:00z2017-10-29 05:00:00rG   )r   r_   r9  r   r   ry   rd   rM   )r   r   r   )r
   r0   r6  to_datetimer   Ztz_localizeZ
tz_convertr   r   r5   rr   rs   r  r#   r#   r$   +test_merge_datetime64tz_with_dst_transitiong  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r4  r?  Zpnumrl   r   Tr   )ro   rp   r   r(   rG   r&   Zpnum_xZpnum_yr   rl   )r0   period_ranger
   r   r   r   r   r   r   r   r   r'   repeatreshape
sort_indexrl   rr   rs   )r\   rl   r]   rS   ru   rv   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 )Nr2  rG   r  rE  r&   r   r5  rM   rN   r   rf   r   r   )r
   r0   rI  r   r5   r   rr   rs   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&   rG   r2  r  rE  r   rM   r5  r   rf   r   r   r   z	Period[D]r   )
r
   r0   rI  r   r6   r   rr   rs   r)   r   )r\   ri   rm   Zexp_xZexp_yrv   ru   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&   rG   rM   rN   rO   rH   rI   )rJ   col_conflict_xrL   col_conflict_yrP   	left_onlyboth
right_only
categories_mergerJ   rP  rL   rQ  rP   r   Try   r   Z	indicatorZcustom_namer   )	r   r
   r   r5   r   r   rr   rs   rename)
r\   rT   rR   rS   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   rJ   r   rO   rX  r   )r\   rT   rR   rS   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 )
NrJ   ri   TrX  rT  rm   rR  r   rS  )r   rW  r   r   )r\   rT   rR   rS   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_indicatorrW  rJ   r&   rG   zECannot use `indicator=True` option when data contains a column named z;|Cannot use name of an existing column for indicator columnr   r   TrX  )rJ   custom_column_namez:Cannot use name of an existing column for indicator columnr`  r
   r   r   r   r   )r\   rT   rR   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&   rH   rI   )rJ   col2rM   r;   r   rR  rS  rT  rU  rW  rJ   rc  r   TrX  r
   r   r   rr   rs   )r\   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 )4NrH   rI   ra   rb   catdogZweaselhorser   rN   rk   rc   ZmeowZbarkzum... weasel noise?ZnayZchirprH   ra   rO   Tz1:1)ro   rp   validate)a_xrI   a_yra   rk  rl  rF  Z
one_to_onerH   rI   ra   )ry   rj  )rI   rH   ra   rH  )ro   r   rj  mooZone_to_manyzBMerge keys are not unique in right dataset; not a one-to-one merger   cowrM   )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"jibberish" is not a valid argument. Valid arguments are:
- "1:1"
- "1:m"
- "m:1"
- "m:m"
- "one_to_one"
- "one_to_many"
- "many_to_one"
- "many_to_many"Z	jibberishr   r&   )rH   rI   rb   rH   rI   ra   rb   zQMerge keys are not unique in either left or right dataset; not a one-to-one merge)r
   r   r   r   rr   rs   r   r   r   r   r   r   )r\   ri   rm   Z	left_copyZ
right_copyru   rv   Z
expected_2Z
expected_3Zleft_index_resetZright_w_dupsr   Zleft_w_dupsZexpected_multir#   r#   r$   test_validationP  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   rx   )r
   r   Zerrstater   )r\   rH   r#   r#   r$   )test_merge_two_empty_df_no_division_error  s    z3TestMerge.test_merge_two_empty_df_no_division_errorr   zindex,expected_indexrG   rN   N
2001-01-01z
2002-02-02z
2003-03-03c              
   C   s8   g | ]0}t d ddg|dt d dddddgtjdfqS )r&   rG   rM   r(   N)r   r   float64.0Zdtypr#   r#   r$   
<listcomp>)  s   zTestMerge.<listcomp>)r&   rG   )rG   rM   )rM   rN   
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&   rG   rH   rf   rk   rI   rM   rN   rO   rf   Tr   rH   r   )inplace)r
   r   r   r5   r   rr   rs   )r\   r   rl   expected_indexrR   rS   ru   rv   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&   rG   rM   r   r|  rI   rH   rf   rI   rH   rf   rH  Trm   r   r
   r   r5   r   rr   rs   r   r#   r#   r$   test_merge_right_index_rightX  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 )Nrg  pig(   r  )animal	max_speedZquetzalP   r  r  r   rm   rq   )r\   r   left_dfright_dfru   rv   r#   r#   r$   test_merge_preserves_row_orderg  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&   rG   rM   rH   rI   abcrU  r|  ra   rk   rf   Trm   r   r  r   r   )
r
   r   r   r	   r   r   r5   Zreindexrr   rs   r   r#   r#   r$   8test_merge_take_missing_values_from_index_of_other_dtypes  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   )rN   rO   r&   rH   rI   ra   rb   rc   r   )rO   rN   r;   r   F)	r
   r   r   rK  Z_mgrr,  flagsZ	writeabler   )r\   rX   rY   r"   r#   r#   r$   test_merge_readonly  s      

zTestMerge.test_merge_readonly)Lr  r	  r
  r   fixturer]   rS   ri   rm   rw   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.  r/  r1  r7  r8  r=  rB  rM  rN  rO  r]  r^  r_  rb  re  rq  rt  r	   r   r0   r6   rr   ALL_REAL_NUMPY_DTYPESr   from_tuplesr   r5   r   r   r  r  r  r  r  r#   r#   r#   r$   rU   p   s   

	

		 

	

/* "

 ?
" F'
rU   c                 C   sN   dD ]D}| j ||d}t|  | |dd}|d}tj||dd qd S )N)r   ri   r   r   T)r   r   rl   F)Zcheck_names)r   r   r   r   rr   rs   )r;   r   r   ru   rv   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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&   rG         ?       @uint64r(   int32)r  r  Cr  EFr  rx   )r
   r   r~   r   r   r  r)   r   )r\   r  ri   rm   ru   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&   rG   r   r(   r+   r   r      )k1k2v)rG   r   )r&   r+   rj   rO   rd   rk   r  r  rx   r   rv  Tr   Z	mergesort)kindr}  )r   r)   r
   r   r   r'   r   r  r   r   r  r5   r   r  r  rr   rs   Zsort_values)
r\   r  r  Zdtype1Zdtype2ri   rl   rm   ru   rv   r#   r#   r$   test_join_multi_dtypes  s*    




z&TestMergeDtypes.test_join_multi_dtypeszint_vals, float_vals, exp_valsr&   rG   rM   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   rq   )r\   Zint_valsZ
float_valsZexp_valsr  r  rv   ru   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   re   rf   rg   r   rG      )rf   rj   rj   ri   r   g      i@r0  )r
   r   r   r5   rr   rs   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&   rG   rM   r  皙?g      @r  r  r   )r
   rr   Zassert_produces_warningUserWarningr   rs   r   r5   )r\   r  r  rv   ru   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 Nrf   TFr(   rx   )r
   r   r4   r   rr   rs   r\   rR   rS   rv   ru   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   r5   r4   r   rr   rs   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   rH   rI   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  rx   )r
   r   r   r  r)   r   )r\   df1_valsdf2_valsrR   rS   ru   r#   r#   r$   !test_merge_incompat_dtypes_are_ok-  s    z1TestMergeDtypes.test_merge_incompat_dtypes_are_okr  ra   r  r  12z1/1/2011r  rE  z
2011-01-01z
2011-01-02Z20130101)r4  r-   r3  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   rx   )r
   r)   reescaper   r   r   r   )r\   r  r  rR   rS   r   r#   r#   r$    test_merge_incompat_dtypes_errorE  s    

z0TestMergeDtypes.test_merge_incompat_dtypes_errorzexpected_data, howr   r   rm   ri   c           	      C   s`   t dgdg|d}t dgdg|d}t|||d}tt|}t ||dg|d}t|| d S )N)r&   idr   rG   r   rl   r   r)   r
   r   r   r   rr   rs   )	r\   any_numeric_ea_dtyper   expected_datar  r  ru   Z	exp_indexrv   r#   r#   r$   test_merge_EA_dtypeu  s       z#TestMergeDtypes.test_merge_EA_dtypec           	      C   s`   t dgdg|d}t dgdg|d}t|||d}tt|}t ||dg|d}t|| d S )N)rH   r  r   )rI   r   r  r  )	r\   r   r  Zany_string_dtyper  r  ru   Zexp_idxrv   r#   r#   r$   test_merge_string_dtype  s       z'TestMergeDtypes.test_merge_string_dtypezhow, expected_datarN   rO   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&   rO   r  r  rM   rN   r  r  r   r  r  r  r   rq   )r\   r   r  rR   rS   ru   rv   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  )ri   rm   ry   r   Or  r  rk   )r
   r0   ZStringDtyper   ZNAr   rr   rs   r   r   r)   r   r  r   r   )	r\   r   Zstring_dtyperR   rZ  rS   r[  r   rv   r#   r#   r$   test_merge_ea_with_string  s0    z)TestMergeDtypes.test_merge_ea_with_stringzleft_empty, how, exp)Fri   ri   )Frm   empty)Fr   r  )Fr   ri   )Fcrossempty_cross)Tri   r  )Trm   rm   )Tr   r  )Tr   rm   )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 )NrG   r&   rM   rN   r  rO   r  r'   r(   r   r   ri   )r  r  r  rm   )r  r  r  r  r  r  r  r   r  ZA_xZA_y)r
   headr   r   r5   rr   rs   )r\   Z
left_emptyr   r|   ri   rm   ru   rv   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intcZint16Zint8Zuint8rv  Zfloat32Zfloat16r  r  r  r  r  r  r4   r   r  r0   r6  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twothreer  )r   r   seedr
   r   choicer~   CDTr#   r#   r#   r$   ri     s    
ri   c                   C   s4   t jd ttddgtddgddgdS )Nr  r+   r   r&   rG   )r  Z)r   r   r  r
   r   r~   r  r#   r#   r#   r$   rm     s    "rm   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  rx   r+   r   rU  r  ZY_xZY_yrk   	r   r   rL  r   r   r   r)   rr   r   )r\   ri   r   ru   rv   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  rx   r+   r   rU  r  r'   r  r  rk   r  r\   ri   rm   r   ru   rv   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 )NrH   rI   ra   rb   rc   )r   r&   rG   rM   rN   nullr   r   r   r   ri   )r   r   r   r  )r
   r   r   r~   r   rr   rs   )r\   rm   ri   r]   rv   Zcrightru   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  rU  ZA0B0ZC0)FooLeftZC1B1A1)r  Rightr  rx   )r  r  r  rd  r  r#   r#   r$   'tests_merge_categorical_unordered_equalQ  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rV  r  r  r  r(   r   r&   rG   )r  prH   r  r  r  r^   r  r   )r  r  r  ri   Tr   g      &@g      (@)r  r  rH   r  )	r   r
   r   r   r   r   r5   rr   rs   )r\   r  ZpcatrR   rS   ru   rv   r#   r#   r$   5test_multiindex_merge_with_unordered_categoricalindexj  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  rx   r+   r   rU  r  r&   rG   r  r  rk   )assignr  r~   r   r   rL  r   r   r   r)   rr   r   r  r   Z#_categories_match_up_to_permutationr   r  r#   r#   r$   test_other_columns  s    
z'TestMergeCategorical.test_other_columnschangec                 C   s   | S r   r#   r:   r#   r#   r$   r<     r=   zTestMergeCategorical.<lambda>c                 C   s   |  tdddgS )Nr+   r   Zbahr~   r  r:   r#   r#   r$   r<     r=   c                 C   s   |  tddS )NT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 )
Nr4   )r  r  r   r  r'   r  r  rk   )r  r~   r  r   r   r)   r   r   r   rL  r   r   rr   r   )	r\   r  r   ri   rm   r  r   ru   rv   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 )NrO   rH   rI   ra   rb   rc   r   r   r   r   jr  wr;   r   r   rG   c                    s$   g | ]}|gd    D ]}|qqS r  r#   rx  Zeachletterr  r#   r$   ry    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$   ry    s    )
ZaaZbbccddeeffZgghhiiZjjrp  c                 S   s
   |  dS )Nr  )r~   r:   r#   r#   r$   r<     r=   zITestMergeCategorical.test_self_join_multiple_categories.<locals>.<lambda>rx   )r
   applyr   r   r   rr   rs   )r\   r]   ru   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  rG   ?r   Znum2r   r  rM   ffffff?Znum4ru  rz  r{  r   r@  r   )
r
   r   r~   r0   r1   r   r5   r   rr   rs   )r\   r]   rS   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_categoriesrG   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&   rG   rM   rN   )r  rf  rf  r  r   )r  num)r  rf  r  )r
   r~   r  r   rr   rs   )	r\   Zcategory_columnrV  Zexpected_categoriesr  rR   rS   ru   rv   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&   rG   r*   r(   r  r  rx   )r  B_xZB_y)r
   r   r   r5   r   rr   rs   )r\   r]   ru   rv   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 )NrH   r   r^   r   rG   r&   rk   rQ   r#   r#   r#   r$   r    s    r  c                   C   s   t ddddgidddgdS )	NrI   ,  d   r  rM   r&   rG   rk   rQ   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   rG   r&   rk   Tri   r   rm   r  rM   r   c                 C   s$   t ||dd||d}t|| d S )NT)ro   rp   r   r   rz   )r\   r  r  r   r   rv   ru   r#   r#   r$   test_merge_on_indexes'  s    0     z(TestMergeOnIndexes.test_merge_on_indexesN)
r  r	  r
  r   r  r  r
   r   r5   r  r#   r#   r#   r$   r  &  sV   ""$$  
	
/r  rl   c                 C   s   g | ]}t d dg|ddqS )r&   rG   	index_colr8   )r   rw  r#   r#   r$   ry  _  s     ry  r  r  r  )rV  r9   rG   )startstopr9   r,   z
2018-01-02r   c                 C   s   t | j d| j dS )N[r&  )typer  r)   r:   r#   r#   r$   r<   e  r=   )r?   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&   rG   rk   
right_datar  r  r  rx   )r  r  rq   )rl   ri   rm   ru   rv   r#   r#   r$   test_merge_index_types]  s
    r  z-on,left_on,right_on,left_index,right_index,nmr   r   F)NNNTTr  T)NNNTTNc              
   C   s   t dddddgitjddgddggd	d
gdd}tddddgtjddgddggd	d
gd|d}t ddgddgdtjddgdggd	d
gdd}|d k	rt||| ||||d}	t|	| n4d}
tjt	|
d t||| ||||d}	W 5 Q R X d S )Nr  r&   rG   rM   rN   rH   rI   r   r   r   namesrk   r%  r  )ry   r   r   ro   rp   z$Cannot merge a Series without a namer   )
r
   r   from_productr   r   rr   rs   r   r   r   )ry   r   r   ro   rp   nmrH   rI   rv   ru   r   r#   r#   r$   test_merge_seriess  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jtdd t| |d	d
gd W 5 Q R X d S )Nr  r&   rG   rM   rN   rH   rI   r   r   r   r  rk   )r  r  r%  z-Not allowed to merge between different levelsr   rx   )r
   r   r!  r   r   r   r   r   r   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)  rH   )Nr)  r   )r(  Nz0.0_xrI   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&   rG   rM   rN   rO   r   r   Trn   rq   )rJ   rc  kwargsZexpected_colsrH   rI   rv   ru   r#   r#   r$   test_merge_suffix  s    r,  zhow,expectedr  r  r  <   F   X       )r  r  ZB2r&   r  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/  r0  r1  r  )r(  r(  )ry   r   r%  r  )r
   r   r   rr   rs   )r   rv   r  r  ru   r#   r#   r$   test_merge_duplicate_suffix  s
    r2  zcol1, col2, suffixes)rH   rH   )NN)rH   rH   )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&   rG   rM   rN   rO   z'columns overlap but no suffix specifiedr   Tro   rp   r%  ra  )rJ   rc  r%  rH   rI   r   r#   r#   r$   test_merge_suffix_error  s
    r4  r   c              	   C   sT   t ddddgi}t ddddgi}tjtdd	 t||d
d
| d W 5 Q R X d S )NrH   r&   rG   rM   rI   rN   rO   zPassing 'suffixes' as ar   Tr3  )r
   r   r   	TypeErrorr   )r%  rH   rI   r#   r#   r$   test_merge_suffix_raises	  s    r6  zcol1, col2, suffixes, msg)rH   rH   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&   rG   rM   rN   rO   r   Tr3  ra  )rJ   rc  r%  r   rH   rI   r#   r#   r$   test_merge_suffix_length_error	  s    r7  	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 )NrH   rI   ra   Fr  )r  r  r  r&   rG   rM   r+   ri   r+   r+   rm   Trn   ri   rm   r+   )	r   r
   r   r~   r   r9  r   rr   rs   )	r8  r9  Z
cat_dtypesrR   Zdata_fooZ
data_rightrS   ru   rv   r#   r#   r$   test_merge_equal_cat_dtypes	  s8    "

r=  c                  C   s   t dddgdd} ttddg| ddgdd	}ttdddg| d
ddgdd	}|j|ddd}tddgd
dgtddg| dd	}t|| d S )NrH   rI   ra   Fr  r&   rG   r:  r+   rM   r;  Trn   r<  )r   r
   r   r~   r   r   rr   rs   )r8  rR   rS   ru   rv   r#   r#   r$   test_merge_equal_cat_dtypes2D	  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 )
NrH   r   r&   rG   intervalr(   r  r   r@  )	r
   r   r0   ZIntervalr   r~   r   rr   rs   )rm   ri   ru   rv   r#   r#   r$   test_merge_on_cat_and_ext_arrayZ	  s    "r@  c            	         s   ddddg} dddg}t j| |fdd	gd
}t|d}d|d< t|d}d|d< d d|j|d fd} fdd| D fdd| D  }t j||gdd	gd
}t|d}d|d< t|| d S )NrH   rI   ra   rb   r  r  r  r   r   r  r   r&  r  r(  r)  ry   r%  c                    s   g | ]}|  qS r#   r#   rx  r  )l_sufr#   r$   ry  |	  s     z1test_merge_multiindex_columns.<locals>.<listcomp>c                    s   g | ]}|  qS r#   r#   rB  )r_sufr#   r$   ry  |	  s    )r   r!  r
   r   rr   rs   )	lettersnumbersrl   Zframe_xZframe_yru   Zexpected_labelsr~  rv   r#   )rC  rD  r$   test_merge_multiindex_columnsh	  s(    


 
rG  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 )NrH   rI   ra   r  r  r  )r;   r   r  2000Z2001Z2002)r   r   ri   r   r@  r6   )r;   r   r   )r
   r0   rA  r   rr   rs   rR   rS   ru   rv   r#   r#   r$    test_merge_datetime_upcast_dtype	  s    rJ  n_categoriesrO      c                 C   s   t dgtt|  }tt| d dg|d}tdggdgt dgtt| dd}t||dddd	}td
d t| d D ddg|d}t|| d S )Nr   r&   r_   rH  r   rU  ri   Tr   c                 S   s&   g | ]}|d k r|dgn|t jgqS )rG   g      @)r   r5   )rx  r   r#   r#   r$   ry  	  s     z9test_categorical_non_unique_monotonic.<locals>.<listcomp>r   r   )r	   r   r   r
   r   rr   rs   )rK  ro   rR   rS   ru   rv   r#   r#   r$   %test_categorical_non_unique_monotonic	  s    rM  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 )NrH   rI   ra   r   r&   )Cat1Int1r  g333333?r
  r  r  g?)CatIntFactorrP  rQ  rR  rN  rO  ri   r   )Zaxisrx   Tr  )	r   r
   r   r   r   dropr   rr   rs   )rH   rI   rv   ru   r#   r#   r$   &test_merge_join_categorical_multiindex	  s\        rT  funcr   Z
merge_asof)r+  err_msg)r   ro   r   ro   )r   rp   r   rp   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&   rG   rM   rN   r   rO   r   ri  zCan only pass argument "r   " OR "z" not both\.r   r
   r   r   r   getattrr0   rU  r+  rV  ri   rm   r   r#   r#   r$   /test_merge_join_cols_error_reporting_duplicates	  s
    
r[  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&   rG   rM   rN   r   rO   r   ri  zMust pass "r   rW  z"\.r   rX  rZ  r#   r#   r$   ,test_merge_join_cols_error_reporting_missing	  s
    
r\  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&   rG   rM   rN   r   rO   r   ri  zZCan only pass argument "on" OR "left_index" and "right_index", not a combination of both\.r   ry   rH   rX  )rU  r+  ri   rm   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   rm   Tr;   )r   ro   r   )r;   Zx_xZz_xZx_yZz_yrq   ri   rm   ru   rv   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&   rG   r   rH   rI   r(   Tr   r   )r
   r   r   r'   r   rr   rs   )rR   rS   rv   ru   r#   r#   r$   $test_merge_result_empty_index_and_on.
  s    r`  c               	   C   s   t dddgddd} t dddgdd}tjtdd t| |dd	 W 5 Q R X tjtdd t|| dd
d W 5 Q R X d S )Nr&   rG   rM   )rH   rI   b_xr   (Passing 'suffixes' which cause duplicater   rH   rx   )r)  r(  rA  r
   r   r   r   r   r   r#   r#   r$   .test_merge_suffixes_produce_dup_columns_raises:
  s    rd  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&   rG   rH   rI   r   rM   r   rx   ra  r*  rq   r^  r#   r#   r$   3test_merge_duplicate_columns_with_suffix_no_warningF
  s
    "re  c               	   C   sf   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jtd	d
 t| |dd W 5 Q R X d S )Nr&   rG   rH   rI   ra  r   rM   r   rb  r   rx   rc  r   r#   r#   r$   Itest_merge_duplicate_columns_with_suffix_causing_another_duplicate_raisesP
  s    (rf  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&   rG   rM   rN   rH   g     \@r   r   r^   r  r   r;   r   r   Tr   r
   r   r   rr   rs   rI  r#   r#   r$   %test_merge_string_float_column_resultY
  s      rh  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   rl   i  zCan only pass argumentr   T)ry   ro   rc  )Zdf_1Zdf_2r#   r#   r$   /test_mergeerror_on_left_index_mismatched_dtypesd
  s    rj  c                  C   sb   t td} t| tdd}tdtddi}t||| dd}t||| jdd}t|| d S )NrM   r  r  r   r  r   )r	   r   r
   r   _datarr   rs   )cirm   ri   resrv   r#   r#   r$   #test_merge_on_left_categoricalindexl
  s    rn  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&   rG   )rf   rJ   r(   rM   rN   )rf   rc  rf   r   r   )rf   rJ   rc  )rf   rc  rJ   r  )r)   ri   rm   ru   rv   r#   r#   r$   test_merge_outer_with_NaNx
  s(    ro  c                  C   sh   t ddgitdgddd} t ddgitdgddd}t| |ddd}t dgdd}t|| d S )	NrH   r&   ra   r   rk   rb   r   )rk  rl  rg  r^  r#   r#   r$    test_merge_different_index_names
  s
    rp  c                 C   sh   t dddgdd| d}t dddgdd| d}|j||d}t dddgddd| d}t|| d S 	Nr&   rG   rM   r   r(   ri  r   rm  rq   r  r   ri   rm   ru   rv   r#   r#   r$   test_merge_ea
  s
    rs  c                 C   s   t dddgdd| d}t dddgdd|  d}|j||d}t tdddg| dtdddg| dtdddg|  dd}t|| d S rq  )r
   lowerr   r   rr   rs   rr  r#   r#   r$   test_merge_ea_and_non_ea
  s    ru  r'   int64[pyarrow]c                 C   sr   t d tdddgi| d}tdddgidd}||}| }t|| ||}| }t|| d S )NZpyarrowrH   r&   rG   r(   rv  )r   Zimportorskipr
   r   r   rr   rs   )r)   r]   rS   ru   rv   r#   r#   r$   !test_merge_arrow_and_numpy_dtypes
  s    


rw  r   r/   zAmerica/Chicagoc                 C   s:  t jddd| dt jddd| dt jddd| dg}t|d d dd	gd
}|d jd|d< t|dd  dd	gd}|d jd|d< t|dd	tjgtjdd	gd}|d jd|d< |dkr|jdg jdd}n8|dkr|jddg }n |dkr|jddg jdd}|j	|d|d}t
|| d S )Ni  rO   r   r.         rG   r  r  )r  rH   r  r   r&   )r  rI   r  )r  rH   rI   r   T)rS  ri   r   rm   r   )r0   r1   r
   r   Zas_unitr   r5   Zilocr   r   rr   rs   )r/   r   valsrR   rS   rv   ru   r#   r#   r$   (test_merge_datetime_different_resolution
  s$     
r{  )r   r   )Yr   r   r   r  numpyr   r   Zpandas.core.dtypes.commonr   r   Zpandas.core.dtypes.dtypesr   Zpandasr0   r   r	   r
   r   r   r   r   r   r   r   r   Zpandas._testingZ_testingrr   Zpandas.api.typesr  Zpandas.core.reshape.concatr   Zpandas.core.reshape.merger   r   r%   r2   r7   r  rD   rE   rF   rT   rU   r   r  ri   rm   r  r  r  r  r  r  r  r  r#  r$  r,  r5   r2  r4  r6  tupler7  r=  r>  r@  rG  rJ  rM  rT  r[  r\  r]  r_  r`  rd  re  rf  rh  rj  rn  ro  rp  rs  ru  rw  r{  r#   r#   r#   r$   <module>   s`  4
	



          2  V

  

7


(


	


# 
8		
	
		
