
    o[we                        d dl Z d dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
mZmZmZ d dlmZ d/dZ G d d          Zd0dZd Zd Zd Zd1dZd Zej                            ddddgfdddgfg          d             Zd Zej                            dddgg dfddgg dfdd gg d!f ed"           ed#          g ed"           ed#           ed#          gfg          d$             Zej                            d%g d&          d'             Zej                            d(d)g d*fd+g d*fdg d*fd,g d-fg          d.             ZdS )2    N)Categorical	DataFrameIndex
MultiIndexSeries	Timestampconcatmerge   2   c           	         t          t          |                     }t          j        t          j        ||| z                      }t          |          |k     r<t          j        t          |          |d |t          |          z
           z             }t          j                            d                              |           |S )N   )	listrangenpasarraytilelenrandomdefault_rngshuffle)ngroupsnunique_groupsarrs       Dlib/python3.11/site-packages/pandas/tests/reshape/merge/test_join.pyget_test_datar      s    w((M
*RW]AL99
:
:C
3xx!||jc]>QS\>%BBCCI!$$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d
 Zd Zd Zd Zej                            dddd ej        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%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0dS )/TestJoinc                 B   t          t                      t                      t          j                            d                              d          t          j                            d                              d          d          }||d         dk             }|S )Nr   r   )key1key2data1data2r#      r   r   r   r   r   standard_normal)selfdfs     r   r*   zTestJoin.df!   s    %%..q11AA"EE..q11AA"EE	 
 
 6
Q	r   c                     t          t          d          t          dd          t          j                            d                              d          d          S )N
   )r      )r   r   r   )r"   r#   valuer'   )r)   s    r   df2zTestJoin.df20   s]    %+++%a2666..q11AA"EE 
 
 	
r   c                     t          j                    \  }}t          ||          }t          |d         |d         d|d                   }||fS )NindexAD)MergedAMergedDC)tmgetMixedTypeDictr   )r)   r2   datatargetsources        r   target_sourcezTestJoin.target_source:   sa    )++t4u--- S	d3i88S	
 
 
 v~r   c                     t          ||d          }t          |||dgd           t          ||          }t          |||ddgd           d S )Nr#   onlefthowr"   r
   _check_joinr)   r*   r/   joined_key2joined_boths        r   test_left_outer_joinzTestJoin.test_left_outer_joinF   sb    B///B[6(????BnnB[66*:GGGGGGr   c                     t          ||dd          }t          |||dgd           t          ||d          }t          |||ddgd           d S )Nr#   rightr@   rC   rB   r"   rD   rF   s        r   test_right_outer_joinzTestJoin.test_right_outer_joinM   k    BG<<<B[6(@@@@B111B[66*:HHHHHHr   c                     t          ||dd          }t          |||dgd           t          ||d          }t          |||ddgd           d S )Nr#   outerrL   rB   r"   rD   rF   s        r   test_full_outer_joinzTestJoin.test_full_outer_joinT   rN   r   c                     t          ||dd          }t          |||dgd           t          ||d          }t          |||ddgd           d S )Nr#   innerrL   rB   r"   rD   rF   s        r   test_inner_joinzTestJoin.test_inner_join[   rN   r   c                 D    t          ||dd          }d|v sJ d|v sJ d S )Nr#   z.fooz.bar)r@   suffixeskey1.foozkey1.barr
   r)   r*   r/   joineds       r   test_handle_overlapzTestJoin.test_handle_overlapb   sA    r364DEEEV####V######r   c                 F    t          ||ddd          }d|v sJ d|v sJ d S )Nr#   r"   rV   )left_onright_onrW   rX   zkey2.barrY   rZ   s       r   !test_handle_overlap_arbitrary_keyz*TestJoin.test_handle_overlap_arbitrary_keyh   sO    %
 
 
 V####V######r   c                 v   |\  }}|                     |d          }t          j        |d         |d         d           t          j        |d         |d         d           t          d	g d
i          }t          dg dig d          }|                     |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          }|	                     |
d          }|                     |d          }t          j        |d         d                   sJ t          j        |d         d                   sJ t          j        t          d          5  |                     |d           d d d            n# 1 swxY w Y   |
                                }d}t          j        t          |          5  |                     |d           d d d            d S # 1 swxY w Y   d S )Nr7   r?   r5   r3   F)check_namesr6   r4   keyare   brf   cr.   r   r&   r   re   rf   rg   r1   )r   r   r&   r&   r   rc   r.   r&   r      oner2   columnsfoobartwothreerg   z^'E'$matchEzrYou are trying to merge on float64 and object columns for key 'A'. If you wish to proceed you should use pd.concat)joinr8   assert_series_equalr   assert_frame_equalr   isnanpytestraisesKeyErrorcopy
ValueError)r)   r=   r;   r<   mergedr*   r/   r[   expecteddf_adf_bdf_csource_copymsgs                 r   test_join_onzTestJoin.test_join_ons   s   &V,,
vi0&+5QQQQ
vi0&+5QQQQ 8889::))),OOODDD''---HH
 
 	fh/// 1#sQC%QQQ5'E7+Aq6E7KKK1#sAq6G9EEE4E**Te,,xuc*+++++xw,----- ]87333 	( 	(KK3K'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( kkmm> 	 ]:S111 	- 	-KKK,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s$   )GGG	H..H25H2c                    t          t          j                            d                              ddgd          t          j                            d                              d          d          }t          t          j                            d                              ddgd          t          j                            d                              d          dt          j        dd                    }d	}t          j	        t          |
          5  t          ||dd           d d d            d S # 1 swxY w Y   d S )Nr   mfrk   sizere   rf   r,   r1   Flen\(left_on\) must equal the number of levels in the index of "right"rs   re   Tr^   right_indexr   r   r   r   choicer(   r8   makeCustomIndexrz   r{   r~   r
   r)   r*   r/   r   s       r   -test_join_on_fails_with_different_right_indexz6TestJoin.test_join_on_fails_with_different_right_index   s{   Y**1--44c3Za4HHY**1--==a@@ 
 
 Y**1--44c3Zb4IIY**1--==bAA  $R++
 
 
 X]:S111 	: 	:"c3D9999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:   E  EEc                    t          t          j                            d                              ddgd          t          j                            d                              d          dt          j        dd                    }t          t          j                            d                              ddgd          t          j                            d                              d          d          }d	}t          j	        t          |
          5  t          ||dd           d d d            d S # 1 swxY w Y   d S )Nr   r   r   rk   r   r   r1   r,   zFlen\(right_on\) must equal the number of levels in the index of "left"rs   rf   T)r_   
left_indexr   r   s       r   ,test_join_on_fails_with_different_left_indexz5TestJoin.test_join_on_fails_with_different_left_index   s{   Y**1--44c3Za4HHY**1--==a@@  $Q**
 
 
 Y**1--44c3Zb4IIY**1--==bAA 
 
 X]:S111 	: 	:"cCD9999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:r   c                    t          t          j                            d                              ddgd          t          j                            d                              d          d          }t          t          j                            d                              ddgd          t          j                            d                              d          dt          j        dd                    }d	}t          j	        t          |
          5  t          ||dddg           d d d            d S # 1 swxY w Y   d S )Nr   r   r   rk   r   r   r,   r1   z)len\(right_on\) must equal len\(left_on\)rs   re   rf   )r_   r^   r   r   s       r   /test_join_on_fails_with_different_column_countsz8TestJoin.test_join_on_fails_with_different_column_counts   s~   Y**1--44c3Za4HHY**1--==a@@ 
 
 Y**1--44c3Zb4IIY**1--==bAA  $R++
 
 
 ;]:S111 	= 	="cC#s<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   EE	E
wrong_typer   strNr   r&   c                 l   t          dddgi          }dt          |           d}t          j        t          |          5  t          ||dd           d d d            n# 1 swxY w Y   t          j        t          |          5  t          ||dd           d d d            d S # 1 swxY w Y   d S )Nre   r&   z.Can only merge Series or DataFrame objects, a z was passedrs   )r^   r_   )r   typerz   r{   	TypeErrorr
   )r)   r   r*   r   s       r   )test_join_on_fails_with_wrong_object_typez2TestJoin.test_join_on_fails_with_wrong_object_type   sP    aV}%%/j!!/ / / 	 ]9C000 	= 	=*b#<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=]9C000 	= 	="j#<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s$   A""A&)A&B))B-0B-c                     |\  }}|                     |d          }|d= |                    d          }|                     ||          }t          j        ||           d S )Nr7   r?   )rv   popr8   rx   )r)   r=   r;   r<   r   join_colresults          r   test_join_on_pass_vectorz!TestJoin.test_join_on_pass_vector   sd    &;;v#;..SM::c??V11
fh/////r   c                    |\  }}|                     |                    g           d          }|D ]6}||v sJ ||                                                                         sJ 7|                     |                    g           dd          }t	          j        |j        |j                   t          |          dk    sJ d S )Nr7   r?   rS   rL   r   )rv   reindexisnaallr8   assert_index_equalrn   r   )r)   r=   r;   r<   r   colmerged2s          r   test_join_with_len0zTestJoin.test_join_with_len0   s    &V^^B//C88 	, 	,C&====#;##%%))++++++++fnnR00Sg+FF
gov~>>>7||q      r   c                    t          dg di          }t          dddgiddg          }|                    |dd	
          }|                    |d          }||d                                                  }t          j        |d         |d                    t          j        |d         |d         d           t          j        |j        |j                   d S )Nrc   )re   re   drf   rf   rg   r.   r   r&   re   rf   r1   rS   rL   r?   F)check_dtype)r   rv   notnar8   rw   r   r2   r)   r*   r/   r[   r   s        r   test_join_on_innerzTestJoin.test_join_on_inner   s    ===>??1a&)#s<<<G4477357))HW-33556
ve}huo>>>
vg0AuUUUU
flHN;;;;;r   c                     t          dg di          }t          dg dig d          }|                    |dg          }|                    |d          }t          j        ||           d S )Nrc   rd   r.   rh   ri   r1   r?   r   rv   r8   rx   r   s        r   test_join_on_singlekey_listz$TestJoin.test_join_on_singlekey_list  s    8889::))),OOODDD %))77357))
fh/////r   c                     |\  }}|                     |d         d          }|                     |dg         d          }t          j        ||           d S )Nr5   r7   r?   rv   r8   rx   )r)   r=   r;   r<   r   r   s         r   test_join_on_serieszTestJoin.test_join_on_series  sZ    &VI.377;;vyk2s;;;
fh/////r   c                     t          dddgi          }t          dgdgd          }|                    |d          }t          ddgddgd|j                  }t	          j        ||           d S )	Nre   r&   r   rf   r2   namer?   r   r1   )r   r   rv   r2   r8   rx   )r)   r*   dsr   r   s        r   test_join_on_series_bugletz#TestJoin.test_join_on_series_buglet  s    aV}%%QCs---$$Aq6A77rxHHH
fh/////r   c                    t          t          j        d                    }d|d<   d|d<   t          t          j        dd                    }d	|d
<   d|d<   |                    ||          }t	          |||          }t          j        ||           |                    ||          }t	          |||          }t          j        ||           d S )Nr,   r1   Tboolro   string      r&   int      ?floatrB   )r   r   arangerv   _join_by_handr8   rx   )r)   	join_typedf1r/   r[   r   s         r   test_join_index_mixedzTestJoin.test_join_index_mixed  s    bimm,,,FHbi2..///E
G#9-- cy999
fh///#9-- cy99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          }|                    |dd          }g d}|d d         |_        |dd          |_        t          ||          }t          j
        ||           d S )Nr   r   ro   Tr3   Br7   r4   r,   rm   r   r4   r   _one_twolsuffixrsuffix)A_oneB_oneC_oneD_oneA_twoB_twoC_twoD_twor-   )r   r   r   dtypeint64bool_rv   rn   r   r8   rx   )r)   r   r/   r[   expected_columnsr   s         r   test_join_index_mixed_overlapz&TestJoin.test_join_index_mixed_overlap+  s   AE55)B--(((
 
 

 3x~))))3x~))))AE55)Ar1%%(((
 
 
 #vv>>	
 	
 	
 'rr*&qrr* c**
fh/////r   c                 v    t                      }|                    t          dgdgdg          d           d S )Nrk   r   r3   rm   rP   rB   )r   rv   )r)   xs     r   test_join_empty_bugzTestJoin.test_join_empty_bugK  s<    KK	y!QC#777WEEEEEr   c                    t          t          j                            d                              d          ddg          }t          t          j                            d                              d                    }||d<   t          t          j                            d                              d          d	g          }|                    |           |                    |           d S )
Nr   )   r   re   rf   rn   r   rg   )r   r&   q)r   r   r   r   r(   r   rv   )r)   re   rg   r   s       r   test_join_unconsolidatedz!TestJoin.test_join_unconsolidatedP  s    I!!!$$44W==Sz
 
 
 29((++;;B??@@#bi++A..>>wGGRUQVWWW 	
q				q					r   c                    t          j        g dg dgddg          }t          j        g dg dgddg          }t          t          j                            d                              d          |d	g
          }t          t          j                            d                              d          |dg
          }|                    d          }|                    d          }|                    |d          }t          |j
                                      t          |j
                            }|                    |                              |                    |                    }|j        |j        _        t          j        ||           |j        j        |j        k    sJ |                    d          }|                    d          }|                    |d                              d          }t          |j
                                      t          |j
                            }|                    |                              |                    |                    }|j        |j        _        t          j        ||           |j        j        |j        k    sJ d S )N)re   re   re   rf   rf   rf   )r&   r   rk   r&   r   rk   firstsecondnames)rf   rf   rf   rg   rg   rg   r      zvar X)r:   r2   rn   zvar Yr   )levelrP   rB   r&   )r   from_arraysr   r   r   r   r(   
sort_indexrv   r   valuesunionr   r   r2   r8   rx   )r)   index1index2r   r/   r[   ex_indexr   s           r   test_join_multiindexzTestJoin.test_join_multiindex]  s   '+++-?-?-?@H%
 
 

 '+++-?-?-?@H%
 
 

 &&q))99!<<I
 
 

 &&q))99!<<I
 
 
 nn1n%%nn1n%%#7++''--eFM.B.BCC;;x((--ckk(.C.CDD%|
fh///|!V\1111nn1n%%nn1n%%#7++66Q6??''--eFM.B.BCC;;x((--ckk(.C.CDD%|
fh///|!V\111111r   c                    g d}g d}t           j                            d                              t	          |                    }t          |||d          }|}t          t           j                            d                              d          |g d          }|                    |dd	gd
          }t          ||                                dd	gddgd
d          }t          ||dd	gdd
d          }	t          j
        ||	                    |                     t          ||dd	gdd
d          }	|                    ddgd          }|j        |_        |j        j        sJ t          j
        ||           d S )N)
rp   rp   rp   ro   ro   bazr   quxr   snap)
rq   rl   rr   rl   rq   rl   rq   rq   rr   rl   r   )r"   r#   r:   )r,   rk   )j_onej_twoj_threerm   r"   r#   rS   rL   r   r   F)r^   r_   rC   sortT)r_   r   rC   r   r&   axis)r   r   r   r(   r   r   rv   r
   reset_indexr8   rx   reindex_likedropr2   is_monotonic_increasing)
r)   %lexsorted_two_level_string_multiindexr"   r#   r:   r2   to_joinr[   r   	expected2s
             r   test_join_inner_multiindexz#TestJoin.test_join_inner_multiindex  s   VVV
 
 
 y$$Q''77D		BB$dCCDD5I!!!$$44W==111
 
 
 7'7WEE!!V$x(
 
 
 f%
 
 
	 	fi&<&<V&D&DEEEf%
 
 
	 =='8!41===|3333
fh/////r   c                    t          ddgg d          }|                    dg                              dddgi          }t          dd	gg d
          }|                    dd           t	          j        t          j        j        d          5  t          ||dd           d d d            d S # 1 swxY w Y   d S )N)r&   r   rk   )r-   r   r   ri   r   re   rf   meansum)   r,   r   re   rf   r   T)inplacez-Not allowed to merge between different levelsrs   r   r   )
r   groupbyagg	set_indexrz   r{   pderrors
MergeErrorr
   )r)   r*   new_dfother_dfs       r   #test_join_hierarchical_mixed_raisesz,TestJoin.test_join_hierarchical_mixed_raises  s0    	9-GGGSE""&&fe_'=>>i4oooNNN3---]I (W
 
 
 	G 	G &(tFFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   B55B9<B9c                    t          t          j                            d                              d          ddgt          j                  }t          t          j                            d                              d          dgt          j                  }|                    |          }|j        d         dk    sJ |j        d         dk    sJ |j        d         d	k    sJ t          j                            d          	                    d
dd          
                    d          }t          j                            d                              d          
                    d          }t          j                            d                              d          
                    d	          }t          |||d          }t          |||d          }t          t          j                            d                              d          
                    d	          dg          }|                    |d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 |                    |dd          }	t          j        ||	           d S )Nr   )r,   r   re   rf   rn   r   )r,   r&   rg   float64float32r   r   d   r   ri   mdr   Tr   )r   r   r   r   r(   r  r  rv   dtypesintegersastyper
   r8   rx   )
r)   re   rf   r[   rg   r*   xpdfsrsxps
             r   test_join_float64_float32z"TestJoin.test_join_float64_float32  s   I!!!$$44W==#J*
 
 

 I!!!$$44W==E*
 
 

 }S!Y....}S!Y....}S!Y....I!!!$$--aC88??HHI!!!$$++C0077	BBI!!!$$++C0077	BBQQQ//00qqq1122I!!!$$++A..55i@@4&
 
 
 XXa$X77y~((((y~****y~****y)++++ZZ3DZ9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          }|                    ddg          }|                    ddg          }|                    ddg          }|                    ||gd          }t          ||ddgd          }t          ||ddgd          }	|                                }|	|j                 }	|	j                            d          |	d<   |	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          }|                    ddg          }|                    ddg          }|                    ddg          }|                    ||gd          }t          ||ddgd          }t          ||ddgd          }	|                                }t          j
        ||	j        d d |j        f                    t          g dg dt          j                            d                              d          t          j                            d                              d          d          }
t!          t          j        t          j        d          d          t          j        t          j        d          d          d          }|
                    |d          }|
                    |d          }|
                    |d          }|
                    |d          }t          j
        ||           t          j
        ||           t          j
        ||           d S ) Nr&   r,      ri   r   r     r      )re   rf   ere   rf   rP   rB   rL   r   )r&   r&   r&   )r,   r)  r   )r&   r&   r   )r  r*  i,  )r+  r,  i  rS   )ro   rp   ro   rp   ro   rp   ro   ro   )rl   rl   rq   rr   rq   rq   rl   rr   r   r   TESTr   rA   rK   )r   r  rv   r
   r  rn   re   r"  rf   r8   rx   locr   r   r   r(   r   repeatr   )r)   r   r/   df3idf1idf2idf3r   df_partially_mergedr   r*   r$  rS   rP   rA   rK   s                   r   test_join_many_non_unique_indexz(TestJoin.test_join_many_non_unique_index  s   q!fAq6RAABBq!fAq6c
CCDDq!fAq6tEEFF}}c3Z((}}c3Z((}}c3Z((D$<W55#C#sIII,csCjgNNN##%%FN+ 
))'22 
))'22
fh///iiiiiilllKKLLiiiiiioooNNOOiiiiii>P>P>PQQRR}}c3Z((}}c3Z((}}c3Z((D$<W55#C#sIII,csCjgNNN##%%
fhl111fn3D&EFFF MMMQQQY**1--==a@@Y**1--==a@@	 
 
 IbillA&&bi	!a.H.Hv
 
 
 w''w''wwqfw%%w''
eU+++
eT***
eU+++++r   c                    t          g dg dd          }t          dg dig d          }|                    |dd	
          }t          g dg dg ddg d          }t          j        ||           |                    |dd
          }t          j        |j        t          t          d                    d	           d S )N)ro   rp   r   ro   r&   r   rk   r-   rj   value2ri   )rp   r   ro   r1   rc   T)r@   r   )rp   r   ro   ro   )r   rk   r&   r-   )re   rf   rg   rg   )rc   r.   r9  )r&   r   r   rk   Fr-   )exact)r   rv   r8   rx   r   r2   r   r   )r)   rA   rK   r[   r   s        r   test_join_sortzTestJoin.test_join_sort*  s    !=!=!=UUVV8___5=R=R=RSSS5U66333%... 
 ,,
 
 
 	fh/// 5U77
flE%((OO4HHHHHHr   c                    t          dg dig d          }t          dg dig d          }|                    |          }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          }|                    |          }t          g dd	d
d
t          j        gdg d          }t	          j        ||           d S )Nre   r8  )r&   r   rk   re   r1   rf   )r   r   r  r   )r&   rk   rk   r-   )r&   r   rk   rk   r-   r   r   r  r   )r&   r   rk   rk   re   )r&   r   r   re   )r   rv   r   nanr8   rx   )r)   r   r/   r   r   r1  df4s          r    test_join_mixed_non_unique_indexz)TestJoin.test_join_mixed_non_unique_index=  s;   lll+>>>BBBlll+<<<@@@#!//BFAq"&(ABB###
 
 
 	fh///lll+>>>BBBlll+<<<@@@#,,aArv%677~~~
 
 
 	fh/////r   c           	      *   t          j        ddd          }t          t          t	          t          |                              |dg          }t          ||g          }|                    |dd	          }t          t          j	        t          j
        dt          j        
                              d                              dd          d          ddg|                                j                  }t!          j        ||           d S )Nz
2016-01-01   M)periodsfreqpnumrm   rS   _df2)rC   r   r   r   r&   pnum_df2rn   r2   )r  period_ranger   r   r   r   r	   rv   r   r   r   r   r0  reshaper   r2   r8   rx   )r)   r2   r*   r/   r   r   s         r   !test_join_non_unique_period_indexz*TestJoin.test_join_non_unique_period_indexP  s    bsCCCtE#e**--..efXNNNb"X'6::GBIb11188;;CCBJJANNZ(..""(
 
 

 	fh/////r   c                 J   t          t          j                            d                              d          g d          }|                    ddd           |                    ddd	           |                    d          }t          j        d
          }t          j
        t          |          5  |                                 d d d            n# 1 swxY w Y   |                    d          }|                                }|                    |d           d S )Nr   )r)  r   )re   rf   rg   r   r-  r   r   r   idr   dtro   z-agg function failed [how->mean,dtype->object]rs   T)numeric_only_rightr   )r   r   r   r   r(   insertr  reescaperz   r{   r   r  countrv   )r)   r*   groupedr   mncns         r    test_mixed_type_join_with_suffixz)TestJoin.test_mixed_type_join_with_suffix]  sD   I!!!$$44W==222
 
 
 			!T1
		!T5!!!**T""iGHH]9C000 	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	\\t\,,]]__ 	H%%%%%s   6CCCc                    t          t          j                            d                              d          t          d                    }|ddg         |ddg         |d	d
g         g}|d                             |dd                    }t          j        ||           |ddg         d d         |ddg         dd          |d	d
g         dd         g}d }|d                             |dd          d          } ||||j	                   |d                             |dd                    } ||||d         j	                   |d                             |dd          d          } ||||j	        dd                    d}t          j        t          |          5  |d                             |dd          d           d d d            d S # 1 swxY w Y   d S )Nr   )r,   r   abcdefr   re   rf   rg   r   r-  r   r   r&   	   c                     fd| D             }|d                              |dd                    }t          j        ||           d S )Nc                 :    g | ]}|                               S  )r   ).0r   	exp_indexs     r   
<listcomp>zFTestJoin.test_join_many.<locals>._check_diff_index.<locals>.<listcomp>|  s%    ???!9--???r   r   r&   r   )df_listr   rd  	reindexedr   s     `  r   _check_diff_indexz2TestJoin.test_join_many.<locals>._check_diff_index{  sT    ????w???I |((12277H!&(33333r   rP   rB   rS   r   z?Joining multiple DataFrames only supported for joining on indexrs   r?   )r   r   r   r   r(   r   rv   r8   rx   r2   rz   r{   r~   )r)   r*   rf  r[   rh  r   s         r   test_join_manyzTestJoin.test_join_manyp  s6   I!!!$$44W==tH~~
 
 
 sCj>2sCj>2sCj>B--
fb)))sCj>#2#&C:qrr(:BSzN1Q3<OP	4 	4 	4 '::'628444--'671:+;<<<'::'628AaC=999O]:S111 	1 	1AJOOGABBKCO000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   *&GG!$G!c                 h   t          t          j                            d                              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         }|                    ||g          }t          j        ||           d S )Nr   )r   r-   r   r   ro   rp   r-   rc   r3   r   r7   r4   )	r   r   r   r   r(   r/  rv   r8   rx   )r)   r*   r   r/   r1  r   s         r   test_join_many_mixedzTestJoin.test_join_many_mixed  s    I!!!$$44V<<(((
 
 
 ENQ&5	fQQQc
]#fQQQc
]#fQQQZ 3*%%
fb)))))r   c           
         t          t          t          j                            d                              d          g d          t          t          j                            d                              ddd                              dd          d	d
g          gd          }t          ||gd          }|                    |d          }|j	        |_	        t          j        ||           t          t          j                            d                              d          ddg          }t          t          j                            d                              d          ddg          }t          t          j                            d                              d          ddg          }t          t          j                            d                              d          ddg          }|                    |dd                              |ddd          }t          j        t          j        j        d          5  |                    |dd           d d d            d S # 1 swxY w Y   d S )Nr   )r,   r-   )r3   r3   r   r   r   r   r,   r)  r   r3   r7   r&   r   _2rS  )r-   r   r   yTr  rP   )r   r   rC   z0Passing 'suffixes' which cause duplicate columnsrs   )r	   r   r   r   r   r(   r!  rL  rv   rn   r8   rx   r
   rz   r{   r  r  r  )	r)   r*   r   r   wr   rn  zdtas	            r   test_join_dupszTestJoin.test_join_dups  s   I))!,,<<WEE000   I))!,,55a"5EEMMbRSTT #J  	 
 
 
 2r(+++T**!)
fh/// I!!!$$44V<<sCj
 
 
 I!!!$$44V<<sCj
 
 
 I!!!$$44V<<sCj
 
 
 I!!!$$44V<<sCj
 
 
 ggaDdg;;AA$Dg B 
 
 ]I D
 
 
 	< 	< IIaDdI;;;		< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   I>>JJc                    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
d t	          dd          D             i|	          }|                    |ddg|          }|                                                    |                                ddg|                              g d          }t          j
        ||           d}t          j        t          |          5  |                    |d|           d d d            n# 1 swxY w Y   t          j        t          |          5  |                    |ddg|           d d d            d S # 1 swxY w Y   d S )Nabcxyr&   r   )rt  ru  numr   v1   r1   v2c                     g | ]}d |z  S )r  rb  )rc  is     r   re  z5TestJoin.test_join_multi_to_multi.<locals>.<listcomp>  s    !?!?!?a#'!?!?!?r   r  rL   r   rs   )r   from_productr   r   r   rv   r  r
   r  r8   rx   rz   r{   r~   )	r)   r   	leftindexrA   
rightindexrK   r   r   r   s	            r   test_join_multi_to_multiz!TestJoin.test_join_multi_to_multi  sU   +%[[$t**q!f-5I5I5I
 
 
	 $b		*)<<<,%[[$t**%eT]
 
 

 4!?!?5A;;!?!?!?@
SSS5eT]	BBU5$$&&E4=iUHHY+++,, 	
 	h///W]:S111 	5 	5IIe)I444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 ]:S111 	> 	>JJt9J===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s$   E;;E?E?!G		GGc                    t          t          j        ddd          t          d          d          }t          t          j        ddd          t          d          d	          }|                    |                    d
          d
          }|                                }t          t          j	        gdz  t          d          z   t                    |d<   t          j        ||           d S )Nz
2018-01-01r   zAmerica/Chicago)startrC  tzabcde)datevalsz
2018-01-03tuvwx)r  vals_2r  r?   r   tuvrG  r  )r   r  
date_ranger   rv   r  r}   r   r   r=  objectr8   rx   )r)   r   r/   r   r   s        r   #test_join_on_tz_aware_datetimeindexz,TestJoin.test_join_on_tz_aware_datetimeindex  s    &6G   W	 
 
 &6G   w--	 
 
 #--//F;;88::#RVHqL4;;$>fMMM
fh/////r   c                    t          g dg dg dg dgg d          }t          j        |d                   |d<   t          g dg d	gg d
ddg          }t          j        |d                   |d<   |                    |                    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          }t          j        ||           d S )N)
2012-08-02Lr,   )r  Jr   )
2013-04-06r  r)  )r  r     )r   rn  re   r   r   )r  r  r&   )r  r  r   )r   rn  rp  r   r-   rJ  rn  r?   z2012-08-02 00:00:00r  r&   r   z2013-04-06 00:00:00r  r)  )r   rn  rp  re   rm   )r   r  to_datetimerv   r  r   r8   rx   )r)   dfadfbr   r   s        r   test_join_datetime_stringz"TestJoin.test_join_datetime_string  sJ   ''''''''''''	 $OO
 
 
 >#c(++C###%;%;%;<#OOa&
 
 

 >#c(++C#--c
33c
CC01132>01132> a&(((
 
 
 	fh/////r   c                    ddg}t          j        ||          }t          j        t          |          t          |                    }t          d|i|          }t          dt          |          i|          }|                    |          }t          ddgddgdt          j        ddgddg                    }t          j        ||           d S )Nre   rf   
categoriesc1r1   c2)r  r  )r  CategoricalIndexreversedr   rv   r8   rx   )r)   ixid1id2r   r/   r   r   s           r    test_join_with_categorical_indexz)TestJoin.test_join_with_categorical_index  s    3Z!"444!(2,,8B<<HHHr
#...x||,C888#:c3Z00%sCjc3ZHHH
 
 
 	fh/////r   )1__name__
__module____qualname__rz   fixturer*   r/   r=   rI   rM   rQ   rT   r\   r`   r   r   r   r   markparametrizer   arrayr   r   r   r   r   r   r   r   r   r   r   r   r	  r  r'  r6  r;  r?  rM  r[  ri  rk  rr  r  r  r  r  rb  r   r   r    r       s       ^  ^ ^
 
 ^
 ^	 	 ^	H H HI I II I II I I$ $ $	$ 	$ 	$$- $- $-L: : :$: : :$= = =$ [\AudHBHaV<L<L+MNN= = ON= 0 0 0
! 
! 
!
< 
< 
<0 0 00 0 00 0 00 0 0$0 0 0@F F F
  )2 )2 )2V:0 :0 :0|G G G& & &B4, 4, 4,lI I I&0 0 0&0 0 0& & &&1 1 1<* * *+< +< +<Z> > >60 0 000 0 0:0 0 0 0 0r   r    rA   _x_yc                 6   |D ]0}||                                                                          sJ 1|                     |          }|                    |          }	|                    t          |          dk    r|n|d                   D ]	\  }
}t	          || j        |          }t	          ||j        |          }	 |                    |
          }t          ||           nE# t          $ r8}|dv rt          d|
 d          |t          || j        |           Y d }~nd }~ww xY w	 |	                    |
          }t          ||           # t          $ r9}|dv rt          d|
 d          |t          ||j        |           Y d }~d }~ww xY wd S )Nr&   r   )rA   rS   zkey z! should not have been in the join)rK   rS   )r   r   r  r   _restrict_to_columnsrn   	get_group_assert_same_contentsr|   AssertionError_assert_all_na)rA   rK   r   r   rC   r   r   rg   left_groupedright_grouped	group_keygroupl_joinedr_joinedlgrouperrrgroups                    r   rE   rE   (  s    ' 'ay  $$&&&&&&<<))LMM(++M"NNMMA%%8A;  4 4	5 (t|WEE'u}gFF
	4!++I66F "(F3333  	= 	= 	='''$G9GGG  8T\8<<<<<<<<	=
	4",,Y77F "(F3333  	> 	> 	>((($G9GGG  8U]H========	>)4 4s0   C''
D)1.D$$D)-E
F.FFc                     fd| j         D             }| j        d d |f         } |                     fd          } | j        d d f         } | S )Nc                 L    g | ] }|v s|                     d           v |!S ) replace)rc  rg   rn   suffixs     r   re  z(_restrict_to_columns.<locals>.<listcomp>P  s@       ALLAIIfb4I4IW4T4T4T4T4Tr   c                 0    |                      d          S )Nr  r  )r   r  s    r   <lambda>z&_restrict_to_columns.<locals>.<lambda>X  s    199VR+@+@ r   r   )rn   r/  rename)r  rn   r  founds    `` r   r  r  O  s        =  E
 IaaahE LL!@!@!@!@LAAE Iaaaj!ELr   c                 R   d}|                      |                                          j        }|                     |                                          j        }d |D             t                    t          |          k    sJ t	          fd|D                       sJ d S )Niy)c                 ,    h | ]}t          |          S rb  tuple)rc  rows     r   	<setcomp>z(_assert_same_contents.<locals>.<setcomp>f  s    ***3E#JJ***r   c              3   :   K   | ]}t          |          v V  d S Nr  )rc  r  rowss     r   	<genexpr>z(_assert_same_contents.<locals>.<genexpr>h  s.      55cuSzzT!555555r   )fillnadrop_duplicatesr   r   r   )
join_chunkr<   NA_SENTINELjvaluessvaluesr  s        @r   r  r  `  s    K,,<<>>EGmmK((88::AG**'***Dt99F####5555W5555555555r   c                 v    |D ]5}||v r| |                                                                          sJ 6d S r  )r   r   )r  source_columnsr   rg   s       r   r  r  k  sR     * *==!}!!##''))))))* *r   c                 @   | j                             |j         |          }|                     |          }|                    |          }| j                            |j                  }|                                D ]
\  }}|||<   |                    |          S )NrB   r   )r2   rv   r   rn   appenditems)	re   rf   rC   
join_indexa_reb_reresult_columnsr   r$  s	            r   r   r   r  s    ag3//J99Z  D99Z  DY%%ai00N**,,  QS		<<<///r   c                  T   t          ddit          j        dgd                    } t          ddit          j        d	gd
                    }|                     |d          }t          dgdgdt          j        dgd                    }t	          j        ||           d S )Nr-  r   )r&   r   r-   r  r   r:   r2   r   r   )r   rk   )rf   rg   rS   rB   )r-  r   )r   r&   r-   rk   )rf   re   r   rg   r1   r   r   from_tuplesrv   r8   rx   )rA   rK   r   r   s       r   .test_join_inner_multiindex_deterministic_orderr    s    1X$i[HHH  D 1XZ3VHJOOO  E YYu'Y**Fc$l^;OPPP  H &(+++++r   )	input_coloutput_colsrf   re   a_xa_yc                     t          dddgi          }t          | ddgi          }|                    |ddd          }t          |d	         g d
|d         g di          }t          j        ||           d S )Nre   r&   rk   r-   crossr  r  )rC   r   r   r   )r&   r&   rk   rk   )rk   r-   rk   r-   r   )r  r  rA   rK   r   r   s         r   test_join_crossr    s    
 cAq6]##Dy1a&)**EYYu'4YFFF+a.,,,AUVVH&(+++++r   c                 X   t          ddit          j        dgd                    }t          ddit          j        d	gd
                    }|                    ||           }t          dgdgdt          j        dgddg                    }t	          j        ||           d S )Nrg   rk   )r&   r   r   r   r  r   r-   )r   )rf   rB   )rg   r   )r   r&   rf   re   r1   r  )r   rA   rK   r   r   s        r   test_join_multiindex_one_levelr    s    1XZ3VHJOOO  D C8:+A4&PV+W+W+WXXXEYYu)Y,,Fc$fXc3Z@@@  H &(+++++r   zcategories, valuesYX)r  r  r  r   r&   )r   r&   r&         @      ?)r  r  r  z
2020-12-31z
2019-12-31c                    t          ddgt          | |           ddgd                              ddg          }t          g dt          ||           g d	d                              ddg          }|                    |d
d          }t          ddgt          | |           ddgddgd                              ddg          }t	          j        ||           d S )Nr3   r  r&   r   )r   r   r.   r   r   )r3   r3   r   )rk   r-   r   _leftrR  r   rk   r-   )r   r   
value_leftvalue_rightr   r   r  rv   r8   rx   )r  r   rA   rK   r   r   s         r   1test_join_multiindex_not_alphabetical_categoricalr    s+    3Z!*DDDV	
 	
  i(#$$ 	 $__!&Z@@@YY	
 	
  i(#$$ 
 YYugxY@@F3Z!*DDDa&q6		
 	
  i(#$$  &(+++++r   zleft_empty, how, exp)
)FrA   rA   )FrK   empty)FrS   r  )FrP   rA   )Fr  r  )TrA   r  )TrK   rK   )TrS   r  )TrP   rK   )Tr  r  c                    t          ddgddgdd                              d          }t          dgd	gd
d                              d          }| r|                    d          }n|                    d          }|                    ||          }|dk    rCt          ddgddgt          j        t          j        gd          }|                    d          }np|dk    r6t          t          j        gdgd	gd          }|                    d          }n4|dk    r.t          ddgd          }|dk    r|                    d          }t          j        ||           d S )Nr   r&   rk   r-   )r3   r   r   rG  r3   r   )r3   r7   r   rB   rA   )r3   r   r7   rK   )r   r3   r7   r  r   r7   r  r  )	r   r  headrv   r   r=  rename_axisr8   rx   )
left_emptyrC   exprA   rK   r   r   s          r   test_join_emptyr    st     Aq6A//w???II#NNDQCqc**':::DDSIIE yy||

1YYu#Y&&F
f}}Aq6Abfbf=MNNOO%%c**	BF81#QC@@AA%%c**	c3Zw???'>>++C00H&(+++++r   zhow, valuesrS   rh   rP   rK   r   r   r&   c                    t          t          g d          t          g d          g dd                              ddg          }t          t          g d          t          g d          g dd                              ddg          }t          t          |          t          |          ||d                              ddg          }|                    ||           }t	          j        ||           d S )	Nrh   ri   re   rf   r  r  )re   rf   rg   r   rB   r  )rC   r   r   r/   r   r   s         r   3test_join_multiindex_categorical_output_index_dtyper    s+    YYY''YYY''	
 	
  ic
  YYY''YYY''	
 	
  ic
  V$$V$$		
 	
  ic
  XXcsX##F&(+++++r   )r   r   )rA   r  r  )rA   ) rU  numpyr   rz   pandasr  r   r   r   r   r   r   r	   r
   pandas._testing_testingr8   r   r    rE   r  r  r  r   r  r  r  r  r  r  r  r  rb  r   r   <module>r     s   				         	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	         F0 F0 F0 F0 F0 F0 F0 F0R$4 $4 $4 $4N  "6 6 6* * *
0 
0 
0 
0, , ,"  C#s#4sUEN6K"L , , ,, , , 
s___%
Q
s___%Y|$$ii&=&=>Y|$$ii&=&=yy?V?VW	
	 , , ,:    , , ,2 	)))	)))		)))	 , , , , ,r   