o
    Ti                     @   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npZasarraytilelenrandomdefault_rngshuffle)ngroupsnZunique_groupsZarr r   d/var/www/html/evchargy.com/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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   L   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      zTestJoin.test_right_outer_joinc                 C   r;   )Nr   outerr=   r5   r   r7   r9   r   r   r   test_full_outer_joinT   r?   zTestJoin.test_full_outer_joinc                 C   r;   )Nr   innerr=   r5   r   r7   r9   r   r   r   test_inner_join[   r?   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   rD   )left_onright_onrE   rF   zkey2.barrG   rH   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 )Nr,   r2   r*   r(   F)Zcheck_namesr+   r)   keyarP   brQ   cr$   r   r   r   rP   rQ   rR   r&   )r   r   r   r   r   rN   r$   r   r      oner'   columnsfoobartwothreerR   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%   rI   expectedZdf_aZdf_bZdf_cZ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frV   sizerP   rQ   r"   r&   Flen\(left_on\) must equal the number of levels in the index of "right"r^   rP   TrK   right_indexr   r   r   r   choicer   r-   ZmakeCustomIndexre   rf   ri   r	   r    r!   r%   rl   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   rn   ro   rV   rp   rr   r&   r"   zFlen\(right_on\) must equal the number of levels in the index of "left"r^   rQ   T)rL   
left_indexrv   rx   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   rn   ro   rV   rp   rr   r"   r&   z)len\(right_on\) must equal len\(left_on\)r^   rP   rQ   )rL   rK   rv   rx   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 )NrP   r   z.Can only merge Series or DataFrame objects, a z was passedr^   )rK   rL   )r   typere   rf   	TypeErrorr	   )r    r}   r!   rl   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   )ra   popr-   rc   )r    r1   r/   r0   rk   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 )Nr,   r2   rB   r=   r   )ra   reindexisnaallr-   assert_index_equalrY   r   )r    r1   r/   r0   rj   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 )NrN   )rP   rP   drQ   rQ   rR   r$   r   r   rP   rQ   r&   rB   r=   r2   F)Zcheck_dtype)r   ra   notnar-   rb   r   r'   r    r!   r%   rI   rk   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 )NrN   rO   r$   rS   rT   r&   r2   r   ra   r-   rc   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   ra   r-   rc   )r    r1   r/   r0   r   rk   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 )	NrP   r   r   rQ   r'   namer2   rr   r&   )r   r   ra   r'   r-   rc   )r    r!   Zdsr   rk   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boolrZ   string      r   int      ?floatr5   )r   r   arangera   _join_by_handr-   rc   )r    	join_typedf1r%   rI   rk   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   rZ   Tr(   Br,   r)   r"   rX   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_ra   rY   r   r-   rc   )r    r   r%   rI   Zexpected_columnsrk   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 )NrV   r   r(   rX   r@   r5   )r   ra   )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   rP   rQ   rY   r   rR   )r   r   q)r   r   r   r   r   r   ra   )r    rP   rR   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)rP   rP   rP   rQ   rQ   rQ   )r   r   rV   r   r   rV   firstsecondnames)rQ   rQ   rQ   rR   rR   rR   r      zvar X)r.   r'   rY   zvar Yr   )levelr@   r5   r   )r   Zfrom_arraysr   r   r   r   r   
sort_indexra   r   valuesunionr   r   r'   r-   rc   )r    Zindex1index2r   r%   rI   Zex_indexrk   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)
r[   r[   r[   rZ   rZ   bazr   quxr   Zsnap)
r\   rW   r]   rW   r\   rW   r\   r\   r]   rW   r   )r   r   r.   )r"   rV   )Zj_oneZj_twoZj_threerX   r   r   rB   r=   r   r   F)rK   rL   r6   sortT)rL   rz   r6   r   r   Zaxis)r   r   r   r   r   r   ra   r	   reset_indexr-   rc   Zreindex_likeZdropr'   Zis_monotonic_increasing)
r    Z%lexsorted_two_level_string_multiindexr   r   r.   r'   Zto_joinrI   rk   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    d S 1 sEw   Y  d S )N)r   r   rV   )r#   r   r   rT   r   rP   rQ   meansum)   r"   r   rP   rQ   r   T)Zinplacez-Not allowed to merge between different levelsr^   rz   ru   )
r   groupbyZagg	set_indexre   rf   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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   rP   rQ   rY   r   )r"   r   rR   float64float32r   r   d   r   rT   mdr   Trt   )r   r   r   r   r   r   r   ra   Zdtypesintegersastyper	   r-   rc   )
r    rP   rQ   rI   rR   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"      rT   r   r      r       )rP   rQ   erP   rQ   r@   r5   r=   r   )r   r   r   )r"   r   r   )r   r   r   )r   r   i,  )r   r   i  rB   )rZ   r[   rZ   r[   rZ   r[   rZ   rZ   )rW   rW   r\   r]   r\   r\   rW   r]   r
   r   TESTr   r4   r<   )r   r   ra   r	   r   rY   rP   r   rQ   r-   rc   locr   r   r   r   r   repeatr   )r    r   r%   df3Zidf1Zidf2Zidf3r   Zdf_partially_mergedrk   r!   r   rB   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)rZ   r[   r   rZ   r   r   rV   r#   rU   value2rT   )r[   r   rZ   r&   rN   T)r3   r   )r[   r   rZ   rZ   )r   rV   r   r#   )rP   rQ   rR   rR   )rN   r$   r   )r   r   r   rV   Fr#   )exact)r   ra   r-   rc   r   r'   r   r   )r    r4   r<   rI   rk   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 )NrP   r   )r   r   rV   rP   r&   rQ   )r   r   r   r
   )r   rV   rV   r#   )r   r   rV   rV   r#   r   r   r   rr   )r   r   rV   rV   rP   )r   r   r   rP   )r   ra   r   nanr-   rc   )r    r   r%   r   rk   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pnumrX   rB   Z_df2)r6   r   r   r   r   Zpnum_df2rY   r'   )r   Zperiod_ranger   r   r   r   r   ra   r   r   r   r   r   reshaper   r'   r-   rc   )r    r'   r!   r%   r   rk   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   )rP   rQ   rR   r   r   ro   r   r   idr   dtrZ   z-agg function failed [how->mean,dtype->object]r^   T)Znumeric_only_rightr   )r   r   r   r   r   insertr   reescapere   rf   r   r   countra   )r    r!   groupedrl   Z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    d S 1 sw   Y  d S )Nr   )r"   r   Zabcdefr   rP   rQ   rR   r   r   ro   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   Z	reindexedrk   r   r   r   _check_diff_index{  s   z2TestJoin.test_join_many.<locals>._check_diff_indexr@   r5   rB   r
   z?Joining multiple DataFrames only supported for joining on indexr^   r2   )r   r   r   r   r   r   ra   r-   rc   r'   re   rf   ri   )r    r!   r   rI   r  rl   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   rZ   r[   r#   rN   r(   r   r,   r)   )	r   r   r   r   r   r   ra   r-   rc   )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   rp   r(   r,   r   r   Z_2r   )r#   r   r   yTr   r@   )rz   ru   r6   z0Passing 'suffixes' which cause duplicate columnsr^   )r   r   r   r   r   r   r   r   ra   rY   r-   rc   r	   re   rf   r   r   r   )	r    r!   rk   r   wr   r  zZ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   )r  r	  numr   Zv1   r&   Zv2c                 S   s   g | ]}d | qS )r   r   )r   ir   r   r   r         z5TestJoin.test_join_multi_to_multi.<locals>.<listcomp>r   r=   rs   r^   )r   Zfrom_productr   r   r   ra   r   r	   r   r-   rc   re   rf   ri   )	r    r   Z	leftindexr4   Z
rightindexr<   r   rk   rl   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   ra   r   rh   r   r   r   objectr-   rc   )r    r   r%   r   rk   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  rP   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  rP   rX   )r   r   to_datetimera   r   r   r-   rc   )r    ZdfaZdfbr   rk   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 )NrP   rQ   
categoriesc1r&   c2)r  r   )r   ZCategoricalIndexreversedr   ra   r-   rc   )r    ZixZid1Zid2r   r%   r   rk   r   r   r    test_join_with_categorical_index  s   
z)TestJoin.test_join_with_categorical_index)1__name__
__module____qualname__re   Zfixturer!   r%   r1   r:   r>   rA   rC   rJ   rM   rm   ry   r{   r|   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      sZ    

	
&
	
 +>!6-r   r4   _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   )r4   rB   zkey z! should not have been in the join)r<   rB   )r   r   r   r   _restrict_to_columnsrY   Z	get_grouprg   AssertionError_assert_all_na_assert_same_contents)r4   r<   r   r   r6   r   r   rR   Zleft_groupedZright_groupedZ	group_keygroupZl_joinedZr_joinedZlgrouperrZrgroupr   r   r   r8   (  sH   




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   rR   rY   suffixr   r   r   P  s    "z(_restrict_to_columns.<locals>.<listcomp>c                    s   |   dS )Nr1  r2  )r   )r5  r   r   <lambda>X  s    z&_restrict_to_columns.<locals>.<lambda>r   )rY   r   rename)r/  rY   r5  foundr   r4  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  r  z(_assert_same_contents.<locals>.<setcomp>c                 3   s    | ]	}t | v V  qd S Nr9  r;  rowsr   r   	<genexpr>h  s    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   )rB  Zsource_columnsr   rR   r   r   r   r-  k  s
   r-  c           	      C   sZ   | j j|j |d}| |}||}| j|j}| D ]\}}|||< q|j|dS )Nr5   r   )r'   ra   r   rY   appenditems)	rP   rQ   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'   ro   r   )r   rV   )rQ   rR   rB   r5   )r   ro   )r   r   r#   rV   )rQ   rP   r   rR   r&   r   r   from_tuplesra   r-   rc   )r4   r<   r   rk   r   r   r   .test_join_inner_multiindex_deterministic_order  s   rH  )	input_coloutput_colsrQ   rP   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 )NrP   r   rV   r#   crossr)  r*  )r6   r   r   r   )r   r   rV   rV   )rV   r#   rV   r#   r   )rI  rJ  r4   r<   r   rk   r   r   r   test_join_cross  s
    rM  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 )NrR   rV   )r   r   rr   r   rE  r   r#   )r   )rQ   r5   )rR   r   )r   r   rQ   rP   r&   rF  )r   r4   r<   r   rk   r   r   r   test_join_multiindex_one_level  s   rN  zcategories, valuesYX)rO  rP  rP  r   r   )r   r   r         @      ?)rQ  rR  rR  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   )rV   r#   r   _leftr   r   rV   r#   )r   r   Z
value_leftZvalue_rightr   r   r   ra   r-   rc   )r  r   r4   r<   r   rk   r   r   r   1test_join_multiindex_not_alphabetical_categorical  s6   





rU  zleft_empty, how, exp)
)Fr4   r4   )Fr<   empty)FrB   rV  )Fr@   r4   )FrL  rV  )Tr4   rV  )Tr<   r<   )TrB   rV  )Tr@   r<   )TrL  rV  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   rV   r#   )r(   r   r   r   r(   r   )r(   r,   r   r5   r4   )r(   r   r,   r<   )r   r(   r,   rV  r   r,   r   rL  )	r   r   headra   r   r   Zrename_axisr-   rc   )Z
left_emptyr6   expr4   r<   r   rk   r   r   r   test_join_empty  s"    
 
rY  zhow, valuesrB   rS   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 )	NrS   rT   rP   rQ   rZ  r   )rP   rQ   rR   r   r5   rT  )r6   r   r   r%   rk   r   r   r   r   3test_join_multiindex_categorical_output_index_dtype  s6   






	r[  )r
   r   )r4   r)  r*  )r4   ) r   numpyr   re   Zpandasr   r   r   r   r   r   r   r   r	   Zpandas._testingZ_testingr-   r   r   r8   r+  r.  r-  r   rH  r&  r'  rM  rN  rU  rY  r[  r   r   r   r   <module>   sd    (

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