3
Ud0                @   s  d dl mZ 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j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 Z0G dd dZ1dd Z2G d d! d!Z3e	j-d"d# Z4e	j-d$d% Z5G d&d' d'Z6e	j-d(d) Z7e	j-d*d+ Z8G d,d- d-Z9e	j:j;d.ed/d0gd/d0gd1d2ed3d4gd1d5ed6d7gd1d5ed6d7gd1d5ed d7d1d8ed9d:gd1d5gd;d d<d=d> Z<e	j:j;d?d@dAgdddBdBd0fddd@dAgddBdCd0fddd@dAgdCdBd0fd@dAgdddBdBdfddd@dAgddBdCdfddd@dAgdCdBdfgdDdE Z=e	j:j;dFd d e>ddIdJdKgfd d e>ddId dKgfd d e>ddIdNdOgfd d e>dLdMgdIdNdOgfdPd e>ddIdPd gfdQdQe>ddIdRdQgfdSdSe>ddIdSdTgfdPdPe>ddIdUdPgfdPdSe>ddIdPdSgfdPdPe>ddIdPdUgfd d e>ddIdWd gfdPdPe> dUdXgfd d e> dNdOgfgdYdZ Z?e	j:j;d[d%ed\d]d^gd_d`ej@gdadbdcgddfd@ed\d]d6d^gd_d`deej@gdadbej@dcgddfgdfdg ZAe	j:j;dhdddgdidj ZBe	j:j;dkd#d%hd d dlgdmdn ZCe	j:j;doddPdPeDdPdrfgdsdt ZEe	j:j;dudvdwge	j:j;dxdCdBgdydz ZFd{d| ZGd}d~ ZHdd ZIdd ZJe	j:j;dddgdd ZKdS )    )OrderedDict)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jtj|||  }t||k rPtjt ||d |t|   }tj| |S )N)listrangenpZasarraytilelenrandomshuffle)ngroupsnZunique_groupsZarr r$   Y/var/www/html/virt/lib64/python3.6/site-packages/pandas/tests/reshape/merge/test_merge.pyget_test_data%   s    "
r&   c               C   sb   t jdgddt jdgddt jdgt jdgt jdgt jt jdgt jt jdd	d
ggS )N   int64)dtypeInt64gGz?fooTz
2018-01-01z
US/Eastern)tz)pdr   	Timestampr$   r$   r$   r%   
get_series0   s    


r/   c               C   s@   t jtjgddt jtjgddt jtjgddt jt jggS )Nr*   )r)   floatobject)r-   r   r   nanNaTr$   r$   r$   r%   get_series_na<   s    r4   c             C   s   | j jS )N)r)   name)xr$   r$   r%   <lambda>E   s    r7   )paramsidsc             C   s   | j S )zV
    A parametrized fixture returning a variety of Series of different
    dtypes
    )param)requestr$   r$   r%   series_of_dtypeE   s    r<   c             C   s   | j jS )N)r)   r5   )r6   r$   r$   r%   r7   N   s    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:   )r;   r$   r$   r%   series_of_dtype2N   s    r=   c             C   s   | j jS )N)r)   r5   )r6   r$   r$   r%   r7   W   s    c             C   s   | j S )zU
    A parametrized fixture returning a variety of Series with all NA
    values
    )r:   )r;   r$   r$   r%   series_of_dtype_all_naW   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jd)ed*d*d+ed*d,d-ed.d*d/ed.d,d0gd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$ejjdEdFdGdHdIdJdKdLgdMdN Z%dOdP Z&dQdR Z'dSdT Z(dUdV Z)dWdX Z*dYdZ Z+d[d\ Z,d]d^ Z-d_d` Z.ejjdadbdcgejjdde/dedfdgge/dedfdgdhdhdhgfe0didjdkge0didjdke1j2e1j2e1j2gfe3dedfdlge3dedfdldhdhdhgfe4dedfdlge3dedfdldhdhdhgfe5j6d~ddge5j6ddde7j8e7j8e7j8gfe9didmdngdFdoe9didmdne1j2e1j2e1j2gdFdofe:dpdqdrge:dpdqdre1j2e1j2e1j2gfgdsdt Z;dudv Z<ejjdadwdbgdxdy Z=dzd{ Z>d|d} Z?dhS )	TestMergec             C   s   t t t tjjttjjtd| _| j| jd dk | _t ttd dttd td dtjjtd d| _t d	d
ddddd	gtjjdd| _	t dtjjdidd
dd	gd| _
d S )N)key1key2data1data2rA   r'      )r#      )r"   r#   )r@   rA   valueabcde   )keyv1v2   )index)r   r&   r   r    randnNdfNGROUPSdf2leftright)selfmethodr$   r$   r%   setup_methoda   s    
$zTestMerge.setup_methodc             C   sZ   t j }t jdddgiddgdd}t j||ddd}t jdg ig dd}tj|| d S )	NrG   r'   rE   r   r(   )rQ   r)   T)
left_indexright_index)r-   r   r   tmassert_frame_equal)rY   df_emptyZdf_aresultexpectedr$   r$   r%   test_merge_inner_join_empty|   s
    z%TestMerge.test_merge_inner_join_emptyc             C   s4   t | j| j}t | j| jddgd}tj|| d S )Nr@   rA   )on)r   rT   rV   r^   r_   )rY   joinedexpr$   r$   r%   test_merge_common   s    zTestMerge.test_merge_commonc             C   s^   t jddddgddddgddddgddddgd}|jt}|}t j||}tj|| d S )Nr'   r   rE      )r   r'   rE   rh   )r-   r   astyper0   r   r^   r_   )rY   rW   rX   rb   ra   r$   r$   r%   test_merge_non_string_columns   s    0
z'TestMerge.test_merge_non_string_columnsc             C   sN   | j jd}| jjd}t||dd}t| j | jddjd}tj|| d S )Nr@   )rd   )rT   	set_indexrV   r   r^   r_   )rY   rW   rX   ra   rb   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jdd}t dtjjd	iddddgd
}t||ddddd}t||ddddd}tj||jd d |jf  t||ddddd}t||ddddd}tj||jd d |jf  d S )NrG   rH   rI   rJ   rK   rL   )rM   rN   rO   rP   )rQ   rM   TrW   F)left_onr]   howsortrX   )right_onr\   rn   ro   )	r   r   r    rR   r   r^   r_   loccolumns)rY   rW   rX   Zmerged1merged2r$   r$   r%   (test_merge_index_singlekey_right_vs_left   s    " z2TestMerge.test_merge_index_singlekey_right_vs_leftc             C   s   t dddddddgtjjdd}t dtjjd	iddddgd
}t||dddd}|j|ddj|j }tj	|| t||dddd}|j|ddj|j }tj	||jd d |j
f  d S )NrG   rH   rI   rJ   rK   rL   )rM   rN   rO   rP   )rQ   rM   Tinner)rm   r]   rn   )rd   )rp   r\   rn   )r   r   r    rR   r   joinrq   rQ   r^   r_   rr   )rY   rW   rX   ra   rb   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 Q R X d}t jtjj|d t| j| jdd W d Q R X d}t jtjj|d t| j| jddd	 W d Q R X d
}t jt|d  t| j	| j
dgddgd W d Q R X d S )Nz&Must pass right_on or right_index=True)matchT)r\   z$Must pass left_on or left_index=True)r]   zRCan only pass argument "on" OR "left_on" and "right_on", not a combination of bothrM   )rm   rd   z)len\(right_on\) must equal len\(left_on\)r@   rA   )rm   rp   )pytestraisesr-   errorsr   r   rW   rX   
ValueErrorrT   rV   )rY   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 Q R X d}t jt|d  t| j| jdddgdd W d Q R X t jt|d$ t| j| jdddgddgd W d Q R X d S )	Nz>right_index parameter must be of type bool, not <class 'list'>)rx   rW   Fr@   rA   )rn   r\   r]   z=left_index parameter must be of type bool, not <class 'list'>)ry   rz   r|   r   rT   rV   )rY   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 j d j }t||ks8td|ksDtd|ksPtd S )NrM   )rd   rE   Zv1_xZv1_y)r   rW   Zvalue_countssumr   AssertionError)rY   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jddddddtjgdd}tj|d | tjdtjddddd	gdd}tj|d | tjddddddtjgdd}tj|d | tjdtjd
dd
ddgdd}tj|d | d S )Nr+   barZbazr'   rE   rh   rP   )lkeyrF   ZquxrD      rL   r   )rkeyrF   r   r   outerT)rm   rp   rn   ro   )r5   value_xvalue_y)r   r   r-   r   r   r2   r^   assert_series_equal)rY   rW   rX   r   rf   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j sZtd|d< |d dkj svtd S )Nr   r'   )rG   rH   
   )rQ   r+   r   )rI   rJ   T)r\   r]   copyr   rG   peekaboorJ   )r   r   r   allr   )rY   rW   rX   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}d|d< |d dkj sZtd|d< |d dkj svtd S )Nr   r'   )rG   rH   r   )rQ   r+   r   )rI   rJ   TF)r\   r]   r   r   rG   r   rJ   )r   r   r   r   r   )rY   rW   rX   r   r$   r$   r%   test_merge_nocopy  s    zTestMerge.test_merge_nocopyc             C   s   t dddddgttddddgd}t ddddd	dgttd
d}t||ddd}t dddddddd	dg	tj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j|| d S )Nr'   rE   rh   rD   )rM   rF   rF   rM   )rr   rP   r   )rM   rvaluer   )rd   rn   r   )rM   rF   r   r   )	r   r   r   r   r   arrayr2   r^   r_   )rY   rW   rX   re   rb   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jdg}tjdg}t||||dd}|d jd	kstd S )Nr'   r   )rM   rN   rE      r   )rn   rM   r(   TFr   r1   val)rm   rp   rn   key_0)r   r   r)   r   r   r   )rY   df1rV   rT   r   r   r$   r$   r%   test_merge_join_key_dtype_cast8  s    z(TestMerge.test_merge_join_key_dtype_castc             C   s  t dddddgtjddddgd}t d	tjd
i}tjddddddg}t||d|dd}t|||ddd}tj|d |d  |d j j st	|d j j st	t dtjdidgd}t d	tjd
i}tjdddddg}tjddddddg}t||||dd}tj|d t
dddddddddg	dd t dtjdi}t d	tjd
i}tjddddddgtjd}t||d|dd}tj|d t
|dd d S )Nr'   rE   rh   rD   )rM   rF   rF   rM   )rr   r   r   rP   r   )rm   rp   rn   r   )r5   r   )r)   T)r\   rp   rn   )r   r   aranger   r   r^   r   Znotnar   r   r   r(   )rY   rW   rX   rM   r   rs   r   r   r$   r$   r%   test_handle_join_key_pass_arrayO  s*    $&z)TestMerge.test_handle_join_key_pass_arrayc          
   C   sx   t j }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 Q R X d S )Nr6   rG   )rQ   yrH   rI   z>No common columns to perform merge on. Merge options: left_on=z, right_on=z, left_index=Fz, right_index=)rx   )r   nowr   ry   rz   r   r   )rY   dtr   rV   r}   r$   r$   r%   &test_no_overlap_more_informative_errorn  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 )Ni  rD   r'   rE   rh   rP   r6   rG   )rQ   r   rH   rI   qrJ   rK   fgh)r   r   _check_merge)rY   r   dt2dt3Zdt4r   rV   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 )Ni  rD   r'   rE   rh   r6   rG   rH   rI   rJ   )rQ   r   rK   r   r   z hi)r   r   r   )rY   r   r   r   r   rV   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j|| t||ddd}tj|| d S )Nr'   rE   )rM   rF   rM   rW   )rd   rn   rX   )r   r   r^   r_   )rY   rW   rX   ra   r$   r$   r%   test_left_merge_empty_dataframe  s    z)TestMerge.test_left_merge_empty_dataframekwargT)r\   r]   r6   )r\   rp   rG   )rm   r]   )rm   rp   c             C   sr   t jdddgd}t jdddgd}t jddddddgt jg tdtd	}t j||fd
|i|}tj|| d S )NrG   rH   rI   )rr   r6   r   z)r)   )rr   rQ   r)   rn   )r-   r   Indexr1   r   r^   r_   )rY   	join_typer   rW   rX   exp_inra   r$   r$   r%   !test_merge_left_empty_right_empty  s    z+TestMerge.test_merge_left_empty_right_emptyc          	      s  t jdddgd t jdddgdd	d
gdddggdddgdt jtjtjgd tdtjtjgd tdtjtjgd tddddgdd	dgdd
dgdddddddgd}|dd }|jjt|_ fdd} fdd}x4tdddtdddgD ]}||| ||| qW tddd}||| dddg|d< ||| tddd}||| tjtjgd td|d< ||| d S )NrG   rH   rI   )rr   r'   rE   rh   rP   rD   r   rL   r   	   r6   r   r   )r)   )rG   rH   rI   r6   r   r   r   c                sL   t j fddi|}tj||  t j fddi|}tj||  d S )Nrn   ru   rW   )r-   r   r^   r_   )rf   r   ra   )rW   rX   r$   r%   check1  s    z>TestMerge.test_merge_left_empty_right_notempty.<locals>.check1c                sL   t j fddi|}tj||  t j fddi|}tj||  d S )Nrn   rX   r   )r-   r   r^   r_   )rf   r   ra   )rW   rX   r$   r%   check2  s    z>TestMerge.test_merge_left_empty_right_notempty.<locals>.check2T)r\   r]   )r\   rp   )rm   r]   )rm   rp   )	r-   r   r   r   r2   r1   rQ   ri   dict)rY   exp_outr   r   r   r   r$   )rW   rX   r%   $test_merge_left_empty_right_notempty  s6    ,




z.TestMerge.test_merge_left_empty_right_notemptyc          
      s   t jdddgdddgddd	ggd
ddgdt jdddgdt j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jt_fdd  fddd S )Nr'   rE   rh   rP   rD   r   rL   r   r   rG   rH   rI   )rr   r6   r   r   )r)   )rG   rH   rI   r6   r   r   r   c                sL   t j fddi|}tj||  t j fddi|}tj||  d S )Nrn   ru   rX   )r-   r   r^   r_   )rf   r   ra   )rW   rX   r$   r%   r     s    z>TestMerge.test_merge_left_notempty_right_empty.<locals>.check1c                s   t jfddi|}tj||  t jfddi|}tj||  xHtdddtdddtddd	tddd
gD ]} | | qvW d S )Nrn   rW   r   T)r\   r]   r6   )r\   rp   rG   )rm   r]   )rm   rp   )r-   r   r^   r_   r   )rf   r   ra   )r   r   r   r   rW   rX   r$   r%   r   	  s    



z>TestMerge.test_merge_left_notempty_right_empty.<locals>.check2)r-   r   r   r   r2   r1   rQ   ri   )rY   r$   )r   r   r   r   rW   rX   r%   $test_merge_left_notempty_right_empty  s    ,z.TestMerge.test_merge_left_notempty_right_emptyc             C   s   t j||dddgd}|d d }t jt j|jd dt j|jd dt j|jd ddddd	gd}|j|dd
}tj|| d S )N)rM   rF   rM   rF   )rr   r   )r)   )r   rM   r   r   r   )rd   )r-   r   r   dtypesr   r^   r_   )rY   r<   r=   rT   r`   rb   actualr$   r$   r%   test_merge_empty_frame  s    z TestMerge.test_merge_empty_framec             C   sj   t j||dddgd}t j||dddgd}t j|||ddddgd}|j|dd}tj|| d S )	N)rM   rF   rM   rF   )rr   )rM   r   r   r   r   )rd   )r-   r   r   r^   r_   )rY   r<   r>   Zdf_leftZdf_rightrb   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|}|jj }|j  tj|t jjdd}|j	|ddd}t	||ddd}t
j|| |jj |jj kj s
td S )Nr   r   )sizei  r'      i  rE   rP   i  rh   i  rD   )Zvar1Zvar2var3rL   )r   Zvar8r   F)rd   ro   )r   r    randintr   r   	from_dictr   uniquero   r   r^   r_   r   r   )rY   rJ   rT   r   newra   rf   r$   r$   r%   test_merge_nosort?  s(    










zTestMerge.test_merge_nosortc             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
jd j ddddg }tj||dd 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j|| d S )Nr   r'   )i1i2)r   i3r   _)rd   rsuffixg        )r   r'   )r   r   i1_r   Nr   r   r   F)Zcheck_dtypeg      ?g      ?gffffff?)r   rd   )r   r   r   r   )r   rv   r   r2   rk   reset_indexr^   r_   )rY   r   rV   ra   rb   r$   r$   r%   test_merge_nan_right]  s,    


zTestMerge.test_merge_nan_rightc                s@   G  fdddt   | j}|j| jdd}t| s<td S )Nc                   s   e Zd Ze fddZdS )z0TestMerge.test_merge_type.<locals>.NotADataFramec                s    S )Nr$   )rY   )NotADataFramer$   r%   _constructor  s    z=TestMerge.test_merge_type.<locals>.NotADataFrame._constructorN)__name__
__module____qualname__propertyr   r$   )r   r$   r%   r   ~  s   r   r@   )rd   )r   rT   r   rV   
isinstancer   )rY   Znadra   r$   )r   r%   test_merge_type}  s    
zTestMerge.test_merge_typec             C   s  t dddddtddd}ttdd	}|j|d
d}|j|d
d}tt dddddt dddddgtddtddgd}tj|| tj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j|| d S )Ni     rD   8   r   iW  )rJ   tr   )rr   T)Zignore_indexi AB)rQ   rrW   )r   rn   ZAB)0Z0r)r   r   r   r   appendr^   r_   r   Ztimedelta64r   rv   r-   r3   )rY   rJ   rT   ra   rb   tdlhsrhsr$   r$   r%   test_join_append_timedeltas  s     
z%TestMerge.test_join_append_timedeltasc             C   s   t jdddgi}t jd d gddgdd}xtdD ]l}|j|jd}|d jdksVt|j|ddd}t jddgtj	ddgdddddgd}t
j|| q0W d S )N	entity_ide   f   days)rQ   r5   datetime64[D]datetime64[h]datetime64[m]datetime64[s]datetime64[ms]datetime64[us]datetime64[ns]T)rm   r]   nat)r)   )r   r   )rr   )r   r   r   r   r   r   r   )r-   r   r   ri   to_framer)   r   r   r   r   r^   r_   )rY   r   sr)   rV   ra   rf   r$   r$   r%   test_other_datetime_unit  s$          z"TestMerge.test_other_datetime_unitunitDr   mr   msusnsc             C   s   t jdddgi}t jd d gddgdd}d| d}|j|jd}|d jdksXt|j|dd	d
}t jddgtj	ddg|ddddgd}t
j|| d S )Nr   r   r   r   )rQ   r5   zm8[]zm8[ns]T)rm   r]   r   )r)   )r   r   )rr   )r-   r   r   ri   r   r)   r   r   r   r   r^   r_   )rY   r   r   r   r)   rV   ra   rf   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jt||| dddg|_d}tjt|d t|| W d Q R X d S )Nr'   rE   rh   rP   rD   r   rL   r   r   )rM   rN   rO   rM   r+   r   )rM   rN   rO   Zv3Zv4r@   z;Data columns not unique: Index\(\['foo'\], dtype='object'\))rx   )r   rr   r^   r_   r   ry   rz   r   )rY   rT   rV   rb   r}   r$   r$   r%   &test_overlapping_columns_error_message  s     ""z0TestMerge.test_overlapping_columns_error_messagec          
   C   sb  t jt jddddddgd}t j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 j||ddd}tj|| t jddgt jddddd}t j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 j||ddd}tj|| |d j
dksJt|d j
dks^td S )N20151010rE   z
US/Eastern)periodsr,   r'   )rM   rF   20151011rh   rP   )rM   r   r   rM   r   )rd   rn   r   zdatetime64[ns, US/Eastern]r   )r-   r   
date_ranger   r2   r   r^   r_   r   r3   r)   r   )rY   rW   rX   rb   ra   r$   r$   r%   test_merge_on_datetime64tz  s8    z$TestMerge.test_merge_on_datetime64tzc             C   s   t jdd}t j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 jt jtdt j|dt j|dt jtdt j|dddddddgd
}tj	|| d S )NUTC)r,   Z2018g      @Z2019)r   rF   date2r   rF   r   )rr   r   )rd   )r)   )r   date2_xr   r   date2_yr   r   r   r  )
r-   ZDatetimeTZDtyper   r.   r,   r   r   r0   r^   r_   )rY   ZdtzrX   rW   ra   rb   r$   r$   r%    test_merge_on_datetime64tz_empty!  s     



z*TestMerge.test_merge_on_datetime64tz_emptyc             C   s   t jt jddddddgd}d|d	< t jt jd
ddgdd}|d jjdjjd|d< t j||ddd}t jt jddddddgd tj	gd  tj	gd dgd  d}t
j|| d S )Nz2017-10-29 01:00rP   HzEurope/Madrid)r   freqr,   r   )rr   r'   rF   z2017-10-29 03:00:00z2017-10-29 04:00:00z2017-10-29 05:00:00rE   )r   rF   r   r   )rn   rd   rL   rh   )r   r   r   )r-   r   r   to_datetimer   Ztz_localizeZ
tz_convertr   r   r2   r^   r_   )rY   r   rV   ra   rb   r$   r$   r%   +test_merge_datetime64tz_with_dst_transition:  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j	tj
dtjd
jdjdddddg|j jd}tj|| d S )Nz
2016-01-01   M)r   r  Zpnum)rQ   rr   Tru   )r\   r]   rn   )r)   rE   r'   Zpnum_xZpnum_y)rr   rQ   )r-   period_ranger   r   r   r   r   r   r   r   r   r(   repeatreshape
sort_indexrQ   r^   r_   )rY   rQ   rT   rV   ra   rb   r$   r$   r%   "test_merge_non_unique_period_indexZ  s    $z,TestMerge.test_merge_non_unique_period_indexc             C   sj  t jt jddddddgd}t j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 j||ddd}tj|| t jddgt jddddd}t j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 j||ddd}tj|| |d j
dksRt|d j
dksftd S )Nr   rE   r   )r   r  r'   )rM   rF   r   rh   rP   )rM   r   r   rM   r   )rd   rn   r   z	Period[D]r   )r-   r   r
  r   r2   r   r^   r_   r   r3   r)   r   )rY   rW   rX   rb   ra   Zexp_xZexp_yr$   r$   r%   test_merge_on_periodsg  s2    zTestMerge.test_merge_on_periodsc          #   C   s  t ddgddgddgd}|j }t ddddd	gddddd	gdddddgd
}|j }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|| |j|dddd}tj|| tj|| tj|| |}|jddid}t||dddd}tj|| |j|dddd}tj|| d}	t	j
t|	d t||ddd	d W d Q R X t	j
t|	d |j|ddd	d W d Q R X t||dddd}
|
jdkj st|j|dddd}
|
jdkj s@tt||dddd}|jdkj sft|j|dddd}|jdkj stt||dddd}|jdkj st|j|dddd}|jdkj stxd+D ]}t dddg|ddgi}d"| d#}	t	j
t|	d t||dddd W d Q R X t	j
t|	d |j|dddd W d Q R X qW t ddgddgd$}d%}	t	j
t|	d t||ddd&d W d Q R X t	j
t|	d |j|ddd&d W d Q R X 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|| |j|dd*gddd}tj|| d S ),Nr   r'   rE   rG   rH   )col1col_conflictcol_leftrh   rP   rD   )r  r  	col_right)r  col_conflict_xr  col_conflict_yr  Z	left_onlyZbothZ
right_only)
categories_merger  r  r  r  r  r   T)rd   rn   Z	indicatorZcustom_name)rr   z<indicator option can only accept boolean or string arguments)rx   rW   rX   ru   _right_indicator_left_indicatorzECannot use `indicator=True` option when data contains a column named z;|Cannot use name of an existing column for indicator column)r  custom_column_namez:Cannot use name of an existing column for indicator columnr  )r  col2r6   r   r  )r  r  r  )r   r   r   r2   r	   r   r^   r_   renamery   rz   r|   r  r   r   )rY   r   Zdf1_copyrV   Zdf2_copyZ	df_resulttestZdf_result_custom_nameZtest_custom_namer}   Ztest2Ztest3Ztest4r   Zdf_badcolumnZdf3Zdf4Zhand_coded_resultZtest5r$   r$   r%   test_indicator  s    
"
zTestMerge.test_indicatorc          >   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}|j }|j }t||dddd}tj|| tj|| 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j|| 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j|| tj|| tj|| t||ddd}tj|| t ddddgddddgddddgddddgtd
d}|jd}	t|	|dddd }tj|| |jtj 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 Q R X t	j
t|d$ t||
ddd W d Q R X |jtj 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 Q R X t	j
t|d$ t||ddd W d Q R X t||
dd*d d+}t	j
t|d$ t||
ddd(d W d Q R X d,}t	j
t|d$ t||
dd"d W d Q R X d-}t	j
t|d$ t||dd.d W d 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 d Q R X t||ddgdd}tj|| d S )4NrG   rH   rI   rJ   catdogZweaselZhorse)rG   rH   rP   )rQ   rK   ZmeowZbarkzum... weasel noise?ZnayZchirp)rG   rI   rD   Tz1:1)r\   r]   validate)a_xrH   a_yrI   r"  r#  )rQ   rr   Z
one_to_one)rG   rH   rI   )rd   r!  )rH   rG   rI   )rr   rQ   )r\   rp   r!  ZmooZone_to_manyzBMerge keys are not unique in right dataset; not a one-to-one merge)rx   Zcowrh   )ro   Zmany_to_onezAMerge keys are not unique in left dataset; not a one-to-one mergeZmany_to_manyzCMerge keys are not unique in right dataset; not a many-to-one mergezBMerge keys are not unique in left dataset; not a one-to-many mergez!Not a valid argument for validateZ	jibberishr   r'   )rG   rH   rJ   )rG   rH   rI   rJ   zQMerge keys are not unique in either left or right dataset; not a one-to-one merge)r   r   r   r   r^   r_   rk   r   r-   ry   rz   r   r|   )rY   rW   rX   Z	left_copyZ
right_copyra   rb   Z
expected_2Z
expected_3Zleft_index_resetZright_w_dupsr}   Zleft_w_dupsZexpected_multir$   r$   r%   test_validation"  s    







  

zTestMerge.test_validationc             C   s<   t jg g g d}tjdd t||dd W d Q R X d S )N)rG   rH   rI   raise)dividerG   rH   )rd   )rG   rH   )r-   r   r   Zerrstater   )rY   rG   r$   r$   r%   )test_merge_two_empty_df_no_division_error  s    z3TestMerge.test_merge_two_empty_df_no_division_errorrn   rX   r   zindex,expected_indexr'   rE   rP   Nz
2001-01-01z
2002-02-02z
2003-03-03rh   z
2001-01-02z
2001-01-03)r  Z1dZ2dZ3dc          	   C   s   t jdddgdddgd|d}t jddddddd	gi}|j|d
d|d}t j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j|| d S )Nr   r'   rE   )rG   rM   )rQ   rH   rh   rP   rD   rM   T)rm   r]   rn   rG   )rr   )inplace)r-   r   r   r   r2   rk   r^   r_   )rY   rn   rQ   expected_indexr   rV   ra   rb   r$   r$   r%   $test_merge_on_index_with_more_values  s    ' 

z.TestMerge.test_merge_on_index_with_more_valuesc             C   s   t jdddgdddgd}t jddddgi}t j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j|| d S )Nr'   rE   rh   r   )rG   rM   rH   )rG   rM   rH   rG   rM   )rr   rQ   TrX   )rm   r]   rn   )r-   r   r   r2   r   r^   r_   )rY   rW   rX   rb   ra   r$   r$   r%   test_merge_right_index_right  s    "z&TestMerge.test_merge_right_index_rightrW   c             C   s   t jddgddgd}t jddgddgd}|j|dd	g|d
}|dkrft jddgddgd}nt jddgddgd}tj|| d S )Nr   Zpig(   r   )animal	max_speedZquetzalP   r-  r.  )rd   rn   rX   )r-   r   r   r^   r_   )rY   rn   left_dfright_dfra   rb   r$   r$   r%   test_merge_preserves_row_order)  s    z(TestMerge.test_merge_preserves_row_orderc             C   s   t jdddgt jdddgtddd}t jddddgit jddd	gd
}|j|dddd}t jdddd gt j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	j
|| d S )Nr'   rE   rh   rG   rH   abc)r  )rG   rM   rI   )rQ   rM   TrX   )rm   r]   rn   )rG   rM   rH   r   )rr   )r-   r   r	   r   r
   r   r   r2   Zreindexr^   r_   )rY   rW   rX   ra   rb   r$   r$   r%   8test_merge_take_missing_values_from_index_of_other_dtype7  s     
zBTestMerge.test_merge_take_missing_values_from_index_of_other_dtypec             C   sn   t jtjdjdd ddddd	gd
}t jtjdjdd ddddgd
}d|jjd jj_	|j
| d S )Nr   rP   rD   r'   rG   rH   rI   rJ   rK   )rr   r6   r   Fr   )rP   rD   )rD   rP   )r-   r   r   r   r  Z_mgrblocksvaluesflagsZ	writeabler   )rY   rB   rC   r$   r$   r%   test_merge_readonlyN  s    $"zTestMerge.test_merge_readonly)r'   rE   )rE   rh   )rh   rP   )r'   rE   )rE   rh   )rh   rP   )@r   r   r   r[   rc   rg   rj   rl   rt   rw   r~   r   r   r   r   r   r   r   r   r   r   r   r   ry   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r$  r'  r
   r   r-   r3   r   r   r   from_tuplesr   r2   r   r   r*  r+  r2  r4  r8  r$   r$   r$   r%   r?   `   s   	




1) $4 *  ;  *r?   c             C   sR   xLd
D ]D}| j ||d}t| j |j |dd}|jd}tj||dd	 qW d S )Nru   rW   r   )rn   T)rn   ro   rQ   F)Zcheck_names)ru   rW   r   )rv   r   r   rk   r^   r_   )r6   r   rn   ra   rb   r$   r$   r%   r   [  s
    

r   c               @   sl  e Zd Zejjdddgeddgjdgdd Zejjde	j
e	je	je	je	jgejjde	j
e	je	je	jgd	d
 Zej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ejjddddgedddgjdfdddgedddgjdfddgejd d!ged"fddgejd d!ged"fgd#d$ Zej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-d.d/gfejd+dd,d-ddgfejd+dd,d-ddgfejd0dd1ejd0dd2d3fg	d4d5 Zd6S )7TestMergeDtypes
right_valsr+   r   categoryc          
   C   sx   t ddgtddgjdddgddgtddgdd	tddgd
d	d}t d|i}tj||dd}t|jjsttd S )Nr+   r   r>  r'   rE   g      ?g       @uint64)r)   int32)r   r   Cr   EFr   )rd   )	r   r   ri   r-   r   r   r   r)   r   )rY   r=  rW   rX   ra   r$   r$   r%   test_differentg  s    zTestMergeDtypes.test_differentd1d2c       
      C   s@  t j|}t j|}tt jdddgd |dddgd t jt jd	t jdd
}tjddg}tdt jddg|di|d}|j|ddgd}|j	 }	|j
dkrt j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||	 |j|ddgdd}|	jddgddd tj||	 d S )Nr   r'   rE   r   )r)   r+   r   r      )k1k2vrO   rD   rL   )rQ   rH  rI  )rd   r   float64T)rd   ro   Z	mergesort)kindr(  )rE   r   )r'   r+   )r   r)   r   r   r   r(   r   r;  rv   r   rL  r2   rq   rH  rI  r^   r_   Zsort_values)
rY   rE  rF  Zdtype1Zdtype2rW   rQ   rX   ra   rb   r$   r$   r%   test_join_multi_dtypes~  s&    




z&TestMergeDtypes.test_join_multi_dtypeszint_vals, float_vals, exp_valsr'   rE   rh   g      ?g       @g      @)XYc             C   sd   t d|i}t d|i}t |}|j|ddd}tj|| |j|ddd}tj||ddg  d S )NrN  rO  )rm   rp   )r   r   r^   r_   )rY   Zint_valsZ
float_valsZexp_valsr   r   rb   ra   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j|| d S )Ng      ?g       @r   r   )rM   rN   rM   rN   )rr   rE      )rM   rO   rO   rW   )rd   rn   g      i@)rM   rN   rO   )r   r   r   r2   r^   r_   )rY   r   rV   ra   rb   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jt" |j|ddd
}tj|| W d Q R X tjt* |j|ddd
}tj||ddg  W d Q R X t dtjtjdgi}tjd * |j|ddd
}tj||ddg  W d Q R X d S )NrN  r'   rE   rh   rO  g?g      @g      @)rN  rO  )rm   rp   )r   r^   assert_produces_warningUserWarningr   r_   r   r2   )rY   r   r   rb   ra   r$   r$   r%   !test_merge_on_ints_floats_warning  s    z1TestMergeDtypes.test_merge_on_ints_floats_warningc             C   s   t dtddgtdi}t dddgi}t dddgitd}tj||dd}tj|| tj||dd}tj|| 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j||dd}tj|| tj||dd}tj|| d S )NrM   TF)r)   )rd   )	r   r   r1   r-   r   r^   r_   r   r2   )rY   r   rV   rb   ra   r$   r$   r%   (test_merge_incompat_infer_boolean_object  s    z8TestMergeDtypes.test_merge_incompat_infer_boolean_objectzdf1_vals, df2_valsr   rG   rH   g        FT)r)   c             C   s`   t d|i}t d|i}tj||dgd}t|jjs:ttj||dgd}t|jjs\td S )Nr   )rd   )r   r-   r   r   r   r)   r   )rY   df1_valsdf2_valsr   rV   ra   r$   r$   r%   !test_merge_incompat_dtypes_are_ok  s    z1TestMergeDtypes.test_merge_incompat_dtypes_are_okr?  rI   r@  r   12z1/1/2011r   )r   r  z
2011-01-01z
2011-01-02Z20130101)r   z
US/Eastern)r   r,   c             C   s   t d|i}t d|i}d|d j d|d j d}tj|}tjt|d tj||dgd W d Q R X d|d j d|d j d}tj|}tjt|d tj||dgd W d 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.concat)rx   )rd   )	r   r)   reescapery   rz   r|   r-   r   )rY   rW  rX  r   rV   r}   r$   r$   r%    test_merge_incompat_dtypes_error  s    

z0TestMergeDtypes.test_merge_incompat_dtypes_errorN)r   r   r   ry   r9  r:  r   ri   rD  r   r(   r@  Zint16Zint8Zuint8rK  Zfloat32Zfloat16rM  rP  rR  rU  rV  r-   r1   boolrY  r   r^  r$   r$   r$   r%   r<  f  s>   & (!& .&r<  c               C   sN   t jjd ttt jjddgd
djtddgt jjdddgddd	S )Ni  r+   r   r   )r   onetwoZthree)rN  rO  )r   )r   )r   r    seedr   r   choiceri   CDTr$   r$   r$   r%   rW   7  s
    rW   c               C   s4   t jjd ttddgjtddgddgdS )Ni  r+   r   r'   rE   )rN  Z)r   r    rb  r   r   ri   rd  r$   r$   r$   r%   rX   D  s    rX   c            	   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	j
ddd dd dd gdd Zdd Zdd Zej	j
dddgej	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   sP   t j||dd}|jj }tt tjdtjdgdddgd}tj	|| d S )NrN  )rd   OZY_xZY_y)rQ   )
r-   r   r   r  r   r   r   r)   r^   r   )rY   rW   r   ra   rb   r$   r$   r%   test_identicalM  s    
z#TestMergeCategorical.test_identicalc             C   sP   t j||dd}|jj }tt tjdtjdgdddgd}tj	|| d S )NrN  )rd   rg  r(   rO  re  )rQ   )
r-   r   r   r  r   r   r   r)   r^   r   )rY   rW   rX   r   ra   rb   r$   r$   r%   
test_basicW  s    
zTestMergeCategorical.test_basicc             C   sL  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j||dddd}|j }|j }|d jd|d< tj||dddd}|d jtdg|d< tj|| |j }|d jd|d< tj||dddd}tj|| |j }|d jd|d< |j }|d jd|d< tj||dddd}tj|| d S )NrG   rH   rI   rJ   rK   )r   r'   rE   rh   rP   null)rI   rJ   r   r   )rG   rH   rW   )rn   rm   rp   r>  )r   r-   r   r   ri   r   r^   r_   )rY   rX   rW   rT   rb   Zcrightra   Zcleftr$   r$   r%   test_merge_categoricalb  s.    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j||dgd}t tjdddgdddgdd
d	gd}tj|| d S )Nr   r   rA  )r  ZA0B0ZC0)FooLeftZC1B1A1)rm  Rightrm  )rd   )rm  rn  rq  )r   r	   r-   r   r^   r_   )rY   r   rV   ra   rb   r$   r$   r%   'tests_merge_categorical_unordered_equal  s    z<TestMergeCategorical.tests_merge_categorical_unordered_equalc             C   s   |j |jjdd}tj||dd}|jj }tt t	j
dt gdddgd}tj|| |jjj|jjsrt|jjj|jjstd S )	Nr>  )re  rN  )rd   rg  rO  re  )rQ   )assignre  ri   r-   r   r   r  r   r   r   r)   r^   r   rN  r6  Zis_dtype_equalr   )rY   rW   rX   r   ra   rb   r$   r$   r%   test_other_columns  s    
z'TestMergeCategorical.test_other_columnschangec             C   s   | S )Nr$   )r6   r$   r$   r%   r7     s    zTestMergeCategorical.<lambda>c             C   s   | j tdddgS )Nr+   r   Zbah)ri   rd  )r6   r$   r$   r%   r7     s    c             C   s   | j tddS )NT)ordered)ri   rd  )r6   r$   r$   r%   r7     s    c       	      C   s   ||j jd}|j|d}t|j jjs.ttj||d|d}|j	j
 }ttjdtjdtjdgdddgd	}tj|| d S )
Nr1   )rN  rN  )rd   rn   rg  r(   rO  re  )rQ   )rN  ri   rs  r   r6  r)   r   r-   r   r   r  r   r   r^   r   )	rY   ru  r   rW   rX   rN  r   ra   rb   r$   r$   r%   test_dtype_on_merged_different  s    
(z3TestMergeCategorical.test_dtype_on_merged_differentc                s   d t j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$}|jd%d& }t j||t|jd'}tj|| d S )*NrD   rG   rH   rI   rJ   rK   r   r   r   r   jr   wr6   r   r   rE   c                s$   g | ]}|gd    D ]}|qqS )rE   r$   ).0eachletter)r   r$   r%   
<listcomp>  s   zKTestMergeCategorical.test_self_join_multiple_categories.<locals>.<listcomp>r   r#   upoc                s    g | ]}|g  D ]}|qqS r$   r$   )rz  r{  r|  )r   r$   r%   r}    s   aabbccddeeffgghhiijj)rG   rH   rI   rJ   c             S   s
   | j dS )Nr>  )ri   )r6   r$   r$   r%   r7     s    zITestMergeCategorical.test_self_join_multiple_categories.<locals>.<lambda>)rd   )r   r#   r~  r  r  )
r  r  r  r  r  r  r  r  r  r  )r-   r   applyr   r   rr   r^   r_   )rY   rT   ra   r$   )r   r%   "test_self_join_multiple_categories  s(    

         z7TestMergeCategorical.test_self_join_multiple_categoriesc             C   s(  t jtddddgtddddggddgd}|d jd	|d< t jtddddgtddd
dggddgd}|d jd	|d< t jt jdddgt jddtjgt jdtjdggdddgd}t j||ddgd}tj	|| t jt jdddggdddgd}t j||ddgd}tj	|| d S )Ni  r'   g?rE   g?r   Znum2)rr   r>  rh   gffffff?Znum4z
2001-01-01z
2001-01-02z
2001-01-03r   )rn   rd   ru   )
r-   r   r   ri   r.   r   r2   r   r^   r_   )rY   rT   rV   Zexpected_outerZresult_outerZexpected_innerZresult_innerr$   r$   r%   test_dtype_on_categorical_dates  s"    **z4TestMergeCategorical.test_dtype_on_categorical_datesrv  TFz.category_column,categories,expected_categoriesrE   r'   FalseTruec       	      C   s   t jddddg|d}|d jt||d|d< t jddgddgd	}|j|}t jddg|ddgd
}|d jt||d|d< tj|| d S )Nr'   rE   rh   rP   )idr  r  )rv  r   )r  num)r  r  r  )r-   r   ri   rd  r   r^   r_   )	rY   Zcategory_columnr  Zexpected_categoriesrv  r   rV   ra   rb   r$   r$   r%   /test_merging_with_bool_or_int_cateorical_column  s    
zDTestMergeCategorical.test_merging_with_bool_or_int_cateorical_columnc             C   sf   t jt jddtjgdddd}t j||dd}t jt jddtjgddddd}tj|| d S )	Nr'   rE   r*   )r)   )r   r   r   )rd   )r   B_xZB_y)r-   r   r   r   r2   r   r^   r_   )rY   rT   ra   rb   r$   r$   r%   test_merge_on_int_array.  s
    " z,TestMergeCategorical.test_merge_on_int_arrayN)r   r   r   rh  ri  rk  rr  rt  ry   r9  r:  rw  r  r  r  r  r$   r$   r$   r%   rf  L  s&   
+((rf  c               C   s   t ddddgidddgdS )NrG   r   r   r   rE   r'   )rQ   )r   r$   r$   r$   r%   r0  8  s    r0  c               C   s   t ddddgidddgdS )	NrH   i,  d   rQ  rh   r'   rE   )rQ   )r   r$   r$   r$   r%   r1  =  s    r1  c               @   sr  e Zd Zej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, expectedru   Fr   r   rQ  r  )rG   rH   rE   r'   )rQ   TrW   r   rX   i,  rh   r   c             C   s&   t j||dd||d}tj|| d S )NT)r\   r]   rn   ro   )r-   r   r^   r_   )rY   r0  r1  rn   ro   rb   ra   r$   r$   r%   test_merge_on_indexesC  s    0z(TestMergeOnIndexes.test_merge_on_indexesN)
r   r   r   ry   r9  r:  r   r   r2   r  r$   r$   r$   r%   r  B  s8   ""&&$$r  rQ   r   r   	index_col)r  r5   g      ?g       @)r5   r'   rE   )startstopr5   z
2018-01-01z
2018-01-02c             C   s
   t | jS )N)typer   )r6   r$   r$   r%   r7     s    )r9   c             C   sl   t dddgi| d}t dddgi| d}|j|dgd	}t tdddgfdddgfg| d}tj|| d S )
NZ	left_datar'   rE   )rQ   Z
right_datag      ?g       @r  )rd   )r   r   r   r^   r_   )rQ   rW   rX   ra   rb   r$   r$   r%   test_merge_index_typesy  s    "r  z-on,left_on,right_on,left_index,right_index,nmr   ru   FTc             C   s  t jdddddgit jjddgddggd	d
gdd}t jddddgt jjddgddggd	d
gd|d}t jddgddgdt jjddgdggd	d
gdd}|d k	rt j||| ||||d}	tj|	| n6d}
tj	t
|
d t j||| ||||d}	W d Q R X d S )Nr   r'   rE   rh   rP   rG   rH   r   r   ru   )names)rQ   )rQ   r5   )r   r   )rd   rm   rp   r\   r]   z$Cannot merge a Series without a name)rx   )r-   r   r   from_productr   r   r^   r_   ry   rz   r|   )rd   rm   rp   r\   r]   nmrG   rH   rb   ra   r}   r$   r$   r%   test_merge_series  s@    
"r  z!col1, col2, kwargs, expected_cols _dup)suffixesr   Z0_dup_x_yZ0_xZ0_yrG   g        z0.0_xrH   Zb_yr"  _aZ0_ar#  c             C   s   t j| dddgi}t j|dddgi}t jddgddgddgg|d}|j|fddd	|}tj|| t j||fddd	|}tj|| d S )
Nr'   rE   rh   rP   rD   r   )rr   T)r\   r]   )r-   r   r   r^   r_   )r  r  kwargsZexpected_colsrG   rH   rb   ra   r$   r$   r%   test_merge_suffix  s     r  zhow,expectedr  rQ  i,  <   F   iX  i  i   )r   ro  ZB2r/  c             C   sb   t dddgdddgd}t dddgd	d
dgd}t||d| dd}dddg|_tj|| d S )Nr  rQ  r'   r  r  r/  )r   r   i,  iX  i  i   r   r  )rd   rn   r  r  )r  r  )r   r   rr   r^   r_   )rn   rb   r0  r1  ra   r$   r$   r%   test_merge_duplicate_suffix  s
    r  zcol1, col2, suffixesc             C   s^   t j| dddgi}t j|dddgi}d}tjt|d t j||dd|d	 W d Q R X d S )
Nr'   rE   rh   rP   rD   z'columns overlap but no suffix specified)rx   T)r\   r]   r  )r-   r   ry   rz   r|   r   )r  r  r  rG   rH   r}   r$   r$   r%   test_merge_suffix_error
  s
    r  r  )rW   rX   c             C   sZ   t jddddgi}t jddddgi}tjt t j||ddd	d
hd W d Q R X d S )NrG   r'   rE   rh   rH   rP   rD   TrW   rX   )r\   r]   r  )r-   r   r^   rS  FutureWarningr   )r  rG   rH   r$   r$   r%   test_merge_suffix_warns  s    r  zcol1, col2, suffixes, msgrI   (too many values to unpack \(expected 2\)z1not enough values to unpack \(expected 2, got 1\)c             C   sZ   t j| dddgi}t j|dddgi}tjt|d t j||dd|d W d Q R X d S )	Nr'   rE   rh   rP   rD   )rx   T)r\   r]   r  )r-   r   ry   rz   r|   r   )r  r  r  r}   rG   rH   r$   r$   r%   test_merge_suffix_length_error"  s    r  	cat_dtyper`  ra  reversec       	      C   s   t dddgddt dddgddd}ttdddgj|d dd	d
gdjd}dddg}dd	d
g}|r||j  |j  tt|j||  |djd}|j|ddd}tdd	d
gdd	d
gtdddgj|d djd}tj|| d S )NrG   rH   rI   F)r  rv  )r`  ra  r`  r'   rE   rh   )r+   rW   r+   )r+   rX   T)r\   r]   )rW   rX   r+   )	r   r   r   ri   rk   r  r   r^   r_   )	r  r  Z
cat_dtypesr   Zdata_fooZ
data_rightrV   ra   rb   r$   r$   r%   test_merge_equal_cat_dtypes1  s(    &

r  c              C   s   t dddgdd} ttddgj| ddgdjd	}ttdddgj| d
ddgdjd	}|j|ddd}tddgd
dgtddgj| djd	}tj|| d S )NrG   rH   rI   F)r  rv  r'   rE   )r+   rW   r+   rh   )r+   rX   T)r\   r]   )rW   rX   r+   )r   r   r   ri   rk   r   r^   r_   )r  r   rV   ra   rb   r$   r$   r%   test_merge_equal_cat_dtypes2V  s    "$r  c              C   sl   t dttjddtjddgddi} | j }|d jd|d< tj|| ddd	}| j }tj|| d S )
NrG   r   r'   rE   interval)r)   r>  ru   )rn   rd   )	r   r   r-   ZIntervalr   ri   r   r^   r_   )rX   rW   ra   rb   r$   r$   r%   test_merge_on_cat_and_ext_arrayl  s    &r  c        	         s   ddddg} dddg}t jj| |fdd	gd
}t j|d}d|d< t j|d}d|d< d d|j|d fd} fdd| D fdd| D  }t jj||gdd	gd
}t j|d}d|d< tj|| d S )NrG   rH   rI   rJ   rZ  r[  3r   ru   )r  )rr   r  r  r  r  )rd   r  c                s   g | ]}|  qS r$   r$   )rz  l)l_sufr$   r%   r}    s    z1test_merge_multiindex_columns.<locals>.<listcomp>c                s   g | ]}|  qS r$   r$   )rz  r  )r_sufr$   r%   r}    s    )r-   r   r  r   r   r^   r_   )	lettersZnumbersrQ   Zframe_xZframe_yra   Zexpected_labelsr)  rb   r$   )r  r  r%   test_merge_multiindex_columnsz  s     
$r  c              C   s   t jdddgdddgd} t jdddgt jd	d
dgd}t j| |ddd}t jdddgdddgt jd	d
dgd}tj|| d S )NrG   rH   rI   rZ  r[  4)r6   r   r  2000Z2001Z2002)r   r   rW   r   )rn   rd   r3   )r6   r   r   )r-   r   r  r   r^   r_   )r   rV   ra   rb   r$   r$   r%    test_merge_datetime_upcast_dtype  s    r  n_categoriesrD      c             C   s   t dgtt|  }tt| d dg|d}tdggdgt dgtj| dd}t||dddd	}td
d t| d D ddg|d}tj|| d S )Nr   r'   rF   )rr   rQ   r   )r  rW   T)rn   r\   r]   c             S   s&   g | ]}|d k r|dgn|t jgqS )rE   g      @)r   r2   )rz  r   r$   r$   r%   r}    s    z9test_categorical_non_unique_monotonic.<locals>.<listcomp>r   r   )	r
   r   r   r   r   r   r   r^   r_   )r  r\   r   rV   ra   rb   r$   r$   r%   %test_categorical_non_unique_monotonic  s    r  )NNNTTr   )NNNTTN)r  r  )Nr  )r  r  )Nr  )r  N)Nr  )r  N)r  N)Nr  )r  NNN)rG   rG   r  r  N)rG   rG   r  Nr  )r   r   r  rG   rH   rI   )rG   rG   r  r  )Lcollectionsr   r   r   r   r    r\  Znumpyr   ry   Zpandas.core.dtypes.commonr   r   Zpandas.core.dtypes.dtypesr   Zpandasr-   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Zpandas._testingZ_testingr^   Zpandas.api.typesrd  Zpandas.core.reshape.concatr   Zpandas.core.reshape.merger   r   rS   rU   r&   r/   r4   Zfixturer<   r=   r>   r?   r   r<  rW   rX   rf  r0  r1  r  r9  r:  r  r  r   r  r2   r  r  r  tupler  r  r  r  r  r  r  r$   r$   r$   r%   <module>   s   <
				           R m7 /"
"$	$