o
    Û­jØ“  ã                   @   sÀ  d dl Z d dlZd dlZd dlmZ d dlm  mZ	 d dl
Zd dl
mZmZmZmZmZmZmZmZmZmZ d dlmZ d>dd„ZG dd	„ d	ƒZd?dd„Zdd„ Zdd„ Zdd„ Zd@dd„Zdd„ Z ej! "ddddgfdddgfg¡dd„ ƒZ#d d!„ Z$ej! "d"d#d$gg d%¢fd&d'gg d(¢fd)d*gg d+¢fed,ƒed-ƒged,ƒed-ƒed-ƒgfg¡d.d/„ ƒZ%ej! "d0g d1¢¡d2d3„ ƒZ&d4d5„ Z'ej! "d6d7g d8¢fd9g d8¢fd
g d8¢fd:g d;¢fg¡d<d=„ ƒZ(dS )Aé    N)Úusing_string_dtype)
ÚCategoricalÚ	DataFrameÚIndexÚ
MultiIndexÚSeriesÚ	TimestampÚbdate_rangeÚconcatÚmergeÚoption_contexté   é2   c                 C   sf   t t| ƒƒ}t t |||  ¡¡}t|ƒ|k r(t t |ƒ|d |t|ƒ …  ¡}tj d¡ |¡ |S )Né   )	ÚlistÚrangeÚnpÚasarrayÚtileÚlenÚrandomÚdefault_rngÚshuffle)ÚngroupsÚnÚunique_groupsÚarr© r   úa/var/www/html/CropPilot/venv/lib/python3.10/site-packages/pandas/tests/reshape/merge/test_join.pyÚget_test_data   s   "r   c                
   @   sÔ  e Zd Zejdd„ ƒZejdd„ ƒZejdd„ ƒZdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zej ddejde d¡d�g¡dd„ ƒZdd„ Zdd„ Zdd„ Zej d d!d"d#e d$d%g¡g¡d&d'„ ƒZd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Z d6d7„ Z!ejj"e#ƒ d8d9�d:d;„ ƒZ$d<d=„ Z%d>d?„ Z&d@dA„ Z'dBdC„ Z(dDdE„ Z)dFdG„ Z*ej ddejde d¡d�g¡dHdI„ ƒZ+dJdK„ Z,dLdM„ Z-dNdO„ Z.dPdQ„ Z/dRdS„ Z0dTdU„ Z1dVdW„ Z2dXdY„ Z3dZd[„ Z4d\d]„ Z5d#S )^ÚTestJoinc                 C   sF   t tƒ tƒ tj d¡ d¡tj d¡ d¡dœƒ}||d dk }|S )Nr   r   )Úkey1Ú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   Ú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.   )Úfoo1Úfoo2Úfoo3Úfoo4Úfoo5z1/1/2009é   )Úperiods©ÚAÚBÚCÚD)ÚaÚbÚcÚdÚe©Údtype©Úindexr8   r;   )ÚMergedAÚMergedDr:   )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_joinQ   s   
zTestJoin.test_left_outer_joinc                 C   óL   t ||ddd�}t|||dgdd� t ||dd�}t|||ddgdd� d S )Nr"   Úright©rM   rP   rO   r!   rQ   rS   r   r   r   Útest_right_outer_joinX   ó   zTestJoin.test_right_outer_joinc                 C   rW   )Nr"   ÚouterrY   rO   r!   rQ   rS   r   r   r   Útest_full_outer_join_   r[   zTestJoin.test_full_outer_joinc                 C   rW   )Nr"   ÚinnerrY   rO   r!   rQ   rS   r   r   r   Útest_inner_joinf   r[   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)rM   Ú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!   r`   )Úleft_onÚright_onra   rb   zkey2.barrc   rd   r   r   r   Ú!test_handle_overlap_arbitrary_keys   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 )Nr:   rL   rE   r8   F)Úcheck_namesrF   r;   Úkey©r<   r<   r=   r=   r>   r,   ©r   r%   r   ©r<   r=   r>   rC   )r   r   r%   r%   r   ©rn   r,   r%   r   é   Úone©rD   ÚcolumnsÚfooÚbarÚtwoÚthreer>   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(   rK   rj   rI   rJ   Úmergedr)   r-   re   Ú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Úfrs   ©Úsize©r<   r=   r*   r5   r8   r9   rC   úFlen\(left_on\) must equal the number of levels in the index of "right"r{   r<   T©rg   Ú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‘   rs   r’   r”   ÚabcrC   r*   zFlen\(right_on\) must equal the number of levels in the index of "left"r{   r=   T)rh   Ú
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‘   rs   r’   r”   r*   r5   r8   r9   rC   z)len\(right_on\) must equal len\(left_on\)r{   r<   r=   )rh   rg   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 passedr{   )rg   rh   )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 )Nr:   rL   Úkey_0©rv   )r§   r8   r9   r;   rE   rF   )r~   ÚrenameÚpopr   r�   )r(   rK   rI   rJ   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 )Nr:   rL   r^   rY   r   )r~   ÚreindexÚisnaÚallr   Úassert_index_equalrv   r   )r(   rK   rI   rJ   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 )Nrn   )r<   r<   r?   r=   r=   r>   r,   r   r%   r<   r=   rC   r^   rY   rL   F)Úcheck_dtype)r   r~   Únotnar   r€   r±   rD   ©r(   r)   r-   re   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 )Nrn   ro   r,   rp   rq   rC   rL   ©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 )NrE   r:   rL   ©r~   r   r�   )r(   rK   rI   rJ   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=   ©rD   ÚnamerL   r”   rC   )r   r   r~   rD   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*   rC   TÚboolrw   Ústringr5   é   r%   Úintr/   ÚfloatrO   )r   r   Úaranger~   Ú_join_by_handr   r�   )r(   Ú	join_typeÚdf1r-   re   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   rw   Tr7   r*   ru   r9   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Æ   rB   Úint64Úbool_r~   rv   rÇ   r   r�   )r(   rÉ   r-   re   Úexpected_columnsr‰   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 )Nrs   r   r8   ru   r\   rO   )r   r~   )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   r<   r=   r¨   rß   r>   )rß   r%   Úq)r   r   r   r   r'   r   r~   )r(   r<   r>   r?   r   r   r   Útest_join_unconsolidateda  s   ÿ
z!TestJoin.test_join_unconsolidatedc                 C   sx  t jg d¢g d¢gddgd�}t jg d¢g d¢gddgd�}ttj d¡ d¡|d	gd
�}ttj d¡ d¡|dgd
�}|jdd�}|jdd�}|j|dd�}t	|j
ƒ t	|j
ƒ¡}| |¡ | |¡¡}|j|j_t ||¡ |jj|jksyJ ‚|jdd�}|jdd�}|j|dd�jdd�}t	|j
ƒ t	|j
ƒ¡}| |¡ | |¡¡}|j|j_t ||¡ |jj|jksºJ ‚d S )N)r<   r<   r<   r=   r=   r=   )r%   r   rs   r%   r   rs   ÚfirstÚsecond©Únames)r=   r=   r=   r>   r>   r>   r   é   zvar X)rH   rD   rv   zvar Yr   )Úlevelr\   rO   r%   )r   rŸ   r   r   r   r   r'   Ú
sort_indexr~   r   ÚvaluesÚunionr®   rå   rD   r   r�   )r(   Úindex1Úindex2rÉ   r-   re   Úex_indexr‰   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)
rx   rx   rx   rw   rw   Úbazrï   Úquxrð   Úsnap)
ry   rt   rz   rt   ry   rt   ry   ry   rz   rt   r   )r!   r"   rH   )r*   rs   )Új_oneÚj_twoÚj_threeru   r!   r"   r^   rY   râ   rã   F)rg   rh   rP   ÚsortT)rh   rž   rP   rõ   r%   ©Úaxis)r   r   r   r'   r   r   r~   r   Úreset_indexr   r�   Úreindex_likeÚdroprD   Úis_monotonic_increasing)
r(   Ú%lexsorted_two_level_string_multiindexr!   r"   rH   rD   Úto_joinre   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   rs   )r+   r5   ræ   rq   r¨   r<   r=   ÚmeanÚsum)é   r*   ræ   ©r<   r=   r?   T)Úinplacez-Not allowed to merge between different levelsr{   ©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=   ©rv   rB   )r*   r%   r>   Úfloat64Úfloat32r   r5   éd   rØ   rq   Úmdr¨   Tr–   )r   r   r   r   r'   r  r  r~   ÚdtypesÚintegersÚastyper   r   r�   )
r(   r<   r=   re   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*   é   rq   r   r  éÈ   r  éè  éÐ  )r<   r=   r@   r<   r=   r\   rO   rY   rØ   )r%   r%   r%   )r*   r  rß   )r%   r%   r   )r  r  i,  )r  r  i¸  r^   )rw   rx   rw   rx   rw   rx   rw   rw   )rt   rt   ry   rz   ry   ry   rt   rz   r   r7   ÚTESTr½   rN   rX   )r   r  r~   r   rø   rv   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\   rN   rX   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)rw   rx   rï   rw   ©r%   r   rs   r+   rr   Úvalue2rq   )rx   rï   rw   rC   rn   T)rM   rõ   )rx   rï   rw   rw   )r   rs   r%   r+   )r<   r=   r>   r>   )rn   r,   r*  )r%   r   r   rs   Fr+   )Úexact)	r   r   r~   r   r�   r±   rD   r   r   )r(   rj   rN   rX   re   r‰   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 )Nr<   r)  )r%   r   rs   r<   rC   r=   )r5   ræ   r  r   )r%   rs   rs   r+   )r%   r   rs   rs   r+   r5   ræ   r  r”   )r%   r   rs   rs   r<   )r%   r   r   r<   )r   r~   r   Únanr   r�   )r(   rÉ   r-   r¬   r‰   r#  Ú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)r6   ÚfreqÚpnumru   r^   Ú_df2)rP   rÏ   rA   r   éÿÿÿÿr%   Úpnum_df2©rv   rD   )r	  Úperiod_ranger   r   r   r   r
   r~   r   r   rÆ   rØ   r"  Úreshaperè   rD   r   r�   )r(   rD   r)   r-   r¬   r‰   r   r   r   Ú!test_join_non_unique_period_indexg  s   $ýz*TestJoin.test_join_non_unique_period_indexc                 C   s²   t tj d¡ d¡g d¢d�}| ddd¡ | ddd	¡ | d¡}t d
¡}|r+d}t	j
t|d�� | ¡  W d   ƒ n1 sAw   Y  |jdd�}| ¡ }|j|dd� d S )Nr   )r  ræ   )r<   r=   r>   r?   r@   r‘   r¨   r   Úidr5   Údtrw   z&agg function failed [how->mean,dtype->z-dtype 'str' does not support operation 'mean'r{   T)Únumeric_onlyÚ_right©rÏ   )r   r   r   r   r'   Úinsertr  ÚreÚescaperƒ   r„   r¥   r   Úcountr~   )r(   Úusing_infer_stringr)   ÚgroupedrŽ   ÚmnÚcnr   r   r   Ú test_mixed_type_join_with_suffixt  s    þ


ÿz)TestJoin.test_mixed_type_join_with_suffixc                 C   sv  t tj d¡ d¡tdƒd�}|ddg |ddg |d	d
g g}|d  |dd … ¡}t ||¡ |ddg d d… |ddg dd … |d	d
g dd… g}dd„ }|d j|dd … dd�}||||j	ƒ |d  |dd … ¡}||||d j	ƒ |d j|dd … dd�}||||j	dd… ƒ d}t
jt|d�� |d j|dd … dd� W d   ƒ d S 1 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¬   rN  Ú	reindexedr‰   r   rM  r   Ú_check_diff_index”  s   z2TestJoin.test_join_many.<locals>._check_diff_indexr\   rO   r^   r   z?Joining multiple DataFrames only supported for joining on indexr{   rL   )r   r   r   r   r'   r   r~   r   r�   rD   rƒ   r„   r‡   )r(   r)   rP  re   rR  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+   r7   r¨   rw   rx   r+   rn   r8   r9   r:   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+   )r8   r8   r9   r9   r¨   r   r*   r  r’   r8   r:   r%   rö   Ú_2r?  )r+   r   rÝ   ÚyTr  r\   )rž   r—   rP   z0Passing 'suffixes' which cause duplicate columnsr{   )r
   r   r   r   r   r'   r  r9  r~   rv   r   r�   r   rƒ   r„   r	  r
  r  )	r(   r)   r‰   r¬   ÚwrÝ   rV  Ú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�   r[  Únumrä   Úv1é   rC   Úv2c                 S   s   g | ]}d | ‘qS )r  r   )rL  Úir   r   r   rO  ë  ó    z5TestJoin.test_join_multi_to_multi.<locals>.<listcomp>r  rY   r•   r{   )r   rš   r   r   r   r~   rø   r   r  r   r�   rƒ   r„   r‡   )	r(   rÈ   Ú	leftindexrN   Ú
rightindexrX   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-01r5   zAmerica/Chicago)Ústartr6   ÚtzÚabcde)ÚdateÚvalsz
2018-01-03Útuvwx)rh  Úvals_2rh  rL   r   Útuvrk  )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*   )ro  ÚJrÃ   )ú
2013-04-06rp  r  )rr  rq  é   )rÝ   rV  r<   r¨   rÝ   zM8[ns])ro  rq  r%   )rr  rp  r   )rÝ   rV  rX  r   r+   r7  rV  rL   z2012-08-02 00:00:00rq  r%   rÃ   z2013-04-06 00:00:00rp  r  )rÝ   rV  rX  r<   ru   )	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Úc1rC   Úc2)rz  r{  )r	  ÚCategoricalIndexÚreversedr   r~   r   r�   )r(   ÚixÚid1Úid2rÉ   r-   r¬   r‰   r   r   r   Ú test_join_with_categorical_index2  s   
þz)TestJoin.test_join_with_categorical_index)6Ú__name__Ú
__module__Ú__qualname__rƒ   Úfixturer)   r-   rK   rV   rZ   r]   r_   rf   ri   ÚmarkÚparametrizeÚparamÚtdÚ
skip_if_nor�   rœ   r    r¡   r   Úarrayr¦   r­   r´   r¸   rº   r¼   rÀ   rÊ   rÛ   Úxfailr   rÞ   rá   rî   rÿ   r  r  r(  r,  r/  r:  rH  rS  rT  rZ  rd  rn  rw  r�  r   r   r   r   r    %   sh    

	
ÿ
&


!
+>!6ÿ
-r    rN   Ú_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)rN   r^   zkey z! should not have been in the join)rX   r^   )
r¶   r°   r  Ú_restrict_to_columnsrv   Ú	get_groupr…   ÚAssertionErrorÚ_assert_all_naÚ_assert_same_contents)rN   rX   r¬   r«   rP   rÎ   rÏ   r>   Úleft_groupedÚright_groupedÚ	group_keyÚgroupÚl_joinedÚr_joinedÚlgroupÚerrÚrgroupr   r   r   rR   B  sD   


ÿþ€ú

ÿþ€úærR   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)rL  r>   ©rv   Úsuffixr   r   rO  h  s    "z(_restrict_to_columns.<locals>.<listcomp>c                    s   |   ˆ d¡S )Nr�  rž  )rÝ   )r¡  r   r   Ú<lambda>p  s    z&_restrict_to_columns.<locals>.<lambda>r¨   )rv   r!  r©   )r—  rv   r¡  Úfoundr   r   r   r�  g  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©rL  Úrowr   r   r   Ú	<setcomp>~  ra  z(_assert_same_contents.<locals>.<setcomp>c                 3   s   � | ]	}t |ƒˆ v V  qd S ©Nr¤  r¦  ©Úrowsr   r   Ú	<genexpr>€  s   € z(_assert_same_contents.<locals>.<genexpr>)ÚfillnaÚdrop_duplicatesré   r   r°   )Ú
join_chunkrJ   ÚNA_SENTINELÚjvaluesÚsvaluesr   rª  r   r“  x  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 )NrO   r¨   )rD   r~   r®   rv   ÚappendÚitems)	r<   r=   rP   Ú
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@   r5   )r%   r   r+   r  rä   ©rH   rD   r‘   ræ   )r   rs   )r=   r>   r^   rO   )r@   r‘   )r%   r   r+   rs   )r<   r=   r?   r>   rC   ©r   r   Úfrom_tuplesr~   r   r�   )rN   rX   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%   rs   r+   Úcrossr�  rŽ  )rP   rÎ   rÏ   r   )r%   r%   rs   rs   )rs   r+   rs   r+   r¹   )r¾  r¿  rN   rX   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>   rs   )r%   r   r”   rä   rº  r?   r+   )r   )r=   rO   rX   )r>   r?   )r   r%   r=   r<   rC   r»  )rÈ   rN   rX   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 )Nr8   rx  r%   r   )râ   rã   r,   râ   rã   )r8   r8   r9   )rs   r+   r5   Ú_leftr>  rÍ   rs   r+   )râ   rã   Ú
value_leftÚvalue_right©r   r   r  r~   r   r�   )ry  ré   rN   rX   r¬   r‰   r   r   r   Ú1test_join_multiindex_not_alphabetical_categoricalÈ  s6   
ýÿ
ú
ýÿ
ú
üÿ
ùrÍ  zleft_empty, how, exp)
)FrN   rN   )FrX   Úempty)Fr^   rÎ  )Fr\   rN   )FrÂ  rÎ  )TrN   rÎ  )TrX   rX   )Tr^   rÎ  )Tr\   rX   )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%   rs   r+   )r8   r9   rØ   rA   r8   r5   )r8   r:   r   rO   rN   )r8   r9   r:   rX   )r9   r8   r:   rÎ  r9   r:   r  rÂ  r\   )
r   r  Úheadr~   r   r-  Úrename_axisrè   r   r�   )Ú
left_emptyrP   ÚexprN   rX   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¨   rw   ©rx   rï   )rÕ  rw   rÔ  )r   r   r�   )rÉ   r-   r#  r¬   r‰   r   r   r   Ú$test_join_empty_uncomparable_columns  s   rÖ  zhow, valuesr^   rp   r\   rX   ©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 )	Nrp   rq   r<   r=   r×  r  )r<   r=   r>   r?   rO   rÌ  )rP   ré   rÉ   r-   r‰   r¬   r   r   r   Ú3test_join_multiindex_categorical_output_index_dtype.  s6   

ýÿ
ú

ýÿ
úüÿ
ù	rØ  )r   r   )rN   r�  rŽ  )rN   ))rA  Únumpyr   rƒ   Úpandas._configr   Úpandas.util._test_decoratorsÚutilÚ_test_decoratorsr‰  Úpandasr	  r   r   r   r   r   r   r	   r
   r   r   Úpandas._testingÚ_testingr   r   r    rR   r�  r“  r’  rÇ   r½  r†  r‡  rÃ  rÄ  rÍ  rÓ  rÖ  rØ  r   r   r   r   Ú<module>   sj    0
      
#%
ÿ
	þüþ
þ




üþ	