U
    _{f                     @   s  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dAd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d"d#d#gfd$d%gd$d%d%gfd&d'gd&d'd'gfe
d(e
d)ge
d(e
d)e
d)gfgd*d+ Zejd,d-d.d/d0d1d2d3d4d5d6g
d7d8 Zejd9d:d d%d$gfd;d d%d$gfd	d d%d$gfd<d d$d%gfgd=d> ZdS )B    N)Categorical	DataFrameIndex
MultiIndexSeries	Timestampconcatmerge   2   c                 C   s`   t t| }tt|||  }t||k rPtt ||d |t|   }tj| |S N)listrangenpZasarraytilelenrandomshuffle)ngroupsnZunique_groupsZarr r   c/var/www/html/Darija-Ai-API/env/lib/python3.8/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   s:   t t t tjdtjdd}||d dk }|S )Nr   )key1key2Zdata1Zdata2r      r   r   r   r   randn)selfdfr   r   r   r       s    


zTestJoin.dfc                 C   s&   t tddtdddtjddS )N
   )r      )r   r   )r   r   valuer   )r   r   r   r   df2.   s    

zTestJoin.df2c                 C   s>   t  \}}t||d}t|d |d d|d d}||fS )NindexAD)MergedAMergedDC)tmZgetMixedTypeDictr   )r   r&   datatargetsourcer   r   r   target_source8   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_joinD   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r2   r5   r4   r   r6   r8   r   r   r   test_right_outer_joinK   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   outerr;   r4   r   r6   r8   r   r   r   test_full_outer_joinR   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   innerr;   r4   r   r6   r8   r   r   r   test_inner_joinY   s    zTestJoin.test_inner_joinc                 C   s,   t ||ddd}d|kstd|ks(td S )Nr   z.fooz.bar)r2   suffixeskey1.foozkey1.barr	   AssertionErrorr   r    r$   joinedr   r   r   test_handle_overlap`   s    zTestJoin.test_handle_overlapc                 C   s.   t ||dddd}d|kstd|ks*td S )Nr   r   rA   )left_onright_onrB   rC   zkey2.barrD   rF   r   r   r   !test_handle_overlap_arbitrary_keyf   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	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 sBtt|d d sZt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+   r1   r)   r'   F)Zcheck_namesr*   r(   keyabcr#   r   r      r%   rL   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)joinr,   assert_series_equalr   assert_frame_equalr   isnanrE   pytestraisesKeyErrorcopy
ValueError)r   r0   r.   r/   mergedr    r$   rG   expectedZdf_aZdf_bZdf_cZsource_copymsgr   r   r   test_join_onq   s4    "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frR   sizerM   rN   r!   rP   r%   Flen\(left_on\) must equal the number of levels in the index of "right"rZ   rM   TrI   right_indexr   r   r   choicer   r,   ZmakeCustomIndexra   rb   re   r	   r   r    r$   rh   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 )Nrj   rk   rR   rl   rn   rP   r%   r!   zFlen\(right_on\) must equal the number of levels in the index of "left"rZ   rN   T)rJ   
left_indexrr   rt   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 )Nrj   rk   rR   rl   rn   r!   rP   r%   z)len\(right_on\) must equal len\(left_on\)rZ   rM   rN   )rJ   rI   rr   rt   r   r   r   /test_join_on_fails_with_different_column_counts   s      
z8TestJoin.test_join_on_fails_with_different_column_counts
wrong_typerP   strNr   r   c              	   C   sx   t dddgi}dt| d}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 )NrM   r   z.Can only merge Series or DataFrame objects, a z was passedrZ   )rI   rJ   )r   typera   rb   	TypeErrorr	   )r   ry   r    rh   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 )Nr+   r1   )r]   popr,   r_   )r   r0   r.   r/   rg   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 ]$}||ks0t||   s tq |j |g ddd}t|j|j t|dks|td S )Nr+   r1   r?   r;   r   )	r]   reindexrE   isnaallr,   assert_index_equalrU   r   )r   r0   r.   r/   rf   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|d |d  tj|d |d dd t|j|j d S )NrL   rM   drN   rO   r#   r   r   r%   r?   r;   r1   F)Zcheck_dtype)r   r]   notnar,   r^   r   r&   r   r    r$   rG   rg   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 )NrL   rM   rN   rO   r#   r   r   rP   r%   r1   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 )Nr)   r+   r1   r]   r,   r_   )r   r0   r.   r/   r   rg   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 )	NrM   r   rP   rN   r&   namer1   rn   r%   )r   r   r]   r&   r,   r_   )r   r    Zdsr   rg   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boolrV   string      r   int      ?floatr4   )r   r   aranger]   _join_by_handr,   r_   )r   	join_typedf1r$   rG   rg   r   r   r   test_join_index_mixed  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   rP   rV   Tr'   Br+   r(   r!   r'   r   r+   r(   rT   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   dtypeint64rE   Zbool_r]   rU   r   r,   r_   )r   r   r$   rG   Zexpected_columnsrg   r   r   r   test_join_index_mixed_overlap  s4    



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   r'   rT   r=   r4   )r   r]   )r   xr   r   r   test_join_empty_bug8  s    zTestJoin.test_join_empty_bugc                 C   sb   t tjddddgd}ttjd}||d< t tjdddgd}|| || d S )	N   rP   rM   rN   rU   rO   r   q)r   r   r   r   r   r]   )r   rM   rO   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 )NrM   rN   r   rP   rR   firstsecondnamesrO      zvar X)r-   r&   rU   zvar Yr   )levelr=   r4   )r   Zfrom_arraysr   r   r   r   
sort_indexr]   r   valuesunionr   r   r&   r,   r_   rE   )r   Zindex1index2r   r$   rG   Zex_indexrg   r   r   r   test_join_multiindexH  s4    

zTestJoin.test_join_multiindexc           
   
   C   s   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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 )NrW   rV   bazZquxZsnaprX   rS   rY   )r   r   r-   r!   rR   Zj_oneZj_twoZj_threerT   r   r   r?   r;   r   r   F)rI   rJ   r5   sortT)rJ   rv   r5   r   r   Zaxis)r   r   r   r   r   r]   r	   reset_indexr,   r_   Zreindex_likeZdropr&   Zis_monotonic_increasingrE   )
r   Z%lexsorted_two_level_string_multiindexr   r   r-   r&   Zto_joinrG   rg   Z	expected2r   r   r   test_join_inner_multiindexk  sd      		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jt	j
jdd t||d	d	d W 5 Q R X d S )N)r   rP   rR   )r"   r   r   rM   rN   rO   r   )   r!   r   r   T)Zinplacez-Not allowed to merge between different levelsrZ   rv   rq   )r   groupbyZaggr   meansum	set_indexra   rb   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   sp  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sVt|jd dksht|jd d	kszt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s<t|jd d	ksPt|j|ddd}	t||	 d S )Nr!   rP   rM   rN   rU   r   r   rO   float64float32r   r   d   r   rM   rN   rO   mdr   Trp   )r   r   r   r   r   r   r]   ZdtypesrE   randintastyper	   r,   r_   )
r   rM   rN   rG   rO   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 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   r!      r   rP   r      rM   rN   r   i  i  )rM   rN   erM   rN   r=   r4   r;   r   r   i,  i  r?   rV   rW   rS   rX   rY   r
   r   ZTESTr   r3   r:   )r   r   r]   r	   r   rU   rM   r   rN   r,   r_   locr   r   r   r   repeatr   )r   r   r$   df3Zidf1Zidf2Zidf3r   Zdf_partially_mergedrg   r    r   r?   r=   r3   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|jttddd d S )NrV   rW   r   r   rP   rR   r"   rQ   value2rM   rN   rO   r%   rL   T)r2   r   )rL   r#   r   r   F)exact)r   r]   r,   r_   r   r&   r   r   )r   r3   r:   rG   rg   r   r   r   test_join_sort  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 )NrM   r   rP   rR   r"   r%   rN   r   r   r   r
   rn   )r   r]   r   nanr,   r_   )r   r   r$   r   rg   r   Z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freqZpnumrT   r?   Z_df2)r5   r   r   rP   r   Zpnum_df2rU   r&   )r   Zperiod_ranger   r   r   r   r   r]   r   r   r   r   r   reshaper   r&   r,   r_   )r   r&   r    r$   r   rg   r   r   r   !test_join_non_unique_period_index'  s    $z*TestJoin.test_join_non_unique_period_indexc              	   C   s   t tjddddddddgd	}|d
dd
 |ddd |d}tjtdd |	  W 5 Q R X |j	dd}|
 }|j|dd d S )Nr   r   rM   rN   rO   r   r   rk   r   r   idr   dtrV   zCould not convertrZ   T)Znumeric_only_rightr   )r   r   r   r   insertr   ra   rb   r|   r   countr]   )r   r    groupedZmnZcnr   r   r    test_mixed_type_join_with_suffix4  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 )Nr!   r   Zabcdefr   rM   rN   rO   r   r   rk   r   r   rP   	   c                    s8    fdd| D }|d  |dd  }t|| d S )Nc                    s   g | ]}|  qS r   )r   ).0r   	exp_indexr   r   
<listcomp>M  s     zFTestJoin.test_join_many.<locals>._check_diff_index.<locals>.<listcomp>r   r   r   )df_listr   r   Z	reindexedrg   r   r   r   _check_diff_indexL  s    z2TestJoin.test_join_many.<locals>._check_diff_indexr=   r4   r?   r
   z?Joining multiple DataFrames only supported for joining on indexrZ   r1   )r   r   r   r   r   r]   r,   r_   r&   ra   rb   re   )r   r    r   rG   r   rh   r   r   r   test_join_manyC  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 )Nr
   r"   r'   r   r+   r(   r   rV   rW   rL   )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   s6  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}tjtjjdd |j|ddd W 5 Q R X d S )Nr!   r"   r'   r   r   r   r   rl   rP   r+   r   r   Z_2r   r   yTr   r=   )rv   rq   r5   z0Passing 'suffixes' which cause duplicate columnsrZ   )r   r   r   r   r   r   r   r]   rU   r,   r_   r	   ra   rb   r   r   r   )	r   r    rg   r   wr   r   zZdtar   r   r   test_join_dupsi  s8     
   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   rP   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>r   r;   ro   rZ   )r   Zfrom_productr   r   r   r]   r   r	   r   r,   r_   ra   rb   re   )	r   r   Z	leftindexr3   Z
rightindexr:   r   rg   rh   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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  r1   rP   Ztuvr   r  )r   r   Z
date_ranger   r]   r   rd   r   r   r   objectr,   r_   )r   r   r$   r   rg   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Lr!   Jr   z
2013-04-06r      r   r   rM   r   r   rP   r   r"   r   r1   z2012-08-02 00:00:00z2013-04-06 00:00:00rT   )r   r   to_datetimer]   r   r   r,   r_   )r   ZdfaZdfbr   rg   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 )NrM   rN   
categoriesc1r%   c2)r  r  )r   ZCategoricalIndexreversedr   r]   r,   r_   )r   ZixZid1Zid2r   r$   r   rg   r   r   r    test_join_with_categorical_index  s    
z)TestJoin.test_join_with_categorical_index)1__name__
__module____qualname__ra   Zfixturer    r$   r0   r9   r<   r>   r@   rH   rK   ri   ru   rw   rx   mark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   r      sX   

	
'
	
 #<6
!r   r3   _x_yc                 C   sF  |D ]}||    stq| |}||}	|t|dkrF|n|d D ]\}
}t|| j|}t||j|}z||
}W nJ tk
r } z,|dkrtd|
 d|t	|| j| W 5 d }~X Y nX t
|| z|	|
}W nN tk
r4 } z.|dkrtd|
 d|t	||j| W 5 d }~X Y qPX t
|| qPd S )Nr   r   )r3   r?   zkey z! should not have been in the join)r:   r?   )r   r   rE   r   r   _restrict_to_columnsrU   Z	get_grouprc   _assert_all_na_assert_same_contents)r3   r:   r   r   r5   r   r   rO   Zleft_groupedZright_groupedZ	group_keygroupZl_joinedZr_joinedZlgrouperrZrgroupr   r   r   r7     s>    


 


 r7   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   rO   rU   suffixr   r   r     s      z(_restrict_to_columns.<locals>.<listcomp>c                    s   |   dS )Nr"  r#  )r   )r&  r   r   <lambda>      z&_restrict_to_columns.<locals>.<lambda>r   )rU   r   rename)r   rU   r&  foundr   r%  r   r    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 r   r+  r-  rowsr   r   	<genexpr>*  s     z(_assert_same_contents.<locals>.<genexpr>)ZfillnaZdrop_duplicatesr   r   rE   r   )
join_chunkr/   ZNA_SENTINELZjvaluesZsvaluesr   r0  r   r  "  s    r  c                 C   s,   |D ]"}||krq| |    stqd S r   )r   r   rE   )r3  Zsource_columnsr   rO   r   r   r   r  -  s    r  c           	      C   sZ   | j j|j |d}| |}||}| j|j}| D ]\}}|||< q<|j|dS )Nr4   r   )r&   r]   r   rU   appenditems)	rM   rN   r5   Z
join_indexZa_reZb_reZresult_columnsr   r   r   r   r   r   4  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   rP   r"   r   r   r-   r&   rk   r   )rP   rR   )rN   rO   r?   r4   )r   rk   )rP   r   r"   rR   )rN   rM   r   rO   r%   r   r   from_tuplesr]   r,   r_   )r3   r:   r   rg   r   r   r   .test_join_inner_multiindex_deterministic_orderA  s     r9  )	input_coloutput_colsrN   rM   Za_xZa_yc                 C   sj   t dddgi}t | ddgi}|j|dddd}t |d	 ddddg|d ddddgi}t|| d S )
NrM   r   rR   r"   crossr  r  )r5   r   r   r   r   )r:  r;  r3   r:   r   rg   r   r   r   test_join_crossR  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 )NrO   rR   )r   rP   rn   r   r6  r   r"   )rP   )rN   r4   )rO   r   )rP   r   rN   rM   r%   r7  )r   r3   r:   r   rg   r   r   r   test_join_multiindex_one_level^  s     r>  zcategories, valuesYXrP   r   g      @g      ?z
2020-12-31z
2019-12-31c                 C   s   t ddgt| | dddgdddg}t dddgt|| dd	d
dg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   rP   )r   r   r#   r   r   r   rR   r"   r   _leftr   r   )r   r   Z
value_leftZvalue_rightr   r   r   r]   r,   r_   )r  r   r3   r:   r   rg   r   r   r   1test_join_multiindex_not_alphabetical_categoricall  s6    


rC  zleft_empty, how, exp)Fr3   r3   )Fr:   empty)Fr?   rD  )Fr=   r3   )Fr<  rD  )Tr3   rD  )Tr:   r:   )Tr?   rD  )Tr=   r:   )Tr<  rD  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}t|| d S )NrP   r   rR   r"   )r'   r   r   r   r'   r   )r'   r+   r   r4   r3   )r'   r   r+   r:   )r   r'   r+   rD  r   r+   r   r<  )	r   r   headr]   r   r   Zrename_axisr,   r_   )Z
left_emptyr5   expr3   r:   r   rg   r   r   r   test_join_empty  s"     
 
rG  zhow, valuesr?   r=   r:   c                 C   s   t tdddgtdddgdddgdddg}t tdddgtdddgdddgdddg}t t|t|||dddg}|j|| d	}t|| d S )
Nr   r   rP   r   rM   rN   r   )rM   rN   rO   r   r4   rB  )r5   r   r   r$   rg   r   r   r   r   3test_join_multiindex_categorical_output_index_dtype  s6    	rH  )r
   r   )r3   r  r  )r3   )numpyr   ra   Zpandasr   r   r   r   r   r   r   r   r	   Zpandas._testingZ_testingr,   r   r   r7   r  r  r  r   r9  r  r  r=  r>  rC  rG  rH  r   r   r   r   <module>   st   (

     R
'
 
	

	