a
    é´«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 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   úc/var/www/html/laksyashrimp/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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   sL   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   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   ÚouterrL   rE   r   rG   rI   r   r   r   Útest_full_outer_join_   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   ÚinnerrL   rE   r   rG   rI   r   r   r   Útest_inner_joinf   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)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   rR   )Úleft_onÚright_onrS   rT   zkey2.barrU   rV   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 ¡�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 �sÀ0    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(   rW   ÚexpectedZdf_aZdf_bZdf_cZsource_copyÚmsgr   r   r   Útest_join_on~   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 tdƒd	d
gg¡d�}d}t	j
t|d��  t||ddd� W d   ƒ n1 s²0    Y  d S )Nr   ÚmÚfrb   ©Úsize©r2   r3   r%   r+   r.   r/   r9   úFlen\(left_on\) must equal the number of levels in the index of "right"rj   r2   T©rY   Úright_index©r   r   r   r   Úchoicer"   r   Úfrom_productr   rr   rs   rv   r   ©r#   r$   r(   ry   r   r   r   Ú-test_join_on_fails_with_different_right_index§   s    þÿþûz6TestJoin.test_join_on_fails_with_different_right_indexc                 C   sÀ   t tj d¡jddgdd�tj d¡ d¡dœt 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   ƒ n1 s²0    Y  d S )Nr   r{   r|   rb   r}   r   Úabcr9   r%   zFlen\(right_on\) must equal the number of levels in the index of "left"rj   r3   T)rZ   Ú
left_index)r   r   r   r   r„   r"   r   Úfrom_arraysr   r   rr   rs   rv   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   ƒ n1 s¶0    Y  d S )Nr   r{   r|   rb   r}   r   r%   r+   r.   r/   r9   z)len\(right_on\) must equal len\(left_on\)rj   r2   r3   )rZ   rY   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 sT0    Y  tjt|d��  t||ddd� W d   ƒ n1 s’0    Y  d S )Nr2   r    z.Can only merge Series or DataFrame objects, a z was passedrj   )rY   rZ   )r   Útyperr   rs   Ú	TypeErrorr   )r#   r�   r$   ry   r   r   r   Ú)test_join_on_fails_with_wrong_object_typeÝ   s    ÿÿ.z2TestJoin.test_join_on_fails_with_wrong_object_typec                 C   sZ   |\}}|j |dd�}|jddid�}|g d¢ }| d¡}|j ||d�}t ||¡ d S )Nr0   rB   Úkey_0©re   )r’   r.   r/   r1   r;   r<   )rm   ÚrenameÚpoprn   rp   )r#   rA   r?   r@   rx   Ú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 )Nr0   rB   rP   rL   r   )rm   ÚreindexÚisnaÚallrn   Úassert_index_equalre   r   )r#   rA   r?   r@   rw   Ú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   rP   rL   rB   F)Zcheck_dtype)r   rm   Únotnarn   ro   rœ   r:   ©r#   r$   r(   rW   rx   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'   r_   r`   r9   rB   ©r   rm   rn   rp   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   ©rm   rn   rp   )r#   rA   r?   r@   r—   rx   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   rm   r:   rn   rp   )r#   r$   Zdsr—   rx   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Úboolrf   Ústringr+   é   r    Úintr*   ÚfloatrE   )r   r   Úarangerm   Ú_join_by_handrn   rp   )r#   Ú	join_typeÚdf1r(   rW   rx   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   rf   Tr-   r%   rd   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_rm   re   r¯   rn   rp   )r#   r±   r(   rW   Zexpected_columnsrx   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 )Nrb   r   r.   rd   rN   rE   )r   rm   )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   rm   )r#   r2   r4   r5   r   r   r   Útest_join_unconsolidateda  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sòJ ‚|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)r2   r2   r2   r3   r3   r3   )r    r   rb   r    r   rb   ÚfirstÚsecond©Únames)r3   r3   r3   r4   r4   r4   r   é   zvar X)r>   r:   re   zvar Yr   )ÚlevelrN   rE   r    )r   rŠ   r   r   r   r   r"   Ú
sort_indexrm   r   ÚvaluesÚunionr™   rÁ   r:   rn   rp   )r#   Zindex1Úindex2r±   r(   rW   Zex_indexrx   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)
rg   rg   rg   rf   rf   ÚbazrÉ   ÚquxrÊ   Zsnap)
rh   rc   ri   rc   rh   rc   rh   rh   ri   rc   r   )r   r   r>   )r%   rb   )Zj_oneZj_twoZj_threerd   r   r   rP   rL   r¾   r¿   F)rY   rZ   rF   ÚsortT)rZ   r‰   rF   rË   r    ©Zaxis)r   r   r   r"   r   r   rm   r   Úreset_indexrn   rp   Zreindex_likeZdropr:   Zis_monotonic_increasing)
r#   Z%lexsorted_two_level_string_multiindexr   r   r>   r:   Zto_joinrW   rx   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 sˆ0    Y  d S )N)r    r   rb   )r&   r+   rÂ   r`   r“   r2   r3   ÚmeanÚsum)é   r%   rÂ   ©r2   r3   r5   T)Zinplacez-Not allowed to merge between different levelsrj   ©r‰   r‚   )
r   ÚgroupbyZaggÚ	set_indexrr   rs   Ú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s‚J ‚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   r2   r3   ©re   r8   )r%   r    r4   Úfloat64Úfloat32r   r+   éd   r¶   r`   Úmdr“   Tr�   )r   r   r   r   r"   rÛ   rÜ   rm   ZdtypesÚintegersÚastyper   rn   rp   )
r#   r2   r3   rW   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%   é   r`   r   rÝ   éÈ   rÒ   éè  éÐ  )r2   r3   r6   r2   r3   rN   rE   rL   r¶   )r    r    r    )r%   rä   r»   )r    r    r   )rÝ   rå   i,  )ræ   rç   i¸  rP   )rf   rg   rf   rg   rf   rg   rf   rf   )rc   rc   rh   ri   rh   rh   rc   ri   r   r-   ÚTESTr¦   rD   rK   )r   rÕ   rm   r   rÍ   re   r2   rà   r3   rn   rp   Úlocr   r   r   r"   r   Úrepeatr®   )r#   r±   r(   Údf3Zidf1Zidf2Zidf3r—   Zdf_partially_mergedrx   r$   rá   rP   rN   rD   rK   r   r   r   Útest_join_many_non_unique_index  sT    
üÿ"ÿz(TestJoin.test_join_many_non_unique_indexc                 C   sÆ   t d|ƒ�¨ 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   ƒ n1 s¸0    Y  d S )Nzfuture.infer_string)rf   rg   rÉ   rf   ©r    r   rb   r&   ra   Úvalue2r`   )rg   rÉ   rf   r9   r]   T)rC   rË   )rg   rÉ   rf   rf   )r   rb   r    r&   )r2   r3   r4   r4   )r]   r'   rî   )r    r   r   rb   Fr&   )Úexact)	r   r   rm   rn   rp   rœ   r:   r   r   )r#   r\   rD   rK   rW   rx   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   rb   r2   r9   r3   )r+   rÂ   rÑ   r   )r    rb   rb   r&   )r    r   rb   rb   r&   r+   rÂ   rÑ   r   )r    r   rb   rb   r2   )r    r   r   r2   )r   rm   r   Únanrn   rp   )r#   r±   r(   r—   rx   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pnumrd   rP   Z_df2)rF   rµ   r7   r   éÿÿÿÿr    Zpnum_df2©re   r:   )rÖ   Zperiod_ranger   r   r   r   r
   rm   r   r   r®   r¶   rê   ÚreshaperÄ   r:   rn   rp   )r#   r:   r$   r(   r—   rx   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
¡}|rVd}t	j
t|d�� | ¡  W d   ƒ n1 s‚0    Y  |jdd�}| ¡ }|j|dd� d S )Nr   )rä   rÂ   )r2   r3   r4   r5   r6   r|   r“   r   Úidr+   Údtrf   z&agg function failed [how->mean,dtype->z-dtype 'str' does not support operation 'mean'rj   T)Znumeric_onlyÚ_right©rµ   )r   r   r   r   r"   ÚinsertrÔ   ÚreÚescaperr   rs   r�   rÏ   Úcountrm   )r#   Zusing_infer_stringr$   Úgroupedry   Ú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   ƒ n1 �sh0    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>•  ó    zFTestJoin.test_join_many.<locals>._check_diff_index.<locals>.<listcomp>r   r    r¤   )Údf_listr—   r	  Z	reindexedrx   r   r  r   Ú_check_diff_index”  s    z2TestJoin.test_join_many.<locals>._check_diff_indexrN   rE   rP   r   z?Joining multiple DataFrames only supported for joining on indexrj   rB   )r   r   r   r   r"   r   rm   rn   rp   r:   rr   rs   rv   )r#   r$   r  rW   r  ry   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“   rf   rg   r&   r]   r.   r/   r0   r1   )	r   r   r   r   r"   ré   rm   rn   rp   )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ä   r}   r.   r0   r    rÌ   Z_2rý   )r&   r   r¹   ÚyTrÓ   rN   )r‰   r‚   rF   z0Passing 'suffixes' which cause duplicate columnsrj   )r
   r   r   r   r   r"   rß   rø   rm   re   rn   rp   r   rr   rs   rÖ   r×   rØ   )	r#   r$   rx   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 sô0    Y  tjt|d��$ |j|ddg|d� W d   ƒ n1 �s80    Y  d S )Nrˆ   Úxyr    r   )rˆ   r  ÚnumrÀ   Úv1é   r9   Úv2c                 S   s   g | ]}d | ‘qS )rÝ   r   )r  Úir   r   r   r
  ë  r  z5TestJoin.test_join_multi_to_multi.<locals>.<listcomp>rÑ   rL   r€   rj   )r   r…   r   r   r   rm   rÍ   r   rÕ   rn   rp   rr   rs   rv   )	r#   r°   Z	leftindexrD   Z
rightindexrK   r—   rx   ry   r   r   r   Útest_join_multi_to_multiá  s*    ÿÿ ÿþÿ.z!TestJoin.test_join_multi_to_multic                 C   s„   t tjdddd�tdƒdœƒ}t tjdddd�tdƒd	œƒ}|j| d
¡d
d�}| ¡ }ttj	gd tdƒ ƒ|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   rm   rÕ   ru   r   r   rñ   rn   rp   )r#   r±   r(   r—   rx   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   rd   )	r   rÖ   Úto_datetimerà   rm   rÕ   r   rn   rp   )r#   ZdfaZdfbr—   rx   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   rm   rn   rp   )r#   ÚixZid1Zid2r±   r(   r—   rx   r   r   r   Ú test_join_with_categorical_index2  s    
þz)TestJoin.test_join_with_categorical_index)6Ú__name__Ú
__module__Ú__qualname__rr   Zfixturer$   r(   rA   rJ   rM   rO   rQ   rX   r[   ÚmarkÚparametrizeÚparamÚtdZ
skip_if_norz   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   %   sf   

	
ÿ
&


!
+>!6ÿ
-r   rD   Ú_xÚ_yc                 C   s6  |D ]}||   ¡  ¡ sJ ‚q|  |¡}| |¡}	| |¡D ]ô\}
}t|| j|ƒ}t||j|ƒ}z| |
¡}W nL tyº } z4|dv r˜td|
› d�ƒ|‚t|| j|ƒ W Y d }~nd }~0 0 t	||ƒ z|	 |
¡}W nP t�y$ } z6|dv �rtd|
› d�ƒ|‚t||j|ƒ W Y d }~q<d }~0 0 t	||ƒ q<d S )N)rD   rP   zkey z! should not have been in the join)rK   rP   )
rŸ   r›   rÔ   Ú_restrict_to_columnsre   Z	get_grouprt   ÚAssertionErrorÚ_assert_all_naÚ_assert_same_contents)rD   rK   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  s:    


ÿþ$


ÿþ$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   ©re   Úsuffixr   r   r
  h  s   z(_restrict_to_columns.<locals>.<listcomp>c                    s   |   ˆ d¡S )Nr?  r@  )r¹   )rC  r   r   Ú<lambda>p  r  z&_restrict_to_columns.<locals>.<lambda>r“   )re   ré   r”   )r=  re   rC  Úfoundr   rB  r   r9  g  s    ÿr9  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>~  r  z(_assert_same_contents.<locals>.<setcomp>c                 3   s   | ]}t |ƒˆ v V  qd S ©NrF  rH  ©Úrowsr   r   Ú	<genexpr>€  r  z(_assert_same_contents.<locals>.<genexpr>)ZfillnaZdrop_duplicatesrÅ   r   r›   )Ú
join_chunkr@   ZNA_SENTINELZjvaluesZsvaluesr   rL  r   r<  x  s    r<  c                 C   s,   |D ]"}||v rq| |   ¡  ¡ sJ ‚qd S rK  )rš   r›   )rO  Zsource_columnsr–   r4   r   r   r   r;  ƒ  s    r;  c           	      C   sZ   | j j|j |d�}|  |¡}| |¡}| j |j¡}| ¡ D ]\}}|||< q<|j|d�S )NrE   r“   )r:   rm   r™   re   Ú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   rb   )r3   r4   rP   rE   )r6   r|   )r    r   r&   rb   )r2   r3   r5   r4   r9   ©r   r   Úfrom_tuplesrm   rn   rp   )rD   rK   r—   rx   r   r   r   Ú.test_join_inner_multiindex_deterministic_order—  s    þÿþrU  )Ú	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    rb   r&   Úcrossr7  r8  )rF   r´   rµ   r   )r    r    rb   rb   )rb   r&   rb   r&   r¢   )rV  rW  rD   rK   r—   rx   r   r   r   Útest_join_cross¨  s
     rZ  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rvt 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   rb   )r    r   r   rÀ   rR  r5   r&   )r   )r3   rE   rK   )r4   r5   )r   r    r3   r2   r9   rS  )r°   rD   rK   r—   rx   r   r   r   Útest_join_multiindex_one_level´  s    ÿþþr[  zcategories, valuesÚYÚX)r\  r]  r]  r   r    )r   r    r    ç      @ç      ø?)r^  r_  r_  z
2020-12-31z
2019-12-31c                 C   s¤   t ddgt| | d�ddgdœƒ ddg¡}t g d¢t|| d�g d	¢dœƒ ddg¡}|j|d
dd�}t ddgt| | d�ddgddgdœƒ ddg¡}t ||¡ d S )Nr.   r(  r    r   )r¾   r¿   r'   r¾   r¿   )r.   r.   r/   )rb   r&   r+   Ú_leftrü   r³   rb   r&   )r¾   r¿   Z
value_leftZvalue_right©r   r   rÕ   rm   rn   rp   )r)  rÅ   rD   rK   r—   rx   r   r   r   Ú1test_join_multiindex_not_alphabetical_categoricalÈ  s6    
ýÿú
ýÿú
üÿùrb  zleft_empty, how, exp)
)FrD   rD   )FrK   Úempty)FrP   rc  )FrN   rD   )FrY  rc  )TrD   rc  )TrK   rK   )TrP   rc  )TrN   rK   )TrY  rc  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r˜t ddgddgtjtjgdœƒ}| d¡}nV|dkrÄt tjgdgd	gdœƒ}| d¡}n*|dkrît ddgdd�}|dkrî| d¡}|dkrþ| ¡ }t 	||¡ d S )Nr   r    rb   r&   )r.   r/   r¶   r7   r.   r+   )r.   r0   r   rE   rD   )r.   r/   r0   rK   )r/   r.   r0   rc  r/   r0   rÚ   rY  rN   )
r   rÕ   Úheadrm   r   rñ   Zrename_axisrÄ   rn   rp   )Z
left_emptyrF   ÚexprD   rK   r—   rx   r   r   r   Útest_join_emptyñ  s&     
 
rf  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“   rf   ©rg   rÉ   )rh  rf   rg  )r   rn   rp   )r±   r(   rë   r—   rx   r   r   r   Ú$test_join_empty_uncomparable_columns  s    ri  zhow, valuesrP   r_   rN   rK   ©r   r   r    c                 C   sž   t tg d¢ƒtg d¢ƒg d¢dœƒ ddg¡}t tg d¢ƒtg d¢ƒg d¢dœƒ ddg¡}t t|ƒt|ƒ||dœƒ ddg¡}|j|| d�}t ||¡ d S )	Nr_   r`   r2   r3   rj  rÒ   )r2   r3   r4   r5   rE   ra  )rF   rÅ   r±   r(   rx   r—   r   r   r   Ú3test_join_multiindex_categorical_output_index_dtype.  s6    

ýÿú

ýÿúüÿù	rk  )r   r   )rD   r7  r8  )rD   ))rÿ   Únumpyr   rr   Zpandas._configr   Zpandas.util._test_decoratorsÚutilZ_test_decoratorsr5  ZpandasrÖ   r   r   r   r   r   r   r	   r
   r   r   Zpandas._testingZ_testingrn   r   r   rH   r9  r<  r;  r¯   rU  r2  r3  rZ  r[  rb  rf  ri  rk  r   r   r   r   Ú<module>   sh   0
      #
%
ÿ
	þüþ
þ




üþ	