
    Ohؓ                        d dl Z d dlZd dlZd dlm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jB                  jE                  ddddgfdddgfg      d        Z#d Z$ejB                  jE                  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jB                  jE                  d"g d#      d$        Z&d% Z'ejB                  jE                  d&d'g d(fd)g d(fdg d(fd*g d+fg      d,        Z(y)0    N)using_string_dtype)
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       l/var/www/html/diagnosisapp-backend/venv/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!ej                  jE                   e#       d"#      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/d0 Z0d1 Z1d2 Z2d3 Z3d4 Z4d5 Z5y)6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.df26   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      @)r3   r4   r3   r4   r3   )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,   r1   joined_key2joined_boths        r   test_left_outer_joinzTestJoin.test_left_outer_joinQ   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rS   rV   rU   r$   rW   rY   s        r   test_right_outer_joinzTestJoin.test_right_outer_joinX   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_   rU   r$   rW   rY   s        r   test_full_outer_joinzTestJoin.test_full_outer_join_   ra   r   c                     t        ||dd      }t        |||dgd       t        ||d      }t        |||ddgd       y )Nr%   innerr_   rU   r$   rW   rY   s        r   test_inner_joinzTestJoin.test_inner_joinf   ra   r   c                 :    t        ||dd      }d|v sJ d|v sJ y )Nr%   z.fooz.bar)rS   suffixeskey1.foozkey1.barr   r+   r,   r1   joineds       r   test_handle_overlapzTestJoin.test_handle_overlapm   s/    r364DEV###V###r   c                 <    t        ||ddd      }d|v sJ d|v sJ y )Nr%   r$   ri   )left_onright_onrj   rk   zkey2.barrl   rm   s       r   !test_handle_overlap_arbitrary_keyz*TestJoin.test_handle_overlap_arbitrary_keys   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?   rR   rJ   r=   F)check_namesrK   r@   keyrA   rA   rB   rB   rC   r0   r   r(   r   rA   rB   rC   rH   )r   r   r(   r(   r   ry   r0   r(   r      onerI   columnsfoobartwothreerC   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+   rP   rt   rN   rO   mergedr,   r1   rn   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rA   rB   r.   r:   r=   r>   rH   Flen\(left_on\) must equal the number of levels in the index of "right"r   rA   Trq   right_indexr   r   r   r   choicer*   r   from_productr   r   r   r   r   r+   r,   r1   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   abcrH   r.   zFlen\(right_on\) must equal the number of levels in the index of "left"r   rB   T)rr   
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.   r:   r=   r>   rH   z)len\(right_on\) must equal len\(left_on\)r   rA   rB   )rr   rq   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)NrA   r(   z.Can only merge Series or DataFrame objects, a z was passedr   )rq   rr   )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?   rR   key_0r   )r   r=   r>   r@   rJ   rK   )r   renamepopr   r   )r+   rP   rN   rO   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?   rR   rf   r_   r   )r   reindexisnaallr   assert_index_equalr   r   )r+   rP   rN   rO   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 )Nry   )rA   rA   rD   rB   rB   rC   r0   r   r(   rA   rB   rH   rf   r_   rR   F)check_dtype)r   r   notnar   r   r   rI   r+   r,   r1   rn   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 )Nry   rz   r0   r{   r|   rH   rR   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 )NrJ   r?   rR   )r   r   r   )r+   rP   rN   rO   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 )	NrA   r(   r   rB   rI   namerR   r   rH   )r   r   r   rI   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.   rH   Tboolr   stringr:      r(   intr4   floatrU   )r   r   aranger   _join_by_handr   r   )r+   	join_typedf1r1   rn   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 )Nr4   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   rG   int64bool_r   r   r   r   r   )r+   r   r1   rn   expected_columnsr   s         r   test_join_index_mixed_overlapz&TestJoin.test_join_index_mixed_overlap:  s    AE5))B-(

 3x~~)))3x~~)))AE5))Ar1%(
 #vv>	
 'r*&qr* c*
fh/r   zTODO(infer_string))reasonc                 \    t               }|j                  t        dgdgdg      d       y )Nr~   r   r=   r   rc   rU   )r   r   )r+   xs     r   test_join_empty_bugzTestJoin.test_join_empty_bug[  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   rA   rB   r   r   rC   )r   r(   q)r   r   r   r   r*   r   r   )r+   rA   rC   rD   s       r   test_join_unconsolidatedz!TestJoin.test_join_unconsolidateda  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)rA   rA   rA   rB   rB   rB   )r(   r   r~   r(   r   r~   firstsecondnames)rB   rB   rB   rC   rC   rC   r      zvar X)rM   rI   r   zvar Yr   )levelrc   rU   r(   )r   r   r   r   r   r   r*   
sort_indexr   r   valuesunionr   r   rI   r   r   )r+   index1index2r   r1   rn   ex_indexr   s           r   test_join_multiindexzTestJoin.test_join_multiindexn  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%   rM   )r.   r~   )j_onej_twoj_threer   r$   r%   rf   r_   r   r   F)rq   rr   rV   sortT)rr   r   rV   r  r(   axis)r   r   r   r*   r   r   r   r   reset_indexr   r   reindex_likedroprI   is_monotonic_increasing)
r+   %lexsorted_two_level_string_multiindexr$   r%   rM   rI   to_joinrn   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/   r:   r   r|   r   rA   rB   meansum)   r.   r   rA   rB   rD   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   rA   rB   r   rG   )r.   r(   rC   float64float32r   r:   d   r   r|   mdr   Tr   )r   r   r   r   r*   r,  r-  r   dtypesintegersastyper   r   r   )
r+   rA   rB   rn   rC   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      )rA   rB   rE   rA   rB   rc   rU   r_   r   )r(   r(   r(   )r.   r9  r   )r(   r(   r   )r.  r:  i,  )r;  r<  i  rf   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r      r<   TESTr   rT   r^   )r   r#  r   r   r  r   rA   r2  rB   r   r   locr   r   r   r*   r   repeatr   )r+   r   r1   df3idf1idf2idf3r   df_partially_mergedr   r,   r4  rf   rc   rT   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   rH   ry   T)rS   r  )r   r	  r   r   )r   r~   r(   r/   )rA   rB   rC   rC   )ry   r0   rI  )r(   r   r   r~   Fr/   )exact)	r   r   r   r   r   r   rI   r   r   )r+   rt   rT   r^   rn   r   s         r   test_join_sortzTestJoin.test_join_sort;  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 )NrA   rH  )r(   r   r~   rA   rH   rB   )r:   r   r  r=  )r(   r~   r~   r/   )r(   r   r~   r~   r/   r:   r   r  r   )r(   r   r~   r~   rA   )r(   r   r   rA   )r   r   r   nanr   r   )r+   r   r1   r   r   rA  df4s          r    test_join_mixed_non_unique_indexz)TestJoin.test_join_mixed_non_unique_indexT  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   rf   _df2)rV   r   rF   r   r(   pnum_df2r   rI   )r$  period_ranger   r   r   r   r   r   r   r   r   r   r@  reshaper  rI   r   r   )r+   rI   r,   r1   r   r   s         r   !test_join_non_unique_period_indexz*TestJoin.test_join_non_unique_period_indexg  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
      }|rd}t        j                  t        |      5  |j                          d d d        |j                  d      }|j                         }|j                  |d       y # 1 sw Y   ?xY w)Nr   )r9  r   )rA   rB   rC   rD   rE   r   r   r   idr:   dtr   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cns          r    test_mixed_type_join_with_suffixz)TestJoin.test_mixed_type_join_with_suffixt  s    II!!!$44W=2
 			!T1
		!T5!**T"ii@AAC]]9C0 	LLN	\\t\,]]_ 	H%	 	s   'C66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   rA   rB   rC   rD   rE   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rc   rU   rf   r=  z?Joining multiple DataFrames only supported for joining on indexr   rR   )r   r   r   r   r*   r   r   r   r   rI   r   r   r   )r+   r,   rp  rn   rs  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/   ry   r=   r>   r?   r@   )	r   r   r   r   r*   r?  r   r   r   )r+   r,   r   r1   rA  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.   r9  r   r=   r?   r(   r  _2ra  )r/   r   r   yTr   rc   )r   r   rV   z0Passing 'suffixes' which cause duplicate columnsr   )r   r   r   r   r   r*   r1  rZ  r   r   r   r   r   r   r   r$  r%  r&  )	r+   r,   r   r   wr   ry  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   rH   v2r  r.  r_   r   r   )r   r   r   r   r   r   r  r   r#  r   r   r   r   r   )
r+   r   	leftindexrT   
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-01r:   zAmerica/Chicago)startr;   tzabcde)datevalsz
2018-01-03tuvwx)r  vals_2r  rR   r   tuvr  )r   r$  
date_ranger   r   r#  r   r   r   rM  r   r   )r+   r   r1   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  r9  )r  r     )r   ry  rA   r   r   zM8[ns])r  r  r(   )r  r  r   )r   ry  r{  r   r/   rX  ry  rR   z2012-08-02 00:00:00r  r(   r   z2013-04-06 00:00:00r  r9  )r   ry  r{  rA   r   )	r   r$  to_datetimer2  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 )NrA   rB   
categoriesc1rH   c2)r  r  )r$  CategoricalIndexreversedr   r   r   r   )r+   ixid1id2r   r1   r   r   s           r    test_join_with_categorical_indexz)TestJoin.test_join_with_categorical_index2  s    3Z!!"4!!(2,8B<Hr
#.x|,C8#:c3Z0%%sCjc3ZH
 	fh/r   )6__name__
__module____qualname__r   fixturer,   r1   rP   r\   r`   rd   rg   ro   rs   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)  r7  rF  rK  rO  r[  rj  rt  rv  r}  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$0B [[)+4HIF JF
)2V:0|G&B4,l [[Ty9Q RSMM,0&0&*1<*+<Z>6000<0r   r!   rT   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)rT   rf   zkey z! should not have been in the join)r^   rf   )
r   r   r!  _restrict_to_columnsr   	get_group_assert_same_contentsr   AssertionError_assert_all_na)rT   r^   r   r   rV   r   r   rC   left_groupedright_grouped	group_keygroupl_joinedr_joinedlgrouperrrgroups                    r   rX   rX   B  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>p  s    199VR+@ r   r   )r   r  r?  r   )r  r   r  rC   founds     `  r   r  r  g  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>  s     5cuSzT!5s   )fillnadrop_duplicatesr  r  r   r   )
join_chunkrO   NA_SENTINELjvaluessvaluesr  r  s         @r   r  r  x  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   rC   s       r   r  r    s:     *=!}!!#'')))*r   c                 <   | j                   j                  |j                   |      }| j                  |      }|j                  |      }| j                  j	                  |j                        }|j                         D ]
  \  }}|||<    |j                  |      S )NrU   r   )rI   r   r   r   appenditems)	rA   rB   rV   
join_indexa_reb_reresult_columnsr   r4  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 )NrE   r:   )r(   r   r/   r  r   rM   rI   r   r   )r   r~   )rB   rC   rf   rU   )rE   r   )r(   r   r/   r~   )rA   rB   rD   rC   rH   r   r   from_tuplesr   r   r   )rT   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_colsrB   rA   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 )NrA   r(   r~   r/   cross_x_y)rV   r   r   r   )r(   r(   r~   r~   )r~   r/   r~   r/   r   )r  r  rT   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 )NrC   r~   )r(   r   r   r   r  rD   r/   )r   )rB   rU   r^   )rC   rD   )r   r(   rB   rA   rH   r  )r   rT   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   r0   r   r   )r=   r=   r>   )r~   r/   r:   _leftr`  r   r~   r/   )r   r   
value_leftvalue_rightr   r   r#  r   r   r   )r  r  rT   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)
)FrT   rT   )Fr^   empty)Frf   r  )Frc   rT   )Fr  r  )TrT   r  )Tr^   r^   )Trf   r  )Trc   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   rF   r=   r:   )r=   r?   r   rU   rT   )r=   r>   r?   r^   )r>   r=   r?   r  r>   r?   r+  r  rc   )
r   r#  headr   r   rM  rename_axisr  r   r   )
left_emptyrV   exprT   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   r1   rA  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, valuesrf   r{   rc   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 )	Nr{   r|   rA   rB   r  r  )rA   rB   rC   rD   rU   r  )rV   r  r   r1   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#   )rT   r  r  )rT   ))rc  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!   rX   r  r  r  r   r  r  r  r  r  r  r  r  r  r  r   r   <module>r     s   	   - ) )    Z0 Z0z"4J"6*
0,"  C#s#4sUEN6K"L,,,( 
s_%
Q
s_%|$i&=>|$i&=y?VW	
	,,: ,,6,& 	)	)		)	,,r   