a
    oÝEb_y  ã                   @   sB  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lmZmZmZ ej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!dS ).é    N)ÚCategoricalÚ	DataFrameÚIndexÚ
MultiIndexÚSeriesÚ	TimestampÚconcatÚmerge)ÚNGROUPSÚNÚget_test_datac                
   @   sT  e Z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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+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,dS )QÚTestJoinc                 C   s´   t tƒ tƒ tj t¡tj t¡dœƒ| _| j| jd dk | _t ttd d�ttd td d�tj td ¡dœƒ| _t	 
¡ \}}t ||d	�| _t |d
 |d dœ|d d	�| _d S )N)Úkey1Úkey2Zdata1Zdata2r   é   é   )Úné   )Zngroupsr   )r   r   Úvalue©ÚindexÚAÚD)ÚMergedAÚMergedDÚC)r   r   ÚnpÚrandomÚrandnr   Údfr
   Údf2ÚtmZgetMixedTypeDictÚtargetÚsource)ÚselfÚmethodr   Údata© r'   úd/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/pandas/tests/reshape/merge/test_join.pyÚsetup_method   s&    

üÿ
ýÿÿzTestJoin.setup_methodc                 C   sV   t | j| jdd�}t| j| j|dgdd� t | j| jƒ}t| j| j|ddgdd� d S )Nr   ©ÚonÚleft©Úhowr   ©r	   r   r    Ú_check_join©r$   Zjoined_key2Zjoined_bothr'   r'   r(   Útest_left_outer_join8   s    zTestJoin.test_left_outer_joinc                 C   s\   t | j| jddd�}t| j| j|dgdd� t | j| jdd�}t| j| j|ddgdd� d S )Nr   Úright©r+   r.   r-   r   r/   r1   r'   r'   r(   Útest_right_outer_join?   s    zTestJoin.test_right_outer_joinc                 C   s\   t | j| jddd�}t| j| j|dgdd� t | j| jdd�}t| j| j|ddgdd� d S )Nr   Úouterr4   r-   r   r/   r1   r'   r'   r(   Útest_full_outer_joinF   s    zTestJoin.test_full_outer_joinc                 C   s\   t | j| jddd�}t| j| j|dgdd� t | j| jdd�}t| j| j|ddgdd� d S )Nr   Úinnerr4   r-   r   r/   r1   r'   r'   r(   Útest_inner_joinM   s    zTestJoin.test_inner_joinc                 C   s0   t | j| jddd�}d|v s J ‚d|v s,J ‚d S )Nr   ©z.fooz.bar)r+   Úsuffixesúkey1.foozkey1.bar©r	   r   r    ©r$   Újoinedr'   r'   r(   Útest_handle_overlapT   s    zTestJoin.test_handle_overlapc                 C   s2   t | j| jdddd�}d|v s"J ‚d|v s.J ‚d S )Nr   r   r:   )Úleft_onÚright_onr;   r<   zkey2.barr=   r>   r'   r'   r(   Ú!test_handle_overlap_arbitrary_keyZ   s    ûz*TestJoin.test_handle_overlap_arbitrary_keyc                 C   sÚ  | j }| j}|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 ¡�sFJ ‚t	j
tdd�� |j|dd� W d   ƒ n1 �sz0    Y  | ¡ }d|d< d}t	j
t|d�� |j|dd� W d   ƒ n1 �sÌ0    Y  d S ) Nr   r*   r   r   F)Zcheck_namesr   r   Úkey©ÚarF   ÚbrG   Úcr   ©r   r   r   ©rF   rG   rH   r   )r   r   r   r   r   ©rD   r   r   r   é   Úone©r   ÚcolumnsÚfooÚbarÚtwoÚthreerH   z^'E'$©ÚmatchÚEr   zfYou are trying to merge on float64 and object columns. If you wish to proceed you should use pd.concat)r"   r#   Újoinr!   Úassert_series_equalr   Úassert_frame_equalr   ÚisnanÚpytestÚraisesÚKeyErrorÚcopyÚ
ValueError)r$   r"   r#   Úmergedr   r    r?   ÚexpectedZdf_aZdf_bZdf_cZsource_copyÚmsgr'   r'   r(   Útest_join_one   s6    ÿ .ÿ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 d   ƒ n1 s�0    Y  d S )NÚmÚfrL   ©Úsize©rF   rG   é
   r   r   úFlen\(left_on\) must equal the number of levels in the index of "right"rT   rF   T©rA   Úright_index©r   r   r   Úchoicer   r!   ZmakeCustomIndexr[   r\   r_   r	   ©r$   r   r    rb   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 d   ƒ n1 s�0    Y  d S )Nrd   re   rL   rf   rh   r   r   ri   zFlen\(right_on\) must equal the number of levels in the index of "left"rT   rG   T)rB   Ú
left_indexrm   ro   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 d   ƒ n1 s”0    Y  d S )Nrd   re   rL   rf   rh   ri   r   r   z)len\(right_on\) must equal len\(left_on\)rT   rF   rG   )rB   rA   rm   ro   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 )NrF   r   z.Can only merge Series or DataFrame objects, a z was passedrT   )rA   rB   )r   Útyper[   r\   Ú	TypeErrorr	   )r$   rt   r   rb   r'   r'   r(   Ú)test_join_on_fails_with_wrong_object_type±   s    ÿÿ.z2TestJoin.test_join_on_fails_with_wrong_object_typec                 C   sF   | j j| jdd�}|d= | j  d¡}| j j| j|d�}t ||¡ d S )Nr   r*   )r"   rW   r#   Úpopr!   rY   )r$   ra   Újoin_colÚresultr'   r'   r(   Útest_join_on_pass_vectorÂ   s
    z!TestJoin.test_join_on_pass_vectorc                 C   s‚   | j j| j g ¡dd�}| jD ]$}||v s.J ‚||  ¡  ¡ sJ ‚q| j j| j g ¡ddd�}t |j|j¡ t	|ƒdks~J ‚d S )Nr   r*   r8   r4   r   )
r"   rW   r#   ÚreindexÚisnaÚallr!   Úassert_index_equalrO   Úlen)r$   r`   Ú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 )NrD   )rF   rF   ÚdrG   rG   rH   r   r   r   rF   rG   r   r8   r4   r*   F)Zcheck_dtype)r   rW   Únotnar!   rX   r€   r   ©r$   r   r    r?   ra   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 )NrD   rE   r   rI   rJ   r   r*   ©r   rW   r!   rY   r†   r'   r'   r(   Útest_join_on_singlekey_listá   s
    z$TestJoin.test_join_on_singlekey_listc                 C   s>   | j j| jd dd�}| j j| jdg dd�}t ||¡ d S )Nr   r   r*   )r"   rW   r#   r!   rY   )r$   r{   ra   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 )	NrF   r   r   rG   ©r   Únamer*   rh   r   )r   r   rW   r   r!   rY   )r$   r   Zdsr{   ra   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 )Nri   r   TÚboolrP   Ústringr   é   r   Úintç      ð?Úfloatr-   )r   r   ÚarangerW   Ú_join_by_handr!   rY   )r$   Ú	join_typeÚdf1r    r?   ra   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   rP   T©r   ÚBr   r   ri   rN   rš   r   r   Z_oneZ_two©ÚlsuffixÚrsuffix)ZA_oneZB_oneZC_oneZD_oneZA_twoZB_twoZC_twoZD_twoé   )r   r   r”   ÚdtypeÚint64Zbool_rW   rO   r•   r!   rY   )r$   r—   r    r?   Zexpected_columnsra   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 )NrL   r   r   rN   r6   r-   )r   rW   )r$   Úxr'   r'   r(   Útest_join_empty_bug*  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é   r   rF   rG   ©rO   rH   r   Úq)r   r   r   r   r   rW   )r$   rF   rH   r„   r'   r'   r(   Útest_join_unconsolidated/  s    
z!TestJoin.test_join_unconsolidatedc                 C   sn  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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æJ ‚|jdd�}|jdd�}|j|dd�jdd�}t|j	ƒ 
t|j	ƒ¡}| |¡ | |¡¡}|j|j_t ||¡ |jj|jk�sjJ ‚d S )N)rF   rF   rF   rG   rG   rG   )r   r   rL   r   r   rL   ÚfirstÚsecond©Únames)rG   rG   rG   rH   rH   rH   é   zvar X)r&   r   rO   zvar Yr   )Úlevelr6   r-   r   )r   Zfrom_arraysr   r   r   r   Ú
sort_indexrW   r   ÚvaluesÚunionr}   r«   r   r!   rY   )r$   Zindex1Úindex2r—   r    r?   Zex_indexra   r'   r'   r(   Útest_join_multiindex:  s4    þþ

zTestJoin.test_join_multiindexc           
      C   sü   g d¢}g d¢}t j 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)
rQ   rQ   rQ   rP   rP   Úbazr³   Úquxr´   Zsnap)
rR   rM   rS   rM   rR   rM   rR   rR   rS   rM   )r   r   r&   ri   rL   )Zj_oneZj_twoZj_threerN   r   r   r8   r4   r¨   r©   F)rA   rB   r.   ÚsortT)rB   rq   r.   rµ   r   ©Zaxis)r   r   r   r�   r   rW   r	   Úreset_indexr!   rY   Zreindex_likeZdropr   Zis_monotonic)
r$   Z%lexsorted_two_level_string_multiindexr   r   r&   r   Zto_joinr?   ra   Z	expected2r'   r'   r(   Útest_join_inner_multiindex]  sL    ÿú	úú	z#TestJoin.test_join_inner_multiindexc                 C   s²   t ddgg d¢d�}| dg¡ dtjtjgi¡}t ddgg d¢d�}|jdd	d
� d}tjt	|d��  t
||d	d	d�}W d   ƒ n1 sŒ0    Y  d|v s¢J ‚d|v s®J ‚d S )N)r   r   rL   )rž   r   r¬   rJ   r¥   rF   rG   )é   ri   r¬   ©rF   rG   r„   T)Zinplacez.merging between different levels is deprecatedrT   ©rq   rl   )rG   Úmean)r   ÚgroupbyZaggr   r¼   ÚsumÚ	set_indexr!   Úassert_produces_warningÚFutureWarningr	   )r$   r   Znew_dfZother_dfrb   r{   r'   r'   r(   Útest_join_hierarchical_mixed™  s    .z%TestJoin.test_join_hierarchical_mixedc           
      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sVJ ‚|jd dkshJ ‚|jd d	kszJ ‚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J ‚|jd dk�s(J ‚|jd d	k�s<J ‚|jd d	k�sPJ ‚|j
|ddd�}	t ||	¡ d S )Nri   r   rF   rG   )rO   rŸ   r   rH   Úfloat64Úfloat32r   r   éd   r    rJ   Úmdr¥   Trk   )r   r   r   r   rÃ   rÄ   rW   ZdtypesÚrandintÚastyper	   r!   rY   )
r$   rF   rG   r?   rH   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¡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   ri   é   rJ   r   rÅ   éÈ   rº   éè  éÐ  )rF   rG   ÚerF   rG   r6   r-   r4   r    )r   r   r   )ri   rÌ   r¤   )r   r   r   )rÅ   rÍ   i,  )rÎ   rÏ   i¸  r8   )rP   rQ   rP   rQ   rP   rQ   rP   rP   )rM   rM   rR   rS   rR   rR   rM   rS   é   r™   ÚTESTr‹   r,   r3   )r   r¿   rW   r	   r·   rO   rF   rÈ   rG   r!   rY   Úlocr   r   r   r   Úrepeatr”   )r$   r—   r    Údf3Zidf1Zidf2Zidf3r{   Zdf_partially_mergedra   r   rÉ   r8   r6   r,   r3   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)rP   rQ   r³   rP   ©r   r   rL   rž   rK   Úvalue2rJ   )rQ   r³   rP   r   rD   T)r+   rµ   )rQ   r³   rP   rP   )r   rL   r   rž   )rF   rG   rH   rH   )rD   r   rØ   )r   r   r   rL   Frž   )Úexact)r   rW   r!   rY   r€   r   r   Úrange)r$   r,   r3   r?   ra   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 )NrF   r×   )r   r   rL   rF   r   rG   )r   r¬   r¹   rÑ   )r   rL   rL   rž   )r   r   rL   rL   rž   r   r¬   r¹   rh   )r   r   rL   rL   rF   )r   r   r   rF   )r   rW   r   Únanr!   rY   )r$   r—   r    r{   ra   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pnumrN   r8   Z_df2)r.   r�   ©rŸ   r   éÿÿÿÿr   Zpnum_df2©rO   r   )ÚpdZperiod_ranger   ÚlistrÚ   r�   r   rW   r   Ztiler”   r    rÔ   Úreshaper®   r   r!   rY   )r$   r   r   r    r{   ra   r'   r'   r(   Ú!test_join_non_unique_period_index  s    $ýz*TestJoin.test_join_non_unique_period_indexc                 C   sb   t tj dd¡g d¢d�}| ddd¡ | ddd	¡ | d¡}| ¡ }| ¡ }|j|d
d� d S )NrÌ   r¬   )rF   rG   rH   r„   rÐ   re   r¥   r   Úidr   ÚdtrP   Ú_right©r�   )	r   r   r   r   Úinsertr½   r¼   ÚcountrW   )r$   r   ÚgroupedÚmnZcnr'   r'   r(   Ú test_mixed_type_join_with_suffix'  s    
z)TestJoin.test_mixed_type_join_with_suffixc                 C   sr  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 �sd0    Y  d S )Nri   r¬   Zabcdefr¥   rF   rG   rH   r„   rÐ   re   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   )rW   r!   rY   )Údf_listr{   rö   Z	reindexedra   r'   rõ   r(   Ú_check_diff_index=  s    z2TestJoin.test_join_many.<locals>._check_diff_indexr6   r-   r8   rÑ   z?Joining multiple DataFrames only supported for joining on indexrT   r*   )r   r   r   r   ræ   rW   r!   rY   r   r[   r\   r_   )r$   r   rù   r?   rú   rb   r'   r'   r(   Útest_join_many4  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¥   rP   rQ   rD   r   rš   r   r   )r   r   r   r   rÓ   rW   r!   rY   )r$   r   r—   r    rÕ   r{   r'   r'   r(   Útest_join_many_mixedP  s    zTestJoin.test_join_many_mixedc           	      C   sj  t ttj dd¡g d¢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	 t¡�  |j|ddd�}W d   ƒ n1 �s20    Y  t ||||gdd�}g d¢|_t	 
||¡ d S )Nri   rž   )r   r   rš   rš   r¥   r   rÌ   rf   r   r   r   r   r¶   Z_2rì   r¢   ÚyTr»   r6   )rq   rl   r.   )Úx_xÚy_xÚx_yÚy_yrþ   rÿ   r   r  )r   r   r   r   r   rÇ   rç   rW   rO   r!   rY   r	   rÀ   rÁ   )	r$   r   ra   r{   Úwr¢   rý   ÚzZdtar'   r'   r(   Útest_join_dupsZ  s0    ÿþù
ÿ0
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 )NÚabcÚxyr   r   )r  r  Únumrª   Úv1é   r   Úv2c                 S   s   g | ]}d | ‘qS )rÅ   r'   )rô   Úir'   r'   r(   r÷   …  rø   z5TestJoin.test_join_multi_to_multi.<locals>.<listcomp>r¹   r4   rj   rT   )r   Zfrom_productræ   r   rÚ   rW   r·   r	   r¿   r!   rY   r[   r\   r_   )	r$   r–   Z	leftindexr,   Z
rightindexr3   r{   ra   rb   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  r*   r   Ztuvrâ   r  )r   rå   Z
date_rangeræ   rW   r¿   r^   r   r   rÜ   Úobjectr!   rY   )r$   r—   r    r{   ra   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ÚLri   )r  ÚJr�   )ú
2013-04-06r  rÌ   )r  r  é   )r¢   rý   rF   r¥   r¢   )r  r  r   )r  r  r   )r¢   rý   r  r   rž   rä   rý   r*   z2012-08-02 00:00:00r  r   r�   z2013-04-06 00:00:00r  rÌ   )r¢   rý   r  rF   rN   )r   rå   Úto_datetimerW   r¿   r   r!   rY   )r$   ZdfaZdfbr{   ra   r'   r'   r(   Útest_join_datetime_string®  s0    üù	ýþúz"TestJoin.test_join_datetime_string)-Ú__name__Ú
__module__Ú__qualname__r)   r2   r5   r7   r9   r@   rC   rc   rp   rr   rs   r[   ÚmarkÚparametrizer   Úarrayrx   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      sL   (

 #<6
!r   r,   Ú_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)r,   r8   zkey z! should not have been in the join)r3   r8   )
r…   r   r½   Ú_restrict_to_columnsrO   Z	get_groupr]   ÚAssertionErrorÚ_assert_all_naÚ_assert_same_contents)r,   r3   r{   rz   r.   rœ   r�   rH   Zleft_groupedZright_groupedZ	group_keyÚgroupZl_joinedZr_joinedZlgroupÚerrZrgroupr'   r'   r(   r0   Ì  s:    


ÿþ$


ÿþ$r0   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ô   rH   ©rO   Úsuffixr'   r(   r÷   ó  s   z(_restrict_to_columns.<locals>.<listcomp>c                    s   |   ˆ d¡S )Nr)  r*  )r¢   )r-  r'   r(   Ú<lambda>û  rø   z&_restrict_to_columns.<locals>.<lambda>r¥   )rO   rÓ   Úrename)r'  rO   r-  Úfoundr'   r,  r(   r#  ò  s    ÿr#  c                    sd   d}|   |¡ ¡ j}|  |¡ ¡ j}dd„ |D ƒ‰ tˆ ƒt|ƒksFJ ‚t‡ fdd„|D ƒƒs`J ‚d S )Niy)íÿc                 S   s   h | ]}t |ƒ’qS r'   ©Útuple©rô   Úrowr'   r'   r(   Ú	<setcomp>	  rø   z(_assert_same_contents.<locals>.<setcomp>c                 3   s   | ]}t |ƒˆ v V  qd S ©Nr1  r3  ©Úrowsr'   r(   Ú	<genexpr>  rø   z(_assert_same_contents.<locals>.<genexpr>)ZfillnaZdrop_duplicatesr¯   r�   r   )Ú
join_chunkr#   ZNA_SENTINELZjvaluesZsvaluesr'   r7  r(   r&    s    r&  c                 C   s,   |D ]"}||v rq| |   ¡  ¡ sJ ‚qd S r6  )r~   r   )r:  Zsource_columnsrz   rH   r'   r'   r(   r%    s    r%  c           	      C   sZ   | j j|j |d�}|  |¡}| |¡}| j |j¡}| ¡ D ]\}}|||< q<|j|d�S )Nr-   r¥   )r   rW   r}   rO   ÚappendÚitems)	rF   rG   r.   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 )NrÐ   r   )r   r   rž   rº   rª   ©r&   r   re   r¬   )r   rL   )rG   rH   r8   r-   )rÐ   re   )r   r   rž   rL   )rG   rF   r„   rH   r   ©r   r   Úfrom_tuplesrW   r!   rY   )r,   r3   r{   ra   r'   r'   r(   Ú.test_join_inner_multiindex_deterministic_order"  s    þÿþr@  )Ú	input_colÚoutput_colsrG   rF   Ú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 )NrF   r   rL   rž   Úcrossr!  r"  )r.   rœ   r�   r   )r   r   rL   rL   )rL   rž   rL   rž   rˆ   )rA  rB  r,   r3   r{   ra   r'   r'   r(   Útest_join_cross3  s
     rE  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 )NrH   rL   )r   r   rh   rª   r=  r„   rž   )r   )rG   r-   )rH   r„   )r   r   rG   rF   r   r>  )r–   r,   r3   r{   ra   r'   r'   r(   Útest_join_multiindex_one_level?  s    ÿþrF  zcategories, valuesÚYÚX)rG  rH  rH  r   r   )r   r   r   ç      @ç      ø?)rI  rJ  rJ  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   )Ú
categoriesr   r   )r¨   r©   r   r¨   r©   )r   r   rš   )rL   rž   r   Ú_leftrë   r›   rL   rž   )r¨   r©   Z
value_leftZvalue_right)r   r   r¿   rW   r!   rY   )rK  r¯   r,   r3   r{   ra   r'   r'   r(   Ú1test_join_multiindex_not_alphabetical_categoricalM  s6    
ýÿú
ýÿú
üÿùrM  )r,   r!  r"  )r,   )"Únumpyr   r[   Zpandasrå   r   r   r   r   r   r   r   r	   Zpandas._testingZ_testingr!   Z%pandas.tests.reshape.merge.test_merger
   r   r   r   Za_r   r0   r#  r&  r%  r•   r@  r  r  rE  rF  rM  r'   r'   r'   r(   Ú<module>   sD   (
     8
&
ÿ
	þüþ