o
    ҷh                     @   s  d dl Z d dlZd dlZd dlZd dl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ejd3d4g d5fd6g d5fd	g d5fd7g d8fgd9d: ZdS )>    N)Categorical	DataFrameIndex
MultiIndexSeries	Timestampconcatmerge   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   W/var/www/html/venv/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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-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 Z0dS )W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   df20   s   
zTestJoin.df2c                 C   s>   t  \}}t||d}t|d |d d|d d}||fS )NindexAD)MergedAMergedDC)tmgetMixedTypeDictr   )r%   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_joinF   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r9   r<   r;   r   r=   r?   r   r   r   test_right_outer_joinM      zTestJoin.test_right_outer_joinc                 C   rC   )Nr   outerrE   r;   r   r=   r?   r   r   r   test_full_outer_joinT   rG   zTestJoin.test_full_outer_joinc                 C   rC   )Nr   innerrE   r;   r   r=   r?   r   r   r   test_inner_join[   rG   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)r9   suffixeskey1.foozkey1.barr	   r%   r&   r*   joinedr   r   r   test_handle_overlapb   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   rL   )left_onright_onrM   rN   zkey2.barrO   rP   r   r   r   !test_handle_overlap_arbitrary_keyh   s   z*TestJoin.test_handle_overlap_arbitrary_keyc                 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 )Nr1   r8   r/   r-   F)check_namesr0   r.   keyarY   brZ   cr)   r   r"   r   rY   rZ   r[   r+   )r   r   r"   r"   r   rW   r)   r"   r      oner,   columnsfoobartwothreer[   z^'E'$matchEzrYou are trying to merge on float64 and object columns for key 'A'. If you wish to proceed you should use pd.concat)joinr2   assert_series_equalr   assert_frame_equalr   isnanpytestraisesKeyErrorcopy
ValueError)r%   r7   r5   r6   mergedr&   r*   rQ   expecteddf_adf_bdf_csource_copymsgr   r   r   test_join_ons   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ddd}d	}tj	t
|d
 t||ddd W d    d S 1 sUw   Y  d S )Nr   mfr_   sizerY   rZ   r'   r+   Flen\(left_on\) must equal the number of levels in the index of "right"rg   rY   TrS   right_indexr   r   r   r   choicer$   r2   makeCustomIndexrn   ro   rr   r	   r%   r&   r*   ry   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dd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 sUw   Y  d S )Nr   r{   r|   r_   r}   r   r+   r'   zFlen\(right_on\) must equal the number of levels in the index of "left"rg   rZ   T)rT   
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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ddd}d	}tj	t
|d
 t||dddgd W d    d S 1 sWw   Y  d S )Nr   r{   r|   r_   r}   r   r'   r+   z)len\(right_on\) must equal len\(left_on\)rg   rY   rZ   )rT   rS   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 )NrY   r"   z.Can only merge Series or DataFrame objects, a z was passedrg   )rS   rT   )r   typern   ro   	TypeErrorr	   )r%   r   r&   ry   r   r   r   )test_join_on_fails_with_wrong_object_type   s   "z2TestJoin.test_join_on_fails_with_wrong_object_typec                 C   sD   |\}}|j |dd}|d= |d}|j ||d}t|| d S )Nr1   r8   )rj   popr2   rl   )r%   r7   r5   r6   rt   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 )Nr1   r8   rJ   rE   r   )rj   reindexisnaallr2   assert_index_equalrb   r   )r%   r7   r5   r6   rs   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 )NrW   )rY   rY   drZ   rZ   r[   r)   r   r"   rY   rZ   r+   rJ   rE   r8   F)check_dtype)r   rj   notnar2   rk   r   r,   r%   r&   r*   rQ   rt   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 )NrW   rX   r)   r\   r]   r+   r8   r   rj   r2   rl   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/   r1   r8   rj   r2   rl   )r%   r7   r5   r6   r   rt   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 )	NrY   r"   r   rZ   r,   namer8   r   r+   )r   r   rj   r,   r2   rl   )r%   r&   dsr   rt   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'   r+   Tboolrc   string      r"   int      ?floatr;   )r   r   arangerj   _join_by_handr2   rl   )r%   	join_typedf1r*   rQ   rt   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   rc   Tr-   Br1   r.   r'   ra   r   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   dtypeint64bool_rj   rb   r   r2   rl   )r%   r   r*   rQ   expected_columnsrt   r   r   r   test_join_index_mixed_overlap+  s$   

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-   ra   rH   r;   )r   rj   )r%   xr   r   r   test_join_empty_bugK  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   rY   rZ   rb   r   r[   )r   r"   q)r   r   r   r   r$   r   rj   )r%   rY   r[   r   r   r   r   test_join_unconsolidatedP  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)rY   rY   rY   rZ   rZ   rZ   )r"   r   r_   r"   r   r_   firstsecondnames)rZ   rZ   rZ   r[   r[   r[   r      zvar X)r4   r,   rb   zvar Yr   )levelrH   r;   r"   )r   from_arraysr   r   r   r   r$   
sort_indexrj   r   valuesunionr   r   r,   r2   rl   )r%   index1index2r   r*   rQ   ex_indexrt   r   r   r   test_join_multiindex]  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)
rd   rd   rd   rc   rc   bazr   quxr   snap)
re   r`   rf   r`   re   r`   re   re   rf   r`   r   )r   r   r4   )r'   r_   )j_onej_twoj_threera   r   r   rJ   rE   r   r   F)rS   rT   r<   sortT)rT   r   r<   r   r"   axis)r   r   r   r$   r   r   rj   r	   reset_indexr2   rl   reindex_likedropr,   is_monotonic_increasing)
r%   %lexsorted_two_level_string_multiindexr   r   r4   r,   to_joinrQ   rt   	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   r_   )r(   r   r   r]   r   rY   rZ   meansum)   r'   r   rY   rZ   r   T)inplacez-Not allowed to merge between different levelsrg   r   r   )
r   groupbyagg	set_indexrn   ro   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   rY   rZ   rb   r   )r'   r"   r[   float64float32r   r   d   r   r]   mdr   Tr   )r   r   r   r   r$   r   r   rj   dtypesintegersastyper	   r2   rl   )
r%   rY   rZ   rQ   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'      r]   r   r      r       )rY   rZ   erY   rZ   rH   r;   rE   r   )r"   r"   r"   )r'   r	  r   )r"   r"   r   )r   r
  i,  )r  r  i  rJ   )rc   rd   rc   rd   rc   rd   rc   rc   )r`   r`   re   rf   re   re   r`   rf   r
   r   TESTr   r:   rD   )r   r   rj   r	   r   rb   rY   r  rZ   r2   rl   locr   r   r   r$   r   repeatr   )r%   r   r*   df3idf1idf2idf3r   df_partially_mergedrt   r&   r  rJ   rH   r:   rD   r   r   r   test_join_many_non_unique_index  sT   
"z(TestJoin.test_join_many_non_unique_indexc                 C   s   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 d S )N)rc   rd   r   rc   r"   r   r_   r(   r^   value2r]   )rd   r   rc   r+   rW   T)r9   r   )rd   r   rc   rc   )r   r_   r"   r(   )rY   rZ   r[   r[   )rW   r)   r  )r"   r   r   r_   Fr(   )exact)r   rj   r2   rl   r   r,   r   r   )r%   r:   rD   rQ   rt   r   r   r   test_join_sort*  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 )NrY   r  )r"   r   r_   rY   r+   rZ   )r   r   r   r
   )r"   r_   r_   r(   )r"   r   r_   r_   r(   r   r   r   r   )r"   r   r_   r_   rY   )r"   r   r   rY   )r   rj   r   nanr2   rl   )r%   r   r*   r   rt   r  df4r   r   r    test_join_mixed_non_unique_index=  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freqpnumra   rJ   _df2)r<   r   r   r   r"   pnum_df2rb   r,   )r   period_ranger   r   r   r   r   rj   r   r   r   r   r  reshaper   r,   r2   rl   )r%   r,   r&   r*   r   rt   r   r   r   !test_join_non_unique_period_indexP  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   )rY   rZ   r[   r   r  r|   r   r   idr   dtrc   z-agg function failed [how->mean,dtype->object]rg   T)numeric_only_rightr   )r   r   r   r   r$   insertr   reescapern   ro   r   r   countrj   )r%   r&   groupedry   mncnr   r   r    test_mixed_type_join_with_suffix]  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   rY   rZ   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   r=  	reindexedrt   r   r<  r   _check_diff_index{  s   z2TestJoin.test_join_many.<locals>._check_diff_indexrH   r;   rJ   r
   z?Joining multiple DataFrames only supported for joining on indexrg   r8   )r   r   r   r   r$   r   rj   r2   rl   r,   rn   ro   rr   )r%   r&   r?  rQ   rA  ry   r   r   r   test_join_manyp  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   rc   rd   r(   rW   r-   r   r1   r.   )	r   r   r   r   r$   r  rj   r2   rl   )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(   )r-   r-   r   r   r   r   r'   r	  r}   r-   r1   r"   r   _2r/  )r(   r   r   yTr   rH   )r   r   r<   z0Passing 'suffixes' which cause duplicate columnsrg   )r   r   r   r   r   r$   r  r)  rj   rb   r2   rl   r	   rn   ro   r   r   r   )	r%   r&   rt   r   wr   rE  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 )Nabcxyr"   r   )rJ  rK  numr   v1   r+   v2c                 S   s   g | ]}d | qS )r   r   )r;  ir   r   r   r>        z5TestJoin.test_join_multi_to_multi.<locals>.<listcomp>r   rE   r   rg   )r   from_productr   r   r   rj   r   r	   r   r2   rl   rn   ro   rr   )	r%   r   	leftindexr:   
rightindexrD   r   rt   ry   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 t
d|d< t|| d S )Nz
2018-01-01r   zAmerica/Chicago)startr   tzabcde)datevalsz
2018-01-03tuvwx)rY  vals_2rY  r8   r   tuvr$  r\  )r   r   
date_ranger   rj   r   rq   r   r   r  objectr2   rl   )r%   r   r*   r   rt   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< t g dg d	gg d
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g dd}t|| d S )N)
2012-08-02Lr'   )ra  Jr   )
2013-04-06rb  r	  )rd  rc     )r   rE  rY   r   r   )ra  rc  r"   )rd  rb  r   )r   rE  rG  r   r(   r'  rE  r8   z2012-08-02 00:00:00rc  r"   r   z2013-04-06 00:00:00rb  r	  )r   rE  rG  rY   ra   )r   r   to_datetimerj   r   r   r2   rl   )r%   dfadfbr   rt   r   r   r   test_join_datetime_string  s0   	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 )NrY   rZ   
categoriesc1r+   c2)rl  rm  )r   CategoricalIndexreversedr   rj   r2   rl   )r%   ixid1id2r   r*   r   rt   r   r   r    test_join_with_categorical_index  s   
z)TestJoin.test_join_with_categorical_index)1__name__
__module____qualname__rn   fixturer&   r*   r7   rB   rF   rI   rK   rR   rU   rz   r   r   r   markparametrizer   arrayr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r*  r7  rB  rC  rI  rU  r`  ri  rs  r   r   r   r   r      sZ    

	
&
	
 +>!6-r   r:   _x_yc                 C   sF  |D ]}||    sJ q| |}||}	|t|dkr#|n|d D ]x\}
}t|| j|}t||j|}z||
}W n& tyg } z|dv rVtd|
 d|t	|| j| W Y d }~n
d }~ww t
|| z|	|
}W n& ty } z|dv rtd|
 d|t	||j| W Y d }~q(d }~ww t
|| q(d S )Nr"   r   )r:   rJ   zkey z! should not have been in the join)rD   rJ   )r   r   r   r   _restrict_to_columnsrb   	get_grouprp   AssertionError_assert_all_na_assert_same_contents)r:   rD   r   r   r<   r   r   r[   left_groupedright_grouped	group_keygroupl_joinedr_joinedlgrouperrrgroupr   r   r   r>   (  sH   




r>   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;  r[   rb   suffixr   r   r>  P  s    "z(_restrict_to_columns.<locals>.<listcomp>c                    s   |   dS )Nr  r  )r   )r  r   r   <lambda>X  s    z&_restrict_to_columns.<locals>.<lambda>r   )rb   r  rename)r  rb   r  foundr   r  r   r}  O  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r;  rowr   r   r   	<setcomp>f  rQ  z(_assert_same_contents.<locals>.<setcomp>c                 3   s    | ]	}t | v V  qd S Nr  r  rowsr   r   	<genexpr>h  s    z(_assert_same_contents.<locals>.<genexpr>)fillnadrop_duplicatesr   r   r   )
join_chunkr6   NA_SENTINELjvaluessvaluesr   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  k  s
   r  c           	      C   sZ   | j j|j |d}| |}||}| j|j}| D ]\}}|||< q|j|dS )Nr;   r   )r,   rj   r   rb   appenditems)	rY   rZ   r<   
join_indexa_reb_reresult_columnsr   r  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  r   )r"   r   r(   r   r   r4   r,   r|   r   )r   r_   )rZ   r[   rJ   r;   )r  r|   )r   r"   r(   r_   )rZ   rY   r   r[   r+   r   r   from_tuplesrj   r2   rl   )r:   rD   r   rt   r   r   r   .test_join_inner_multiindex_deterministic_order  s   r  )	input_coloutput_colsrZ   rY   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 )NrY   r"   r_   r(   crossr{  r|  )r<   r   r   r   )r"   r"   r_   r_   )r_   r(   r_   r(   r   )r  r  r:   rD   r   rt   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}t dgdgdtjdgddgdd}t|| d S )Nr[   r_   )r"   r   r   r   r  r   r(   )r   )rZ   r;   )r[   r   )r   r"   rZ   rY   r+   r  )r   r:   rD   r   rt   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 )Nr-   rj  r"   r   )r   r   r)   r   r   )r-   r-   r   )r_   r(   r   _leftr.  r   r_   r(   )r   r   
value_leftvalue_rightr   r   r   rj   r2   rl   )rk  r   r:   rD   r   rt   r   r   r   1test_join_multiindex_not_alphabetical_categorical  s6   





r  zleft_empty, how, exp)
)Fr:   r:   )FrD   empty)FrJ   r  )FrH   r:   )Fr  r  )Tr:   r  )TrD   rD   )TrJ   r  )TrH   rD   )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}t|| d S )Nr   r"   r_   r(   )r-   r   r   r$  r-   r   )r-   r1   r   r;   r:   )r-   r   r1   rD   )r   r-   r1   r  r   r1   r   r  )	r   r   headrj   r   r  rename_axisr2   rl   )
left_emptyr<   expr:   rD   r   rt   r   r   r   test_join_empty  s"    
 
r  zhow, valuesrJ   r\   rH   rD   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]   rY   rZ   r  r   )rY   rZ   r[   r   r;   r  )r<   r   r   r*   rt   r   r   r   r   3test_join_multiindex_categorical_output_index_dtype  s6   






	r  )r
   r   )r:   r{  r|  )r:   ) r1  numpyr   rn   pandasr   r   r   r   r   r   r   r   r	   pandas._testing_testingr2   r   r   r>   r}  r  r  r   r  rx  ry  r  r  r  r  r  r   r   r   r   <module>   sd    (

      
'

	





	