o
    _~#g                     @   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 r(tt ||d |t|   }tjd| |S )N   )	listrangenpasarraytilelenrandomdefault_rngshuffle)ngroupsnunique_groupsarr r   /var/www/static.ux5.de/https/Moving-Object-Detection-with-OpenCV/env/lib/python3.10/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key2data1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-   )foo1foo2foo3foo4foo5z1/1/2009   )periodsABCD)abcdedtypeindexr7   r:   )MergedAMergedDr9   )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,   joined_key2joined_bothr   r   r   test_left_outer_joinO   s   
zTestJoin.test_left_outer_joinc                 C   L   t ||ddd}t|||dgdd t ||dd}t|||ddgdd d S )Nr!   rightrL   rO   rN   r    rP   rR   r   r   r   test_right_outer_joinV      zTestJoin.test_right_outer_joinc                 C   rV   )Nr!   outerrX   rN   r    rP   rR   r   r   r   test_full_outer_join]   rZ   zTestJoin.test_full_outer_joinc                 C   rV   )Nr!   innerrX   rN   r    rP   rR   r   r   r   test_inner_joind   rZ   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)rL   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    r_   )left_onright_onr`   ra   zkey2.barrb   rc   r   r   r   !test_handle_overlap_arbitrary_keyq   s   z*TestJoin.test_handle_overlap_arbitrary_keyinfer_stringFTpyarrow)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 sJ t|d d sJ tjt	dd |j |dd W d    n1 sw   Y  |
 }d}tjt|d |j |dd W d    d S 1 sw   Y  d S )Nr9   rK   rD   r7   F)check_namesrE   r:   keyr;   r;   r<   r<   r=   r+   r   r$   r   r;   r<   r=   rB   )r   r   r$   r$   r   rm   r+   r$   r      onerC   columnsfoobartwothreer=   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'   rJ   ri   rH   rI   mergedr(   r,   rd   expecteddf_adf_bdf_csource_copymsgr   r   r   test_join_on|   s6    "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    d S 1 sZw   Y  d S )Nr   mfrr   sizer;   r<   r)   r4   r7   r8   rB   Flen\(left_on\) must equal the number of levels in the index of "right"rz   r;   Trf   right_indexr   r   r   r   choicer&   r   from_productr   r   r   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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    d S 1 sZw   Y  d S )Nr   r   r   rr   r   r   abcrB   r)   zFlen\(right_on\) must equal the number of levels in the index of "left"rz   r<   T)rg   
left_index)r   r   r   r   r   r&   r   from_arraysr   r   r   r   r   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    d S 1 s\w   Y  d S )Nr   r   r   rr   r   r   r)   r4   r7   r8   rB   z)len\(right_on\) must equal len\(left_on\)rz   r;   r<   )rg   rf   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 s*w   Y  tjt|d t||ddd W d    d S 1 sJw   Y  d S )Nr;   r$   z.Can only merge Series or DataFrame objects, a z was passedrz   )rf   rg   )r   typer   r   	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   sZ   |\}}|j |dd}|jddid}|g d }|d}|j ||d}t|| d S )Nr9   rK   key_0ru   )r   r7   r8   r:   rD   rE   )r}   renamepopr~   r   )r'   rJ   rH   rI   r   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 sJ ||   s"J q|j |g ddd}t|j|j t|dks>J d S )Nr9   rK   r]   rX   r   )r}   reindexisnaallr~   assert_index_equalru   r   )r'   rJ   rH   rI   r   col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 )Nrm   )r;   r;   r>   r<   r<   r=   r+   r   r$   r;   r<   rB   r]   rX   rK   F)check_dtype)r   r}   notnar~   r   r   rC   r'   r(   r,   rd   r   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 )Nrm   rn   r+   ro   rp   rB   rK   r   r}   r~   r   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 )NrD   r9   rK   r}   r~   r   )r'   rJ   rH   rI   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 )	Nr;   r$   r   r<   rC   namerK   r   rB   )r   r   r}   rC   r~   r   )r'   r(   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 )Nr)   rB   Tboolrv   stringr4      r$   intr.   floatrN   )r   r   aranger}   _join_by_handr~   r   )r'   	join_typedf1r,   rd   r   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sJ |d	 jtjks%J 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   rv   Tr6   r)   rt   r8   r:   r   _one_twolsuffixrsuffix)A_oneB_oneC_oneD_oneA_twoB_twoC_twoD_twor*   )r   r   r   rA   int64bool_r}   ru   r   r~   r   )r'   r   r,   rd   expected_columnsr   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 )Nrr   r   r7   rt   r[   rN   )r   r}   )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   r;   r<   r   r   r=   )r   r$   q)r   r   r   r   r&   r   r}   )r'   r;   r=   r>   r   r   r   test_join_unconsolidated]  s   
z!TestJoin.test_join_unconsolidatedc                 C   sx  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syJ |jdd}|jdd}|j|ddjdd}t	|j
t	|j
}||||}|j|j_t|| |jj|jksJ d S )N)r;   r;   r;   r<   r<   r<   )r$   r   rr   r$   r   rr   firstsecondnames)r<   r<   r<   r=   r=   r=   r      zvar X)rG   rC   ru   zvar Yr   )levelr[   rN   r$   )r   r   r   r   r   r   r&   
sort_indexr}   r   valuesunionr   r   rC   r~   r   )r'   index1index2r   r,   rd   ex_indexr   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s{J t	
|| d S )N)
rw   rw   rw   rv   rv   bazr   quxr   snap)
rx   rs   ry   rs   rx   rs   rx   rx   ry   rs   r   )r    r!   rG   )r)   rr   )j_onej_twoj_threert   r    r!   r]   rX   r   r   F)rf   rg   rO   sortT)rg   r   rO   r   r$   axis)r   r   r   r&   r   r   r}   r
   reset_indexr~   r   reindex_likedroprC   is_monotonic_increasing)
r'   %lexsorted_two_level_string_multiindexr    r!   rG   rC   to_joinrd   r   	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    d S 1 sEw   Y  d S )N)r$   r   rr   )r*   r4   r   rp   r   r;   r<   meansum)   r)   r   r;   r<   r>   T)inplacez-Not allowed to merge between different levelsrz   r   r   )
r   groupbyagg	set_indexr   r   pderrors
MergeErrorr
   )r'   r(   new_df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s8J |jd d	ksAJ 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sJ |jd dksJ |jd d	ksJ |jd d	ksJ |j|ddd}	t||	 d S )Nr   )r)   r   r;   r<   ru   rA   )r)   r$   r=   float64float32r   r4   d   r   rp   mdr   Tr   )r   r   r   r   r&   r  r  r}   dtypesintegersastyper
   r~   r   )
r'   r;   r<   rd   r=   r(   xpdfsrs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)      rp   r   r     r      )r;   r<   r?   r;   r<   r[   rN   rX   r   )r$   r$   r$   )r)   r  r   )r$   r$   r   )r  r  i,  )r  r  i  r]   )rv   rw   rv   rw   rv   rw   rv   rv   )rs   rs   rx   ry   rx   rx   rs   ry   r   r6   TESTr   rM   rW   )r   r  r}   r
   r   ru   r;   r  r<   r~   r   locr   r   r   r&   r   repeatr   )r'   r   r,   df3idf1idf2idf3r   df_partially_mergedr   r(   r  r]   r[   rM   rW   r   r   r   test_join_many_non_unique_index  sT   
"z(TestJoin.test_join_many_non_unique_indexc                 C   s   t d|U 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    d S 1 s]w   Y  d S )Nzfuture.infer_string)rv   rw   r   rv   r$   r   rr   r*   rq   value2rp   )rw   r   rv   rB   rm   T)rL   r   )rw   r   rv   rv   )r   rr   r$   r*   )r;   r<   r=   r=   )rm   r+   r(  )r$   r   r   rr   Fr*   )exact)	r   r   r}   r~   r   r   rC   r   r   )r'   ri   rM   rW   rd   r   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 )Nr;   r'  )r$   r   rr   r;   rB   r<   )r4   r   r   r   )r$   rr   rr   r*   )r$   r   rr   rr   r*   r4   r   r   r   )r$   r   rr   rr   r;   )r$   r   r   r;   )r   r}   r   nanr~   r   )r'   r   r,   r   r   r!  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)r5   freqpnumrt   r]   _df2)rO   r   r@   r   r$   pnum_df2ru   rC   )r  period_ranger   r   r   r   r	   r}   r   r   r   r   r   reshaper   rC   r~   r   )r'   rC   r(   r,   r   r   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 s=w   Y  |jdd}| }|j|dd d S )Nr   )r  r   )r;   r<   r=   r>   r?   r   r   r   idr4   dtrv   z&agg function failed [how->mean,dtype->rz   T)numeric_only_rightr   )r   r   r   r   r&   insertr  reescaper   r   r   r   countr}   )r'   r(   groupedr   mn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    d S 1 sw   Y  d S )Nr   )r)   r   abcdefr   r;   r<   r=   r>   r?   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>  s    zFTestJoin.test_join_many.<locals>._check_diff_index.<locals>.<listcomp>r   r$   r   )df_listr   rK  	reindexedr   r   rJ  r   _check_diff_index  s   z2TestJoin.test_join_many.<locals>._check_diff_indexr[   rN   r]   r   z?Joining multiple DataFrames only supported for joining on indexrz   rK   )r   r   r   r   r&   r   r}   r~   r   rC   r   r   r   )r'   r(   rM  rd   rO  r   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*   r6   r   rv   rw   r*   rm   r7   r8   r9   r:   )	r   r   r   r   r&   r  r}   r~   r   )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    d S 1 sw   Y  d S )Nr   )r)   r*   )r7   r7   r8   r8   r   r   r)   r  r   r7   r9   r$   r   _2r=  )r*   r   r   yTr  r[   )r   r   rO   z0Passing 'suffixes' which cause duplicate columnsrz   )r	   r   r   r   r   r&   r  r7  r}   ru   r~   r   r
   r   r   r  r  r	  )	r'   r(   r   r   wr   rS  zdtar   r   r   test_join_dups  sJ   
"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 szw   Y  tjt|d |j|ddg|d W d    d S 1 sw   Y  d S )Nr   xyr$   r   )r   rX  numr   v1   rB   v2c                 S   s   g | ]}d | qS )r  r   )rI  ir   r   r   rL        z5TestJoin.test_join_multi_to_multi.<locals>.<listcomp>r   rX   r   rz   )r   r   r   r   r   r}   r   r
   r  r~   r   r   r   r   )	r'   r   	leftindexrM   
rightindexrW   r   r   r   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-01r4   zAmerica/Chicago)startr5   tzabcde)datevalsz
2018-01-03tuvwx)re  vals_2re  rK   r   tuvrh  )r   r  
date_ranger   r}   r  r   r   r   r+  r~   r   )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 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)   )rl  Jr   )
2013-04-06rm  r  )ro  rn     )r   rS  r;   r   r   zM8[ns])rl  rn  r$   )ro  rm  r   )r   rS  rU  r   r*   r5  rS  rK   z2012-08-02 00:00:00rn  r$   r   z2013-04-06 00:00:00rm  r  )r   rS  rU  r;   rt   )	r   r  to_datetimer  r}   r  r   r~   r   )r'   dfadfbr   r   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 )Nr;   r<   
categoriesc1rB   c2)rw  rx  )r  CategoricalIndexreversedr   r}   r~   r   )r'   ixid1id2r   r,   r   r   r   r   r    test_join_with_categorical_index,  s   
z)TestJoin.test_join_with_categorical_index)4__name__
__module____qualname__r   fixturer(   r,   rJ   rU   rY   r\   r^   re   rh   markparametrizeparamtd
skip_if_nor   r   r   r   r   arrayr   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r&  r*  r-  r8  rE  rP  rQ  rW  ra  rk  rt  r~  r   r   r   r   r   #   sf    

	

&


 +>!6
-r   rM   _x_yc                 C   s2  |D ]}||    sJ q| |}||}	||D ]x\}
}t|| j|}t||j|}z||
}W n& ty] } z|dv rLtd|
 d|t|| j| W Y d }~n
d }~ww t	|| z|	|
}W n& ty } z|dv rtd|
 d|t||j| W Y d }~qd }~ww t	|| qd S )N)rM   r]   zkey z! should not have been in the join)rW   r]   )
r   r   r  _restrict_to_columnsru   	get_groupr   AssertionError_assert_all_na_assert_same_contents)rM   rW   r   r   rO   r   r   r=   left_groupedright_grouped	group_keygroupl_joinedr_joinedlgrouperrrgroupr   r   r   rQ   <  sD   




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 | ]}| v s| d  v r|qS ) replace)rI  r=   ru   suffixr   r   rL  b  s    "z(_restrict_to_columns.<locals>.<listcomp>c                    s   |   dS )Nr  r  )r   )r  r   r   <lambda>j  s    z&_restrict_to_columns.<locals>.<lambda>r   )ru   r  r   )r  ru   r  foundr   r  r   r  a  s   r  c                    sd   d}|  | j}| | j}dd |D  t t|ks#J t fdd|D s0J d S )Niy)c                 S   s   h | ]}t |qS r   tuplerI  rowr   r   r   	<setcomp>x  r^  z(_assert_same_contents.<locals>.<setcomp>c                 3   s    | ]	}t | v V  qd S Nr  r  rowsr   r   	<genexpr>z  s    z(_assert_same_contents.<locals>.<genexpr>)fillnadrop_duplicatesr   r   r   )
join_chunkrI   NA_SENTINELjvaluessvaluesr   r  r   r  r  s   r  c                 C   s,   |D ]}||v r	q| |    sJ qd S r  )r   r   )r  source_columnsr   r=   r   r   r   r  }  s
   r  c           	      C   sZ   | j j|j |d}| |}||}| j|j}| D ]\}}|||< q|j|dS )NrN   r   )rC   r}   r   ru   appenditems)	r;   r<   rO   
join_indexa_reb_re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 )Nr?   r4   )r$   r   r*   r  r   rG   rC   r   r   )r   rr   )r<   r=   r]   rN   )r?   r   )r$   r   r*   rr   )r;   r<   r>   r=   rB   r   r   from_tuplesr}   r~   r   )rM   rW   r   r   r   r   r   .test_join_inner_multiindex_deterministic_order  s   r  )	input_coloutput_colsr<   r;   a_x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 )Nr;   r$   rr   r*   crossr  r  )rO   r   r   r   )r$   r$   rr   rr   )rr   r*   rr   r*   r   )r  r  rM   rW   r   r   r   r   r   test_join_cross  s
    r  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r;t 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 )Nr=   rr   )r$   r   r   r   r  r>   r*   )r   )r<   rN   rW   )r=   r>   )r   r$   r<   r;   rB   r  )r   rM   rW   r   r   r   r   r   test_join_multiindex_one_level  s   r  zcategories, valuesYX)r  r  r  r   r$   )r   r$   r$         @      ?)r  r  r  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 )Nr7   ru  r$   r   )r   r   r+   r   r   )r7   r7   r8   )rr   r*   r4   _leftr<  r   rr   r*   )r   r   
value_leftvalue_rightr   r   r  r}   r~   r   )rv  r   rM   rW   r   r   r   r   r   1test_join_multiindex_not_alphabetical_categorical  s6   





r  zleft_empty, how, exp)
)FrM   rM   )FrW   empty)Fr]   r  )Fr[   rM   )Fr  r  )TrM   r  )TrW   rW   )Tr]   r  )Tr[   rW   )Tr  r  c                 C   s  t ddgddgdddd}t dgd	gd
ddd}| r&|d}n|d}|j||d}|dkrLt ddgddgtjtjgd}|d}n+|dkrbt tjgdgd	gd}|d}n|dkrwt ddgdd}|dkrw|d}|dkr| }t	|| d S )Nr   r$   rr   r*   )r7   r8   r   r@   r7   r4   )r7   r9   r   rN   rM   )r7   r8   r9   rW   )r8   r7   r9   r  r8   r9   r  r  r[   )
r   r  headr}   r   r+  rename_axisr   r~   r   )
left_emptyrO   exprM   rW   r   r   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   rv   rw   r   )r  rv   r  )r   r~   r   )r   r,   r!  r   r   r   r   r   $test_join_empty_uncomparable_columns  s   r  zhow, valuesr]   ro   r[   rW   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 )	Nro   rp   r;   r<   r  r  )r;   r<   r=   r>   rN   r  )rO   r   r   r,   r   r   r   r   r   3test_join_multiindex_categorical_output_index_dtype(  s6   






	r  )r   r   )rM   r  r  )rM   )'r?  numpyr   r   pandas.util._test_decoratorsutil_test_decoratorsr  pandasr  r   r   r   r   r   r   r   r	   r
   r   pandas._testing_testingr~   r   r   rQ   r  r  r  r   r  r  r  r  r  r  r  r  r  r   r   r   r   <module>   sh    0
      
%

	





	