a
    Pf                     @   s  d dl Z d dlZd dlZd dlm  mZ d dlZ	d dlm
Z
mZmZmZmZmZmZmZmZmZ d dlmZ d=ddZG dd dZd>ddZdd Zdd Zdd Zd?ddZdd Zej ddddgfdddgfgdd Z!dd  Z"ej d!d"d#gg d$fd%d&gg d'fd(d)gg d*fed+ed,ged+ed,ed,gfgd-d. Z#ej d/g d0d1d2 Z$d3d4 Z%ej d5d6g d7fd8g d7fd	g d7fd9g d:fgd;d< Z&dS )@    N)
Categorical	DataFrameIndex
MultiIndexSeries	Timestampbdate_rangeconcatmergeoption_context   2   c                 C   sf   t t| }tt|||  }t||k rPtt ||d |t|   }tjd| |S )N   )	listrangenpZasarraytilelenrandomdefault_rngshuffle)ngroupsnZunique_groupsZarr r   ]/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/reshape/merge/test_join.pyget_test_data   s    "r   c                
   @   s  e Z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ejddejdeddg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d0d1 Zd2d3 Zd4d5 Z d6d7 Z!d8d9 Z"d:d; Z#d<d= Z$d>d? Z%d@dA Z&dBdC Z'dDdE Z(ejddejdeddgdFdG Z)dHdI Z*dJdK Z+dLdM Z,dNdO Z-dPdQ Z.dRdS Z/dTdU Z0dVdW Z1dXdY Z2dZd[ Z3d#S )\TestJoinc                 C   sF   t t t tjddtjddd}||d dk }|S )Nr   r   )key1key2Zdata1Zdata2r      r   r   r   r   r   standard_normal)selfdfr   r   r   r#   %   s    
zTestJoin.dfc                 C   s,   t tddtdddtjdddS )N
   )r      )r   r   r   )r   r   valuer    )r"   r   r   r   df24   s    
zTestJoin.df2c                 C   s`   g dg dg dt dddd}t|tg dtd	d
}t|d |d d|d d
}||fS )N)              ?g       @g      @g      @)r(   r)   r(   r)   r(   )Zfoo1Zfoo2Zfoo3Zfoo4Zfoo5z1/1/2009   )periodsABCD)abcdedtypeindexr-   r0   )MergedAMergedDr/   )r   r   r   object)r"   datatargetsourcer   r   r   target_source>   s    
zTestJoin.target_sourcec                 C   sF   t ||dd}t|||dgdd t ||}t|||ddgdd d S )Nr   onlefthowr   r
   _check_joinr"   r#   r'   Zjoined_key2Zjoined_bothr   r   r   test_left_outer_joinO   s    
zTestJoin.test_left_outer_joinc                 C   sL   t ||ddd}t|||dgdd t ||dd}t|||ddgdd d S )Nr   rightrB   rE   rD   r   rF   rH   r   r   r   test_right_outer_joinV   s    zTestJoin.test_right_outer_joinc                 C   sL   t ||ddd}t|||dgdd t ||dd}t|||ddgdd d S )Nr   outerrK   rD   r   rF   rH   r   r   r   test_full_outer_join]   s    zTestJoin.test_full_outer_joinc                 C   sL   t ||ddd}t|||dgdd t ||dd}t|||ddgdd d S )Nr   innerrK   rD   r   rF   rH   r   r   r   test_inner_joind   s    zTestJoin.test_inner_joinc                 C   s,   t ||ddd}d|v sJ d|v s(J d S )Nr   z.fooz.bar)rB   suffixeskey1.foozkey1.barr
   r"   r#   r'   joinedr   r   r   test_handle_overlapk   s    zTestJoin.test_handle_overlapc                 C   s.   t ||dddd}d|v sJ d|v s*J d S )Nr   r   rQ   )left_onright_onrR   rS   zkey2.barrT   rU   r   r   r   !test_handle_overlap_arbitrary_keyq   s    z*TestJoin.test_handle_overlap_arbitrary_keyinfer_stringFTZpyarrow)Zmarksc                 C   s  |\}}|j |dd}tj|d |d dd tj|d |d dd td	g d
i}tdg dig dd}|j |d	d}tg d
g dd}	t||	 tdgdgdggg d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 s*J t|d d sBJ tjt	dd |j |dd W d    n1 sv0    Y  |
 }d}tjt|d |j |dd W d    n1 s0    Y  d S )Nr/   rA   r:   r-   F)Zcheck_namesr;   r0   keyr1   r1   r2   r2   r3   r&   r   r   r   r1   r2   r3   r8   )r   r   r   r   r   r\   r&   r   r      oner9   columnsfoobartwothreer3   z^'E'$matchEzyYou are trying to merge on float64 and object|string columns for key 'A'. If you wish to proceed you should use pd.concat)jointmassert_series_equalr   assert_frame_equalr   isnanpytestraisesKeyErrorcopy
ValueError)r"   r@   r[   r>   r?   mergedr#   r'   rV   expectedZdf_aZdf_bZdf_cZsource_copymsgr   r   r   test_join_on|   s2     .zTestJoin.test_join_onc                 C   s   t tjdjddgddtjddd}t tjdjddgddtjdddttdd	d
ggd}d}t	j
t|d  t||ddd W d    n1 s0    Y  d S )Nr   mfra   sizer1   r2   r$   r*   r-   r.   r8   Flen\(left_on\) must equal the number of levels in the index of "right"ri   r1   TrX   right_indexr   r   r   r   choicer!   r   from_productr   rq   rr   ru   r
   r"   r#   r'   rx   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djddgddtjdddttdt	dgd}t tjdjddgd	dtjdd	d}d
}t
jt|d  t||ddd W d    n1 s0    Y  d S )Nr   rz   r{   ra   r|   r~   abcr8   r$   zFlen\(right_on\) must equal the number of levels in the index of "left"ri   r2   T)rY   
left_index)r   r   r   r   r   r!   r   from_arraysr   r   rq   rr   ru   r
   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djddgddtjddd}t tjdjddgddtjdddttdd	d
ggd}d}t	j
t|d$ t||dddgd W d    n1 s0    Y  d S )Nr   rz   r{   ra   r|   r~   r$   r*   r-   r.   r8   z)len\(right_on\) must equal len\(left_on\)ri   r1   r2   )rY   rX   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   s   t dddgi}dt| d}tjt|d  t||ddd W d    n1 sT0    Y  tjt|d  t||ddd W d    n1 s0    Y  d S )Nr1   r   z.Can only merge Series or DataFrame objects, a z was passedri   )rX   rY   )r   typerq   rr   	TypeErrorr
   )r"   r   r#   rx   r   r   r   )test_join_on_fails_with_wrong_object_type   s    .z2TestJoin.test_join_on_fails_with_wrong_object_typec                 C   sZ   |\}}|j |dd}|jddid}|g d }|d}|j ||d}t|| d S )Nr/   rA   key_0rd   )r   r-   r.   r0   r:   r;   )rl   renamepoprm   ro   )r"   r@   r>   r?   rw   join_colresultr   r   r   test_join_on_pass_vector   s    
z!TestJoin.test_join_on_pass_vectorc                 C   s   |\}}|j |g dd}|D ]$}||v s0J ||   s J q |j |g ddd}t|j|j t|dks|J d S )Nr/   rA   rO   rK   r   )rl   reindexisnaallrm   assert_index_equalrd   r   )r"   r@   r>   r?   rv   colZmerged2r   r   r   test_join_with_len0   s    zTestJoin.test_join_with_len0c                 C   s   t dg di}t dddgiddgd}|j|dd	d
}|j|dd}||d   }t|d |d  tj|d |d dd t|j|j d S )Nr\   )r1   r1   r4   r2   r2   r3   r&   r   r   r1   r2   r8   rO   rK   rA   F)Zcheck_dtype)r   rl   notnarm   rn   r   r9   r"   r#   r'   rV   rw   r   r   r   test_join_on_inner  s    zTestJoin.test_join_on_innerc                 C   sV   t dg di}t dg dig dd}|j|dgd}|j|dd}t|| d S )Nr\   r]   r&   r^   r_   r8   rA   r   rl   rm   ro   r   r   r   r   test_join_on_singlekey_list  s
    z$TestJoin.test_join_on_singlekey_listc                 C   s>   |\}}|j |d dd}|j |dg dd}t|| d S )Nr:   r/   rA   rl   rm   ro   )r"   r@   r>   r?   r   rw   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 )	Nr1   r   r   r2   r9   namerA   r~   r8   )r   r   rl   r9   rm   ro   )r"   r#   Zdsr   rw   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 )Nr$   r8   Tboolre   stringr*      r   intr)   floatrD   )r   r   arangerl   _join_by_handrm   ro   )r"   	join_typedf1r'   rV   rw   r   r   r   test_join_index_mixed&  s    zTestJoin.test_join_index_mixedc                 C   s   t dddddtdg dd}|d jtjks6J |d	 jtjksJJ t dddddtd
ddg dd}|j|ddd}g d}|d d |_|dd  |_t||}t	
|| d S )Nr)   r   re   Tr,   r$   rc   r.   r0   r   Z_oneZ_twolsuffixrsuffix)ZA_oneZB_oneZC_oneZD_oneZA_twoZB_twoZC_twoZD_twor%   )r   r   r   r7   int64Zbool_rl   rd   r   rm   ro   )r"   r   r'   rV   Zexpected_columnsrw   r   r   r   test_join_index_mixed_overlap8  s$    

z&TestJoin.test_join_index_mixed_overlapc                 C   s(   t  }|jt dgdgdgddd d S )Nra   r   r-   rc   rM   rD   )r   rl   )r"   xr   r   r   test_join_empty_bugX  s    zTestJoin.test_join_empty_bugc                 C   sp   t tjddddgd}ttjdd}||d< t tjddd	gd}|| || d S )
Nr   )   r   r1   r2   r   r   r3   )r   r   q)r   r   r   r   r!   r   rl   )r"   r1   r3   r4   r   r   r   test_join_unconsolidated]  s    
z!TestJoin.test_join_unconsolidatedc                 C   sz  t jg dg dgddgd}t jg dg dgddgd}ttjdd|d	gd
}ttjdd|dgd
}|jdd}|jdd}|j|dd}t	|j
t	|j
}||||}|j|j_t|| |jj|jksJ |jdd}|jdd}|j|ddjdd}t	|j
t	|j
}||||}|j|j_t|| |jj|jksvJ d S )N)r1   r1   r1   r2   r2   r2   )r   r   ra   r   r   ra   firstsecondnames)r2   r2   r2   r3   r3   r3   r      zvar X)r=   r9   rd   zvar Yr   )levelrM   rD   r   )r   r   r   r   r   r   r!   
sort_indexrl   r   valuesunionr   r   r9   rm   ro   )r"   Zindex1index2r   r'   rV   Zex_indexrw   r   r   r   test_join_multiindexj  sD    

zTestJoin.test_join_multiindexc           
      C   s  g d}g d}t jdt|}t|||d}|}tt jdd|g d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sJ t	
|| d S )N)
rf   rf   rf   re   re   bazr   quxr   Zsnap)
rg   rb   rh   rb   rg   rb   rg   rg   rh   rb   r   )r   r   r=   )r$   ra   )Zj_oneZj_twoZj_threerc   r   r   rO   rK   r   r   F)rX   rY   rE   sortT)rY   r   rE   r   r   Zaxis)r   r   r   r!   r   r   rl   r
   reset_indexrm   ro   Zreindex_likeZdropr9   Zis_monotonic_increasing)
r"   Z%lexsorted_two_level_string_multiindexr   r   r=   r9   Zto_joinrV   rw   Z	expected2r   r   r   test_join_inner_multiindex  sP    		z#TestJoin.test_join_inner_multiindexc                 C   s   t ddgg dd}|dgdddgi}t dd	gg d
d}|jddd tjtjjdd  t	||ddd W d    n1 s0    Y  d S )N)r   r   ra   )r%   r*   r   r_   r   r1   r2   meansum)   r$   r   r1   r2   r4   T)Zinplacez-Not allowed to merge between different levelsri   r   r   )
r   groupbyZagg	set_indexrq   rr   pderrors
MergeErrorr
   )r"   r#   Znew_dfZother_dfr   r   r   #test_join_hierarchical_mixed_raises  s    z,TestJoin.test_join_hierarchical_mixed_raisesc           
      C   s  t tjddddgtjd}t tjdddgtjd}||}|jd dks^J |jd dkspJ |jd d	ksJ tjd	d
dd
d}tjdd
d}tjdd
d	}t |||d}t |||d}t tjdd
d	dgd}|j|ddd}|jd dks4J |jd dksHJ |jd d	ks\J |jd d	kspJ |j|ddd}	t||	 d S )Nr   )r$   r   r1   r2   rd   r7   )r$   r   r3   float64float32r   r*   d   r   r_   mdr   Tr   )r   r   r   r   r!   r   r   rl   Zdtypesintegersastyper
   rm   ro   )
r"   r1   r2   rV   r3   r#   ZxpdfsrsZ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 g dg dg dd}t g dg dg dd}t g dg dg d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 g dg dtjddtjd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   r$      r_   r   r      r       )r1   r2   r5   r1   r2   rM   rD   rK   r   )r   r   r   )r$   r   r   )r   r   r   )r   r   i,  )r   r   i  rO   )re   rf   re   rf   re   rf   re   re   )rb   rb   rg   rh   rg   rg   rb   rh   r   r,   TESTr   rC   rJ   )r   r   rl   r
   r   rd   r1   r   r2   rm   ro   locr   r   r   r!   r   repeatr   )r"   r   r'   df3Zidf1Zidf2Zidf3r   Zdf_partially_mergedrw   r#   r   rO   rM   rC   rJ   r   r   r   test_join_many_non_unique_index  sT    
"z(TestJoin.test_join_many_non_unique_indexc                 C   s   t d| tg dg dd}tdg dig dd}|j|d	d
d}tg dg dg ddg dd}t|| |j|d	dd}tj|jttdd
d W d    n1 s0    Y  d S )Nzfuture.infer_string)re   rf   r   re   r   r   ra   r%   r`   value2r_   )rf   r   re   r8   r\   T)rB   r   )rf   r   re   re   )r   ra   r   r%   )r1   r2   r3   r3   )r\   r&   r   )r   r   r   ra   Fr%   )exact)	r   r   rl   rm   ro   r   r9   r   r   )r"   r[   rC   rJ   rV   rw   r   r   r   test_join_sort7  s     zTestJoin.test_join_sortc                 C   s   t dg dig dd}t dg dig dd}||}t g dd	tjd
dtjgdg dd}t|| t dg dig dd}t dg dig dd}||}t g dd	d
d
tjgdg dd}t|| d S )Nr1   r   )r   r   ra   r1   r8   r2   )r*   r   r   r   )r   ra   ra   r%   )r   r   ra   ra   r%   r*   r   r   r~   )r   r   ra   ra   r1   )r   r   r   r1   )r   rl   r   nanrm   ro   )r"   r   r'   r   rw   r   Zdf4r   r   r    test_join_mixed_non_unique_indexP  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)r+   freqZpnumrc   rO   Z_df2)rE   r   r6   r   r   Zpnum_df2rd   r9   )r   Zperiod_ranger   r   r   r   r	   rl   r   r   r   r   r   reshaper   r9   rm   ro   )r"   r9   r#   r'   r   rw   r   r   r   !test_join_non_unique_period_indexc  s    $z*TestJoin.test_join_non_unique_period_indexc                 C   s   t tjddg dd}|ddd |ddd	 |d}td
}t	j
t|d |  W d    n1 sz0    Y  |jdd}| }|j|dd d S )Nr   )r   r   )r1   r2   r3   r4   r5   r{   r   r   idr*   dtre   z&agg function failed [how->mean,dtype->ri   T)Znumeric_only_rightr   )r   r   r   r   r!   insertr   reescaperq   rr   r   r   countrl   )r"   r#   groupedrx   ZmnZcnr   r   r    test_mixed_type_join_with_suffixp  s    

&z)TestJoin.test_mixed_type_join_with_suffixc                 C   sv  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 d    n1 sh0    Y  d S )Nr   )r$   r   Zabcdefr   r1   r2   r3   r4   r5   r{   r   r   	   c                    s8    fdd| D }|d  |dd  }t|| d S )Nc                    s   g | ]}|  qS r   )r   ).0r   	exp_indexr   r   
<listcomp>      zFTestJoin.test_join_many.<locals>._check_diff_index.<locals>.<listcomp>r   r   r   )df_listr   r  Z	reindexedrw   r   r  r   _check_diff_index  s    z2TestJoin.test_join_many.<locals>._check_diff_indexrM   rD   rO   r   z?Joining multiple DataFrames only supported for joining on indexri   rA   )r   r   r   r   r!   r   rl   rm   ro   r9   rq   rr   ru   )r"   r#   r	  rV   r
  rx   r   r   r   test_join_many  s"    ":zTestJoin.test_join_manyc                 C   s   t tjddg d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 )Nr   )r   r%   r,   r   re   rf   r%   r\   r-   r.   r/   r0   )	r   r   r   r   r!   r   rl   rm   ro   )r"   r#   r   r'   r   r   r   r   r   test_join_many_mixed  s    zTestJoin.test_join_many_mixedc           	      C   sb  t ttjddg ddttjd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}tjtjjdd  |j|ddd W d    n1 sT0    Y  d S )Nr   )r$   r%   )r-   r-   r.   r.   r   r   r$   r   r|   r-   r/   r   r   Z_2r   )r%   r   r   yTr   rM   )r   r   rE   z0Passing 'suffixes' which cause duplicate columnsri   )r	   r   r   r   r   r!   r   r   rl   rd   rm   ro   r
   rq   rr   r   r   r   )	r"   r#   rw   r   wr   r  zZdtar   r   r   test_join_dups  sH    
zTestJoin.test_join_dupsc           	      C   sF  t jtdtdddggg d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g d}t	
|| d}tjt|d  |j|d|d W d    n1 s0    Y  tjt|d$ |j|ddg|d W d    n1 s80    Y  d S )Nr   xyr   r   )r   r  numr   Zv1   r8   Zv2c                 S   s   g | ]}d | qS )r   r   )r  ir   r   r   r    r  z5TestJoin.test_join_multi_to_multi.<locals>.<listcomp>r   rK   r   ri   )r   r   r   r   r   rl   r   r
   r   rm   ro   rq   rr   ru   )	r"   r   Z	leftindexrC   Z
rightindexrJ   r   rw   rx   r   r   r   test_join_multi_to_multi  s*     .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tj	g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  rA   r   Ztuvr  )r   r   Z
date_ranger   rl   r   rt   r   r   r   rm   ro   )r"   r   r'   r   rw   r   r   r   #test_join_on_tz_aware_datetimeindex  s$    	z,TestJoin.test_join_on_tz_aware_datetimeindexc                 C   s   t g dg dg dg dgg dd}t|d d|d< t g d	g d
gg dddgd}t|d 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g dd}|d d|d< t|| d S )N)
2012-08-02Lr$   )r  Jr   )
2013-04-06r  r   )r  r     )r   r  r1   r   r   zM8[ns])r  r  r   )r  r  r   )r   r  r  r   r%   r   r  rA   z2012-08-02 00:00:00r  r   r   z2013-04-06 00:00:00r  r   )r   r  r  r1   rc   )	r   r   to_datetimer   rl   r   r   rm   ro   )r"   ZdfaZdfbr   rw   r   r   r   test_join_datetime_string  s2    	z"TestJoin.test_join_datetime_stringc                 C   s   ddg}t j||d}t jt|t|d}td|i|d}tdt|i|d}||}tddgddgdt jddgddgdd}t|| d S )Nr1   r2   
categoriesc1r8   c2)r%  r&  )r   ZCategoricalIndexreversedr   rl   rm   ro   )r"   ZixZid1Zid2r   r'   r   rw   r   r   r    test_join_with_categorical_index,  s    
z)TestJoin.test_join_with_categorical_index)4__name__
__module____qualname__rq   Zfixturer#   r'   r@   rI   rL   rN   rP   rW   rZ   markparametrizeparamtdZ
skip_if_nory   r   r   r   r   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   r   #   sd   

	

&


 +>!6
-r   rC   _x_yc                 C   s6  |D ]}||    sJ q| |}||}	||D ]\}
}t|| j|}t||j|}z||
}W nL ty } z4|dv rtd|
 d|t|| j| W Y d }~nd }~0 0 t	|| z|	|
}W nP ty$ } z6|dv rtd|
 d|t||j| W Y d }~q<d }~0 0 t	|| q<d S )N)rC   rO   zkey z! should not have been in the join)rJ   rO   )
r   r   r   _restrict_to_columnsrd   Z	get_grouprs   AssertionError_assert_all_na_assert_same_contents)rC   rJ   r   r   rE   r   r   r3   Zleft_groupedZright_groupedZ	group_keygroupZl_joinedZr_joinedZlgrouperrZrgroupr   r   r   rG   <  s:    


$


$rG   c                    sR    fdd| j D }| jd d |f } | jfddd} | jd d  f } | S )Nc                    s(   g | ] }| v s | d  v r|qS ) replace)r  r3   rd   suffixr   r   r  b  s   z(_restrict_to_columns.<locals>.<listcomp>c                    s   |   dS )Nr9  r:  )r   )r=  r   r   <lambda>j  r  z&_restrict_to_columns.<locals>.<lambda>r   )rd   r   r   )r7  rd   r=  foundr   r<  r   r3  a  s    r3  c                    sd   d}|  | j}| | j}dd |D  t t|ksFJ t fdd|D s`J d S )Niy)c                 S   s   h | ]}t |qS r   tupler  rowr   r   r   	<setcomp>x  r  z(_assert_same_contents.<locals>.<setcomp>c                 3   s   | ]}t | v V  qd S Nr@  rB  rowsr   r   	<genexpr>z  r  z(_assert_same_contents.<locals>.<genexpr>)ZfillnaZdrop_duplicatesr   r   r   )
join_chunkr?   ZNA_SENTINELZjvaluesZsvaluesr   rF  r   r6  r  s    r6  c                 C   s,   |D ]"}||v rq| |    sJ qd S rE  )r   r   )rI  Zsource_columnsr   r3   r   r   r   r5  }  s    r5  c           	      C   sZ   | j j|j |d}| |}||}| j|j}| D ]\}}|||< q<|j|dS )NrD   r   )r9   rl   r   rd   appenditems)	r1   r2   rE   Z
join_indexZa_reZb_reZresult_columnsr   r   r   r   r   r     s    


r   c                  C   sx   t dditjdgddd} t dditjd	gd
dd}| j|dd}t dgdgdtjdgddd}t|| d S )Nr5   r*   )r   r   r%   r   r   r=   r9   r{   r   )r   ra   )r2   r3   rO   rD   )r5   r{   )r   r   r%   ra   )r1   r2   r4   r3   r8   r   r   from_tuplesrl   rm   ro   )rC   rJ   r   rw   r   r   r   .test_join_inner_multiindex_deterministic_order  s    rO  )	input_coloutput_colsr2   r1   a_xZa_yc                 C   sb   t dddgi}t | ddgi}|j|dddd}t |d	 g d
|d g di}t|| d S )Nr1   r   ra   r%   crossr1  r2  )rE   r   r   r   )r   r   ra   ra   )ra   r%   ra   r%   r   )rP  rQ  rC   rJ   r   rw   r   r   r   test_join_cross  s
     rT  c                 C   s   t dditjdgddd}t dditjd	gd
dd}|j|| d}| dkrvt dgdgdtjdgddgdd}n&t dgdgdtjdgddgdd}t|| d S )Nr3   ra   )r   r   r~   r   rL  r4   r%   )r   )r2   rD   rJ   )r3   r4   )r   r   r2   r1   r8   rM  )r   rC   rJ   r   rw   r   r   r   test_join_multiindex_one_level  s    rU  zcategories, valuesYX)rV  rW  rW  r   r   )r   r   r         @      ?)rX  rY  rY  z
2020-12-31z
2019-12-31c                 C   s   t ddgt| | dddgdddg}t g dt|| dg d	dddg}|j|d
dd}t ddgt| | dddgddgdddg}t|| d S )Nr-   r#  r   r   )r   r   r&   r   r   )r-   r-   r.   )ra   r%   r*   _leftr   r   ra   r%   )r   r   Z
value_leftZvalue_rightr   r   r   rl   rm   ro   )r$  r   rC   rJ   r   rw   r   r   r   1test_join_multiindex_not_alphabetical_categorical  s6    


r\  zleft_empty, how, exp)
)FrC   rC   )FrJ   empty)FrO   r]  )FrM   rC   )FrS  r]  )TrC   r]  )TrJ   rJ   )TrO   r]  )TrM   rJ   )TrS  r]  c                 C   s  t ddgddgdddd}t dgd	gd
ddd}| rL|d}n
|d}|j||d}|dkrt ddgddgtjtjgd}|d}nV|dkrt tjgdgd	gd}|d}n*|dkrt ddgdd}|dkr|d}|dkr| }t	|| d S )Nr   r   ra   r%   )r-   r.   r   r6   r-   r*   )r-   r/   r   rD   rC   )r-   r.   r/   rJ   )r.   r-   r/   r]  r.   r/   r   rS  rM   )
r   r   headrl   r   r   Zrename_axisr   rm   ro   )Z
left_emptyrE   exprC   rJ   r   rw   r   r   r   test_join_empty  s&     
 
r`  c                  C   s   t  } t dgd}t ddgd}| | }t dgd}t|| || }t g dd}t|| | | }t ddgd}t|| d S )Ntestr   re   rf   r   )rb  re   ra  )r   rm   ro   )r   r'   r   r   rw   r   r   r   $test_join_empty_uncomparable_columns  s    rc  zhow, valuesrO   r^   rM   rJ   r   r   r   c                 C   s   t tg dtg dg ddddg}t tg dtg dg ddddg}t t|t|||dddg}|j|| d}t|| d S )	Nr^   r_   r1   r2   rd  r   )r1   r2   r3   r4   rD   r[  )rE   r   r   r'   rw   r   r   r   r   3test_join_multiindex_categorical_output_index_dtype(  s6    



	re  )r   r   )rC   r1  r2  )rC   )'r   numpyr   rq   Zpandas.util._test_decoratorsutilZ_test_decoratorsr/  Zpandasr   r   r   r   r   r   r   r   r	   r
   r   Zpandas._testingZ_testingrm   r   r   rG   r3  r6  r5  r   rO  r,  r-  rT  rU  r\  r`  rc  re  r   r   r   r   <module>   sf   0
      
%

	





	