o
    �¨ÊhÂ’  ã                   @   s´  d dl Z d dlZd dl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  d/g d0¢¡d1d2„ ƒZ$d3d4„ Z%ej  d5d6g d7¢fd8g d7¢fd	g d7¢fd9g d:¢fg¡d;d<„ ƒZ&dS )@é    N)
Ú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ÚnpÚasarrayÚtileÚlenÚrandomÚdefault_rngÚshuffle)ÚngroupsÚnÚunique_groupsÚarr© r   úV/var/www/html/env/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!d8d9„ Z"d:d;„ Z#d<d=„ Z$d>d?„ Z%d@dA„ Z&dBdC„ Z'dDdE„ Z(ej ddejde d¡d�g¡dFdG„ ƒZ)dHdI„ Z*dJdK„ Z+dLdM„ Z,dNdO„ Z-dPdQ„ Z.dRdS„ Z/dTdU„ Z0dVdW„ Z1dXdY„ Z2dZd[„ Z3d#S )\ÚTestJoinc                 C   sF   t tƒ tƒ tj d¡ d¡tj d¡ d¡dœƒ}||d dk }|S )Nr   r   )Úkey1Úkey2Údata1Ú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   Údf24   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-   )Úfoo1Úfoo2Úfoo3Úfoo4Úfoo5z1/1/2009é   )Úperiods©ÚAÚBÚCÚD)ÚaÚbÚcÚdÚe©Údtype©Úindexr7   r:   )ÚMergedAÚMergedDr9   )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,   Újoined_key2Újoined_bothr   r   r   Útest_left_outer_joinO   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©rL   rO   rN   r    rP   rR   r   r   r   Útest_right_outer_joinV   ó   zTestJoin.test_right_outer_joinc                 C   rV   )Nr!   ÚouterrX   rN   r    rP   rR   r   r   r   Útest_full_outer_join]   rZ   zTestJoin.test_full_outer_joinc                 C   rV   )Nr!   ÚinnerrX   rN   r    rP   rR   r   r   r   Útest_inner_joind   rZ   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)rL   Úsuffixesúkey1.foozkey1.bar©r
   ©r'   r(   r,   Újoinedr   r   r   Útest_handle_overlapk   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    r_   )Úleft_onÚright_onr`   ra   zkey2.barrb   rc   r   r   r   Ú!test_handle_overlap_arbitrary_keyq   s   ûz*TestJoin.test_handle_overlap_arbitrary_keyÚinfer_stringFTÚpyarrow)Ú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 ¡sŸJ ‚tjt	dd�� |j |dd� W d   ƒ n1 s¸w   Y  | 
¡ }d}tjt|d�� |j |dd� W d   ƒ d S 1 sÝw   Y  d S )Nr9   rK   rD   r7   F)Úcheck_namesrE   r:   Úkey©r;   r;   r<   r<   r=   r+   ©r   r$   r   ©r;   r<   r=   rB   )r   r   r$   r$   r   ©rm   r+   r$   r   é   Úone©rC   ÚcolumnsÚfooÚbarÚtwoÚthreer=   z^'E'$©ÚmatchÚEzyYou are trying to merge on float64 and object|string 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'   rJ   ri   rH   rI   Úmergedr(   r,   rd   ÚexpectedÚdf_aÚdf_bÚdf_cÚ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Úfrr   ©Úsize©r;   r<   r)   r4   r7   r8   rB   úFlen\(left_on\) must equal the number of levels in the index of "right"rz   r;   T©rf   Úright_index©r   r   r   r   Úchoicer&   r   Úfrom_productr   r‚   rƒ   r†   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�   rr   r‘   r“   ÚabcrB   r)   zFlen\(right_on\) must equal the number of levels in the index of "left"rz   r<   T)rg   Ú
left_index)r   r   r   r   r˜   r&   r   Úfrom_arraysr   r   r‚   rƒ   r†   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�   rr   r‘   r“   r)   r4   r7   r8   rB   z)len\(right_on\) must equal len\(left_on\)rz   r;   r<   )rg   rf   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 )Nr;   r$   z.Can only merge Series or DataFrame objects, a z was passedrz   )rf   rg   )r   Útyper‚   rƒ   Ú	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 )Nr9   rK   Úkey_0©ru   )r¦   r7   r8   r:   rD   rE   )r}   ÚrenameÚpopr~   r€   )r'   rJ   rH   rI   rˆ   Ú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 )Nr9   rK   r]   rX   r   )r}   ÚreindexÚisnaÚallr~   Úassert_index_equalru   r   )r'   rJ   rH   rI   r‡   ÚcolÚ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 )Nrm   )r;   r;   r>   r<   r<   r=   r+   r   r$   r;   r<   rB   r]   rX   rK   F)Úcheck_dtype)r   r}   Únotnar~   r   r°   rC   ©r'   r(   r,   rd   rˆ   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 )Nrm   rn   r+   ro   rp   rB   rK   ©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 )NrD   r9   rK   ©r}   r~   r€   )r'   rJ   rH   rI   r«   rˆ   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 )	Nr;   r$   r   r<   ©rC   ÚnamerK   r“   rB   )r   r   r}   rC   r~   r€   )r'   r(   Údsr«   rˆ   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)   rB   TÚboolrv   Ústringr4   é   r$   Úintr.   ÚfloatrN   )r   r   Úaranger}   Ú_join_by_handr~   r€   )r'   Ú	join_typeÚdf1r,   rd   rˆ   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   rv   Tr6   r)   rt   r8   r:   r   Ú_oneÚ_two©ÚlsuffixÚrsuffix)ÚA_oneÚB_oneÚC_oneÚD_oneÚA_twoÚB_twoÚC_twoÚD_twor*   )r   r   rÅ   rA   Úint64Úbool_r}   ru   rÆ   r~   r€   )r'   rÈ   r,   rd   Úexpected_columnsrˆ   r   r   r   Útest_join_index_mixed_overlap8  s$   ýý

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   r7   rt   r[   rN   )r   r}   )r'   Úxr   r   r   Útest_join_empty_bugX  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   r;   r<   r§   rÝ   r=   )rÝ   r$   Úq)r   r   r   r   r&   r   r}   )r'   r;   r=   r>   r   r   r   Útest_join_unconsolidated]  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sºJ ‚d S )N)r;   r;   r;   r<   r<   r<   )r$   r   rr   r$   r   rr   ÚfirstÚsecond©Únames)r<   r<   r<   r=   r=   r=   r   é   zvar X)rG   rC   ru   zvar Yr   )Úlevelr[   rN   r$   )r   rž   r   r   r   r   r&   Ú
sort_indexr}   r   ÚvaluesÚunionr­   rã   rC   r~   r€   )r'   Úindex1Úindex2rÈ   r,   rd   Úex_indexrˆ   r   r   r   Útest_join_multiindexj  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)
rw   rw   rw   rv   rv   Úbazrí   Úquxrî   Úsnap)
rx   rs   ry   rs   rx   rs   rx   rx   ry   rs   r   )r    r!   rG   )r)   rr   )Új_oneÚj_twoÚj_threert   r    r!   r]   rX   rà   rá   F)rf   rg   rO   ÚsortT)rg   r�   rO   ró   r$   ©Úaxis)r   r   r   r&   r   r   r}   r
   Úreset_indexr~   r€   Úreindex_likeÚdroprC   Úis_monotonic_increasing)
r'   Ú%lexsorted_two_level_string_multiindexr    r!   rG   rC   Úto_joinrd   rˆ   Ú	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   rr   )r*   r4   rä   rp   r§   r;   r<   ÚmeanÚsum)é   r)   rä   ©r;   r<   r>   T)Úinplacez-Not allowed to merge between different levelsrz   ©r�   r–   )
r   ÚgroupbyÚaggÚ	set_indexr‚   rƒ   ÚpdÚerrorsÚ
MergeErrorr
   )r'   r(   Únew_dfÚ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s™J ‚|jd dks¢J ‚|jd d	ks«J ‚|jd d	ks´J ‚|j|ddd�}	t ||	¡ d S )Nr   )r)   r   r;   r<   ©ru   rA   )r)   r$   r=   Úfloat64Úfloat32r   r4   éd   r×   rp   Úmdr§   Tr•   )r   r   r   r   r&   r  r  r}   ÚdtypesÚintegersÚastyper
   r~   r€   )
r'   r;   r<   rd   r=   r(   ÚxpdfÚsÚrsÚ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)   é   rp   r   r  éÈ   r  éè  éÐ  )r;   r<   r?   r;   r<   r[   rN   rX   r×   )r$   r$   r$   )r)   r  rÝ   )r$   r$   r   )r  r  i,  )r  r  i¸  r]   )rv   rw   rv   rw   rv   rw   rv   rv   )rs   rs   rx   ry   rx   rx   rs   ry   r   r6   ÚTESTr¼   rM   rW   )r   r  r}   r
   rö   ru   r;   r  r<   r~   r€   Úlocr   r   r   r&   r   ÚrepeatrÅ   )r'   rÈ   r,   Údf3Úidf1Úidf2Úidf3r«   Údf_partially_mergedrˆ   r(   r  r]   r[   rM   rW   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)rv   rw   rí   rv   ©r$   r   rr   r*   rq   Úvalue2rp   )rw   rí   rv   rB   rm   T)rL   ró   )rw   rí   rv   rv   )r   rr   r$   r*   )r;   r<   r=   r=   )rm   r+   r(  )r$   r   r   rr   Fr*   )Úexact)	r   r   r}   r~   r€   r°   rC   r   r   )r'   ri   rM   rW   rd   rˆ   r   r   r   Útest_join_sort7  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 )Nr;   r'  )r$   r   rr   r;   rB   r<   )r4   rä   r   r   )r$   rr   rr   r*   )r$   r   rr   rr   r*   r4   rä   r   r“   )r$   r   rr   rr   r;   )r$   r   r   r;   )r   r}   r   Únanr~   r€   )r'   rÈ   r,   r«   rˆ   r!  Údf4r   r   r   Ú test_join_mixed_non_unique_indexP  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)r5   ÚfreqÚpnumrt   r]   Ú_df2)rO   rÎ   r@   r   éÿÿÿÿr$   Úpnum_df2©ru   rC   )r  Úperiod_ranger   r   r   r   r	   r}   r   r   rÅ   r×   r   Úreshaperæ   rC   r~   r€   )r'   rC   r(   r,   r«   rˆ   r   r   r   Ú!test_join_non_unique_period_indexc  s   $ýz*TestJoin.test_join_non_unique_period_indexc                 C   sª   t tj d¡ d¡g d¢d�}| ddd¡ | ddd	¡ | d¡}t d
¡}t	j
t|d�� | ¡  W d   ƒ n1 s=w   Y  |jdd�}| ¡ }|j|dd� d S )Nr   )r  rä   )r;   r<   r=   r>   r?   r�   r§   r   Úidr4   Údtrv   z&agg function failed [how->mean,dtype->rz   T)Únumeric_onlyÚ_right©rÎ   )r   r   r   r   r&   Úinsertr  ÚreÚescaper‚   rƒ   r¤   rþ   Úcountr}   )r'   r(   Úgroupedr�   ÚmnÚcnr   r   r   Ú test_mixed_type_join_with_suffixp  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 s´w   Y  d S )Nr   )r)   rä   Úabcdefr§   r;   r<   r=   r>   r?   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«   rK  Ú	reindexedrˆ   r   rJ  r   Ú_check_diff_indexŽ  s   z2TestJoin.test_join_many.<locals>._check_diff_indexr[   rN   r]   r   z?Joining multiple DataFrames only supported for joining on indexrz   rK   )r   r   r   r   r&   r   r}   r~   r€   rC   r‚   rƒ   r†   )r'   r(   rM  rd   rO  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*   r6   r§   rv   rw   r*   rm   r7   r8   r9   r:   )	r   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   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 sªw   Y  d S )Nr   )r)   r*   )r7   r7   r8   r8   r§   r   r)   r  r‘   r7   r9   r$   rô   Ú_2r=  )r*   r   rÛ   ÚyTr  r[   )r�   r–   rO   z0Passing 'suffixes' which cause duplicate columnsrz   )r	   r   r   r   r   r&   r  r7  r}   ru   r~   r€   r
   r‚   rƒ   r  r  r	  )	r'   r(   rˆ   r«   ÚwrÛ   rS  ÚzÚ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 sœw   Y  d S )Nrœ   Úxyr$   r   )rœ   rX  Únumrâ   Úv1é   rB   Úv2c                 S   s   g | ]}d | ‘qS )r  r   )rI  Úir   r   r   rL  å  ó    z5TestJoin.test_join_multi_to_multi.<locals>.<listcomp>r   rX   r”   rz   )r   r™   r   r   r   r}   rö   r
   r  r~   r€   r‚   rƒ   r†   )	r'   rÇ   Ú	leftindexrM   Ú
rightindexrW   r«   rˆ   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-01r4   zAmerica/Chicago)Ústartr5   ÚtzÚabcde)ÚdateÚvalsz
2018-01-03Útuvwx)re  Úvals_2re  rK   r   Útuvrh  )r   r  Ú
date_ranger   r}   r  r…   r   r   r+  r~   r€   )r'   rÈ   r,   r«   rˆ   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)   )rl  ÚJrÂ   )ú
2013-04-06rm  r  )ro  rn  é   )rÛ   rS  r;   r§   rÛ   zM8[ns])rl  rn  r$   )ro  rm  r   )rÛ   rS  rU  r   r*   r5  rS  rK   z2012-08-02 00:00:00rn  r$   rÂ   z2013-04-06 00:00:00rm  r  )rÛ   rS  rU  r;   rt   )	r   r  Úto_datetimer  r}   r  r   r~   r€   )r'   ÚdfaÚdfbr«   rˆ   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 )Nr;   r<   ©Ú
categoriesÚc1rB   Úc2)rw  rx  )r  ÚCategoricalIndexÚreversedr   r}   r~   r€   )r'   ÚixÚid1Úid2rÈ   r,   r«   rˆ   r   r   r   Ú test_join_with_categorical_index,  s   
þz)TestJoin.test_join_with_categorical_index)4Ú__name__Ú
__module__Ú__qualname__r‚   Úfixturer(   r,   rJ   rU   rY   r\   r^   re   rh   ÚmarkÚparametrizeÚparamÚtdÚ
skip_if_norŽ   r›   rŸ   r    r   Úarrayr¥   r¬   r³   r·   r¹   r»   r¿   rÉ   rÚ   rÜ   rß   rì   rý   r  r  r&  r*  r-  r8  rE  rP  rQ  rW  ra  rk  rt  r~  r   r   r   r   r   #   sf    

	
ÿ
&


 +>!6ÿ
-r   rM   Ú_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)rM   r]   zkey z! should not have been in the join)rW   r]   )
rµ   r¯   r  Ú_restrict_to_columnsru   Ú	get_groupr„   ÚAssertionErrorÚ_assert_all_naÚ_assert_same_contents)rM   rW   r«   rª   rO   rÍ   rÎ   r=   Úleft_groupedÚright_groupedÚ	group_keyÚgroupÚl_joinedÚr_joinedÚlgroupÚerrÚrgroupr   r   r   rQ   <  sD   


ÿþ€ú

ÿþ€úærQ   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)rI  r=   ©ru   Úsuffixr   r   rL  b  s    "z(_restrict_to_columns.<locals>.<listcomp>c                    s   |   ˆ d¡S )Nr™  rš  )rÛ   )r�  r   r   Ú<lambda>j  s    z&_restrict_to_columns.<locals>.<lambda>r§   )ru   r  r¨   )r“  ru   r�  Úfoundr   rœ  r   r‹  a  s   ÿr‹  c                    sd   d}|   |¡ ¡ j}|  |¡ ¡ j}dd„ |D ƒ‰ tˆ ƒt|ƒks#J ‚t‡ fdd„|D ƒƒs0J ‚d S )Niy)íÿc                 S   s   h | ]}t |ƒ’qS r   ©Útuple©rI  Úrowr   r   r   Ú	<setcomp>x  r^  z(_assert_same_contents.<locals>.<setcomp>c                 3   s   � | ]	}t |ƒˆ v V  qd S ©Nr   r¢  ©Úrowsr   r   Ú	<genexpr>z  s   € z(_assert_same_contents.<locals>.<genexpr>)ÚfillnaÚdrop_duplicatesrç   r   r¯   )Ú
join_chunkrI   ÚNA_SENTINELÚjvaluesÚsvaluesr   r¦  r   r�  r  s   r�  c                 C   s,   |D ]}||v r	q| |   ¡  ¡ sJ ‚qd S r¥  )r®   r¯   )r«  Úsource_columnsrª   r=   r   r   r   rŽ  }  s
   ýrŽ  c           	      C   sZ   | j j|j |d�}|  |¡}| |¡}| j |j¡}| ¡ D ]\}}|||< q|j|d�S )NrN   r§   )rC   r}   r­   ru   ÚappendÚitems)	r;   r<   rO   Ú
join_indexÚa_reÚb_reÚ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?   r4   )r$   r   r*   r  râ   ©rG   rC   r�   rä   )r   rr   )r<   r=   r]   rN   )r?   r�   )r$   r   r*   rr   )r;   r<   r>   r=   rB   ©r   r   Úfrom_tuplesr}   r~   r€   )rM   rW   r«   rˆ   r   r   r   Ú.test_join_inner_multiindex_deterministic_order‘  s   þÿþr¹  )Ú	input_colÚoutput_colsr<   r;   Úa_xÚ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 )Nr;   r$   rr   r*   Úcrossr‰  rŠ  )rO   rÍ   rÎ   r   )r$   r$   rr   rr   )rr   r*   rr   r*   r¸   )rº  r»  rM   rW   r«   rˆ   r   r   r   Útest_join_cross¢  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�}| 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 )Nr=   rr   )r$   r   r“   râ   r¶  r>   r*   )r   )r<   rN   rW   )r=   r>   )r   r$   r<   r;   rB   r·  )rÇ   rM   rW   r«   rˆ   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 )Nr7   ru  r$   r   )rà   rá   r+   rà   rá   )r7   r7   r8   )rr   r*   r4   Ú_leftr<  rÌ   rr   r*   )rà   rá   Ú
value_leftÚvalue_right©r   r   r  r}   r~   r€   )rv  rç   rM   rW   r«   rˆ   r   r   r   Ú1test_join_multiindex_not_alphabetical_categoricalÂ  s6   
ýÿ
ú
ýÿ
ú
üÿ
ùrÉ  zleft_empty, how, exp)
)FrM   rM   )FrW   Úempty)Fr]   rÊ  )Fr[   rM   )Fr¾  rÊ  )TrM   rÊ  )TrW   rW   )Tr]   rÊ  )Tr[   rW   )Tr¾  rÊ  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$   rr   r*   )r7   r8   r×   r@   r7   r4   )r7   r9   r   rN   rM   )r7   r8   r9   rW   )r8   r7   r9   rÊ  r8   r9   r  r¾  r[   )
r   r  Úheadr}   r   r+  Úrename_axisræ   r~   r€   )Ú
left_emptyrO   ÚexprM   rW   r«   rˆ   r   r   r   Útest_join_emptyë  s&    
 
rÏ  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§   rv   ©rw   rí   )rÑ  rv   rÐ  )r   r~   r€   )rÈ   r,   r!  r«   rˆ   r   r   r   Ú$test_join_empty_uncomparable_columns  s   rÒ  zhow, valuesr]   ro   r[   rW   ©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 )	Nro   rp   r;   r<   rÓ  r  )r;   r<   r=   r>   rN   rÈ  )rO   rç   rÈ   r,   rˆ   r«   r   r   r   Ú3test_join_multiindex_categorical_output_index_dtype(  s6   

ýÿ
ú

ýÿ
úüÿ
ù	rÔ  )r   r   )rM   r‰  rŠ  )rM   )'r?  Únumpyr   r‚   Úpandas.util._test_decoratorsÚutilÚ_test_decoratorsr†  Úpandasr  r   r   r   r   r   r   r   r	   r
   r   Úpandas._testingÚ_testingr~   r   r   rQ   r‹  r�  rŽ  rÆ   r¹  rƒ  r„  r¿  rÀ  rÉ  rÏ  rÒ  rÔ  r   r   r   r   Ú<module>   sh    0
      
%
ÿ
	þüþ
þ




üþ	