U
    ¾mœd…  ã                   @   s¨  d dl Zd dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZmZ d dlmZ d?dd„ZG dd„ dƒZd@dd„Zdd„ Zdd„ Zdd„ ZdAdd„Zdd„ Zej ddddgfdddgfg¡dd„ ƒZdd „ Zej d!d"d#gd"d#d#gfd$d%gd$d%d%gfd&d'gd&d'd'gfe
d(ƒe
d)ƒge
d(ƒe
d)ƒe
d)ƒgfg¡d*d+„ ƒZej d,d-d.d/d0d1d2d3d4d5d6g
¡d7d8„ ƒZej d9d:d d%d$gfd;d d%d$gfd	d d%d$gfd<d d$d%gfg¡d=d>„ ƒZdS )Bé    N)ÚCategoricalÚ	DataFrameÚIndexÚ
MultiIndexÚSeriesÚ	TimestampÚconcatÚmergeé   é2   c                 C   s`   t t| ƒƒ}t t |||  ¡¡}t|ƒ|k rPt t |ƒ|d |t|ƒ …  ¡}tj |¡ |S ©N)ÚlistÚrangeÚnpZasarrayÚtileÚlenÚrandomÚshuffle)ÚngroupsÚnZunique_groupsZarr© r   ú]/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pandas/tests/reshape/merge/test_join.pyÚget_test_data   s    "r   c                
   @   s~  e Zd Zejdd„ ƒZejdd„ ƒZejdd„ ƒZdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zej dddde dd g¡g¡d!d"„ ƒZd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Z d7d8„ Z!d9d:„ Z"d;d<„ Z#d=d>„ Z$d?d@„ Z%dAdB„ Z&dCdD„ Z'dEdF„ Z(dGdH„ Z)dIdJ„ Z*dKdL„ Z+dMdN„ Z,dOdP„ Z-dQdR„ Z.dSdT„ Z/dUdV„ Z0dS )WÚTestJoinc                 C   s:   t tƒ tƒ tj d¡tj d¡dœƒ}||d dk }|S )Nr   )Úkey1Úkey2Zdata1Zdata2r   é   ©r   r   r   r   Úrandn)ÚselfÚdfr   r   r   r       s    

üÿ
zTestJoin.dfc                 C   s&   t tdd�tddd�tj d¡dœƒS )Né
   )r   é   )r   r   )r   r   Úvaluer   )r   r   r   r   Údf2.   s    

ýÿzTestJoin.df2c                 C   s>   t  ¡ \}}t||d�}t|d |d dœ|d d�}||fS )N©ÚindexÚAÚD)ÚMergedAÚMergedDÚC)ÚtmZgetMixedTypeDictr   )r   r&   ÚdataÚtargetÚsourcer   r   r   Útarget_source8   s     ÿzTestJoin.target_sourcec                 C   sF   t ||dd�}t|||dgdd� t ||ƒ}t|||ddgdd� d S )Nr   ©ÚonÚleft©Úhowr   ©r	   Ú_check_join©r   r    r$   Zjoined_key2Zjoined_bothr   r   r   Útest_left_outer_joinD   s    
zTestJoin.test_left_outer_joinc                 C   sL   t ||ddd�}t|||dgdd� t ||dd�}t|||ddgdd� d S )Nr   Úright©r2   r5   r4   r   r6   r8   r   r   r   Útest_right_outer_joinK   s    zTestJoin.test_right_outer_joinc                 C   sL   t ||ddd�}t|||dgdd� t ||dd�}t|||ddgdd� d S )Nr   Úouterr;   r4   r   r6   r8   r   r   r   Útest_full_outer_joinR   s    zTestJoin.test_full_outer_joinc                 C   sL   t ||ddd�}t|||dgdd� t ||dd�}t|||ddgdd� d S )Nr   Úinnerr;   r4   r   r6   r8   r   r   r   Útest_inner_joinY   s    zTestJoin.test_inner_joinc                 C   s,   t ||ddd�}d|kst‚d|ks(t‚d S )Nr   ©z.fooz.bar)r2   Úsuffixesúkey1.foozkey1.bar©r	   ÚAssertionError©r   r    r$   Újoinedr   r   r   Útest_handle_overlap`   s    zTestJoin.test_handle_overlapc                 C   s.   t ||dddd�}d|kst‚d|ks*t‚d S )Nr   r   rA   )Úleft_onÚright_onrB   rC   zkey2.barrD   rF   r   r   r   Ú!test_handle_overlap_arbitrary_keyf   s    ûz*TestJoin.test_handle_overlap_arbitrary_keyc              	   C   sÂ  |\}}|j |dd�}tj|d |d dd� tj|d |d dd� td	d
d
dddgiƒ}tddddgid
ddgd�}|j |d	d�}td
d
dddgdddddgdœƒ}t ||¡ tdgdgdggd
ddgdgd�}	tdgdggddgdgd�}
tdgdggddgdgd�}|	j |
dd�}|j |dd�}t |d d ¡�sBt‚t |d d ¡�sZt‚tj	t
dd�� |j |dd� W 5 Q R X | ¡ }d|d< d}tj	t|d�� |j |dd� W 5 Q R X d S )Nr+   r1   r)   r'   F)Zcheck_namesr*   r(   ÚkeyÚaÚbÚcr#   r   r   é   r%   ©rL   r#   é   Úone©r&   ÚcolumnsÚfooÚbarÚtwoÚthreez^'E'$©ÚmatchÚEzfYou are trying to merge on float64 and object columns. If you wish to proceed you should use pd.concat)Újoinr,   Úassert_series_equalr   Úassert_frame_equalr   ÚisnanrE   ÚpytestÚraisesÚKeyErrorÚcopyÚ
ValueError)r   r0   r.   r/   Úmergedr    r$   rG   ÚexpectedZdf_aZdf_bZdf_cZsource_copyÚmsgr   r   r   Útest_join_onq   s4    ÿ"ÿzTestJoin.test_join_onc              	   C   sŠ   t tjjddgdd�tj d¡dœƒ}t tjjddgdd�tj d¡dœt dd¡d�}d	}tjt	|d
�� t
||ddd� W 5 Q R X d S )NÚmÚfrR   ©Úsize©rM   rN   r!   rP   r%   úFlen\(left_on\) must equal the number of levels in the index of "right"rZ   rM   T©rI   Úright_index©r   r   r   Úchoicer   r,   ZmakeCustomIndexra   rb   re   r	   ©r   r    r$   rh   r   r   r   Ú-test_join_on_fails_with_different_right_index˜   s     ÿ 
þz6TestJoin.test_join_on_fails_with_different_right_indexc              	   C   sŠ   t tjjddgdd�tj d¡dœt dd¡d�}t tjjddgdd�tj d¡dœƒ}d	}tjt	|d
�� t
||ddd� W 5 Q R X d S )Nrj   rk   rR   rl   rn   rP   r%   r!   zFlen\(right_on\) must equal the number of levels in the index of "left"rZ   rN   T)rJ   Ú
left_indexrr   rt   r   r   r   Ú,test_join_on_fails_with_different_left_index¤   s     
þ ÿz5TestJoin.test_join_on_fails_with_different_left_indexc              	   C   sŽ   t tjjddgdd�tj d¡dœƒ}t tjjddgdd�tj d¡dœt dd¡d�}d	}tjt	|d
�� t
||dddgd� W 5 Q R X d S )Nrj   rk   rR   rl   rn   r!   rP   r%   z)len\(right_on\) must equal len\(left_on\)rZ   rM   rN   )rJ   rI   rr   rt   r   r   r   Ú/test_join_on_fails_with_different_column_counts°   s     ÿ 
þz8TestJoin.test_join_on_fails_with_different_column_countsÚ
wrong_typerP   ÚstrNr   r   c              	   C   sx   t dddgiƒ}dt|ƒ› d�}tjt|d�� t||ddd� W 5 Q R X tjt|d�� t||ddd� W 5 Q R X d S )NrM   r   z.Can only merge Series or DataFrame objects, a z was passedrZ   )rI   rJ   )r   Útypera   rb   Ú	TypeErrorr	   )r   ry   r    rh   r   r   r   Ú)test_join_on_fails_with_wrong_object_type¼   s    ÿz2TestJoin.test_join_on_fails_with_wrong_object_typec                 C   sD   |\}}|j |dd�}|d= | d¡}|j ||d�}t ||¡ d S )Nr+   r1   )r]   Úpopr,   r_   )r   r0   r.   r/   rg   Újoin_colÚresultr   r   r   Útest_join_on_pass_vectorÍ   s    
z!TestJoin.test_join_on_pass_vectorc                 C   s€   |\}}|j | g ¡dd�}|D ]$}||ks0t‚||  ¡  ¡ s t‚q |j | g ¡ddd�}t |j|j¡ t|ƒdks|t‚d S )Nr+   r1   r?   r;   r   )	r]   ÚreindexrE   ÚisnaÚallr,   Úassert_index_equalrU   r   )r   r0   r.   r/   rf   ÚcolZmerged2r   r   r   Útest_join_with_len0Ö   s    zTestJoin.test_join_with_len0c                 C   sž   t dddddddgiƒ}t dddgiddgd	�}|j|dd
d�}|j|dd�}||d  ¡  }t |d |d ¡ tj|d |d dd� t |j|j¡ d S )NrL   rM   ÚdrN   rO   r#   r   r   r%   r?   r;   r1   F)Zcheck_dtype)r   r]   Únotnar,   r^   r…   r&   ©r   r    r$   rG   rg   r   r   r   Útest_join_on_innerâ   s    zTestJoin.test_join_on_innerc                 C   s`   t ddddddgiƒ}t ddddgidddgd	�}|j|dgd
�}|j|dd
�}t ||¡ d S )NrL   rM   rN   rO   r#   r   r   rP   r%   r1   ©r   r]   r,   r_   rŠ   r   r   r   Útest_join_on_singlekey_listî   s
    z$TestJoin.test_join_on_singlekey_listc                 C   s>   |\}}|j |d dd�}|j |dg dd�}t ||¡ d S )Nr)   r+   r1   ©r]   r,   r_   )r   r0   r.   r/   r€   rg   r   r   r   Útest_join_on_seriesø   s    zTestJoin.test_join_on_seriesc                 C   s\   t dddgiƒ}tdgdgdd�}|j|dd�}t ddgddgdœ|jd�}t ||¡ d S )	NrM   r   rP   rN   ©r&   Únamer1   rn   r%   )r   r   r]   r&   r,   r_   )r   r    Zdsr€   rg   r   r   r   Útest_join_on_series_bugletþ   s
    z#TestJoin.test_join_on_series_bugletc                 C   s–   t t d¡d�}d|d< d|d< t t dd¡d�}d	|d
< d|d< |j||d�}t|||d�}t ||¡ |j||d�}t|||d�}t ||¡ d S )Nr!   r%   TÚboolrV   Ústringé   é   r   Úintç      ð?Úfloatr4   )r   r   Úaranger]   Ú_join_by_handr,   r_   )r   Ú	join_typeÚdf1r$   rG   rg   r   r   r   Útest_join_index_mixed  s    zTestJoin.test_join_index_mixedc                 C   sÒ   t dddddœt d¡ddd	d
gd�}|d jtjks:t‚|d
 jtjksNt‚t dddddœt ddd¡ddd	d
gd�}|j|ddd�}ddddddddg}|d d… |_|dd … |_t	||ƒ}t
 ||¡ d S )Nr˜   rP   rV   T©r'   ÚBr+   r(   r!   r'   r    r+   r(   rT   r   Z_oneZ_two©ÚlsuffixÚrsuffixZA_oneZB_oneZC_oneZD_oneZA_twoZB_twoZC_twoZD_twor"   )r   r   rš   ÚdtypeÚint64rE   Zbool_r]   rU   r›   r,   r_   )r   r�   r$   rG   Zexpected_columnsrg   r   r   r   Útest_join_index_mixed_overlap  s4    
ý
ýø

z&TestJoin.test_join_index_mixed_overlapc                 C   s(   t ƒ }|jt dgdgdgd�dd� d S )NrR   r   r'   rT   r=   r4   )r   r]   )r   Úxr   r   r   Útest_join_empty_bug8  s    zTestJoin.test_join_empty_bugc                 C   sb   t tj dd¡ddgd�}ttj d¡ƒ}||d< t tj dd¡dgd�}| |¡ | |¡ d S )	Né   rP   rM   rN   ©rU   rO   r   Úq)r   r   r   r   r   r]   )r   rM   rO   rˆ   r   r   r   Útest_join_unconsolidated=  s    
z!TestJoin.test_join_unconsolidatedc                 C   s�  t jddddddgddddddggddgd�}t jdddd	d	d	gddddddggddgd�}ttj d
¡|dgd�}ttj d
¡|dgd�}|jdd�}|jdd�}|j|dd�}t|j	ƒ 
t|j	ƒ¡}| |¡ | |¡¡}|j|j_t ||¡ |jj|jk�st‚|jdd�}|jdd�}|j|dd�jdd�}t|j	ƒ 
t|j	ƒ¡}| |¡ | |¡¡}|j|j_t ||¡ |jj|jk�sŒt‚d S )NrM   rN   r   rP   rR   ÚfirstÚsecond©ÚnamesrO   é   zvar X)r-   r&   rU   zvar Yr   )Úlevelr=   r4   )r   Zfrom_arraysr   r   r   r   Ú
sort_indexr]   r   ÚvaluesÚunionr‚   r°   r&   r,   r_   rE   )r   Zindex1Úindex2r�   r$   rG   Zex_indexrg   r   r   r   Útest_join_multiindexH  s4    þþ

zTestJoin.test_join_multiindexc           
   
   C   s   ddddddddddg
}ddddddddddg
}t j t|ƒ¡}t|||d	œƒ}|}tt j d
d¡|dddgd�}|j|ddgdd�}t|| ¡ ddgddgddd�}t||ddgdddd�}	t 	||	 
|¡¡ t||ddgdddd�}	|jddgdd�}|j|_|jj�st‚t 	||¡ d S )NrW   rV   ÚbazZquxZsnaprX   rS   rY   )r   r   r-   r!   rR   Zj_oneZj_twoZj_threerT   r   r   r?   r;   r­   r®   F)rI   rJ   r5   ÚsortT)rJ   rv   r5   r¹   r   ©Zaxis)r   r   r   r   r   r]   r	   Úreset_indexr,   r_   Zreindex_likeZdropr&   Zis_monotonic_increasingrE   )
r   Z%lexsorted_two_level_string_multiindexr   r   r-   r&   Zto_joinrG   rg   Z	expected2r   r   r   Útest_join_inner_multiindexk  sd    ö  ÿú	úú	z#TestJoin.test_join_inner_multiindexc              	   C   sŠ   t ddgdddgd�}| dg¡ dtjtjgi¡}t ddgdddgd�}|jdd	d
� tjt	j
jdd�� t||d	d	d� W 5 Q R X d S )N)r   rP   rR   )r"   r•   r±   rM   rN   rO   rª   )é   r!   r±   rˆ   T)Zinplacez-Not allowed to merge between different levelsrZ   ©rv   rq   )r   ÚgroupbyZaggr   ÚmeanÚsumÚ	set_indexra   rb   ÚpdÚerrorsÚ
MergeErrorr	   )r   r    Znew_dfZother_dfr   r   r   Ú#test_join_hierarchical_mixed_raises§  s     ÿz,TestJoin.test_join_hierarchical_mixed_raisesc           
      C   sp  t tj dd¡ddgtjd�}t tj dd¡dgtjd�}| |¡}|jd dksVt‚|jd dksht‚|jd d	kszt‚tj 	d
dd¡ 
d¡}tj d¡ 
d¡}tj d¡ 
d	¡}t |||dœƒ}t |||dœƒ}t tj d¡ 
d	¡dgd�}|j|ddd�}|jd dk�st‚|jd dk�s(t‚|jd d	k�s<t‚|jd d	k�sPt‚|j|ddd�}	t ||	¡ d S )Nr!   rP   rM   rN   ©rU   r¤   r   rO   Úfloat64Úfloat32r   r•   éd   r¥   ©rM   rN   rO   Úmdrª   Trp   )r   r   r   r   rÈ   rÉ   r]   ZdtypesrE   ÚrandintÚastyper	   r,   r_   )
r   rM   rN   rG   rO   r    ZxpdfÚsÚrsZxpr   r   r   Útest_join_float64_float32´  s&    
z"TestJoin.test_join_float64_float32c              
   C   s°  t ddgddgddgdœƒ}t ddgddgddgdœƒ}t ddgddgd	d
gdœƒ}| ddg¡}| ddg¡}| ddg¡}|j||gdd�}t||ddgdd�}t||ddgdd�}	| ¡ }|	|j }	|	j d¡|	d< |	j d¡|	d< t	 
||	¡ t dddgdddgdddgdœƒ}t dddgdddgdddgdœƒ}t dddgdddgd	d
dgdœƒ}| ddg¡}| ddg¡}| ddg¡}|j||gdd�}t||ddgdd�}t||ddgdd�}	| ¡ }t	 
||	jd d …|jf ¡ t ddddddddgddddddddgtj d¡tj d¡dœƒ}
tt t d¡d¡t t d¡d¡dd�}|
j|dd�}|
j|dd�}|
j|dd�}|
j|d d�}t	 
||¡ t	 
||¡ t	 
||¡ d S )!Nr   r!   é   rË   rP   rÊ   éÈ   ©rM   rN   rˆ   iè  iÐ  )rM   rN   ÚerM   rN   r=   r4   r;   r¥   r©   i,  i¸  r?   rV   rW   rS   rX   rY   r
   rŸ   ZTESTr�   r3   r:   )r   rÂ   r]   r	   r»   rU   rM   rÎ   rN   r,   r_   Úlocr   r   r   r   Úrepeatrš   )r   r�   r$   Údf3Zidf1Zidf2Zidf3r€   Zdf_partially_mergedrg   r    rÏ   r?   r=   r3   r:   r   r   r   Útest_join_many_non_unique_indexË  sX    
"""

üÿ  ÿz(TestJoin.test_join_many_non_unique_indexc                 C   s¸   t ddddgddddgdœƒ}t d	d
ddgidddgd�}|j|ddd�}t ddddgddddgd
dddgdœddddgd�}t ||¡ |j|ddd�}tj|jttdƒƒdd� d S )NrV   rW   r¸   r   rP   rR   r"   rQ   Úvalue2rM   rN   rO   r%   rL   T)r2   r¹   )rL   r#   rÚ   r   F)Úexact)r   r]   r,   r_   r…   r&   r   r   )r   r3   r:   rG   rg   r   r   r   Útest_join_sort  s    


ý
úzTestJoin.test_join_sortc                 C   s  t dddddgiddddgd�}t ddd	d
dgiddddgd�}| |¡}t dddddgdtjd	d
tjgdœdddddgd�}t ||¡ t dddddgiddddgd�}t ddd	d
dgiddddgd�}| |¡}t ddddgdd	d	tjgdœddddgd�}t ||¡ d S )NrM   r   rP   rR   r"   r%   rN   r•   r±   r½   r
   rn   )r   r]   r   Únanr,   r_   )r   r�   r$   r€   rg   rØ   Zdf4r   r   r   Ú test_join_mixed_non_unique_index  s       
 þ  
 
ÿz)TestJoin.test_join_mixed_non_unique_indexc                 C   s’   t jdddd�}tttt|ƒƒƒ|dgd�}t||gƒ}|j|ddd	�}tt 	tj
dtjd
� d¡ dd¡d¡ddg| ¡ jd�}t ||¡ d S )Nz
2016-01-01é   ÚM)ÚperiodsÚfreqZpnumrT   r?   Z_df2)r5   r£   ©r¤   rP   éÿÿÿÿr   Zpnum_df2©rU   r&   )rÃ   Zperiod_ranger   r   r   r   r   r]   r   r   rš   r¥   r×   Úreshaper³   r&   r,   r_   )r   r&   r    r$   r€   rg   r   r   r   Ú!test_join_non_unique_period_index'  s    $ýz*TestJoin.test_join_non_unique_period_indexc              	   C   s�   t tj dd¡ddddddgd	�}| d
dd
¡ | ddd¡ | d¡}tjtdd�� | 	¡  W 5 Q R X |j	dd�}| 
¡ }|j|dd� d S )NrÒ   r±   rM   rN   rO   rˆ   rÕ   rk   rª   r   Úidr•   ÚdtrV   zCould not convertrZ   T)Znumeric_onlyÚ_right©r£   )r   r   r   r   Úinsertr¿   ra   rb   r|   rÀ   Úcountr]   )r   r    ÚgroupedZmnZcnr   r   r   Ú test_mixed_type_join_with_suffix4  s    "
z)TestJoin.test_mixed_type_join_with_suffixc              	   C   s\  t tj dd¡tdƒd�}|ddg |ddg |d	d
g g}|d  |dd … ¡}t ||¡ |ddg d d… |ddg dd … |d	d
g dd… g}dd„ }|d j|dd … dd�}||||jƒ |d  |dd … ¡}||||d jƒ |d j|dd … dd�}||||jdd… ƒ d}t	j
t|d��  |d j|dd … dd� W 5 Q R X d S )Nr!   r±   Zabcdefrª   rM   rN   rO   rˆ   rÕ   rk   r   r   éþÿÿÿrP   é	   c                    s8   ‡ fdd„| D ƒ}|d   |dd … ¡}t ||¡ d S )Nc                    s   g | ]}|  ˆ ¡‘qS r   )r‚   )Ú.0r§   ©Ú	exp_indexr   r   Ú
<listcomp>M  s     zFTestJoin.test_join_many.<locals>._check_diff_index.<locals>.<listcomp>r   r   rŽ   )Údf_listr€   rô   Z	reindexedrg   r   ró   r   Ú_check_diff_indexL  s    z2TestJoin.test_join_many.<locals>._check_diff_indexr=   r4   r?   r
   z?Joining multiple DataFrames only supported for joining on indexrZ   r1   )r   r   r   r   r   r]   r,   r_   r&   ra   rb   re   )r   r    rö   rG   r÷   rh   r   r   r   Útest_join_manyC  s    ":zTestJoin.test_join_manyc                 C   sŒ   t tj dd¡ddddgd�}dd	gd |d
< |jd d …ddgf }|jd d …ddgf }|jd d …d
gf }| ||g¡}t ||¡ d S )Nr
   r"   r'   r    r+   r(   rª   rV   rW   rL   )r   r   r   r   rÖ   r]   r,   r_   )r   r    r�   r$   rØ   r€   r   r   r   Útest_join_many_mixed_  s    zTestJoin.test_join_many_mixedc           	   	   C   s6  t ttj dd¡ddddgd�ttjjdddd� dd	¡dd
gd�gdd�}t ||gdd�}|j|dd�}|j|_t	 
||¡ ttj dd	¡ddgd�}ttj dd	¡ddgd�}ttj dd	¡ddgd�}ttj dd	¡ddgd�}|j|ddd�j|dddd�}tjtjjdd�� |j|ddd� W 5 Q R X d S )Nr!   r"   r'   r    rª   r   rÒ   rl   rP   r+   r   rº   Z_2rë   r§   ÚyTr¾   r=   )rv   rq   r5   z0Passing 'suffixes' which cause duplicate columnsrZ   )r   r   r   r   r   rÍ   ræ   r]   rU   r,   r_   r	   ra   rb   rÃ   rÄ   rÅ   )	r   r    rg   r€   Úwr§   rú   ÚzZdtar   r   r   Útest_join_dupsi  s8     ÿþù
   ÿþzTestJoin.test_join_dupsc           	   	   C   s   t jtdƒtdƒddggdddgd�}tdtdƒi|d	�}t jtdƒtdƒgddgd�}td
dd„ tddƒD ƒi|d	�}|j|ddg|d�}| ¡ j| ¡ ddg|d� dddg¡}t	 
||¡ d}tjt|d�� |j|d|d� W 5 Q R X tjt|d�� |j|ddg|d� W 5 Q R X d S )NÚabcZxyr   rP   Únumr¯   Zv1é   r%   Zv2c                 S   s   g | ]}d | ‘qS )rÊ   r   )rò   Úir   r   r   rõ   ”  s     z5TestJoin.test_join_multi_to_multi.<locals>.<listcomp>r½   r;   ro   rZ   )r   Zfrom_productr   r   r   r]   r»   r	   rÂ   r,   r_   ra   rb   re   )	r   rœ   Z	leftindexr3   Z
rightindexr:   r€   rg   rh   r   r   r   Útest_join_multi_to_multiŠ  s2     ÿ ÿ   ÿþÿz!TestJoin.test_join_multi_to_multic                 C   sˆ   t tjdddd�tdƒdœƒ}t tjdddd�tdƒd	œƒ}|j| d
¡d
d�}| ¡ }ttj	gd tdƒ t
d�|d< t ||¡ d S )Nz
2018-01-01r•   zAmerica/Chicago)Ústartrá   ÚtzZabcde)ÚdateÚvalsz
2018-01-03Ztuvwx)r  Úvals_2r  r1   rP   Ztuvrã   r  )r   rÃ   Z
date_ranger   r]   rÂ   rd   r   r   rÝ   Úobjectr,   r_   )r   r�   r$   r€   rg   r   r   r   Ú#test_join_on_tz_aware_datetimeindex¥  s,      ÿüÿ	  ÿüÿ z,TestJoin.test_join_on_tz_aware_datetimeindexc                 C   sà   t dddgdddgdddgdddggd	d
dgd�}t |d	 ¡|d	< t dddgdddggd	d
dgddgd�}t |d	 ¡|d	< |j| d	d
g¡d	d
gd�}t tdƒdddgtdƒdddggddgd	d
ddgd�}t ||¡ d S )Nz
2012-08-02ÚLr!   ÚJr–   z
2013-04-06rÒ   é   r§   rú   rM   rª   r   rP   rü   r"   rå   r1   z2012-08-02 00:00:00z2013-04-06 00:00:00rT   )r   rÃ   Úto_datetimer]   rÂ   r   r,   r_   )r   ZdfaZdfbr€   rg   r   r   r   Útest_join_datetime_string½  s0    üù	ýþ
úz"TestJoin.test_join_datetime_stringc                 C   s–   ddg}t j||d�}t jt|ƒt|ƒd�}td|i|d�}tdt|ƒi|d�}| |¡}tddgddgdœt jddgddgd�d�}t ||¡ d S )NrM   rN   ©Ú
categoriesÚc1r%   Úc2)r  r  )rÃ   ZCategoricalIndexÚreversedr   r]   r,   r_   )r   ZixZid1Zid2r�   r$   r€   rg   r   r   r   Ú test_join_with_categorical_indexÚ  s    
þz)TestJoin.test_join_with_categorical_index)1Ú__name__Ú
__module__Ú__qualname__ra   Zfixturer    r$   r0   r9   r<   r>   r@   rH   rK   ri   ru   rw   rx   ÚmarkÚparametrizer   Úarrayr}   r�   r‡   r‹   r�   r�   r’   rž   r¦   r¨   r¬   r·   r¼   rÆ   rÑ   rÙ   rÜ   rÞ   rç   rï   rø   rù   rý   r  r	  r  r  r   r   r   r   r      sX   

	
'
	
 #<6
!r   r3   Ú_xÚ_yc                 C   sF  |D ]}||   ¡  ¡ st‚q|  |¡}| |¡}	| t|ƒdkrF|n|d ¡D ]ð\}
}t|| j|ƒ}t||j|ƒ}z| |
¡}W nJ tk
rÌ } z,|dkr®td|
› d�ƒ|‚t	|| j|ƒ W 5 d }~X Y nX t
||ƒ z|	 |
¡}W nN tk
�r4 } z.|dk�rtd|
› d�ƒ|‚t	||j|ƒ W 5 d }~X Y qPX t
||ƒ qPd S )Nr   r   )r3   r?   zkey z! should not have been in the join)r:   r?   )r‰   r„   rE   r¿   r   Ú_restrict_to_columnsrU   Z	get_grouprc   Ú_assert_all_naÚ_assert_same_contents)r3   r:   r€   r   r5   r¢   r£   rO   Zleft_groupedZright_groupedZ	group_keyÚgroupZl_joinedZr_joinedZlgroupÚerrZrgroupr   r   r   r7   ê  s>    

ÿ
ÿþ 


ÿþ r7   c                    sR   ‡ ‡fdd„| j D ƒ}| jd d …|f } | j‡fdd„d�} | jd d …ˆ f } | S )Nc                    s(   g | ] }|ˆ ks |  ˆd ¡ˆ kr|‘qS )Ú ©Úreplace)rò   rO   ©rU   Úsuffixr   r   rõ     s      z(_restrict_to_columns.<locals>.<listcomp>c                    s   |   ˆ d¡S )Nr"  r#  )r§   )r&  r   r   Ú<lambda>  ó    z&_restrict_to_columns.<locals>.<lambda>rª   )rU   rÖ   Úrename)r   rU   r&  Úfoundr   r%  r   r    s    ÿr  c                    sd   d}|   |¡ ¡ j}|  |¡ ¡ j}dd„ |D ƒ‰ tˆ ƒt|ƒksFt‚t‡ fdd„|D ƒƒs`t‚d S )Niy)íÿc                 S   s   h | ]}t |ƒ’qS r   ©Útuple©rò   Úrowr   r   r   Ú	<setcomp>(  s     z(_assert_same_contents.<locals>.<setcomp>c                 3   s   | ]}t |ƒˆ kV  qd S r   r+  r-  ©Úrowsr   r   Ú	<genexpr>*  s     z(_assert_same_contents.<locals>.<genexpr>)ZfillnaZdrop_duplicatesr´   r   rE   r„   )Ú
join_chunkr/   ZNA_SENTINELZjvaluesZsvaluesr   r0  r   r  "  s    r  c                 C   s,   |D ]"}||krq| |   ¡  ¡ st‚qd S r   )rƒ   r„   rE   )r3  Zsource_columnsr   rO   r   r   r   r  -  s    r  c           	      C   sZ   | j j|j |d�}|  |¡}| |¡}| j |j¡}| ¡ D ]\}}|||< q<|j|d�S )Nr4   rª   )r&   r]   r‚   rU   ÚappendÚitems)	rM   rN   r5   Z
join_indexZa_reZb_reZresult_columnsr†   rÏ   r   r   r   r›   4  s    


r›   c                  C   sx   t dditjdgdd�d�} t dditjd	gd
d�d�}| j|dd�}t dgdgdœtjdgdd�d�}t ||¡ d S )NrÕ   r•   )r   rP   r"   rÔ   r¯   ©r-   r&   rk   r±   )rP   rR   )rN   rO   r?   r4   )rÕ   rk   )rP   r   r"   rR   )rN   rM   rˆ   rO   r%   ©r   r   Úfrom_tuplesr]   r,   r_   )r3   r:   r€   rg   r   r   r   Ú.test_join_inner_multiindex_deterministic_orderA  s    þ ÿþr9  )Ú	input_colÚoutput_colsrN   rM   Za_xZa_yc                 C   sj   t dddgiƒ}t | ddgiƒ}|j|dddd�}t |d	 ddddg|d ddddgiƒ}t ||¡ d S )
NrM   r   rR   r"   Úcrossr  r  )r5   r¢   r£   r   rŒ   )r:  r;  r3   r:   r€   rg   r   r   r   Útest_join_crossR  s
    (r=  c                 C   s|   t dditjdgdd�d�}t dditjd	gd
d�d�}|j|| d�}t dgdgdœtjdgddgd�d�}t ||¡ d S )NrO   rR   )r   rP   rn   r¯   r6  rˆ   r"   )rP   )rN   r4   )rO   rˆ   )rP   r   rN   rM   r%   r7  )rœ   r3   r:   r€   rg   r   r   r   Útest_join_multiindex_one_level^  s     ÿþr>  zcategories, valuesÚYÚXrP   r   g      @g      ø?z
2020-12-31z
2019-12-31c                 C   s¨   t ddgt| | d�ddgdœƒ ddg¡}t dddgt|| d�d	d
dgdœƒ ddg¡}|j|ddd�}t ddgt| | d�ddgd	d
gdœƒ ddg¡}t ||¡ d S )Nr'   r  r   rP   )r­   r®   r#   r­   r®   r    rR   r"   r•   Ú_leftrê   r¡   )r­   r®   Z
value_leftZvalue_right©r   r   rÂ   r]   r,   r_   )r  r´   r3   r:   r€   rg   r   r   r   Ú1test_join_multiindex_not_alphabetical_categoricall  s6    
ýÿú
ýÿú
üÿùrC  zleft_empty, how, exp)Fr3   r3   )Fr:   Úempty)Fr?   rD  )Fr=   r3   )Fr<  rD  )Tr3   rD  )Tr:   r:   )Tr?   rD  )Tr=   r:   )Tr<  rD  c                 C   sþ   t ddgddgdœdd� d¡}t dgd	gd
œdd� d¡}| rL| d¡}n
| d¡}|j||d�}|dk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¡}t ||¡ d S )NrP   r   rR   r"   )r'   r    r¥   rã   r'   r•   )r'   r+   r   r4   r3   )r'   r    r+   r:   )r    r'   r+   rD  r    r+   rÇ   r<  )	r   rÂ   Úheadr]   r   rÝ   Zrename_axisr,   r_   )Z
left_emptyr5   Úexpr3   r:   r€   rg   r   r   r   Útest_join_empty•  s"     
 
rG  zhow, valuesr?   r=   r:   c                 C   sª   t tdddgƒtdddgƒdddgdœƒ ddg¡}t tdddgƒtdddgƒdddgdœƒ ddg¡}t t|ƒt|ƒ||dœƒ ddg¡}|j|| d	�}t ||¡ d S )
Nr   r   rP   rË   rM   rN   rÔ   )rM   rN   rO   rˆ   r4   rB  )r5   r´   r�   r$   rg   r€   r   r   r   Ú3test_join_multiindex_categorical_output_index_dtype½  s6    ýÿúýÿúüÿù	rH  )r
   r   )r3   r  r  )r3   )Únumpyr   ra   ZpandasrÃ   r   r   r   r   r   r   r   r	   Zpandas._testingZ_testingr,   r   r   r7   r  r  r  r›   r9  r  r  r=  r>  rC  rG  rH  r   r   r   r   Ú<module>   st   (

     R
'
 ÿ
	þüþ
öþ
üþ	