a
    d                     @   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 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   m/var/www/html/stable-diffusion-webui/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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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   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)tmZ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%   Zjoined_key2Zjoined_bothr   r   r   test_left_outer_joinF   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r3   r6   r5   r   r7   r9   r   r   r   test_right_outer_joinM   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<   r5   r   r7   r9   r   r   r   test_full_outer_joinT   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<   r5   r   r7   r9   r   r   r   test_inner_join[   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)r3   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   rB   )left_onright_onrC   rD   zkey2.barrE   rF   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 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,   r2   r*   r(   F)Zcheck_namesr+   r)   keyarN   brO   cr$   r   r   r   rN   rO   rP   r&   )r   r   r   r   r   rL   r$   r   r      oner'   columnsfoobartwothreerP   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)joinr-   assert_series_equalr   assert_frame_equalr   isnanpytestraisesKeyErrorcopy
ValueError)r    r1   r/   r0   mergedr!   r%   rG   expectedZdf_aZdf_bZdf_cZsource_copymsgr   r   r   test_join_ons   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ddd}d	}tj	t
|d
  t||ddd W d    n1 s0    Y  d S )Nr   mfrT   sizerN   rO   r"   r&   Flen\(left_on\) must equal the number of levels in the index of "right"r\   rN   TrI   right_indexr   r   r   r   choicer   r-   ZmakeCustomIndexrc   rd   rg   r	   r    r!   r%   rj   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    n1 s0    Y  d S )Nr   rl   rm   rT   rn   rp   r&   r"   zFlen\(right_on\) must equal the number of levels in the index of "left"r\   rO   T)rJ   
left_indexrt   rv   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    n1 s0    Y  d S )Nr   rl   rm   rT   rn   rp   r"   r&   z)len\(right_on\) must equal len\(left_on\)r\   rN   rO   )rJ   rI   rt   rv   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 )NrN   r   z.Can only merge Series or DataFrame objects, a z was passedr\   )rI   rJ   )r   typerc   rd   	TypeErrorr	   )r    r{   r!   rj   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,   r2   )r_   popr-   ra   )r    r1   r/   r0   ri   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,   r2   r@   r<   r   )r_   reindexisnaallr-   assert_index_equalrW   r   )r    r1   r/   r0   rh   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 )NrL   )rN   rN   drO   rO   rP   r$   r   r   rN   rO   r&   r@   r<   r2   F)Zcheck_dtype)r   r_   notnar-   r`   r   r'   r    r!   r%   rG   ri   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 )NrL   rM   r$   rQ   rR   r&   r2   r   r_   r-   ra   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,   r2   r_   r-   ra   )r    r1   r/   r0   r   ri   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 )	NrN   r   r   rO   r'   namer2   rp   r&   )r   r   r_   r'   r-   ra   )r    r!   Zdsr   ri   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boolrX   string      r   int      ?floatr5   )r   r   aranger_   _join_by_handr-   ra   )r    	join_typedf1r%   rG   ri   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   rX   Tr(   Br,   r)   r"   rV   r   r)   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   dtypeint64Zbool_r_   rW   r   r-   ra   )r    r   r%   rG   Zexpected_columnsri   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 )NrT   r   r(   rV   r>   r5   )r   r_   )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   rN   rO   rW   r   rP   )r   r   q)r   r   r   r   r   r   r_   )r    rN   rP   r   r   r   r   test_join_unconsolidatedP  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)rN   rN   rN   rO   rO   rO   )r   r   rT   r   r   rT   firstsecondnames)rO   rO   rO   rP   rP   rP   r      zvar X)r.   r'   rW   zvar Yr   )levelr>   r5   r   )r   Zfrom_arraysr   r   r   r   r   
sort_indexr_   r   valuesunionr   r   r'   r-   ra   )r    Zindex1index2r   r%   rG   Zex_indexri   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sJ t	
|| d S )N)
rY   rY   rY   rX   rX   bazr   quxr   Zsnap)
rZ   rU   r[   rU   rZ   rU   rZ   rZ   r[   rU   r   )r   r   r.   )r"   rT   )Zj_oneZj_twoZj_threerV   r   r   r@   r<   r   r   F)rI   rJ   r6   sortT)rJ   rx   r6   r   r   Zaxis)r   r   r   r   r   r   r_   r	   reset_indexr-   ra   Zreindex_likeZdropr'   Zis_monotonic_increasing)
r    Z%lexsorted_two_level_string_multiindexr   r   r.   r'   Zto_joinrG   ri   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   rT   )r#   r   r   rR   r   rN   rO   meansum)   r"   r   rN   rO   r   T)Zinplacez-Not allowed to merge between different levelsr\   rx   rs   )
r   groupbyZagg	set_indexrc   rd   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   rN   rO   rW   r   )r"   r   rP   float64float32r   r   d   r   rR   Zmdr   Trr   )r   r   r   r   r   r   r   r_   Zdtypesintegersastyper	   r-   ra   )
r    rN   rO   rG   rP   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"      rR   r   r      r       )rN   rO   erN   rO   r>   r5   r<   r   )r   r   r   )r"   r   r   )r   r   r   )r   r   i,  )r   r   i  r@   )rX   rY   rX   rY   rX   rY   rX   rX   )rU   rU   rZ   r[   rZ   rZ   rU   r[   r
   r   TESTr   r4   r;   )r   r   r_   r	   r   rW   rN   r   rO   r-   ra   locr   r   r   r   r   repeatr   )r    r   r%   df3Zidf1Zidf2Zidf3r   Zdf_partially_mergedri   r!   r   r@   r>   r4   r;   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)rX   rY   r   rX   r   r   rT   r#   rS   value2rR   )rY   r   rX   r&   rL   T)r3   r   )rY   r   rX   rX   )r   rT   r   r#   )rN   rO   rP   rP   )rL   r$   r   )r   r   r   rT   Fr#   )exact)r   r_   r-   ra   r   r'   r   r   )r    r4   r;   rG   ri   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 )NrN   r   )r   r   rT   rN   r&   rO   )r   r   r   r
   )r   rT   rT   r#   )r   r   rT   rT   r#   r   r   r   rp   )r   r   rT   rT   rN   )r   r   r   rN   )r   r_   r   nanr-   ra   )r    r   r%   r   ri   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pnumrV   r@   Z_df2)r6   r   r   r   r   Zpnum_df2rW   r'   )r   Zperiod_ranger   r   r   r   r   r_   r   r   r   r   r   reshaper   r'   r-   ra   )r    r'   r!   r%   r   ri   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 sz0    Y  |jdd}| }|j|dd d S )Nr   )r   r   )rN   rO   rP   r   r   rm   r   r   idr   dtrX   z-agg function failed [how->mean,dtype->object]r\   T)Znumeric_only_rightr   )r   r   r   r   r   insertr   reescaperc   rd   r~   r   countr_   )r    r!   Zgroupedrj   mnZ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    n1 sh0    Y  d S )Nr   )r"   r   Zabcdefr   rN   rO   rP   r   r   rm   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	reindexedri   r   r   r   _check_diff_index{  s    z2TestJoin.test_join_many.<locals>._check_diff_indexr>   r5   r@   r
   z?Joining multiple DataFrames only supported for joining on indexr\   r2   )r   r   r   r   r   r   r_   r-   ra   r'   rc   rd   rg   )r    r!   r   rG   r   rj   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   rX   rY   r#   rL   r(   r   r,   r)   )	r   r   r   r   r   r   r_   r-   ra   )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   rn   r(   r,   r   r   Z_2r   )r#   r   r   yTr   r>   )rx   rs   r6   z0Passing 'suffixes' which cause duplicate columnsr\   )r   r   r   r   r   r   r   r   r_   rW   r-   ra   r	   rc   rd   r   r   r   )	r    r!   ri   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 )Nabcxyr   r   )r  r  numr   Zv1   r&   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   r<   rq   r\   )r   Zfrom_productr   r   r   r_   r   r	   r   r-   ra   rc   rd   rg   )	r    r   Z	leftindexr4   Z
rightindexr;   r   ri   rj   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   tzZabcde)datevalsz
2018-01-03Ztuvwx)r  vals_2r  r2   r   Ztuvr   r  )r   r   Z
date_ranger   r_   r   rf   r   r   r   objectr-   ra   )r    r   r%   r   ri   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"   )r  Jr   )
2013-04-06r  r   )r  r     )r   r  rN   r   r   )r  r  r   )r  r  r   )r   r  r  r   r#   r   r  r2   z2012-08-02 00:00:00r  r   r   z2013-04-06 00:00:00r  r   )r   r  r  rN   rV   )r   r   to_datetimer_   r   r   r-   ra   )r    ZdfaZdfbr   ri   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 )NrN   rO   
categoriesc1r&   c2)r  r  )r   ZCategoricalIndexreversedr   r_   r-   ra   )r    ixZid1Zid2r   r%   r   ri   r   r   r    test_join_with_categorical_index  s    
z)TestJoin.test_join_with_categorical_index)1__name__
__module____qualname__rc   Zfixturer!   r%   r1   r:   r=   r?   rA   rH   rK   rk   rw   ry   rz   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   r4   _x_yc                 C   sJ  |D ]}||    sJ q| |}||}	|t|dkrF|n|d 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y8 } z6|dv rtd|
 d|t	||j| W Y d }~qPd }~0 0 t
|| qPd S )Nr   r   )r4   r@   zkey z! should not have been in the join)r;   r@   )r   r   r   r   _restrict_to_columnsrW   Z	get_groupre   AssertionError_assert_all_na_assert_same_contents)r4   r;   r   r   r6   r   r   rP   Zleft_groupedZright_groupedZ	group_keygroupZl_joinedZr_joinedZlgrouperrZrgroupr   r   r   r8   (  s>    


$


$r8   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   rP   rW   suffixr   r   r   P  s   z(_restrict_to_columns.<locals>.<listcomp>c                    s   |   dS )Nr/  r0  )r   )r3  r   r   <lambda>X  r   z&_restrict_to_columns.<locals>.<lambda>r   )rW   r   rename)r-  rW   r3  foundr   r2  r   r)  O  s    r)  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>f  r   z(_assert_same_contents.<locals>.<setcomp>c                 3   s   | ]}t | v V  qd S Nr7  r9  rowsr   r   	<genexpr>h  r   z(_assert_same_contents.<locals>.<genexpr>)ZfillnaZdrop_duplicatesr   r   r   )
join_chunkr0   ZNA_SENTINELZjvaluesZsvaluesr   r=  r   r,  `  s    r,  c                 C   s,   |D ]"}||v rq| |    sJ qd S r<  )r   r   )r@  Zsource_columnsr   rP   r   r   r   r+  k  s    r+  c           	      C   sZ   | j j|j |d}| |}||}| j|j}| D ]\}}|||< q<|j|dS )Nr5   r   )r'   r_   r   rW   appenditems)	rN   rO   r6   Z
join_indexZa_reZb_reZ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   r.   r'   rm   r   )r   rT   )rO   rP   r@   r5   )r   rm   )r   r   r#   rT   )rO   rN   r   rP   r&   r   r   from_tuplesr_   r-   ra   )r4   r;   r   ri   r   r   r   .test_join_inner_multiindex_deterministic_order  s    rF  )	input_coloutput_colsrO   rN   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 )NrN   r   rT   r#   crossr'  r(  )r6   r   r   r   )r   r   rT   rT   )rT   r#   rT   r#   r   )rG  rH  r4   r;   r   ri   r   r   r   test_join_cross  s
     rK  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 )NrP   rT   )r   r   rp   r   rC  r   r#   )r   )rO   r5   )rP   r   )r   r   rO   rN   r&   rD  )r   r4   r;   r   ri   r   r   r   test_join_multiindex_one_level  s    rL  zcategories, valuesYX)rM  rN  rN  r   r   )r   r   r         @      ?)rO  rP  rP  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   )rT   r#   r   _leftr   r   rT   r#   )r   r   Z
value_leftZvalue_rightr   r   r   r_   r-   ra   )r  r   r4   r;   r   ri   r   r   r   1test_join_multiindex_not_alphabetical_categorical  s6    


rS  zleft_empty, how, exp)
)Fr4   r4   )Fr;   empty)Fr@   rT  )Fr>   r4   )FrJ  rT  )Tr4   rT  )Tr;   r;   )Tr@   rT  )Tr>   r;   )TrJ  rT  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 )Nr   r   rT   r#   )r(   r   r   r   r(   r   )r(   r,   r   r5   r4   )r(   r   r,   r;   )r   r(   r,   rT  r   r,   r   rJ  )	r   r   headr_   r   r   Zrename_axisr-   ra   )Z
left_emptyr6   expr4   r;   r   ri   r   r   r   test_join_empty  s"     
 
rW  zhow, valuesr@   rQ   r>   r;   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 )	NrQ   rR   rN   rO   rX  r   )rN   rO   rP   r   r5   rR  )r6   r   r   r%   ri   r   r   r   r   3test_join_multiindex_categorical_output_index_dtype  s6    



	rY  )r
   r   )r4   r'  r(  )r4   ) r   numpyr   rc   Zpandasr   r   r   r   r   r   r   r   r	   Zpandas._testingZ_testingr-   r   r   r8   r)  r,  r+  r   rF  r$  r%  rK  rL  rS  rW  rY  r   r   r   r   <module>   sb   (

      
'

	





	