
    Owg                        d dl Z d dlZd dlZd dlmc 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Z G d d      Zd-dZd Zd	 Zd
 Zd.dZd Zej>                  jA                  ddddgfdddgfg      d        Z!d Z"ej>                  jA                  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         Z#ej>                  jA                  d!g d"      d#        Z$d$ Z%ej>                  jA                  d%d&g d'fd(g d'fdg d'fd)g d*fg      d+        Z&y)/    N)
Categorical	DataFrameIndex
MultiIndexSeries	Timestampbdate_rangeconcatmergeoption_contextc           	      ^   t        t        |             }t        j                  t        j                  ||| z              }t        |      |k  r0t        j                  t        |      |d |t        |      z
   z         }t        j                  j                  d      j                  |       |S )N   )	listrangenpasarraytilelenrandomdefault_rngshuffle)ngroupsnunique_groupsarrs       [/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/tests/reshape/merge/test_join.pyget_test_datar      s    w(M
**RWW]AL9
:C
3x!|jjc]>QS\%BBCII!$$S)J    c            
          e Zd Zej                  d        Zej                  d        Zej                  d        Zd Zd Z	d Z
d Zd Zd	 Zej                  j                  d
d ej                   d ej$                  d            g      d        Zd Zd Zd Zej                  j                  dddd ej0                  ddg      g      d        Zd Zd Zd Zd Zd Zd Zd  Z d! Z!d" Z"d# Z#d$ Z$d% Z%d& Z&d' Z'd( Z(ej                  j                  d
d ej                   d ej$                  d            g      d)        Z)d* Z*d+ Z+d, Z,d- Z-d. Z.d/ Z/d0 Z0d1 Z1d2 Z2d3 Z3y)4TestJoinc                    t        t               t               t        j                  j	                  d      j                  d      t        j                  j	                  d      j                  d      d      }||d   dkD     }|S )Nr   2   )key1key2data1data2r$      r   r   r   r   r   standard_normal)selfdfs     r   r+   zTestJoin.df%   sn    %%..q1AA"E..q1AA"E	
 6
Q	r   c                     t        t        d      t        dd      t        j                  j	                  d      j                  d      d      S )N
   )r      )r   r   r   )r#   r$   valuer(   )r*   s    r   df2zTestJoin.df24   sC    %+%a26..q1AA"E
 	
r   c                     g dg dg dt        dd      d}t        |t        g dt        	      
      }t        |d   |d   d|d   
      }||fS )N)              ?g       @g      @g      @)r2   r3   r2   r3   r2   )foo1foo2foo3foo4foo5z1/1/2009   )periodsABCD)abcdedtypeindexr<   r?   )MergedAMergedDr>   )r	   r   r   object)r*   datatargetsources       r   target_sourcezTestJoin.target_source>   sb     +*9Z3	
 4u-Ff'UV S	d3i8S	
 v~r   c                 ~    t        ||d      }t        |||dgd       t        ||      }t        |||ddgd       y )Nr$   onlefthowr#   r   _check_joinr*   r+   r0   joined_key2joined_boths        r   test_left_outer_joinzTestJoin.test_left_outer_joinO   sB    B/B[6(?BnB[66*:Gr   c                     t        ||dd      }t        |||dgd       t        ||d      }t        |||ddgd       y )Nr$   rightrR   rU   rT   r#   rV   rX   s        r   test_right_outer_joinzTestJoin.test_right_outer_joinV   G    BG<B[6(@B1B[66*:Hr   c                     t        ||dd      }t        |||dgd       t        ||d      }t        |||ddgd       y )Nr$   outerr^   rT   r#   rV   rX   s        r   test_full_outer_joinzTestJoin.test_full_outer_join]   r`   r   c                     t        ||dd      }t        |||dgd       t        ||d      }t        |||ddgd       y )Nr$   innerr^   rT   r#   rV   rX   s        r   test_inner_joinzTestJoin.test_inner_joind   r`   r   c                 :    t        ||dd      }d|v sJ d|v sJ y )Nr$   z.fooz.bar)rR   suffixeskey1.foozkey1.barr   r*   r+   r0   joineds       r   test_handle_overlapzTestJoin.test_handle_overlapk   s/    r364DEV###V###r   c                 <    t        ||ddd      }d|v sJ d|v sJ y )Nr$   r#   rh   )left_onright_onri   rj   zkey2.barrk   rl   s       r   !test_handle_overlap_arbitrary_keyz*TestJoin.test_handle_overlap_arbitrary_keyq   s9    %
 V###V###r   infer_stringFTpyarrow)marksc                    |\  }}|j                  |d      }t        j                  |d   |d   d       t        j                  |d   |d   d       t        d	g d
i      }t        dg dig d      }|j                  |d	      }t        g d
g dd      }	t        j                  ||	       t        dgdgdggg ddg      }
t        dgdggddgdg      }t        dgdggddgdg      }|
j                  |d      }|j                  |d      }t        j                  |d   d         sJ t        j                  |d   d         sJ t        j                  t        d      5  |j                  |d       d d d        |j                         }d}t        j                  t        |      5  |j                  |d       d d d        y # 1 sw Y   SxY w# 1 sw Y   y xY w)Nr>   rQ   rI   r<   F)check_namesrJ   r?   keyr@   r@   rA   rA   rB   r/   r   r'   r   r@   rA   rB   rG   )r   r   r'   r'   r   rx   r/   r'   r      onerH   columnsfoobartwothreerB   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*   rO   rs   rM   rN   mergedr+   r0   rm   expecteddf_adf_bdf_csource_copymsgs                  r   test_join_onzTestJoin.test_join_on|   s    'V,
vi0&+5Q
vi0&+5Q 89:),OD'-H
 	fh/ 1#sQC%Q5'E7+Aq6E7K1#sAq6G9E4E*Te,xxuc*+++xxw,--- ]]873 	(KK3K'	( kkmC 	 ]]:S1 	-KKK,	- 	-	( 	(	- 	-s   .G7G G G)c                 r   t        t        j                  j                  d      j	                  ddgd      t        j                  j                  d      j                  d      d      }t        t        j                  j                  d      j	                  ddgd      t        j                  j                  d      j                  d      dt        j                  t        d      d	d
gg            }d}t        j                  t        |      5  t        ||dd       d d d        y # 1 sw Y   y xY w)Nr   mfr}   sizer@   rA   r-   r9   r<   r=   rG   Flen\(left_on\) must equal the number of levels in the index of "right"r   r@   Trp   right_indexr   r   r   r   choicer)   r   from_productr   r   r   r   r   r*   r+   r0   r   s       r   -test_join_on_fails_with_different_right_indexz6TestJoin.test_join_on_fails_with_different_right_index   s    YY**1-44c3Za4HYY**1-==a@
 YY**1-44c3Zb4IYY**1-==bA ))58c3Z*@A
 X]]:S1 	:"c3D9	: 	: 	:s   D--D6c           	         t        t        j                  j                  d      j	                  ddgd      t        j                  j                  d      j                  d      dt        j                  t        d      t        d      g            }t        t        j                  j                  d      j	                  ddgd	      t        j                  j                  d      j                  d	      d      }d
}t        j                  t        |      5  t        ||dd       d d d        y # 1 sw Y   y xY w)Nr   r   r   r}   r   r   abcrG   r-   zFlen\(right_on\) must equal the number of levels in the index of "left"r   rA   T)rq   
left_index)r   r   r   r   r   r)   r   from_arraysr   r   r   r   r   r   r   s       r   ,test_join_on_fails_with_different_left_indexz5TestJoin.test_join_on_fails_with_different_left_index   s    YY**1-44c3Za4HYY**1-==a@ ((%(DK)@A
 YY**1-44c3Zb4IYY**1-==bA
 X]]:S1 	:"cCD9	: 	: 	:s   D44D=c                 v   t        t        j                  j                  d      j	                  ddgd      t        j                  j                  d      j                  d      d      }t        t        j                  j                  d      j	                  ddgd      t        j                  j                  d      j                  d      dt        j                  t        d      d	d
gg            }d}t        j                  t        |      5  t        ||dddg       d d d        y # 1 sw Y   y xY w)Nr   r   r   r}   r   r   r-   r9   r<   r=   rG   z)len\(right_on\) must equal len\(left_on\)r   r@   rA   )rq   rp   r   r   s       r   /test_join_on_fails_with_different_column_countsz8TestJoin.test_join_on_fails_with_different_column_counts   s   YY**1-44c3Za4HYY**1-==a@
 YY**1-44c3Zb4IYY**1-==bA ))58c3Z*@A
 ;]]:S1 	="cC#s<	= 	= 	=s   D//D8
wrong_typer   strNr   r'   c                 <   t        dddgi      }dt        |       d}t        j                  t        |      5  t        ||dd       d d d        t        j                  t        |      5  t        ||dd       d d d        y # 1 sw Y   =xY w# 1 sw Y   y xY w)Nr@   r'   z.Can only merge Series or DataFrame objects, a z was passedr   )rp   rq   )r   typer   r   	TypeErrorr   )r*   r   r+   r   s       r   )test_join_on_fails_with_wrong_object_typez2TestJoin.test_join_on_fails_with_wrong_object_type   s     aV}%j!"+/ 	 ]]9C0 	=*b#<	=]]9C0 	="j#<	= 	=	= 	=	= 	=s   B-BBBc                     |\  }}|j                  |d      }|j                  ddi      }|g d   }|j                  d      }|j                  ||      }t        j                  ||       y )Nr>   rQ   key_0r   )r   r<   r=   r?   rI   rJ   )r   renamepopr   r   )r*   rO   rM   rN   r   join_colresults          r   test_join_on_pass_vectorz!TestJoin.test_join_on_pass_vector   sk    &;;v#;.??C>?:JK::c?V1
fh/r   c                 l   |\  }}|j                  |j                  g       d      }|D ]+  }||v sJ ||   j                         j                         r+J  |j                  |j                  g       dd      }t	        j
                  |j                  |j                         t        |      dk(  sJ y )Nr>   rQ   re   r^   r   )r   reindexisnaallr   assert_index_equalr   r   )r*   rO   rM   rN   r   colmerged2s          r   test_join_with_len0zTestJoin.test_join_with_len0   s    &V^^B/C8 	,C&= =#;##%))+++	, ++fnnR0Sg+F
goov~~>7|q   r   c                    t        dg di      }t        dddgiddg      }|j                  |dd	
      }|j                  |d      }||d   j                            }t        j                  |d   |d          t        j                  |d   |d   d       t        j
                  |j                  |j                         y )Nrx   )r@   r@   rC   rA   rA   rB   r/   r   r'   r@   rA   rG   re   r^   rQ   F)check_dtype)r   r   notnar   r   r   rH   r*   r+   r0   rm   r   s        r   test_join_on_innerzTestJoin.test_join_on_inner  s    =>?1a&)#s<G477357)HW-3356
ve}huo>
vg0AuU
fllHNN;r   c                     t        dg di      }t        dg dig d      }|j                  |dg      }|j                  |d      }t        j                  ||       y )Nrx   ry   r/   rz   r{   rG   rQ   r   r   r   r   r   s        r   test_join_on_singlekey_listz$TestJoin.test_join_on_singlekey_list  s[    89:),OD %)77357)
fh/r   c                     |\  }}|j                  |d   d      }|j                  |dg   d      }t        j                  ||       y )NrI   r>   rQ   )r   r   r   )r*   rO   rM   rN   r   r   s         r   test_join_on_serieszTestJoin.test_join_on_series  sK    &VI.37;;vyk2s;;
fh/r   c                     t        dddgi      }t        dgdgd      }|j                  |d      }t        ddgddgd|j                        }t	        j
                  ||       y )	Nr@   r'   r   rA   rH   namerQ   r   rG   )r   r   r   rH   r   r   )r*   r+   dsr   r   s        r   test_join_on_series_bugletz#TestJoin.test_join_on_series_buglet  se    aV}%QCs-$Aq6A7rxxH
fh/r   c                    t        t        j                  d            }d|d<   d|d<   t        t        j                  dd            }d	|d
<   d|d<   |j                  ||      }t	        |||      }t        j                  ||       |j                  ||      }t	        |||      }t        j                  ||       y )Nr-   rG   Tboolr   stringr9      r'   intr3   floatrT   )r   r   aranger   _join_by_handr   r   )r*   	join_typedf1r0   rm   r   s         r   test_join_index_mixedzTestJoin.test_join_index_mixed&  s    biim,FHbii2./E
G#9- cy9
fh/#9- cy9
fh/r   c                    t        dddddt        j                  d      g d      }|d   j                  t        j                  k(  sJ |d	   j                  t        j
                  k(  sJ t        dddddt        j                  d
dd      g d      }|j                  |dd      }g d}|d d |_        |dd  |_        t        ||      }t        j                  ||       y )Nr3   r   r   Tr;   r-   r   r=   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   rF   int64bool_r   r   r   r   r   )r*   r   r0   rm   expected_columnsr   s         r   test_join_index_mixed_overlapz&TestJoin.test_join_index_mixed_overlap8  s    AE5))B-(

 3x~~)))3x~~)))AE5))Ar1%(
 #vv>	
 'r*&qr* c*
fh/r   c                 \    t               }|j                  t        dgdgdg      d       y )Nr}   r   r<   r   rb   rT   )r   r   )r*   xs     r   test_join_empty_bugzTestJoin.test_join_empty_bugX  s(    K	y!QC#7WEr   c                    t        t        j                  j                  d      j	                  d      ddg      }t        t        j                  j                  d      j	                  d            }||d<   t        t        j                  j                  d      j	                  d      d	g      }|j                  |       |j                  |       y )
Nr   )   r   r@   rA   r   r   rB   )r   r'   q)r   r   r   r   r)   r   r   )r*   r@   rB   rC   s       r   test_join_unconsolidatedz!TestJoin.test_join_unconsolidated]  s    II!!!$44W=Sz
 299((+;;B?@#bii++A.>>wGRUQVW 	
q		q	r   c                 X   t        j                  g dg dgddg      }t        j                  g dg dgddg      }t        t        j                  j                  d      j                  d      |d	g
      }t        t        j                  j                  d      j                  d      |dg
      }|j                  d      }|j                  d      }|j                  |d      }t        |j                        j                  t        |j                              }|j                  |      j                  |j                  |            }|j                  |j                  _        t        j                   ||       |j                  j                  |j                  k(  sJ |j                  d      }|j                  d      }|j                  |d      j                  d      }t        |j                        j                  t        |j                              }|j                  |      j                  |j                  |            }|j                  |j                  _        t        j                   ||       |j                  j                  |j                  k(  sJ y )N)r@   r@   r@   rA   rA   rA   )r'   r   r}   r'   r   r}   firstsecondnames)rA   rA   rA   rB   rB   rB   r      zvar X)rL   rH   r   zvar Yr   )levelrb   rT   r'   )r   r   r   r   r   r   r)   
sort_indexr   r   valuesunionr   r   rH   r   r   )r*   index1index2r   r0   rm   ex_indexr   s           r   test_join_multiindexzTestJoin.test_join_multiindexj  s   ''+-?@H%

 ''+-?@H%

 &&q)99!<I

 &&q)99!<I
 nn1n%nn1n%#7+'--eFMM.BC;;x(--ckk(.CD%||
fh/||!!V\\111nn1n%nn1n%#7+66Q6?'--eFMM.BC;;x(--ckk(.CD%||
fh/||!!V\\111r   c                    g d}g d}t         j                  j                  d      j                  t	        |            }t        |||d      }|}t        t         j                  j                  d      j                  d      |g d      }|j                  |dd	gd
      }t        ||j                         dd	gddgd
d      }t        ||dd	gdd
d      }	t        j                  ||	j                  |             t        ||dd	gdd
d      }	|j                  ddgd      }|j                  |_        |j                  j                  sJ t        j                  ||       y )N)
r   r   r   r   r   bazr  quxr  snap)
r   r~   r   r~   r   r~   r   r   r   r~   r   )r#   r$   rL   )r-   r}   )j_onej_twoj_threer   r#   r$   re   r^   r   r   F)rp   rq   rU   sortT)rq   r   rU   r  r'   axis)r   r   r   r)   r   r   r   r   reset_indexr   r   reindex_likedroprH   is_monotonic_increasing)
r*   %lexsorted_two_level_string_multiindexr#   r$   rL   rH   to_joinrm   r   	expected2s
             r   test_join_inner_multiindexz#TestJoin.test_join_inner_multiindex  sh   V
 yy$$Q'77D	B$dCD5II!!!$44W=1
 7'7WE!V$x(
 f%
	 	fi&<&<V&DEf%
	 =='8!41==||3333
fh/r   c                 ^   t        ddgg d      }|j                  dg      j                  dddgi      }t        dd	gg d
      }|j                  dd       t	        j
                  t        j                  j                  d      5  t        ||dd       d d d        y # 1 sw Y   y xY w)N)r'   r   r}   )r.   r9   r   r{   r   r@   rA   meansum)   r-   r   r@   rA   rC   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_dfs       r   #test_join_hierarchical_mixed_raisesz,TestJoin.test_join_hierarchical_mixed_raises  s     	9-GSE"&&fe_'=>i4oN3-]]II  (W
 	G &(tF	G 	G 	Gs   
B##B,c                     t        t        j                  j                  d      j	                  d      ddgt        j
                        }t        t        j                  j                  d      j	                  d      dgt        j                        }|j                  |      }|j                  d   dk(  sJ |j                  d   dk(  sJ |j                  d   d	k(  sJ t        j                  j                  d      j                  d
dd      j                  d      }t        j                  j                  d      j                  d      j                  d      }t        j                  j                  d      j                  d      j                  d	      }t        |||d      }t        |||d      }t        t        j                  j                  d      j                  d      j                  d	      dg      }|j                  |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      }	t        j                  ||	       y )Nr   )r-   r   r@   rA   r   rF   )r-   r'   rB   float64float32r   r9   d   r   r{   mdr   Tr   )r   r   r   r   r)   r*  r+  r   dtypesintegersastyper   r   r   )
r*   r@   rA   rm   rB   r+   xpdfsrsxps
             r   test_join_float64_float32z"TestJoin.test_join_float64_float32  s,   II!!!$44W=#J**

 II!!!$44W=E**

 }}S!Y...}}S!Y...}}S!Y...II!!!$--aC8??HII!!!$++C077	BII!!!$++C077	BQQQ/0qqq12II!!!$++A.55i@4&
 XXa$X7yy~(((yy~***yy~***yy)+++ZZ3DZ9
b"%r   c                    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      }|j                  ddg      }|j                  ddg      }|j                  ddg      }|j                  ||gd      }t        ||ddgd      }t        ||ddgd      }	|j	                         }|	|j
                     }	|	j                  j                  d      |	d<   |	j                  j                  d      |	d<   t        j                  ||	       t        g dg dg dd      }t        g dg dg dd      }t        g dg dg dd      }|j                  ddg      }|j                  ddg      }|j                  ddg      }|j                  ||gd      }t        ||ddgd      }t        ||ddgd      }	|j	                         }t        j                  ||	j                  d d |j
                  f          t        g dg dt        j                  j                  d      j                  d      t        j                  j                  d      j                  d      d      }
t!        t        j"                  t        j$                  d      d      t        j"                  t        j$                  d      d      d      }|
j                  |d      }|
j                  |d      }|
j                  |d      }|
j                  |d      }t        j                  ||       t        j                  ||       t        j                  ||       y ) Nr'   r-      r{   r   r,     r      )r@   rA   rD   r@   rA   rb   rT   r^   r   )r'   r'   r'   )r-   r7  r   )r'   r'   r   )r,  r8  i,  )r9  r:  i  re   )r   r   r   r   r   r   r   r   )r~   r~   r   r   r   r   r~   r      r;   TESTr   rS   r]   )r   r!  r   r   r  r   r@   r0  rA   r   r   locr   r   r   r)   r   repeatr   )r*   r   r0   df3idf1idf2idf3r   df_partially_mergedr   r+   r2  re   rb   rS   r]   s                   r   test_join_many_non_unique_indexz(TestJoin.test_join_many_non_unique_index  s	   q!fAq6RABq!fAq6c
CDq!fAq6tEF}}c3Z(}}c3Z(}}c3Z(D$<W5#C#sI,csCjgN##%FNN+ 

))'2 

))'2
fh/iilKLiioNOii>PQR}}c3Z(}}c3Z(}}c3Z(D$<W5#C#sI,csCjgN##%
fhll1fnn3D&EF MQYY**1-==a@YY**1-==a@	
 IIbiilA&bii		!a.Hv
 w'w'wwqfw%w'
eU+
eT*
eU+r   c           	         t        d|      5  t        g dg dd      }t        dg dig d      }|j                  |d	d
      }t        g dg dg ddg d      }t        j                  ||       |j                  |d	d      }t        j
                  |j                  t        t        d            d
       d d d        y # 1 sw Y   y xY w)Nzfuture.infer_string)r   r   r  r   r'   r   r}   r.   r|   value2r{   )r   r  r   rG   rx   T)rR   r  )r   r  r   r   )r   r}   r'   r.   )r@   rA   rB   rB   )rx   r/   rG  )r'   r   r   r}   Fr.   )exact)	r   r   r   r   r   r   rH   r   r   )r*   rs   rS   r]   rm   r   s         r   test_join_sortzTestJoin.test_join_sort7  s     1<@ 	M4|LD x9AVWEYYuTY:F 7)2
 #H !!&(3 YYuUY;F!!&,,eAhtL'	M 	M 	Ms   B1CCc                    t        dg dig d      }t        dg dig d      }|j                  |      }t        g dd	t        j                  d
dt        j                  gdg d      }t	        j
                  ||       t        dg dig d      }t        dg dig d      }|j                  |      }t        g dd	d
d
t        j                  gdg d      }t	        j
                  ||       y )Nr@   rF  )r'   r   r}   r@   rG   rA   )r9   r   r  r;  )r'   r}   r}   r.   )r'   r   r}   r}   r.   r9   r   r  r   )r'   r   r}   r}   r@   )r'   r   r   r@   )r   r   r   nanr   r   )r*   r   r0   r   r   r?  df4s          r    test_join_mixed_non_unique_indexz)TestJoin.test_join_mixed_non_unique_indexP  s    l+>Bl+<@#!BFFAq"&&(AB#
 	fh/l+>Bl+<@#aArvv%67~
 	fh/r   c           	         t        j                  ddd      }t        t        t	        t        |                  |dg      }t        ||g      }|j                  |dd	      }t        t        j                  t        j                  dt        j                  
      j                  d      j                  dd      d      ddg|j                         j                        }t!        j"                  ||       y )Nz
2016-01-01   M)r:   freqpnumr   re   _df2)rU   r   rE   r   r'   pnum_df2r   rH   )r"  period_ranger   r   r   r   r
   r   r   r   r   r   r>  reshaper   rH   r   r   )r*   rH   r+   r0   r   r   s         r   !test_join_non_unique_period_indexz*TestJoin.test_join_non_unique_period_indexc  s    bsCtE#e*-.efXNb"X'6:GGBIIb188;CCBJANZ(.."((

 	fh/r   c                    t        t        j                  j                  d      j	                  d      g d      }|j                  ddd       |j                  ddd	       |j                  d      }t        j                  d
      }t        j                  t        |      5  |j                          d d d        |j                  d      }|j                         }|j                  |d       y # 1 sw Y   ?xY w)Nr   )r7  r   )r@   rA   rB   rC   rD   r   r   r   idr9   dtr   z&agg function failed [how->mean,dtype->r   T)numeric_only_rightr   )r   r   r   r   r)   insertr  reescaper   r   r   r  countr   )r*   r+   groupedr   mncns         r    test_mixed_type_join_with_suffixz)TestJoin.test_mixed_type_join_with_suffixp  s    II!!!$44W=2
 			!T1
		!T5!**T"ii@A]]9C0 	LLN	\\t\,]]_ 	H%	 	s   #C22C;c                    t        t        j                  j                  d      j	                  d      t        d            }|ddg   |ddg   |d	d
g   g}|d   j                  |dd        }t        j                  ||       |ddg   d d |ddg   dd  |d	d
g   dd g}d }|d   j                  |dd  d      } ||||j                         |d   j                  |dd        } ||||d   j                         |d   j                  |dd  d      } ||||j                  dd        d}t        j                  t        |      5  |d   j                  |dd  d       d d d        y # 1 sw Y   y xY w)Nr   )r-   r   abcdefr   r@   rA   rB   rC   rD   r   r   r'   	   c                     | D cg c]  }|j                  |       }}|d   j                  |dd        }t        j                  ||       y c c}w )Nr   r'   )r   r   r   r   )df_listr   	exp_indexr   	reindexedr   s         r   _check_diff_indexz2TestJoin.test_join_many.<locals>._check_diff_index  sN    7>?!9-?I? |((127H!!&(3 @s   Arb   rT   re   r;  z?Joining multiple DataFrames only supported for joining on indexr   rQ   )r   r   r   r   r)   r   r   r   r   rH   r   r   r   )r*   r+   rm  rm   rp  r   s         r   test_join_manyzTestJoin.test_join_many  s   II!!!$44W=tH~
 sCj>2sCj>2sCj>B-
fb)sCj>#2&C:qr(:BSzN1Q<OP	4 ':'62884-'671:+;+;<':'6288Aa=9O]]:S1 	1AJOOGABKCO0	1 	1 	1s   E//E8c                 \   t        t        j                  j                  d      j	                  d      g d      }ddgdz  |d<   |j
                  d d d	d
gf   }|j
                  d d ddgf   }|j
                  d d dgf   }|j                  ||g      }t        j                  ||       y )Nr   )r;  r.   r;   r   r   r   r.   rx   r<   r=   r>   r?   )	r   r   r   r   r)   r=  r   r   r   )r*   r+   r   r0   r?  r   s         r   test_join_many_mixedzTestJoin.test_join_many_mixed  s    II!!!$44V<(
 ENQ&5	ffQc
]#ffQc
]#ffQZ 3*%
fb)r   c           
         t        t        t        j                  j	                  d      j                  d      g d      t        t        j                  j	                  d      j                  ddd      j                  dd      d	d
g      gd      }t        ||gd      }|j                  |d      }|j                  |_	        t        j                  ||       t        t        j                  j	                  d      j                  d      ddg      }t        t        j                  j	                  d      j                  d      ddg      }t        t        j                  j	                  d      j                  d      ddg      }t        t        j                  j	                  d      j                  d      ddg      }|j                  |dd      j                  |ddd      }t        j                  t        j                   j"                  d      5  |j                  |dd       d d d        y # 1 sw Y   y xY w)Nr   )r-   r.   )r<   r<   r=   r=   r   r   r-   r7  r   r<   r>   r'   r  _2r_  )r.   r   r   yTr  rb   )r   r   rU   z0Passing 'suffixes' which cause duplicate columnsr   )r
   r   r   r   r   r)   r/  rX  r   r   r   r   r   r   r   r"  r#  r$  )	r*   r+   r   r   wr   rv  zdtas	            r   test_join_dupszTestJoin.test_join_dups  s   II))!,<<WE0 II))!,55a"5EMMbRST #J	 
 2r(+T*!))
fh/ II!!!$44V<sCj
 II!!!$44V<sCj
 II!!!$44V<sCj
 II!!!$44V<sCj
 ggaDdg;AA$Dg B 
 ]]II  D
 	< IIaDdI;		< 	< 	<s    H>>Ic                 B   t        j                  t        d      t        d      ddggg d      }t        dt	        d      i|	      }t        j                  t        d      t        d      gddg      }t        d
t	        dd      D cg c]  }d|z  	 c}i|	      }|j                  |ddg|      }|j                         j                  |j                         ddg|      j                  g d      }t        j                  ||       d}	t        j                  t        |	      5  |j                  |d|       d d d        t        j                  t        |	      5  |j                  |ddg|       d d d        y c c}w # 1 sw Y   IxY w# 1 sw Y   y xY w)Nr   xyr'   r   )r   r|  numr   v1   rG   v2r  r,  r^   r   r   )r   r   r   r   r   r   r  r   r!  r   r   r   r   r   )
r*   r   	leftindexrS   
rightindexir]   r   r   r   s
             r   test_join_multi_to_multiz!TestJoin.test_join_multi_to_multi  ss   ++%[$t*q!f-5I
	 $b	*)<,,%[$t*%eT]

 45A;!?a#'!?@
S5eT]	BU5$$&E4=iUHY+, 	
 	h/W]]:S1 	5IIe)I4	5 ]]:S1 	>JJt9J=	> 	> "@	5 	5	> 	>s   
F
,F	$F	FFc                    t        t        j                  ddd      t        d      d      }t        t        j                  ddd      t        d      d	      }|j	                  |j                  d
      d
      }|j                         }t        t        j                  gdz  t        d      z         |d<   t        j                  ||       y )Nz
2018-01-01r9   zAmerica/Chicago)startr:   tzabcde)datevalsz
2018-01-03tuvwx)r  vals_2r  rQ   r   tuvr  )r   r"  
date_ranger   r   r!  r   r   r   rK  r   r   )r*   r   r0   r   r   s        r   #test_join_on_tz_aware_datetimeindexz,TestJoin.test_join_on_tz_aware_datetimeindex  s    &6G W	
 &6G w-	
 #--/F;88:#RVVHqL4;$>?
fh/r   c                    t        g dg dg dg dgg d      }t        j                  |d         j                  d      |d<   t        g d	g d
gg dddg      }t        j                  |d         j                  d      |d<   |j	                  |j                  ddg      ddg      }t        t        d      dddgt        d      dddggddgg d      }|d   j                  d      |d<   t        j                  ||       y )N)
2012-08-02Lr-   )r  Jr   )
2013-04-06r  r7  )r  r     )r   rv  r@   r   r   zM8[ns])r  r  r'   )r  r  r   )r   rv  rx  r   r.   rV  rv  rQ   z2012-08-02 00:00:00r  r'   r   z2013-04-06 00:00:00r  r7  )r   rv  rx  r@   r   )	r   r"  to_datetimer0  r   r!  r   r   r   )r*   dfadfbr   r   s        r   test_join_datetime_stringz"TestJoin.test_join_datetime_string  s   ''''	 $
 >>#c(+228<C#%;<#a&

 >>#c(+228<C#--c
3c
C0132>0132> a&(
 !,,X6
fh/r   c                    ddg}t        j                  ||      }t        j                  t        |      t        |            }t        d|i|      }t        dt        |      i|      }|j	                  |      }t        ddgddgdt        j                  ddgddg            }t        j                  ||       y )Nr@   rA   
categoriesc1rG   c2)r  r  )r"  CategoricalIndexreversedr   r   r   r   )r*   ixid1id2r   r0   r   r   s           r    test_join_with_categorical_indexz)TestJoin.test_join_with_categorical_index,  s    3Z!!"4!!(2,8B<Hr
#.x|,C8#:c3Z0%%sCjc3ZH
 	fh/r   )4__name__
__module____qualname__r   fixturer+   r0   rO   r[   r_   rc   rf   rn   rr   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'  r5  rD  rI  rM  rY  rg  rq  rs  rz  r  r  r  r   r   r   r    r    #   s   ^^  ^^
 
 ^^  HIII$	$ [[Ty9Q RS$-$-L:$:$=$ [[\AudHBHHaV<L+MN= O= 0
!
<0000$0@F
)2V:0|G&B4,l [[Ty9Q RSMM,0&0&&1<*+<Z>6000<0r   r    rS   c                    |D ]%  }||   j                         j                         r%J  | j                  |      }|j                  |      }	|j                  |      D ]o  \  }
}t        || j                  |      }t        ||j                  |      }	 |j                  |
      }t        ||       	 |	j                  |
      }t        ||       q y # t        $ r5}|dv rt        d|
 d      |t        || j                  |       Y d }~Zd }~ww xY w# t        $ r5}|dv rt        d|
 d      |t        ||j                  |       Y d }~d }~ww xY w)N)rS   re   zkey z! should not have been in the join)r]   re   )
r   r   r  _restrict_to_columnsr   	get_group_assert_same_contentsr   AssertionError_assert_all_na)rS   r]   r   r   rU   r   r   rB   left_groupedright_grouped	group_keygroupl_joinedr_joinedlgrouperrrgroups                    r   rW   rW   <  sh    'ay $$&&&' <<)LMM(+M"NN84 4	5't||WE'u}}gF
	4!++I6F "(F3
	4",,Y7F "(F354  	=''$9+%FG 8T\\8<<	=  	>(($9+%FG 8U]]H==	>s0   C1D	D+D

D	E+EEc                     | j                   D cg c]  }||v s|j                  d      |v s| }}| j                  d d |f   } | j                  fd      } | j                  d d |f   } | S c c}w )N c                 (    | j                  d      S )Nr  )replace)r   suffixs    r   <lambda>z&_restrict_to_columns.<locals>.<lambda>j  s    199VR+@ r   r   )r   r  r=  r   )r  r   r  rB   founds     `  r   r  r  a  s~    ==ALAIIfb4IW4TE 
 IIahE LL!@LAE IIaj!ELs
   A1A1c                 H   d}| j                  |      j                         j                  }|j                  |      j                         j                  }|D ch c]  }t        |       c}t	              t	        |      k(  sJ t        fd|D              sJ y c c}w )Niy)c              3   8   K   | ]  }t        |      v   y wN)tuple).0rowrowss     r   	<genexpr>z(_assert_same_contents.<locals>.<genexpr>z  s     5cuSzT!5s   )fillnadrop_duplicatesr   r  r   r   )
join_chunkrN   NA_SENTINELjvaluessvaluesr  r  s         @r   r  r  r  s    K,<<>EEGmmK(88:AAG")*3E#J*Dt9F###5W5555 +s   Bc                 b    |D ]*  }||v r| |   j                         j                         r*J  y r  )r   r   )r  source_columnsr   rB   s       r   r  r  }  s:     *=!}!!#'')))*r   c                 <   | j                   j                  |j                   |      }| j                  |      }|j                  |      }| j                  j	                  |j                        }|j                         D ]
  \  }}|||<    |j                  |      S )NrT   r   )rH   r   r   r   appenditems)	r@   rA   rU   
join_indexa_reb_reresult_columnsr   r2  s	            r   r   r     s    agg3/J99Z D99Z DYY%%aii0N**, QS	<<<//r   c                  :   t        ddit        j                  dgd            } t        ddit        j                  d	gd
            }| j                  |d      }t        dgdgdt        j                  dgd            }t	        j
                  ||       y )NrD   r9   )r'   r   r.   r  r   rL   rH   r   r   )r   r}   )rA   rB   re   rT   )rD   r   )r'   r   r.   r}   )r@   rA   rC   rB   rG   r   r   from_tuplesr   r   r   )rS   r]   r   r   s       r   .test_join_inner_multiindex_deterministic_orderr    s    1X$$i[HD 1XZ33VHJOE YYu'Y*Fc$$l^;OPH &(+r   )	input_coloutput_colsrA   r@   a_xa_yc                     t        dddgi      }t        | ddgi      }|j                  |ddd      }t        |d	   g d
|d   g di      }t        j                  ||       y )Nr@   r'   r}   r.   cross_x_y)rU   r   r   r   )r'   r'   r}   r}   )r}   r.   r}   r.   r   )r  r  rS   r]   r   r   s         r   test_join_crossr    sj    
 cAq6]#Dy1a&)*EYYu'4YFF+a.,AUVH&(+r   c                    t        ddit        j                  dgd            }t        ddit        j                  d	gd
            }|j                  ||       }| dk(  r+t        dgdgdt        j                  dgddg            }n*t        dgdgdt        j                  dgddg            }t	        j
                  ||       y )NrB   r}   )r'   r   r   r   r  rC   r.   )r   )rA   rT   r]   )rB   rC   )r   r'   rA   r@   rG   r  )r   rS   r]   r   r   s        r   test_join_multiindex_one_levelr    s    1XZ33VHJOD C8:+A+A4&PV+WXEYYu)Y,FG#QC ((&#sD

 #QC ((&#sD
 &(+r   zcategories, valuesYX)r  r  r  r   r'   )r   r'   r'         @      ?)r  r  r  z
2020-12-31z
2019-12-31c                 x   t        ddgt        | |       ddgd      j                  ddg      }t        g dt        ||       g d	d      j                  ddg      }|j                  |d
d      }t        ddgt        | |       ddgddgd      j                  ddg      }t	        j
                  ||       y )Nr<   r  r'   r   )r   r   r/   r   r   )r<   r<   r=   )r}   r.   r9   _leftr^  r   r}   r.   )r   r   
value_leftvalue_rightr   r   r!  r   r   r   )r  r   rS   r]   r   r   s         r   1test_join_multiindex_not_alphabetical_categoricalr    s     3Z!*DV	
 i(#$ 	 $!&Z@	
 i(#$ 
 YYugxY@F3Z!*Da&q6		
 i(#$  &(+r   zleft_empty, how, exp)
)FrS   rS   )Fr]   empty)Fre   r  )Frb   rS   )Fr  r  )TrS   r  )Tr]   r]   )Tre   r  )Trb   r]   )Tr  r  c                    t        ddgddgdd      j                  d      }t        dgd	gd
d      j                  d      }| r|j                  d      }n|j                  d      }|j                  ||      }|dk(  rCt        ddgddgt        j
                  t        j
                  gd      }|j                  d      }na|dk(  r2t        t        j
                  gdgd	gd      }|j                  d      }n*|dk(  r%t        ddgd      }|dk7  r|j                  d      }|dk(  rj                         }t        j                  |       y )Nr   r'   r}   r.   )r<   r=   r   rE   r<   r9   )r<   r>   r   rT   rS   )r<   r=   r>   r]   )r=   r<   r>   r  r=   r>   r)  r  rb   )
r   r!  headr   r   rK  rename_axisr   r   r   )
left_emptyrU   exprS   r]   r   r   s          r   test_join_emptyr    s9     Aq6A/w?II#NDQCqc*':DDSIEyy|

1YYu#Y&F
f}Aq6Abffbff=MNO%%c*	BFF81#QC@A%%c*	c3Zw?'>++C0H
g~&&(&(+r   c                  B   t               } t        dg      }t        ddg      }| |z   }t        dg      }t        j                  ||       ||z   }t        g d      }t        j                  ||       | |z   }t        ddg      }t        j                  ||       y )Ntestr   r   r   r  )r   r   r  )r   r   r   )r   r0   r?  r   r   s        r   $test_join_empty_uncomparable_columnsr    s    
+C
VH
%C
UN3
4C3YF&*H&(+3YF!@AH&(+3YF.%!89H&(+r   zhow, valuesre   rz   rb   r]   r   r   r'   c                    t        t        g d      t        g d      g dd      j                  ddg      }t        t        g d      t        g d      g dd      j                  ddg      }t        t        |      t        |      ||d      j                  ddg      }|j                  ||       }t	        j
                  ||       y )	Nrz   r{   r@   rA   r  r  )r@   rA   rB   rC   rT   r  )rU   r   r   r0   r   r   s         r   3test_join_multiindex_categorical_output_index_dtyper  (  s     Y'Y'	
 ic
  Y'Y'	
 ic
  V$V$		
 ic
  XXcsX#F&(+r   )r;  r"   )rS   r  r  )rS   )'ra  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    rW   r  r  r  r   r  r  r  r  r  r  r  r  r  r  r   r   <module>r     s   	   ) )    V0 V0r"4J"6*
0,"  C#s#4sUEN6K"L,,,( 
s_%
Q
s_%|$i&=>|$i&=y?VW	
	,,: ,,6,& 	)	)		)	,,r   