
    d                        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           	      n   t          t          |                     }t          j        t          j        ||| z                      }t          |          |k     r<t          j        t          |          |d |t          |          z
           z             }t          j                            |           |S N)listrangenpasarraytilelenrandomshuffle)ngroupsnunique_groupsarrs       `/var/www/html/t/fyr/venv311/lib/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c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                     t          t                      t                      t          j                            d          t          j                            d          d          }||d         dk             }|S )Nr   )key1key2data1data2r"      r   r   r   r   randn)selfdfs     r   r)   zTestJoin.df   sd    %%,,,,	 
 
 6
Q	r   c                     t          t          d          t          dd          t          j                            d          d          S )N
   )r      )r   r   )r!   r"   valuer&   )r(   s    r   df2zTestJoin.df2.   sM    %+++%a2666,, 
 
 	
r   c                     t          j                    \  }}t          ||          }t          |d         |d         d|d                   }||fS )NindexAD)MergedAMergedDC)tmgetMixedTypeDictr   )r(   r1   datatargetsources        r   target_sourcezTestJoin.target_source8   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_joinD   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?   rB   rA   r!   rC   rE   s        r   test_right_outer_joinzTestJoin.test_right_outer_joinK   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"   outerrK   rA   r!   rC   rE   s        r   test_full_outer_joinzTestJoin.test_full_outer_joinR   rM   r   c                     t          ||dd          }t          |||dgd           t          ||d          }t          |||ddgd           d S )Nr"   innerrK   rA   r!   rC   rE   s        r   test_inner_joinzTestJoin.test_inner_joinY   rM   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_overlap`   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!   rU   )left_onright_onrV   rW   zkey2.barrX   rY   s       r   !test_handle_overlap_arbitrary_keyz*TestJoin.test_handle_overlap_arbitrary_keyf   sO    %
 
 
 V####V######r   c                    |\  }}|                     |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|d<   d}t          j        t          |          5  |                     |d           d d d            d S # 1 swxY w Y   d S ) Nr6   r>   r4   r2   F)check_namesr5   r3   keyard   bre   cr-   r   r%      rd   re   rf   r0   )r   r   r%   r%   rh   rb   r-   r%   rh      oner1   columnsfoobartwothreerf   z^'E'$matchEr   zfYou are trying to merge on float64 and object columns. If you wish to proceed you should use pd.concat)joinr7   assert_series_equalr   assert_frame_equalr   isnanpytestraisesKeyErrorcopy
ValueError)r(   r<   r:   r;   mergedr)   r.   rZ   expecteddf_adf_bdf_csource_copymsgs                 r   test_join_onzTestJoin.test_join_onq   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C; 	 ]:S111 	- 	-KKK,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s$   )GGGH33H7:H7c                    t          t          j                            ddgd          t          j                            d          d          }t          t          j                            ddgd          t          j                            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 )Nmfrk   sizerd   re   r+   rh   r0   Flen\(left_on\) must equal the number of levels in the index of "right"rs   rd   Tr]   right_indexr   r   r   choicer'   r7   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   s3   )""C:A"66RY__Q=O=OPP
 
 )""C:B"77bioob>Q>QRR$R++
 
 
 X]:S111 	: 	:"c3D9999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:   C44C8;C8c                    t          t          j                            ddgd          t          j                            d          dt          j        dd                    }t          t          j                            ddg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   r   rk   r   r   rh   r0   r+   zFlen\(right_on\) must equal the number of levels in the index of "left"rs   re   T)r^   
left_indexr   r   s       r   ,test_join_on_fails_with_different_left_indexz5TestJoin.test_join_on_fails_with_different_left_index   s3   )""C:A"66RY__Q=O=OPP$Q**
 
 
 )""C:B"77bioob>Q>QRR
 
 X]:S111 	: 	:"cCD9999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:r   c                    t          t          j                            ddgd          t          j                            d          d          }t          t          j                            ddgd          t          j                            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   rk   r   r   r+   rh   r0   z)len\(right_on\) must equal len\(left_on\)rs   rd   re   )r^   r]   r   r   s       r   /test_join_on_fails_with_different_column_countsz8TestJoin.test_join_on_fails_with_different_column_counts   s6   )""C:A"66RY__Q=O=OPP
 
 )""C:B"77bioob>Q>QRR$R++
 
 
 ;]:S111 	= 	="cC#s<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   C66C:=C:
wrong_typerh   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 )Nrd   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 )Nr6   r>   )rv   popr7   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 )Nr6   r>   rR   rK   r   )rv   reindexisnaallr7   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 )Nrb   )rd   rd   dre   re   rf   r-   r   r%   rd   re   r0   rR   rK   r>   F)check_dtype)r   rv   notnar7   rw   r   r1   r(   r)   r.   rZ   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 )Nrb   rc   r-   rg   ri   r0   r>   r   rv   r7   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 )Nr4   r6   r>   rv   r7   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 )	Nrd   r%   rh   re   r1   namer>   r   r0   )r   r   rv   r1   r7   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+   r0   Tboolro   string      r%   int      ?floatrA   )r   r   arangerv   _join_by_handr7   rx   )r(   	join_typedf1r.   rZ   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   rh   ro   Tr2   Br6   r3   r+   rm   r   r3   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   r7   rx   )r(   r   r.   rZ   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   r2   rm   rO   rA   )r   rv   )r(   xs     r   test_join_empty_bugzTestJoin.test_join_empty_bug8  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<   t          t          j                            dd          dg          }|                    |           |                    |           d S )	N   rh   rd   re   rn   rf   r%   q)r   r   r   r'   r   rv   )r(   rd   rf   r   s       r   test_join_unconsolidatedz!TestJoin.test_join_unconsolidated=  s    bioob!,,sCjAAA29??2&&''#bioob!,,se<<< 	
q				q					r   c                 6   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g	          }t          t          j                            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)rd   rd   rd   re   re   re   )r%   rh   rk   r%   rh   rk   firstsecondnames)re   re   re   rf   rf   rf      zvar X)r9   r1   rn   zvar Yr   )levelrO   rA   r%   )r   from_arraysr   r   r   r'   
sort_indexrv   r   valuesunionr   r   r1   r7   rx   )r(   index1index2r   r.   rZ   ex_indexr   s           r   test_join_multiindexzTestJoin.test_join_multiindexH  sU   '+++-?-?-?@H%
 
 

 '+++-?-?-?@H%
 
 

 RY__Q//vyQQQRY__Q//vyQQQ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                            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"   r9   r+   rk   )j_onej_twoj_threerm   r!   r"   rR   rK   r   r   F)r]   r^   rB   sortT)r^   r   rB   r   r%   axis)r   r   r'   r   r   rv   r
   reset_indexr7   rx   reindex_likedropr1   is_monotonic_increasing)
r(   %lexsorted_two_level_string_multiindexr!   r"   r9   r1   to_joinrZ   r   	expected2s
             r   test_join_inner_multiindexz#TestJoin.test_join_inner_multiindexk  s   VVV
 
 
 ys4yy))$dCCDD5IOOB""%9V9V9V
 
 
 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t          j        t          j        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%   rh   rk   )r,   r   r   ri   r   rd   re   )   r+   r   rd   re   r   T)inplacez-Not allowed to merge between different levelsrs   r   r   )r   groupbyaggr   meansum	set_indexrz   r{   pderrors
MergeErrorr
   )r(   r)   new_dfother_dfs       r   #test_join_hierarchical_mixed_raisesz,TestJoin.test_join_hierarchical_mixed_raises  s5    	9-GGGSE""&&bgrv->'?@@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   (C		CC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          }t          j                            d          	                    d          }t          j                            d          	                    d	          }t          |||d          }t          |||d          }t          t          j                            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+   rh   rd   re   rn   r   r%   rf   float64float32r   r   d   r   ri   mdr   Tr   )r   r   r   r'   r  r  rv   dtypesrandintastyper
   r7   rx   )
r(   rd   re   rZ   rf   r)   xpdfsrsxps
             r   test_join_float64_float32z"TestJoin.test_join_float64_float32  s   bioob!,,sCj
SSSbioob!,,se2:NNN}S!Y....}S!Y....}S!Y....IaC((//88IS!!((33IS!!((33QQQ//00qqq1122bi&&q))00;;dVLLL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          t          j                            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   rh   r     r      )rd   re   erd   re   rO   rA   rK   r   )r%   r%   r%   )r+   r)  r   )r%   r%   rh   )r  r*  i,  )r+  r,  i  rR   )ro   rp   ro   rp   ro   rp   ro   ro   )rl   rl   rq   rr   rq   rq   rl   rr   r   r   TESTr   r@   rJ   )r   r  rv   r
   r  rn   rd   r"  re   r7   rx   locr   r   r'   r   repeatr   )r(   r   r.   df3idf1idf2idf3r   df_partially_mergedr   r)   r$  rR   rO   r@   rJ   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__Q''Y__Q''	 
 
 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%   rh   rk   r,   rj   value2ri   )rp   r   ro   r0   rb   T)r?   r   )rp   r   ro   ro   )rh   rk   r%   r,   )rd   re   rf   rf   )rb   r-   r9  )r%   rh   r   rk   Fr,   )exact)r   rv   r7   rx   r   r1   r   r   )r(   r@   rJ   rZ   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 )Nrd   r8  )r%   rh   rk   rd   r0   re   )r   r   r  r   )r%   rk   rk   r,   )r%   rh   rk   rk   r,   r   r   r  r   )r%   rh   rk   rk   rd   )r%   rh   rh   rd   )r   rv   r   nanr7   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   rR   _df2)rB   r   r   rh   r%   pnum_df2rn   r1   )r  period_ranger   r   r   r   r	   rv   r   r   r   r   r0  reshaper   r1   r7   rx   )r(   r1   r)   r.   r   r   s         r   !test_join_non_unique_period_indexz*TestJoin.test_join_non_unique_period_index'  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                    t          t          j                            dd          g d          }|                    ddd           |                    ddd	           |                    d          }t          j        t          d
          5  |	                                 d d d            n# 1 swxY w Y   |	                    d          }|
                                }|                    |d           d S )Nr)  r   )rd   re   rf   r   r-  r   r   r   idr   dtro   zCould not convertrs   T)numeric_only_rightr   )r   r   r   r'   insertr  rz   r{   r   r  countrv   )r(   r)   groupedmncns        r    test_mixed_type_join_with_suffixz)TestJoin.test_mixed_type_join_with_suffix4  s   ryr1--7U7U7UVVV
		!T1
		!T5!!!**T""]9,?@@@ 	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	\\t\,,]]__ 	H%%%%%s   B11B58B5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   abcdefr   rd   re   rf   r   r-  r   r   r%   rh   	   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>M  s%    ???!9--???r   r   r%   r   )df_listr   rb  	reindexedr   s     `  r   _check_diff_indexz2TestJoin.test_join_many.<locals>._check_diff_indexL  sT    ????w???I |((12277H!&(33333r   rO   rA   rR   r   z?Joining multiple DataFrames only supported for joining on indexrs   r>   )r   r   r   r'   r   rv   r7   rx   r1   rz   r{   r~   )r(   r)   rd  rZ   rf  r   s         r   test_join_manyzTestJoin.test_join_manyC  s   ryr1--tH~~FFF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                 D   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   ro   rp   rb   r2   r   r6   r3   )r   r   r   r'   r/  rv   r7   rx   )r(   r)   r   r.   r1  r   s         r   test_join_many_mixedzTestJoin.test_join_many_mixed_  s    ryq!,,6J6J6JKKK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
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,   )r2   r2   r   r   r   r   r)  r   rh   r2   r6   r%   r   _2rS  r   yTr  rO   )r   r   rB   z0Passing 'suffixes' which cause duplicate columnsrs   )r	   r   r   r   r'   r!  rL  rv   rn   r7   rx   r
   rz   r{   r  r  r  )	r(   r)   r   r   wr   rl  zdtas	            r   test_join_dupszTestJoin.test_join_dupsi  sF   ")//"a00:N:N:NOOOI%%a"%55==b!DDsTWj   
 
 
 2r(+++T**!)
fh/// biooa++c3Z@@@biooa++c3Z@@@biooa++c3Z@@@biooa++c3Z@@@ggaDdg;;AA$Dg B 
 
 ]I D
 
 
 	< 	< IIaDdI;;;		< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   +HHH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%   rh   )rr  rs  numr   v1   r0   v2c                     g | ]}d |z  S )r  r`  )ra  is     r   rc  z5TestJoin.test_join_multi_to_multi.<locals>.<listcomp>  s    !?!?!?a#'!?!?!?r   r  rK   r   rs   )r   from_productr   r   r   rv   r  r
   r  r7   rx   rz   r{   r~   )	r(   r   	leftindexr@   
rightindexrJ   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>   rh   tuvrG  r  )r   r  
date_ranger   rv   r  r}   r   r   r=  objectr7   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   rl  rd   r   r   )r  r  r%   )r  r  rh   )r   rl  rn  rh   r,   rJ  rl  r>   z2012-08-02 00:00:00r  r%   r   z2013-04-06 00:00:00r  r)  )r   rl  rn  rd   rm   )r   r  to_datetimerv   r  r   r7   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 )Nrd   re   
categoriesc1r0   c2)r  r  )r  CategoricalIndexreversedr   rv   r7   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<   rH   rL   rP   rS   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  rY  rg  ri  rp  r}  r  r  r  r`  r   r   r   r      s       ^  ^ ^
 
 ^
 ^	 	 ^	H H HI I II I II I I$ $ $	$ 	$ 	$%- %- %-N
: 
: 
:
: 
: 
:
= 
= 
= [\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 !2F80 80 80xG G G& & &.4, 4, 4,lI I I&0 0 0&0 0 0& & &1 1 18* * *< < <B> > >60 0 000 0 0:0 0 0 0 0r   r   r@   _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   )r@   rR   zkey z! should not have been in the join)rJ   rR   )r   r   r  r   _restrict_to_columnsrn   	get_group_assert_same_contentsr|   AssertionError_assert_all_na)r@   rJ   r   r   rB   r   r   rf   left_groupedright_grouped	group_keygroupl_joinedr_joinedlgrouperrrgroups                    r   rD   rD     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)ra  rf   rn   suffixs     r   rc  z(_restrict_to_columns.<locals>.<listcomp>  s@       ALLAIIfb4I4IW4T4T4T4T4Tr   c                 0    |                      d          S )Nr  r  )r   r  s    r   <lambda>z&_restrict_to_columns.<locals>.<lambda>  s    199VR+@+@ r   r   )rn   r/  rename)r  rn   r  founds    `` r   r  r    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 r`  tuple)ra  rows     r   	<setcomp>z(_assert_same_contents.<locals>.<setcomp>(  s    ***3E#JJ***r   c              3   :   K   | ]}t          |          v V  d S r   r  )ra  r  rowss     r   	<genexpr>z(_assert_same_contents.<locals>.<genexpr>*  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   rf   s       r   r  r  -  sR     * *==!}!!##''))))))* *r   c                 @   | j                             |j         |          }|                     |          }|                    |          }| j                            |j                  }|                                D ]
\  }}|||<   |                    |          S )NrA   r   )r1   rv   r   rn   appenditems)	rd   re   rB   
join_indexa_reb_reresult_columnsr   r$  s	            r   r   r   4  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%   rh   r,   r  r   r9   r1   r   r   )rh   rk   )re   rf   rR   rA   )r-  r   )rh   r%   r,   rk   )re   rd   r   rf   r0   r   r   from_tuplesrv   r7   rx   )r@   rJ   r   r   s       r   .test_join_inner_multiindex_deterministic_orderr  A  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_colsre   rd   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 )Nrd   r%   rk   r,   crossr  r  )rB   r   r   r   )r%   r%   rk   rk   )rk   r,   rk   r,   r   )r  r  r@   rJ   r   r   s         r   test_join_crossr  R  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 )Nrf   rk   )r%   rh   r   r   r  r   r,   )rh   )re   rA   )rf   r   )rh   r%   re   rd   r0   r  )r   r@   rJ   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  rh   r%   )rh   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 )Nr2   r  r%   rh   )r   r   r-   r   r   )r2   r2   r   )rk   r,   r   _leftrR  r   rk   r,   )r   r   
value_leftvalue_rightr   r   r  rv   r7   rx   )r  r   r@   rJ   r   r   s         r   1test_join_multiindex_not_alphabetical_categoricalr  l  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)
)Fr@   r@   )FrJ   empty)FrR   r  )FrO   r@   )Fr  r  )Tr@   r  )TrJ   rJ   )TrR   r  )TrO   rJ   )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 )Nrh   r%   rk   r,   )r2   r   r   rG  r2   r   )r2   r6   r   rA   r@   )r2   r   r6   rJ   )r   r2   r6   r  r   r6   r  r  )	r   r  headrv   r   r=  rename_axisr7   rx   )
left_emptyrB   expr@   rJ   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, valuesrR   rg   rO   rJ   r   rh   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 )	Nrg   ri   rd   re   r  r  )rd   re   rf   r   rA   r  )rB   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   )r@   r  r  )r@   )numpyr   rz   pandasr  r   r   r   r   r   r   r	   r
   pandas._testing_testingr7   r   r   rD   r  r  r  r   r  r  r  r  r  r  r  r  r`  r   r   <module>r     s           	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	         J0 J0 J0 J0 J0 J0 J0 J0Z$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   