U
    MfBz                     @   s   d dl Zd dlmZ d dl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 d dlmZ d dlmZmZmZ ejZG dd dZdddZdd Zdd Zdd ZdddZdS )    N)randn)join)	DataFrameIndex
MultiIndexSeriesconcatmerge)NGROUPSNget_test_datac                
   @   sl  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ejdddd ed!d"ggd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Z d9d: Z!d;d< Z"d=d> Z#d?d@ Z$dAdB Z%dCdD Z&dEdF Z'dGdH Z(dIdJ Z)dKdL Z*dMdN Z+dOdP Z,dQdR Z-dSdT Z.dUdV Z/d S )WTestJoinc                 C   s   t t t tjttjtd| _| j| jd dk | _t ttd dttd td dtjtd d| _t	
 \}}t ||d	| _t |d
 |d d|d d	| _d S )N)key1key2Zdata1Zdata2r         )n   )Zngroupsr   )r   r   valueindexAD)MergedAMergedDC)r   r   nprandomr   r   dfr
   df2tmZgetMixedTypeDicttargetsource)selfmethodr   data r&   H/tmp/pip-unpacked-wheel-izj5yhnl/pandas/tests/reshape/merge/test_join.pysetup_method   s(    


 zTestJoin.setup_methodc           
      C   s  t dddddddddddgtjd}t dddddddgtjd}d}t|||\}}|jdd	}|jdd	}t ddddddddddddd
d
ddddddg}t ddddddddddddddddddddg}	||}d||dk< ||	}d||	dk< tj||dd tj||dd d S )Nr   r   r      dtype   r   	mergesortkind         	   
   FZcheck_dtype	a_r   int64libjoinZleft_outer_joinargsorttaker    assert_numpy_array_equal
r#   leftright	max_grouplsrsexp_lsexp_rsexp_liexp_rir&   r&   r'   test_cython_left_outer_join.   s    $00

z$TestJoin.test_cython_left_outer_joinc           
      C   s  t dddddddddddgtjd}t dddddddgtjd}d}t|||\}}|jdd	}|jdd	}t ddddddddddddd
ddd
dddg}t ddddddddddddddddddd
g}	||}d||dk< ||	}d||	dk< tj||dd tj||dd d S Nr   r   r   r)   r*   r,   r   r-   r.   r0   r1   r2   r5   Fr6   r7   )
r#   r?   r@   rA   rC   rB   rD   rE   rF   rG   r&   r&   r'   test_cython_right_outer_joinD   sF    $.

z%TestJoin.test_cython_right_outer_joinc           
      C   s  t dddddddddddgtjd}t ddddddddgtjd}d}t|||\}}|jdd	}|jdd	}t ddddddddddddd
d
ddddg}t ddddddddddddddddddg}	||}d||dk< ||	}d||	dk< tj||dd tj||dd d S rI   )	r8   r   r9   r:   Z
inner_joinr;   r<   r    r=   r>   r&   r&   r'   test_cython_inner_joinr   s    $,,

zTestJoin.test_cython_inner_joinc                 C   sV   t | j| jdd}t| j| j|dgdd t | j| j}t| j| j|ddgdd d S )Nr   onr?   howr   r	   r   r   _check_joinr#   Zjoined_key2Zjoined_bothr&   r&   r'   test_left_outer_join   s    zTestJoin.test_left_outer_joinc                 C   s\   t | j| jddd}t| j| j|dgdd t | j| jdd}t| j| j|ddgdd d S )Nr   r@   rM   rO   rN   r   rP   rR   r&   r&   r'   test_right_outer_join   s    zTestJoin.test_right_outer_joinc                 C   s\   t | j| jddd}t| j| j|dgdd t | j| jdd}t| j| j|ddgdd d S )Nr   outerrT   rN   r   rP   rR   r&   r&   r'   test_full_outer_join   s    zTestJoin.test_full_outer_joinc                 C   s\   t | j| jddd}t| j| j|dgdd t | j| jdd}t| j| j|ddgdd d S )Nr   innerrT   rN   r   rP   rR   r&   r&   r'   test_inner_join   s    zTestJoin.test_inner_joinc                 C   s4   t | j| jdddgd}d|ks$td|ks0td S )Nr   .foo.bar)rM   suffixeskey1.foozkey1.barr	   r   r   AssertionErrorr#   joinedr&   r&   r'   test_handle_overlap   s    zTestJoin.test_handle_overlapc                 C   s6   t | j| jddddgd}d|ks&td|ks2td S )Nr   r   rZ   r[   )left_onright_onr\   r]   zkey2.barr^   r`   r&   r&   r'   !test_handle_overlap_arbitrary_key   s    z*TestJoin.test_handle_overlap_arbitrary_keyc              	   C   s  | j }| j}|j|dd}tj|d |d dd tj|d |d dd td	d
d
dddgi}tddddgid
ddgd}|j|d	d}td
d
dddgdddddgd}t|| tdgdgdggd
ddgdgd}tdgdggddgdgd}	tdgdggddgdgd}
|j|	dd}|j|
dd}t|d d sFt	t|d d s^t	t
jtdd |j|dd W 5 Q R X | }d|d< d}t
jt|d |j|dd W 5 Q R X d S )Nr   rL   r   r   F)Zcheck_namesr   r   keyabcr   r   r   r   r   rf   r   r)   oner   columnsfoobartwothreez^'E'$matchEzfYou are trying to merge on float64 and object columns. If you wish to proceed you should use pd.concat)r!   r"   r   r    assert_series_equalr   assert_frame_equalr   isnanr_   pytestraisesKeyErrorcopy
ValueError)r#   r!   r"   mergedr   r   ra   expectedZdf_aZdf_bZdf_cZsource_copymsgr&   r&   r'   test_join_on   s6    "zTestJoin.test_join_onc              	   C   s   t tjjddgddtjdd}t tjjddgddtjddtddd}d	}tjt	|d
 t
||ddd W 5 Q R X d S )Nmfr)   sizerg   rh   r4   r   r   Flen\(left_on\) must equal the number of levels in the index of "right"rr   rg   Trc   right_indexr   r   r   choicer   r    ZmakeCustomIndexrx   ry   r|   r	   r#   r   r   r   r&   r&   r'   -test_join_on_fails_with_different_right_index   s      
z6TestJoin.test_join_on_fails_with_different_right_indexc              	   C   s   t tjjddgddtjddtddd}t tjjddgddtjdd}d	}tjt	|d
 t
||ddd W 5 Q R X d S )Nr   r   r)   r   r   r   r   r4   zFlen\(right_on\) must equal the number of levels in the index of "left"rr   rh   T)rd   
left_indexr   r   r&   r&   r'   ,test_join_on_fails_with_different_left_index   s     
 z5TestJoin.test_join_on_fails_with_different_left_indexc              	   C   s   t tjjddgddtjdd}t tjjddgddtjddtddd}d	}tjt	|d
 t
||dddgd W 5 Q R X d S )Nr   r   r)   r   r   r4   r   r   z)len\(right_on\) must equal len\(left_on\)rr   rg   rh   )rd   rc   r   r   r&   r&   r'   /test_join_on_fails_with_different_column_counts   s      
z8TestJoin.test_join_on_fails_with_different_column_counts
wrong_typer   strNr   r   c              	   C   sz   t dddgi}dtt|}tjt|d t||ddd W 5 Q R X tjt|d t||ddd W 5 Q R X d S )Nrg   r   z;Can only merge Series or DataFrame objects, a {} was passedrr   )rc   rd   )r   formatr   typerx   ry   	TypeErrorr	   )r#   r   r   r   r&   r&   r'   )test_join_on_fails_with_wrong_object_type  s    
z2TestJoin.test_join_on_fails_with_wrong_object_typec                 C   sF   | j j| jdd}|d= | j d}| j j| j|d}t|| d S )Nr   rL   )r!   r   r"   popr    rv   )r#   r~   join_colresultr&   r&   r'   test_join_on_pass_vector  s
    z!TestJoin.test_join_on_pass_vectorc                 C   s   | j j| jg dd}| jD ]$}||ks.t||   stq| j j| jg ddd}t|j	|j	 t
|dks~td S )Nr   rL   rX   rT   r   )r!   r   r"   reindexr_   isnaallr    assert_index_equalrm   len)r#   r}   colZmerged2r&   r&   r'   test_join_with_len0  s    
zTestJoin.test_join_with_len0c                 C   s   t dddddddgi}t dddgiddgd	}|j|dd
d}|j|dd}||d   }tj|d |d dd tj|d |d dd t|j|j d S )Nrf   rg   drh   ri   r   r   r   r   rX   rT   rL   Fr6   )r   r   notnar    ru   r   r   r#   r   r   ra   r~   r&   r&   r'   test_join_on_inner$  s    zTestJoin.test_join_on_innerc                 C   s`   t ddddddgi}t ddddgidddgd	}|j|dgd
}|j|dd
}t|| d S )Nrf   rg   rh   ri   r   r   r   r   r   rL   )r   r   r    rv   r   r&   r&   r'   test_join_on_singlekey_list0  s
    z$TestJoin.test_join_on_singlekey_listc                 C   s>   | j j| jd dd}| j j| jdg dd}t|| d S )Nr   r   rL   )r!   r   r"   r    rv   )r#   r   r~   r&   r&   r'   test_join_on_series:  s    zTestJoin.test_join_on_seriesc                 C   s\   t dddgi}tdgdgdd}|j|dd}t ddgddgd|jd}t|| d S )	Nrg   r   r   rh   r   namerL   r   r   )r   r   r   r   r    rv   )r#   r   Zdsr   r~   r&   r&   r'   test_join_on_series_buglet?  s
    z#TestJoin.test_join_on_series_bugletc                 C   s   t tdd}d|d< d|d< t tddd}d	|d
< d|d< |j||d}t|||d}t|| |j||d}t|||d}t|| d S )Nr4   r   Tboolrn   stringr      r   int      ?floatrN   )r   r   aranger   _join_by_handr    rv   )r#   	join_typedf1r   ra   r~   r&   r&   r'   test_join_index_mixedG  s    zTestJoin.test_join_index_mixedc                 C   s   t dddddtdddd	d
gd}|d jtjks:t|d
 jtjksNtt dddddtdddddd	d
gd}|j|ddd}ddddddddg}|d d |_|dd  |_t	||}t
|| d S )Nr   r   rn   Tr   Br   r   r4   r   r   r   r   rl   r   Z_oneZ_two)lsuffixrsuffixZA_oneZB_oneZC_oneZD_oneZA_twoZB_twoZC_twoZD_twor,   )r   r   r   r+   r9   r_   Zbool_r   rm   r   r    rv   )r#   r   r   ra   Zexpected_columnsr~   r&   r&   r'   test_join_index_mixed_overlapY  s4    



z&TestJoin.test_join_index_mixed_overlapc                 C   s(   t  }|jt dgdgdgddd d S )Nr)   r   r   rl   rV   rN   )r   r   )r#   xr&   r&   r'   test_join_empty_bugy  s    zTestJoin.test_join_empty_bugc                 C   sV   t tddddgd}ttd}||d< t tdddgd}|| || d S )	N   r   rg   rh   rm   ri   r   q)r   r   r   r   )r#   rg   ri   r   r&   r&   r'   test_join_unconsolidated~  s    
z!TestJoin.test_join_unconsolidatedc                 C   s  t jddddddgddddddggddgd}t jdddd	d	d	gddddddggddgd}ttjd
|dgd}ttjd
|dgd}|jdd}|jdd}|j|dd}t|j	
t|j	}||||}|j|j_t|| |jj|jkst|jdd}|jdd}|j|ddjdd}t|j	
t|j	}||||}|j|j_t|| |jj|jkstd S )Nrg   rh   r   r   r)   firstsecondnamesri   r0   zvar X)r%   r   rm   zvar Yr   )levelrV   rN   )r   Zfrom_arraysr   r   r   r   
sort_indexr   r   valuesunionr   r   r   r    rv   r_   )r#   Zindex1index2r   r   ra   Zex_indexr~   r&   r&   r'   test_join_multiindex  s4    

zTestJoin.test_join_multiindexc           	      C   sl  ddddddddddg
}ddddddddddg
}t jt|}t|||d	}tddddgdddggd
d
d
dddddddg
d
ddd
dddd
ddg
gddgd}tt jdd|dddgd}|j|ddgdd}t|| ddgddgddd}t||ddgdddd}t	
||| t||ddgdddd}|jddgdd}|j|_|jjs\tt	
|| d S )Nro   rn   bazZquxZsnaprp   rk   rq   )r   r   r%   r   r   r   r)   r   r   )levelscodesr   r4   Zj_oneZj_twoZj_threerl   r   r   rX   rT   F)rc   rd   rO   sortT)rd   r   rO   r   Zaxis)r   r   r   r   r   r   r   r	   reset_indexr    rv   Zreindex_likeZdropr   Zis_monotonicr_   )	r#   r   r   r%   r   Zto_joinra   r~   Z	expected2r&   r&   r'   test_join_inner_multiindex  sl    .  		z#TestJoin.test_join_inner_multiindexc              	   C   s   t ddgdddgd}|dgdtjtjgi}t ddgdddgd}|jdd	d
 tt	 t
||d	d	d}W 5 Q R X d|kstd|kstd S )N)r   r   r)   )r,   r   r0   rg   rh   ri   r   )r1   r4   r0   r   T)Zinplacer   r   )rh   mean)r   groupbyZaggr   r   sum	set_indexr    Zassert_produces_warningUserWarningr	   r_   )r#   r   Znew_dfZother_dfr   r&   r&   r'   test_join_hierarchical_mixed  s    z%TestJoin.test_join_hierarchical_mixedc           
      C   sh  t tddddgtjd}t tdddgtjd}||}|jd dksNt|jd dks`t|jd d	ksrttj	d
dd
d}tjd
d}tjd
d	}t |||d}t |||d}t tjd
d	dgd}|j|ddd}|jd dkst|jd dks t|jd d	ks4t|jd d	ksHt|j|ddd}	t||	 d S )Nr4   r   rg   rh   )rm   r+   r   ri   float64float32r   r   d   r9   rg   rh   ri   Zmdr   Tr   )r   r   r   r   r   r   Zdtypesr_   r   randintastyper	   r    rv   )
r#   rg   rh   ra   ri   r   ZxpdfsrC   Zxpr&   r&   r'   test_join_float64_float32  s&    
z"TestJoin.test_join_float64_float32c              
   C   s  t ddgddgddgd}t ddgddgddgd}t ddgddgd	d
gd}|ddg}|ddg}|ddg}|j||gdd}t||ddgdd}t||ddgdd}	| }|	|j }	|	jd|	d< |	jd|	d< t	
||	 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}t dddgdddgd	d
dgd}|ddg}|ddg}|ddg}|j||gdd}t||ddgdd}t||ddgdd}	| }t	
||	jd d |jf  t ddddddddgddddddddgtjdtjdd}
tttddttdddd}|
j|dd}|
j|dd}|
j|dd}|
j|d d}t	
|| t	
|| t	
|| d S )!Nr   r4      r   r   r      )rg   rh   r   i  i  )rg   rh   erg   rh   rV   rN   rT   r9   r   i,  i  rX   rn   ro   rk   rp   rq   r2   r   ZTESTr   r?   r@   )r   r   r   r	   r   rm   rg   r   rh   r    rv   locr   r   r   r   repeatr   )r#   r   r   df3Zidf1Zidf2Zidf3r   Zdf_partially_mergedr~   r   r   rX   rV   r?   r@   r&   r&   r'   test_join_many_non_unique_index  sX    
"""

  z(TestJoin.test_join_many_non_unique_indexc                 C   s   t ddddgddddgd}t d	d
ddgidddgd}|j|ddd}t ddddgddddgd
dddgdddddgd}t|| |j|ddd}t|jttt	d d S )Nrn   ro   r   r   r   r)   r,   rj   value2rg   rh   ri   r   rf   T)rM   r   )rf   r   r   r   F)
r   r   r    rv   r   r   pdr   listrange)r#   r?   r@   ra   r~   r&   r&   r'   test_join_sortF  s    



zTestJoin.test_join_sortc                 C   s  t dddddgiddddgd}t ddd	d
dgiddddgd}||}t dddddgdtjd	d
tjgddddddgd}t|| t dddddgiddddgd}t ddd	d
dgiddddgd}||}t ddddgdd	d	tjgdddddgd}t|| d S )Nrg   r   r   r)   r,   r   rh   r   r0   r1   r2   r   )r   r   r   nanr    rv   )r#   r   r   r   r~   r   Zdf4r&   r&   r'    test_join_mixed_non_unique_indexY  s       
   
 
z)TestJoin.test_join_mixed_non_unique_indexc                 C   s   t jdddd}tttt||dgd}t||g}|j|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)periodsfreqZpnumrl   rX   Z_df2)rO   r   r*   r   r5   r   Zpnum_df2rm   r   )r   Zperiod_ranger   r   r   r   r   r   r   Ztiler   r9   r   reshaper   r   r    rv   )r#   r   r   r   r   r~   r&   r&   r'   !test_join_non_unique_period_indexl  s    $z*TestJoin.test_join_non_unique_period_indexc                 C   sj   t tjddddddddgd	}|d
dd
 |ddd |d}| }| }|j|dd d S )Nr   r0   rg   rh   ri   r   r   r   r   r   idr   dtrn   Z_rightr   )	r   r   r   r   insertr   r   countr   )r#   r   ZgroupedmnZcnr&   r&   r'    test_mixed_type_join_with_suffixy  s    "
z)TestJoin.test_mixed_type_join_with_suffixc              	   C   s\  t tjddtdd}|ddg |ddg |d	d
g g}|d |dd  }t|| |ddg d d |ddg dd  |d	d
g dd g}dd }|d j|dd  dd}||||j |d |dd  }||||d j |d j|dd  dd}||||jdd  d}t	j
t|d  |d j|dd  dd W 5 Q R X d S )Nr4   r0   Zabcdefr   rg   rh   ri   r   r   r   r   r   r   r3   c                    s8    fdd| D }|d  |dd  }t|| d S )Nc                    s   g | ]}|  qS r&   )r   ).0r   	exp_indexr&   r'   
<listcomp>  s     zFTestJoin.test_join_many.<locals>._check_diff_index.<locals>.<listcomp>r   r   )r   r    rv   )df_listr   r   Z	reindexedr~   r&   r   r'   _check_diff_index  s    z2TestJoin.test_join_many.<locals>._check_diff_indexrV   rN   rX   r2   z?Joining multiple DataFrames only supported for joining on indexrr   rL   )r   r   r   r   r   r   r    rv   r   rx   ry   r|   )r#   r   r  ra   r  r   r&   r&   r'   test_join_many  s    ":zTestJoin.test_join_manyc                 C   s   t tjddddddgd}dd	gd |d
< |jd d ddgf }|jd d ddgf }|jd d d
gf }|||g}t|| d S )Nr2   r,   r   r   r   r   r   rn   ro   rf   )r   r   r   r   r   r   r    rv   )r#   r   r   r   r   r   r&   r&   r'   test_join_many_mixed  s    zTestJoin.test_join_many_mixedc           	      C   sN  t ttjddddddgdttjjdddddd	dd
gdgdd}t ||gdd}|j|dd}|j|_t	
|| ttjdd	ddgd}ttjdd	ddgd}ttjdd	ddgd}ttjdd	ddgd}|j|dddj|dddd}|j|ddd}t ||||gdd}ddddddddg|_t	
|| d S )Nr4   r,   r   r   r   r   r   r   r   r   r   r   Z_2r   r   yTr   rV   )r   r   rO   Zx_xZy_xZx_yZy_y)r   r   r   r   r   r   r   r   rm   r    rv   r	   )	r#   r   r~   r   wr   r  zZdtar&   r&   r'   test_join_dups  s6     
   zTestJoin.test_join_dupsc           	   	   C   s   t jtdtdddggdddgd}tdtdi|d	}t jtdtdgddgd}td
dd tddD i|d	}|j|ddg|d}| j| ddg|ddddg}t	
|| d}tjt|d |j|d|d W 5 Q R X tjt|d |j|ddg|d W 5 Q R X d S )NabcZxyr   r   numr   Zv1   r   Zv2c                 S   s   g | ]}d | qS )r   r&   )r   ir&   r&   r'   r     s     z5TestJoin.test_join_multi_to_multi.<locals>.<listcomp>r1   rT   r   rr   )r   Zfrom_productr   r   r   r   r   r	   r   r    rv   rx   ry   r|   )	r#   r   Z	leftindexr?   Z
rightindexr@   r   r~   r   r&   r&   r'   test_join_multi_to_multi  s2         z!TestJoin.test_join_multi_to_multic                 C   s   t t jddddtdd}t t jddddtdd	}|j|d
d
d}| }t jtj	gd td t
d|d< t|| d S )Nz
2018-01-01r   zAmerica/Chicago)startr   tzZabcde)datevalsz
2018-01-03Ztuvwx)r  vals_2r  rL   r   Ztuvr*   r  )r   r   Z
date_ranger   r   r   r{   r   r   r   objectr    rv   )r#   r   r   r   r~   r&   r&   r'   #test_join_on_tz_aware_datetimeindex  s,      	  "z,TestJoin.test_join_on_tz_aware_datetimeindexc                 C   s   t dddgdddgdddgdddggd	d
dgd}t|d	 |d	< t dddgdddggd	d
dgddgd}t|d	 |d	< |j|d	d
gd	d
gd}t tddddgtddddggddgd	d
ddgd}t|| d S )Nz
2012-08-02Lr4   Jr   z
2013-04-06r      r   r  rg   r   r   r   r  r,   r   rL   z2012-08-02 00:00:00z2013-04-06 00:00:00rl   )r   r   Zto_datetimer   r   Z	Timestampr    rv   )r#   ZdfaZdfbr   r~   r&   r&   r'   test_join_datetime_string  s0    	
z"TestJoin.test_join_datetime_string)0__name__
__module____qualname__r(   rH   rJ   rK   rS   rU   rW   rY   rb   re   r   r   r   r   rx   markZparametrizer   arrayr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r&   r&   r&   r'   r      sR   .(

 #@6
 r   r?   _x_yc              	   C   s  |D ]}||    stq| |}||}	||D ]\}
}t|| j|}t||j|}z||
}W n: tk
r   |dkrtdj|
dt	|| j| Y nX t
|| z|	|
}W n: tk
r   |dkrtdj|
dt	||j| Y q<X t
|| q<d S )N)r?   rX   z2key {group_key!s} should not have been in the join)	group_key)r@   rX   )r   r   r_   r   _restrict_to_columnsrm   Z	get_grouprz   r   _assert_all_na_assert_same_contents)r?   r@   r   r   rO   r   r   ri   Zleft_groupedZright_groupedr   groupZl_joinedZr_joinedZlgroupZrgroupr&   r&   r'   rQ     s:    


rQ   c                    sR    fdd| j D }| jd d |f } | jfddd} | jd d  f } | S )Nc                    s(   g | ] }| ks | d  kr|qS ) replace)r   ri   rm   suffixr&   r'   r   H  s      z(_restrict_to_columns.<locals>.<listcomp>c                    s   |   dS )Nr%  r&  )r   )r)  r&   r'   <lambda>P      z&_restrict_to_columns.<locals>.<lambda>r   )rm   r   rename)r$  rm   r)  foundr&   r(  r'   r!  G  s    r!  c                    sd   d}|  | j}| | j}dd |D  t t|ksFtt fdd|D s`td S )Niy)c                 S   s   h | ]}t |qS r&   tupler   rowr&   r&   r'   	<setcomp>^  s     z(_assert_same_contents.<locals>.<setcomp>c                 3   s   | ]}t | kV  qd S Nr.  r0  Zrowsr&   r'   	<genexpr>`  s     z(_assert_same_contents.<locals>.<genexpr>)ZfillnaZdrop_duplicatesr   r   r_   r   )
join_chunkr"   ZNA_SENTINELZjvaluesZsvaluesr&   r4  r'   r#  X  s    r#  c                 C   s,   |D ]"}||krq| |    stqd S r3  )r   r   r_   )r6  Zsource_columnsr   ri   r&   r&   r'   r"  c  s    r"  c           	      C   sZ   | j j|j |d}| |}||}| j|j}| D ]\}}|||< q<|j|dS )NrN   r   )r   r   r   rm   appenditems)	rg   rh   rO   Z
join_indexZa_reZb_reZresult_columnsr   r   r&   r&   r'   r   j  s    


r   )r?   r  r  )r?   )Znumpyr   Znumpy.randomr   rx   Zpandas._libsr   r:   Zpandasr   r   r   r   r   r   r	   Zpandas._testingZ_testingr    Z%pandas.tests.reshape.merge.test_merger
   r   r   r  r8   r   rQ   r!  r#  r"  r   r&   r&   r&   r'   <module>   s(          
*