o
    %jؓ                     @   s  d dl Z d dlZd dlZd dlmZ d dlm  mZ	 d dl
Zd dl
mZmZmZmZmZmZmZmZmZmZ d dlmZ d>ddZG dd	 d	Zd?ddZdd Zdd Zdd Zd@ddZdd Z ej!"ddddgfdddgfgdd Z#d d! Z$ej!"d"d#d$gg d%fd&d'gg d(fd)d*gg d+fed,ed-ged,ed-ed-gfgd.d/ Z%ej!"d0g d1d2d3 Z&d4d5 Z'ej!"d6d7g d8fd9g d8fd
g d8fd:g d;fgd<d= Z(dS )A    N)using_string_dtype)
Categorical	DataFrameIndex
MultiIndexSeries	Timestampbdate_rangeconcatmergeoption_context   2   c                 C   sf   t t| }tt|||  }t||k r(tt ||d |t|   }tjd| |S )N   )	listrangenpZasarraytilelenrandomdefault_rngshuffle)ngroupsnZunique_groupsZarr r   e/var/www/html/Deteccion_Ine/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ejddejdeddgdd Zdd Zdd Zdd Zejd d!d"d#ed$d%ggd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Z d6d7 Z!ejj"e# d8d9d:d; Z$d<d= Z%d>d? Z&d@dA Z'dBdC Z(dDdE Z)dFdG Z*ejddejdeddgdHdI Z+dJdK Z,dLdM Z-dNdO Z.dPdQ Z/dRdS Z0dTdU Z1dVdW Z2dXdY Z3dZd[ Z4d\d] Z5d#S )^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   df26   s   
zTestJoin.df2c                 C   s`   g dg dg dt dddd}t|tg dtd	d
}t|d |d d|d d
}||fS )N)              ?g       @g      @g      @)r)   r*   r)   r*   r)   )Zfoo1Zfoo2Zfoo3Zfoo4Zfoo5z1/1/2009   )periodsABCD)abcdedtypeindexr.   r1   )MergedAMergedDr0   )r	   r   r   object)r#   datatargetsourcer   r   r   target_source@   s   
zTestJoin.target_sourcec                 C   sF   t ||dd}t|||dgdd t ||}t|||ddgdd d S )Nr   onlefthowr   r   _check_joinr#   r$   r(   Zjoined_key2Zjoined_bothr   r   r   test_left_outer_joinQ   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rC   rF   rE   r   rG   rI   r   r   r   test_right_outer_joinX      zTestJoin.test_right_outer_joinc                 C   rK   )Nr   outerrM   rE   r   rG   rI   r   r   r   test_full_outer_join_   rO   zTestJoin.test_full_outer_joinc                 C   rK   )Nr   innerrM   rE   r   rG   rI   r   r   r   test_inner_joinf   rO   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)rC   suffixeskey1.foozkey1.barr   r#   r$   r(   joinedr   r   r   test_handle_overlapm   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   rT   )left_onright_onrU   rV   zkey2.barrW   rX   r   r   r   !test_handle_overlap_arbitrary_keys   s   z*TestJoin.test_handle_overlap_arbitrary_keyinfer_stringFTZpyarrow)Zmarksc                 C   s  |\}}|j |dd}tj|d |d dd tj|d |d dd td	g d
i}tdg dig dd}|j |d	d}tg d
g dd}	t||	 tdgdgdggg ddgd}
tdgdggddgdgd}tdgdggddgdgd}|
j |dd}|j |dd}t|d d sJ t|d d sJ tjt	dd |j |dd W d    n1 sw   Y  |
 }d}tjt|d |j |dd W d    d S 1 sw   Y  d S )Nr0   rB   r;   r.   F)Zcheck_namesr<   r1   keyr2   r2   r3   r3   r4   r'   r   r    r   r2   r3   r4   r9   )r   r   r    r    r   r_   r'   r    r      oner:   columnsfoobartwothreer4   z^'E'$matchEzvYou are trying to merge on float64 and object|str columns for key 'A'. If you wish to proceed you should use pd.concat)jointmassert_series_equalr   assert_frame_equalr   isnanpytestraisesKeyErrorcopy
ValueError)r#   rA   r^   r?   r@   mergedr$   r(   rY   expectedZdf_aZdf_bZdf_cZsource_copymsgr   r   r   test_join_on~   s6    "zTestJoin.test_join_onc                 C   s   t tjdjddgddtjddd}t tjdjddgddtjdddttdd	d
ggd}d}t	j
t|d t||ddd W d    d S 1 sZw   Y  d S )Nr   mfrd   sizer2   r3   r%   r+   r.   r/   r9   Flen\(left_on\) must equal the number of levels in the index of "right"rl   r2   Tr[   right_indexr   r   r   r   choicer"   r   from_productr   rt   ru   rx   r   r#   r$   r(   r{   r   r   r   -test_join_on_fails_with_different_right_index   s   "z6TestJoin.test_join_on_fails_with_different_right_indexc                 C   s   t tjdjddgddtjdddttdt	dgd}t tjdjddgd	dtjdd	d}d
}t
jt|d t||ddd W d    d S 1 sZw   Y  d S )Nr   r}   r~   rd   r   r   abcr9   r%   zFlen\(right_on\) must equal the number of levels in the index of "left"rl   r3   T)r\   
left_index)r   r   r   r   r   r"   r   from_arraysr   r   rt   ru   rx   r   r   r   r   r   ,test_join_on_fails_with_different_left_index   s   "z5TestJoin.test_join_on_fails_with_different_left_indexc                 C   s   t tjdjddgddtjddd}t tjdjddgddtjdddttdd	d
ggd}d}t	j
t|d t||dddgd W d    d S 1 s\w   Y  d S )Nr   r}   r~   rd   r   r   r%   r+   r.   r/   r9   z)len\(right_on\) must equal len\(left_on\)rl   r2   r3   )r\   r[   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 )Nr2   r    z.Can only merge Series or DataFrame objects, a z was passedrl   )r[   r\   )r   typert   ru   	TypeErrorr   )r#   r   r$   r{   r   r   r   )test_join_on_fails_with_wrong_object_type   s   "z2TestJoin.test_join_on_fails_with_wrong_object_typec                 C   sZ   |\}}|j |dd}|jddid}|g d }|d}|j ||d}t|| d S )Nr0   rB   key_0rg   )r   r.   r/   r1   r;   r<   )ro   renamepoprp   rr   )r#   rA   r?   r@   rz   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 )Nr0   rB   rR   rM   r   )ro   reindexisnaallrp   assert_index_equalrg   r   )r#   rA   r?   r@   ry   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 )Nr_   )r2   r2   r5   r3   r3   r4   r'   r   r    r2   r3   r9   rR   rM   rB   F)Zcheck_dtype)r   ro   notnarp   rq   r   r:   r#   r$   r(   rY   rz   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 )Nr_   r`   r'   ra   rb   r9   rB   r   ro   rp   rr   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;   r0   rB   ro   rp   rr   )r#   rA   r?   r@   r   rz   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 )	Nr2   r    r   r3   r:   namerB   r   r9   )r   r   ro   r:   rp   rr   )r#   r$   Zdsr   rz   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%   r9   Tboolrh   stringr+      r    intr*   floatrE   )r   r   arangero   _join_by_handrp   rr   )r#   	join_typedf1r(   rY   rz   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   rh   Tr-   r%   rf   r/   r1   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   r8   int64Zbool_ro   rg   r   rp   rr   )r#   r   r(   rY   Zexpected_columnsrz   r   r   r   test_join_index_mixed_overlap:  s$   

z&TestJoin.test_join_index_mixed_overlapzTODO(infer_string))reasonc                 C   s(   t  }|jt dgdgdgddd d S )Nrd   r   r.   rf   rP   rE   )r   ro   )r#   xr   r   r   test_join_empty_bug[  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   r2   r3   r   r   r4   )r   r    q)r   r   r   r   r"   r   ro   )r#   r2   r4   r5   r   r   r   test_join_unconsolidateda  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)r2   r2   r2   r3   r3   r3   )r    r   rd   r    r   rd   firstsecondnames)r3   r3   r3   r4   r4   r4   r      zvar X)r>   r:   rg   zvar Yr   )levelrP   rE   r    )r   r   r   r   r   r   r"   
sort_indexro   r   valuesunionr   r   r:   rp   rr   )r#   Zindex1index2r   r(   rY   Zex_indexrz   r   r   r   test_join_multiindexn  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)
ri   ri   ri   rh   rh   bazr   quxr   Zsnap)
rj   re   rk   re   rj   re   rj   rj   rk   re   r   )r   r   r>   )r%   rd   )Zj_oneZj_twoZj_threerf   r   r   rR   rM   r   r   F)r[   r\   rF   sortT)r\   r   rF   r   r    Zaxis)r   r   r   r"   r   r   ro   r   reset_indexrp   rr   Zreindex_likeZdropr:   Zis_monotonic_increasing)
r#   Z%lexsorted_two_level_string_multiindexr   r   r>   r:   Zto_joinrY   rz   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   rd   )r&   r+   r   rb   r   r2   r3   meansum)   r%   r   r2   r3   r5   T)Zinplacez-Not allowed to merge between different levelsrl   r   r   )
r   groupbyZagg	set_indexrt   ru   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   r2   r3   rg   r8   )r%   r    r4   float64float32r   r+   d   r   rb   mdr   Tr   )r   r   r   r   r"   r   r   ro   Zdtypesintegersastyper   rp   rr   )
r#   r2   r3   rY   r4   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%      rb   r   r      r       )r2   r3   r6   r2   r3   rP   rE   rM   r   )r    r    r    )r%   r   r   )r    r    r   )r   r   i,  )r   r   i  rR   )rh   ri   rh   ri   rh   ri   rh   rh   )re   re   rj   rk   rj   rj   re   rk   r   r-   TESTr   rD   rL   )r   r   ro   r   r   rg   r2   r   r3   rp   rr   locr   r   r   r"   r   repeatr   )r#   r   r(   df3Zidf1Zidf2Zidf3r   Zdf_partially_mergedrz   r$   r   rR   rP   rD   rL   r   r   r   test_join_many_non_unique_index  sT   
"z(TestJoin.test_join_many_non_unique_indexc                 C   s   t d|U tg dg dd}tdg dig dd}|j|d	d
d}tg dg dg ddg dd}t|| |j|d	dd}tj|jttdd
d W d    d S 1 s]w   Y  d S )Nzfuture.infer_string)rh   ri   r   rh   r    r   rd   r&   rc   value2rb   )ri   r   rh   r9   r_   T)rC   r   )ri   r   rh   rh   )r   rd   r    r&   )r2   r3   r4   r4   )r_   r'   r   )r    r   r   rd   Fr&   )exact)	r   r   ro   rp   rr   r   r:   r   r   )r#   r^   rD   rL   rY   rz   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 )Nr2   r   )r    r   rd   r2   r9   r3   )r+   r   r   r   )r    rd   rd   r&   )r    r   rd   rd   r&   r+   r   r   r   )r    r   rd   rd   r2   )r    r   r   r2   )r   ro   r   nanrp   rr   )r#   r   r(   r   rz   r   Zdf4r   r   r    test_join_mixed_non_unique_indexT  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)r,   freqZpnumrf   rR   Z_df2)rF   r   r7   r   r    Zpnum_df2rg   r:   )r   Zperiod_ranger   r   r   r   r
   ro   r   r   r   r   r   reshaper   r:   rp   rr   )r#   r:   r$   r(   r   rz   r   r   r   !test_join_non_unique_period_indexg  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
}|r+d}t	j
t|d |  W d    n1 sAw   Y  |jdd}| }|j|dd d S )Nr   )r   r   )r2   r3   r4   r5   r6   r~   r   r   idr+   dtrh   z&agg function failed [how->mean,dtype->z-dtype 'str' does not support operation 'mean'rl   T)Znumeric_only_rightr   )r   r   r   r   r"   insertr   reescapert   ru   r   r   countro   )r#   Zusing_infer_stringr$   groupedr{   ZmnZcnr   r   r    test_mixed_type_join_with_suffixt  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   r2   r3   r4   r5   r6   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
  Z	reindexedrz   r   r	  r   _check_diff_index  s   z2TestJoin.test_join_many.<locals>._check_diff_indexrP   rE   rR   r   z?Joining multiple DataFrames only supported for joining on indexrl   rB   )r   r   r   r   r"   r   ro   rp   rr   r:   rt   ru   rx   )r#   r$   r  rY   r  r{   r   r   r   test_join_many  s$   ":"zTestJoin.test_join_manyc                 C   s   t tjddg dd}ddgd |d< |jd d d	d
gf }|jd d ddgf }|jd d dgf }|||g}t|| d S )Nr   )r   r&   r-   r   rh   ri   r&   r_   r.   r/   r0   r1   )	r   r   r   r   r"   r   ro   rp   rr   )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.   r0   r    r   Z_2r   )r&   r   r   yTr   rP   )r   r   rF   z0Passing 'suffixes' which cause duplicate columnsrl   )r
   r   r   r   r   r"   r   r   ro   rg   rp   rr   r   rt   ru   r   r   r   )	r#   r$   rz   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 )Nr   xyr    r   )r   r  numr   Zv1   r9   Zv2c                 S   s   g | ]}d | qS )r   r   )r  ir   r   r   r        z5TestJoin.test_join_multi_to_multi.<locals>.<listcomp>r   rM   r   rl   )r   r   r   r   r   ro   r   r   r   rp   rr   rt   ru   rx   )	r#   r   Z	leftindexrD   Z
rightindexrL   r   rz   r{   r   r   r   test_join_multi_to_multi  s,    
"z!TestJoin.test_join_multi_to_multic                 C   s   t tjddddtdd}t tjddddtdd	}|j|d
d
d}| }ttj	gd td |d< t
|| d S )Nz
2018-01-01r+   zAmerica/Chicago)startr,   tzZabcde)datevalsz
2018-01-03Ztuvwx)r  vals_2r  rB   r   Ztuvr  )r   r   Z
date_ranger   ro   r   rw   r   r   r   rp   rr   )r#   r   r(   r   rz   r   r   r   #test_join_on_tz_aware_datetimeindex  s$   	z,TestJoin.test_join_on_tz_aware_datetimeindexc                 C   s   t g dg dg dg dgg dd}t|d d|d< t g d	g d
gg dddgd}t|d d|d< |j|ddgddgd}t tddddgtddddggddgg dd}|d d|d< t|| d S )N)
2012-08-02Lr%   )r   Jr   )
2013-04-06r!  r   )r#  r"     )r   r  r2   r   r   zM8[ns])r   r"  r    )r#  r!  r   )r   r  r  r   r&   r   r  rB   z2012-08-02 00:00:00r"  r    r   z2013-04-06 00:00:00r!  r   )r   r  r  r2   rf   )	r   r   to_datetimer   ro   r   r   rp   rr   )r#   ZdfaZdfbr   rz   r   r   r   test_join_datetime_string  s2   	z"TestJoin.test_join_datetime_stringc                 C   s   ddg}t j||d}t jt|t|d}td|i|d}tdt|i|d}||}tddgddgdt jddgddgdd}t|| d S )Nr2   r3   
categoriesc1r9   c2)r)  r*  )r   ZCategoricalIndexreversedr   ro   rp   rr   )r#   ZixZid1Zid2r   r(   r   rz   r   r   r    test_join_with_categorical_index2  s   
z)TestJoin.test_join_with_categorical_index)6__name__
__module____qualname__rt   Zfixturer$   r(   rA   rJ   rN   rQ   rS   rZ   r]   markparametrizeparamtdZ
skip_if_nor|   r   r   r   r   arrayr   r   r   r   r   r   r   r   r   Zxfailr   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r&  r,  r   r   r   r   r   %   sh    

	

&


!
+>!6
-r   rD   _x_yc                 C   s2  |D ]}||    sJ q| |}||}	||D ]x\}
}t|| j|}t||j|}z||
}W n& ty] } z|dv rLtd|
 d|t|| j| W Y d }~n
d }~ww t	|| z|	|
}W n& ty } z|dv rtd|
 d|t||j| W Y d }~qd }~ww t	|| qd S )N)rD   rR   zkey z! should not have been in the join)rL   rR   )
r   r   r   _restrict_to_columnsrg   Z	get_grouprv   AssertionError_assert_all_na_assert_same_contents)rD   rL   r   r   rF   r   r   r4   Zleft_groupedZright_groupedZ	group_keygroupZl_joinedZr_joinedZlgrouperrZrgroupr   r   r   rH   B  sD   




rH   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  r4   rg   suffixr   r   r  h  s    "z(_restrict_to_columns.<locals>.<listcomp>c                    s   |   dS )Nr=  r>  )r   )rA  r   r   <lambda>p  s    z&_restrict_to_columns.<locals>.<lambda>r   )rg   r   r   )r;  rg   rA  foundr   r@  r   r7  g  s   r7  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>~  r  z(_assert_same_contents.<locals>.<setcomp>c                 3   s    | ]	}t | v V  qd S NrD  rF  rowsr   r   	<genexpr>  s    z(_assert_same_contents.<locals>.<genexpr>)ZfillnaZdrop_duplicatesr   r   r   )
join_chunkr@   ZNA_SENTINELZjvaluesZsvaluesr   rJ  r   r:  x  s   r:  c                 C   s,   |D ]}||v r	q| |    sJ qd S rI  )r   r   )rM  Zsource_columnsr   r4   r   r   r   r9    s
   r9  c           	      C   sZ   | j j|j |d}| |}||}| j|j}| D ]\}}|||< q|j|dS )NrE   r   )r:   ro   r   rg   appenditems)	r2   r3   rF   Z
join_indexZa_reZb_reZresult_columnsr   r   r   r   r   r     s   


r   c                  C   sx   t dditjdgddd} t dditjd	gd
dd}| j|dd}t dgdgdtjdgddd}t|| d S )Nr6   r+   )r    r   r&   r   r   r>   r:   r~   r   )r   rd   )r3   r4   rR   rE   )r6   r~   )r    r   r&   rd   )r2   r3   r5   r4   r9   r   r   from_tuplesro   rp   rr   )rD   rL   r   rz   r   r   r   .test_join_inner_multiindex_deterministic_order  s   rS  )	input_coloutput_colsr3   r2   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 )Nr2   r    rd   r&   crossr5  r6  )rF   r   r   r   )r    r    rd   rd   )rd   r&   rd   r&   r   )rT  rU  rD   rL   r   rz   r   r   r   test_join_cross  s
    rX  c                 C   s   t dditjdgddd}t dditjd	gd
dd}|j|| d}| dkr;t dgdgdtjdgddgdd}nt dgdgdtjdgddgdd}t|| d S )Nr4   rd   )r    r   r   r   rP  r5   r&   )r   )r3   rE   rL   )r4   r5   )r   r    r3   r2   r9   rQ  )r   rD   rL   r   rz   r   r   r   test_join_multiindex_one_level  s   rY  zcategories, valuesYX)rZ  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.   r'  r    r   )r   r   r'   r   r   )r.   r.   r/   )rd   r&   r+   _leftr   r   rd   r&   )r   r   Z
value_leftZvalue_rightr   r   r   ro   rp   rr   )r(  r   rD   rL   r   rz   r   r   r   1test_join_multiindex_not_alphabetical_categorical  s6   





r`  zleft_empty, how, exp)
)FrD   rD   )FrL   empty)FrR   ra  )FrP   rD   )FrW  ra  )TrD   ra  )TrL   rL   )TrR   ra  )TrP   rL   )TrW  ra  c                 C   s  t ddgddgdddd}t dgd	gd
ddd}| r&|d}n|d}|j||d}|dkrLt ddgddgtjtjgd}|d}n+|dkrbt tjgdgd	gd}|d}n|dkrwt ddgdd}|dkrw|d}|dkr| }t	|| d S )Nr   r    rd   r&   )r.   r/   r   r7   r.   r+   )r.   r0   r   rE   rD   )r.   r/   r0   rL   )r/   r.   r0   ra  r/   r0   r   rW  rP   )
r   r   headro   r   r   Zrename_axisr   rp   rr   )Z
left_emptyrF   exprD   rL   r   rz   r   r   r   test_join_empty  s&    
 
rd  c                  C   s   t  } t dgd}t ddgd}| | }t dgd}t|| || }t g dd}t|| | | }t ddgd}t|| d S )Ntestr   rh   ri   r   )rf  rh   re  )r   rp   rr   )r   r(   r   r   rz   r   r   r   $test_join_empty_uncomparable_columns  s   rg  zhow, valuesrR   ra   rP   rL   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 )	Nra   rb   r2   r3   rh  r   )r2   r3   r4   r5   rE   r_  )rF   r   r   r(   rz   r   r   r   r   3test_join_multiindex_categorical_output_index_dtype.  s6   






	ri  )r   r   )rD   r5  r6  )rD   ))r  numpyr   rt   Zpandas._configr   Zpandas.util._test_decoratorsutilZ_test_decoratorsr3  Zpandasr   r   r   r   r   r   r   r	   r
   r   r   Zpandas._testingZ_testingrp   r   r   rH   r7  r:  r9  r   rS  r0  r1  rX  rY  r`  rd  rg  ri  r   r   r   r   <module>   sj    0
      
#%

	





	