
    bMhy                     L   d dl Zd dlZd dlmc mZ d dlZd dlm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlmZ d dlmZ ej        d             Zej        d             Zej        d             Zej        d             Zej        d	             Z G d
 d          Z G d d          ZdS )    N)	DataFrameIndex
MultiIndex
RangeIndexSeries	Timestampoption_context)concat)mergec                      g d} g d}t           j                            d                              t	          |                     }t          | ||d          S )z=left dataframe (not multi-indexed) for multi-index join tests)
barr   r   foor   bazr   quxr   snap)
twoonethreer   r   r   r   r   r   r      key1key2data)nprandomdefault_rngstandard_normallenr   r   s      e/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pandas/tests/reshape/merge/test_multi.pyleftr       s\     SRRDUUUD9  ##33CII>>DdD$??@@@    c                 8    | }ddg|j         _        g d|_        |S )z:right dataframe (multi-indexed) for multi-index join testsr   r   )j_onej_twoj_three)indexnamescolumns) multiindex_dataframe_random_datadfs     r   rightr+       s)     
*Bf%BHN...BJIr!   c                  r    t          g dg dg dg dg ddg d                              g d          S )	N)Ar-   Br.   C)r-   r.   r-   r/   r-   )AMr0   IPr0   OP)hbwnhbhbor4   r3   )i  i?  i	  i  i\  )OriginDestinationPeriodTripPurpTripsr(   )r6   r7   r8   r9   r   	set_index r!   r   
left_multir?   *   ss    ///444444;;;333	
 	
 IHH	 	 	 i???@@	Ar!   c                  r    t          g dg dg dg dg ddg d                              g d          S )	N)r-   r-   r.   r.   r/   r/   E)r-   r.   r-   r.   r-   r.   F)r0   r0   r1   r0   r2   r1   r0   )abcrD   rC   rD   rC   )d   P   Z   rG   K   #   7   )r6   r7   r8   LinkTypeDistancer;   )r6   r7   r8   rL   r<   r>   r!   r   right_multirN   8   ss    999>>>@@@;;;555	
 	
 LKK	 	 	 i???@@	Ar!   c                  
    g dS )N)r6   r7   r8   r>   r>   r!   r   on_cols_multirP   F   s    ....r!   c            
       |   e Zd Zd Zej                            dd ej        d ej	        d                    g          ej                            dddg          d                         Z
ej                            dddg          d	             Zd
 Zd Zd Zd Zd Zd Zd Zej                            ddej        eeg          d             Zej                            dddg          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S ) TestMergeMultic                    ddg}|                     |||                              d          }t          ||                                ||          }t          j        ||           |                     |||d                              d          }t          ||                                ||d          }t          j        ||           d S )Nr   r   onhowT)droprU   rV   sort)joinreset_indexr   tmassert_frame_equal)selfr    r+   	join_typeon_colsresultexpecteds          r   test_merge_on_multikeyz%TestMergeMulti.test_merge_on_multikeyL   s    6"5W)<<HHdHSSu0022wINNN
fh///5W)$GGSS T 
 
 %##%%'yt
 
 
 	fh/////r!   infer_stringFTpyarrow)marksrY   c                 j  	 t          d|          5  g d	d 	fd}t          t          t          t	          j        t          d          t          d          dz                                 }t          t          j        	                    d          
                    |d	          d
dg          }|                    ddt          j        	                    d                              ddt          |                                        d                     t          j        	                    d                              t          |                    }|j        |                                         } |          |d<    |           |d<   |                    	d            ||||           t          j        |j        dd dd
f<   t          j        |j        dd ddf<   t          j        |j        dd ddf<    |          |d<   t          j        	                    d                              t          |                    }|j        |d df         } |           |d<   |                    	d            ||||           d d d            d S # 1 swxY w Y   d S )Nzfuture.infer_string)1st2nd3rdc                     d fd} || d                    || d                   dz  z   | d                              d          dz  z   S )	Nc                 0    | | k    rdnt          |           S )Nr   )ord)rC   s    r   <lambda>zNTestMergeMulti.test_left_join_multi_index.<locals>.bind_cols.<locals>.<lambda>g   s    a1ff#a&& r!   c                 N    |                                t          d          z
  S )NrC   )maprm   )tsiords    r   rn   zNTestMergeMulti.test_left_join_multi_index.<locals>.bind_cols.<locals>.<lambda>h   s    rvvd||c#hh6 r!   rh   rj   g      Y@ri   r   
   )fillna)r*   frr   s     @r   	bind_colsz<TestMergeMulti.test_left_join_multi_index.<locals>.bind_colsf   s^    886666qE||aa5	llS&882e9;K;KA;N;NQS;SSSr!   c                    |                      |d|          }t          |           t          |          dz   k     sJ |d                                                                         rJ |d                                                                         rJ t	          j        |d         |d          d            |j        d d d df                   }t	          j        |d         |d           |j        J |r*t	          j        ||	                    d	
                     t          | |                                |d          }t          t          |                    |_        t	          j        ||           d S )Nr    rX      4th5thF)check_names	mergesortkind)rU   rY   rV   )rZ   r   isnaanyr\   assert_series_equalilocnamer]   sort_valuesr   r[   r   r&   )r    r+   rY   resra   outrv   icolss         r   run_assertsz>TestMergeMulti.test_left_join_multi_index.<locals>.run_assertsk   sv   ii%V$iGG4yy3s88a<////u:??,,0022222u:??,,0022222&s5zCJ;ERRRR"38AAAssF#344&s5z6uMMMM{*** Y)#su;/W/WXXXD%"3"3"5"5%dPVWWW&s3xx00	%c3/////r!   rC   zrx   r   )2   r   rh   rj   r;   ri   r   rs   floatry   rz   T)inplace            )r	   listrp   chrr   arangerm   r   r   r   choiceinsertintegersr   astypepermutationr   copyr=   nanloc)
r^   rY   rd   r   lcr    ir+   rv   r   s
           @@r   test_left_join_multi_indexz)TestMergeMulti.test_left_join_multi_index^   s   
 1<@@ ;	+ ;	+)))ET T T
0 0 0 0 0 0( c#ryS3s88a<@@AABBB	%%a((//G<<uen  D KK	%%a((11!RTCCJJ7SS   	%%a((44SYY??AIaL%%''E#)D//DK%Ie,,,E%LOOE4O000KeT*** %'FDHQTT5[!$&FDHQTT5[!$&FDHQTT5[!#)D//DK	%%a((44SYY??AIa"f%E%Ie,,,E%LOOE4O000KeT***w;	+ ;	+ ;	+ ;	+ ;	+ ;	+ ;	+ ;	+ ;	+ ;	+ ;	+ ;	+ ;	+ ;	+ ;	+ ;	+ ;	+ ;	+s   JJ((J,/J,c                     ddg}|                     ||dd|          }|                     ||dd|          }||j                 }t          j        ||           d S )Nr   r   Tr    )left_onright_indexrV   rY   r+   )right_on
left_indexrV   rY   )r   r(   r\   r]   )r^   r    r+   rY   r`   merged_left_rightmerge_right_lefts          r   test_merge_right_vs_leftz'TestMergeMulti.test_merge_right_vs_left   s     6" JJ7&t ' 
 
 !;;7tt ' 
 

 ,,=,EF
/1ABBBBBr!   c                    t          t          d          t          j        ddgg dgddg          d	          }t	          t          d
          g ddd          }t          ||                                ddg          }t	          t          d
          g ddgdz  t          d          d          }t          j	        ||           d S )Nr   r-   r.   rx   r   r   lev1lev2r'   Amount)r   AAABBB)rx   r   r   rx   r   r   r   )r   r   colrU   )r   r   r   r   )
r   ranger   from_productr   r   r   r[   r\   r]   )r^   sr*   ra   rb   s        r   .test_merge_multiple_cols_with_mixed_cols_indexz=TestMergeMulti.test_merge_multiple_cols_with_mixed_cols_index   s    !HH#c3Z$;FFCSTTT
 
 

 X8J8J8JSTUUVVr1==??/?@@@X***sQw((	 
 
 	fh/////r!   c                    d t          d          D             }t          j        |d          }|d d d         }t          ||t          j                            d                              d          d          }t          |d d d         |d d d         t          j                            d                              d          d          }t          ||d	           d S )
Nc                 ,    g | ]}t          |          S r>   )str).0r   s     r   
<listcomp>zCTestMergeMulti.test_compress_group_combinations.<locals>.<listcomp>   s    ---1A---r!   i'  r   r   i N  )r   r   value1)r   r   value2outerrV   )r   r   tiler   r   r   r   r   )r^   r   r   r*   df2s        r    test_compress_group_combinationsz/TestMergeMulti.test_compress_group_combinations   s    --e---wtQDDbDz)//22BB5II 
 
 SSqS	SSqS	)//22BB5II 
 
 	b#7######r!   c           
         ddg}t          g ddz  ddgdz  t          j        t          j        d          t          j        	          d
          }t          j        ddg          }t          dddgi|          }|                    ||          }|                                }t          j	        |d<   d|j
        |j        dk    |j        dk    z  df<   d|j
        |j        dk    |j        dk    z  df<   t          j        ||           |                    |dd           |                    ||d          }t          j        ||           t          g ddz  ddgdz  t          j        g ddz  t          j        	          t          j        t          j        d          t          j        	          d          }t          j        ddg          }t          dddgi|          }|                    ||          }|                                }t          j	        |d<   d|j
        |j        dk    |j        dk    z  df<   d|j
        |j        dk    |j        dk    z  df<   t          j        ||           |                    |d          }|                    ||d          }t          j        ||           d S )Nk1k2)r   rx   r      r   r         dtype)r   r   v)r   r   )rx   r   v2r      r&   r   r   rx   r}   T)r   r   )rU   rY   )r   r   k3r   r~   )r   r   arrayr   int64r   from_tuplesrZ   r   r   r   r   r   r\   r]   r   float32int32)r^   r`   r    r&   r+   ra   rb   s          r   #test_left_join_index_preserve_orderz2TestMergeMulti.test_left_join_index_preserve_order   s   ,ii!menr)Xbimm28<<< 
 
 &
J'?@@4!Q.6665W--99;;JKhkQ&8;%+?@$FGJKhkQ&8;%+?@$FG
fh///7dCCC99UwT9::
fh/// ii!menr)hyyy1}BJ???Xbimm28<<<	 
 
 &
J'?@@4!Q.6665W--99;;JKhkQ&8;%+?@$FGJKhkQ&8;%+?@$FG
fh///##G+#>>99UwT9::
fh/////r!   c                    t          g dg dg dg dg dg dg dg dg d	g d
g
g dg d          }t          g dg dg dg dg dg dg dg dg dg dg dg dg dg dgg d                              g d          }|                    |g dd !          }t          g d"g d#d$d%d&d't          j        gg d(g d)g d*d+d%d,d-t          j        gg d.g d/g d0g d1g d2g d3g d4gg d5g d6          }t          j        ||           |                    |g dd d78          }|                    g dd9:          }t          j        ||           d S );N)XYr/   rC   )Wr   r/   e)VQr-   h)r   RDr   )r   r   r   rD   )r   r   r-   rE   )r   r   r.   ru   )r   r   r/   g)r   r   r/   j)r   r   r.   d)colacolbcolctag)
r   r   r   rx   r   r   r   r   	   r   r(   r&   )r   r   r/   r   )r   r   r.   r   )r   r   r.   r   )r   r   r-   rx   )r   r   r-   r   )r   r   r.   r   )r   r   r/   r   )r   r   r/   r   )r   r   r/   i)r   r   r/   i)r   r   r/   r   )r   r   r   r   )r   r   r   r   )r   r   r-   )col1col2col3valr;   )r   r   r   )r   r   r   r    rT   )r   r   r/   rC   r   )r   r   r/   rC   r   r   r   r/   r   )r   r   r-   r   r   )r   r   r   r   r   )r   r   r   r   r   r   r   rD   )r   r   r-   rE   rx   )r   r   r-   rE   r   )r   r   r.   ru   r   )r   r   r.   ru   r   )r   r   r/   r   r   )r   r   r/   r   r   )r   r   r.   r   r   )r   r   r   r   r   )r   r   r   r   rx   rx   r   r   r   r   r   r   r   r   TrX   r}   r~   )r   r=   rZ   r   r   r\   r]   r   )r^   r    r+   ra   rb   s        r   +test_left_join_index_multi_match_multiindexz:TestMergeMulti.test_left_join_index_multi_match_multiindex  s   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 433000
 
 
" """"""""""""""""""""""""######""""""######  433#
 
 
$ ),,,
-
-% 	( 5%=%=%=6JJ''''''c3RV,((('''(((c3RV,'''''''''''''''''''''  ;::<<<%
 
 
* 	fh///5%=%=%=6PTUU''(@(@(@{'SS
fh/////r!   c                    t          ddgddgddgddggdd	gg d
          }t          ddgddgddgddgddgddgddgddggddg                              d          }|                    |dd          }t          g dg dg dg dddt          j        gg dg dddt          j        ggg d g d!          }t          j        ||           |                    |ddd"#          }|                    dd$%          }t          j        ||           t          ||	                                dd&          }t          t          |                    |_        t          j        ||           d S )'NrE   r   rD   rx   rC   r   r   r   r   )r   r   rx   r   r   r   wxr   yr   rr   qr   charr;   r    rT   )rE   r   r   )rE   r   r   )rE   r   r   )rE   r   r   )rC   r   r   )rC   r   r   )r   r   r   )r   r   r   r   r   rx   rx   r   TrX   r}   r~   rV   rU   )r   r=   rZ   r   r   r\   r]   r   r   r[   r   r   r&   )r^   r    r+   ra   rb   	expected2s         r    test_left_join_index_multi_matchz/TestMergeMulti.test_left_join_index_multi_matchX  s   1XQx#qC84EN,,
 
 
 c
c
c
c
c
c
c
c
	 FO
 
 
 )E

 	 5U77a a 	 +*****
 
 
 	fh///5UTBB(([(AA	
fi000 tU..00fGGG#CMM22
fh/////r!   c           	         t          t          d          t          j                            d                              d          t          j                            d                              d          t          d          t          j                            d                              d          dg d          }t          ddt          j        t          j        t          j        gdd	t          j        t          j        t          j        gd
          }t          ||dd          }|                    dgd          }|	                    |          }t          j        ||           d S )Nabcder   r   )idv1r   dummyv3r;   rC   rD   gX9v?gʡE@)r   sv3r   r    rT   rx   )axis)r   r   r   r   r   r   r   r   rW   rZ   r\   r]   )r^   r    r+   ra   rdfrb   s         r   test_left_merge_na_bugletz(TestMergeMulti.test_left_merge_na_buglet  s:   7mmi++A..>>qAAi++A..>>qAAgi++A..>>qAA  655	
 	
 	
 C8ubfbfbf= 
 
 tUt888jj$aj((99S>>
fh/////r!   c           
      v   g dg dg dddt           j        gg dg dddt           j        gg d	g d
g	}t          |g d          }ddt           j        gddt           j        gddt           j        gddt           j        gddt           j        gddt           j        gg}t          |g d          }|                    |d          }|                    d                              |                    d          d          }|                    dt           j                  }t          j        ||           d S )N)  r-         ?)r  r.   r  )  r.   r  i  r.   )  r.         @)r  r/   r  r/   )  r/   g      @)r  r/   r  )yearpanelr   r;   r-   r  r  r  r   r   i)r   r   r   r   rt   replacer\   r]   )r^   r   frame
other_dataotherra   rb   s          r   test_merge_na_keysz!TestMergeMulti.test_merge_na_keys  s\   33

 $(A(A(ABBB 333333

 *.G.G.GHHHU00<<%%++ELL,>,>G+LL##D"&11
fh/////r!   klassNc                 
   t          g dg ddg          }t          j        |j                  |_        |j        j        }| ||          }t          j        g dt
          j                  }t          g d|d          }|                    |d|gd	          }t          j
        ||           t          |g dg dd
          }|                    ||j        j        gd	          }t          j
        ||           d S Nr   )z
2016-01-01z
2017-01-01z
2018-01-01rC   r;   )i  i  i  r   )rC   key_1innerrT   )key_0a_xa_yr   pdto_datetimer&   r	  r   r   r   r   r\   r]   )r^   r  r*   	on_vector	exp_yearsrb   ra   s          r   test_merge_datetime_indexz(TestMergeMulti.test_merge_datetime_index  s    IIAAAC5
 
 
 >"(++HM	i((IH///rx@@@	999yAABB"#y!1w??
fh///y999UUVV""(-g>>
fh/////r!   
merge_typer    r+   c           	         t          dddgit          j        t          d          dgt          d          dggddg	          
          }t          t          j        g ddg	          dg          }t          j        t          d          dgt          d          dggddg	          }|dk    rwt          ddgt	          j        t          j        t          j        gt                    d|
          }|                    |dddg          }|	                    |d          }nvt          t	          j        t          j        t          j        gt                    ddgd|
          }|                    |dddg          }|	                    |d          }t          j        ||           t          j        ||           d S )Nr   r  z
1950-01-01r-   z
1950-01-02r.   dater
  r   )r   r&   state)r&   r(   r    r   )r   r!  r   r   )r!  r   r+   )r   r   r   r   r   r   r   objectr   rZ   r\   r]   )r^   r  r    r+   expected_indexrb   results_mergeresults_joins           r   (test_merge_datetime_multi_index_empty_dfz7TestMergeMulti.test_merge_datetime_multi_index_empty_df  s    c
 (L))3/)L2I2I31OPw'  	
 
 
 (FG3DEEEPWy
 
 
 $/%%s+i.E.Es-KL7#
 
 

   #JXrvrv&6fEEE  %  H !JJu&fg=NJOOM99U977LL Xrvrv&6fEEE #J  %  H "KK'vw>OKPPM ::d:88L
mX666
lH55555r!   c                 f    t          g dg dg ddg d                              d          }|S )Nr   )r   rx   r   )ffffAPAi^ )household_idmalewealthr;   r*  r<   )r^   	households     r   r-  zTestMergeMulti.household  s\     )		!		666 
 766
 
 
 )N
#
# 	 r!   c                     t          g dddddddt          j        gddd	d	d
dt          j        gg ddg d                              ddg          }|S )Nrx   r   r   r   r   r   r   nl0000301109nl0000289783gb00b03mlx29lu0197800237nl0000289965ABN AmroRobecoRoyal Dutch ShellAAB Eastern Europe Equity FundPostbank BioTech Fonds      ?皙?333333?333333?r=        ?r;  )r*  asset_idr   sharer;   r*  r@  )r   r   r   r=   )r^   	portfolios     r   rB  zTestMergeMulti.portfolio  s     5 5 5""""""F ''4,F ?>>) , BAA/
 
 
0 )^Z0
1
11 	2 r!   c           	          t          g dg dg dg dg dg dd                              dd	g                              g d
          }|S )N)r   rx   rx   r   r   r   )r(  r)  r)      xArD  rD  )r5  r6  r7  r7  r8  r9  )r;  r<  r=  r>  r=  r?  )rx   r   r   r   r   r   )r0  r1  r2  r2  r3  r4  )r+  r,  r   rA  r*  r@  r*  r@  )r+  r,  r   rA  r;   )r   r=   reindex)r^   rb   s     r   rb   zTestMergeMulti.expected1  s     ...     BAA$6$6$6! ! !)  > Y
344W@@@WAAC 	F r!   c                     |                                 }|                                 }|                    |d          }t          j        ||           d S )Nr  r   )r   rZ   r\   r]   r^   rB  r-  rb   ra   s        r   test_join_multi_levelsz%TestMergeMulti.test_join_multi_levelsX  sP    NN$$	NN$$	 	w77
fh/////r!   c                    |                                 }|                                 }t          |                                |                                dgd                              ddg          }t	          j        ||           d S )Nr*  r  rT   r@  )r   r   r[   r=   r\   r]   rG  s        r   (test_join_multi_levels_merge_equivalencez7TestMergeMulti.test_join_multi_levels_merge_equivalencea  s    NN$$	NN$$	 !!##!!##	
 
 

 )^Z0
1
1 	 	fh/////r!   c                 v   |                                 }|                                 }|                    |d          }t          |t          ddgit	          j        dt          j        fgddg          	          gd
d                              |j	                  }t          j        ||d           d S )Nr   r   rA  r;  r   r*  r@  r   r   r   T)r   rY   r;   F)check_index_type)r   rZ   r
   r   r   r   r   r   rE  r(   r\   r]   rG  s        r   test_join_multi_levels_outerz+TestMergeMulti.test_join_multi_levels_outern  s    NN$$	NN$$		w77 4&)(4[M.*1M    
 
 
 
 '(*'
+
+ 	 	fhGGGGGGr!   c                    |                                 }|                                 }d|j        _        t          j        t
          d          5  |                    |d           d d d            n# 1 swxY w Y   |                                 }|j                            ddg           t          j        t
          d          5  |                    |d           d d d            d S # 1 swxY w Y   d S )Nr   z+cannot join with no overlapping index names)matchr  r   r*  z'columns overlap but no suffix specified)r   r&   r   pytestraises
ValueErrorrZ   	set_names)r^   rB  r-  
portfolio2s       r   test_join_multi_levels_invalidz-TestMergeMulti.test_join_multi_levels_invalid  ss   NN$$	NN$$	  %	]K
 
 
 	3 	3 NN9'N222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3
 ^^%%
""NE#:;;;]:-VWWW 	4 	4OOI7O333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s$   A44A8;A8
C//C36C3c           
         t          g dddddddt          j        gg ddg d                              d	d
g          }t          g dg dg dd                              d
dg          }t          g dg dg dg dg dd                              g d                              ddg          }t          |                                |                                d
gd                              g d          }t          j        ||           t          g dg dg dg dg dd                              g d                              ddg          }t          |                                |                                d
gd                               g d          }t          j        ||           d S )!Nr/  r0  r2  r3  r4  r:  )r*  r@  rA  r;   r*  r@  )r2  r2  r2  r3  r3  )               )S緖?D >?
?HRE?)r@  t
log_returnra  )r   r   r   r   r   r   r   r   )r2  r2  r2  r2  r2  r2  r3  r3  )rW  rX  rY  rW  rX  rY  rZ  r[  )r=  r=  r=  r>  r>  r>  r=  r=  )r\  r]  r^  r\  r]  r^  r_  r`  )r*  r@  ra  rA  rb  )r*  r@  ra  rA  rb  r  rT   )r   r   r   r   r   r   r   r   r   rx   r   r   )r2  r2  r2  r2  r2  r2  r3  r3  r4  r0  r0  N)rW  rX  rY  rW  rX  rY  rZ  r[  NNNN)r=  r=  r=  r>  r>  r>  r=  r=  r?  r;  r<  r;  )r\  r]  r^  r\  r]  r^  r_  r`  NNNNr   )	r   r   r   r=   rE  r   r[   r\   r]   )r^   r-  rb  rb   ra   s        r   test_join_multi_levels2z&TestMergeMulti.test_join_multi_levels2  s     5 5 5""""""F ?>>  :99
 
 
 )^Z0
1
1 	"    /..   
 
$ )Z%
&
&% 	* $<$<$<	! 	! 	! BAAHHH	# 	# 	#  6 Y88899Wg|4W55; 	B !!##""$$|	
 
 

 )555
6
6 	 	fh/// $H$H$H! ! !    # # #Y: :< <z Y88899Wg|4W55 	D !!##""$$|	
 
 

 )555
6
6 	 	fh/////r!   )"__name__
__module____qualname__rc   rP  markparametrizeparamtd
skip_if_nor   r   r   r   r   r   r   r  r  r   asarrayr   r   r  r&  fixturer-  rB  rb   rH  rJ  rM  rU  rc  r>   r!   r   rR   rR   K   s\       0 0 0$ [Ty9Q9Q R R RS  [VdE]33<+ <+ 43 <+| [VeT]33C C 43C 0 0 0&$ $ $240 40 40lC0 C0 C0J00 00 00d0 0 000 0 0@ [WtRZ&GHH0 0 IH0, [\FG+<==,6 ,6 >=,6\ ^	 	 ^	 ^  ^8 ^$ $ ^$L0 0 00 0 0H H H,4 4 4$Z0 Z0 Z0 Z0 Z0r!   rR   c                       e Zd Zd Zd Zej                            ddej	        e
eg          d             Zd Zd ZdS )TestJoinMultiMultic                    |j         j        }|j         j        }|dk    r||                    |          z   }n||                    |          z   }t          |                                |                                ||                              |                                          }|                    ||                                          }	t          j	        |	|           d S )Nr+   r   r   )
r&   r'   
differencer   r[   r=   
sort_indexrZ   r\   r]   
r^   r?   rN   r_   rP   
left_namesright_nameslevel_orderrb   ra   s
             r   test_join_multi_multiz(TestJoinMultiMulti.test_join_multi_multi4  s    %+
!'-%
(=(=k(J(JJKK${'='=j'I'IIK &&(('')) 	   Y{##Z\\ 	 )<<GGII
fh/////r!   c                 D   |                     |j                  }|                     |j                  }|j        j        }|j        j        }|dk    r||                    |          z   }n||                    |          z   }t          |                                |                                ||                              |                                          }|	                    ||                                          }	t          j        |	|           d S )Nr;   r+   r   r   )rW   r(   r&   r'   rq  r   r[   r=   rr  rZ   r\   r]   rs  s
             r   test_join_multi_empty_framesz/TestJoinMultiMulti.test_join_multi_empty_framesJ  s     __Z-?_@@
!&&{/B&CC%+
!'-%
(=(=k(J(JJKK${'='=j'I'IIK &&(('')) 	   Y{##Z\\ 	 )<<GGII
fh/////r!   boxNc                 
   t          g dg ddg          }t          j        |j                  |_        |j        j        }| ||          }t          j        g dt
          j                  }t          g d|d          }|                    |d|gd	          }t          j
        ||           t          |g dg dd
          }|                    ||j        j        gd	          }t          j
        ||           d S r  r  )r^   rz  r*   r  r  rb   ra   s          r   r  z,TestJoinMultiMulti.test_merge_datetime_indexe  s    IIAAAC5
 
 
 >"(++HM	?IIH///rx@@@	999yAABB"#y!1w??
fh///y999UUVV""(-g>>
fh/////r!   c                    t          j        g dddg          }t          g dg dd|          }t          j        g d	dd
g          }t          g dg dd|          }|                    |          }t	          |                                |                                dgd                              g d          }t          j        ||           d S )N))K0X0)r}  X1)K1X2keyr   r   )A0A1A2)B0B1B2)r-   r.   r   ))r}  Y0)r  Y1)K2Y2)r  Y3r   )C0C1C2C3)D0D1D2D3)r/   r   r  rT   )r  r   r   )	r   r   r   rZ   r   r[   r=   r\   r]   )r^   
index_leftr    index_rightr+   ra   rb   s          r   test_single_common_levelz+TestJoinMultiMulti.test_single_common_level|  s.   +666ucl
 
 

 $$$+=+=+=>>j
 
 
 !,DDDUTWL
 
 
 ***1I1I1IJJ
 
 

 5!! 1 1 3 3W
 
 

)%%%
&
& 	 	fh/////r!   c                 f   t          j        ddgddggddg          }t          j        g dddg          }t          |d	g d
i          }t          |dg di          }|                    |          }t          |g d
dddt
          j        gd          }t          j        ||           d S )Nrx   r   r   r   rC   rD   r   ))r   rx   )r   r   )r   rx   r   )rs         (   )r&   r   r   )r   r   fingr  r   r   )r   r   )	r   r   r   r   rZ   r   r   r\   r]   )r^   midx1midx3r    r+   ra   rb   s          r   test_join_multi_wrong_orderz.TestJoinMultiMulti.test_join_multi_wrong_order  s     '!Q!Q(8c
KKK&'?'?'?SzRRRuC1A1A1A+BCCCS2H2H2H,IJJJ5!!'''vueRV.LMM
 
 

 	fh/////r!   )rd  re  rf  rw  ry  rP  rg  rh  r   rl  r   r   r  r  r  r>   r!   r   ro  ro  3  s        0 0 0,0 0 06 [UT2:vu$EFF0 0 GF0,0 0 020 0 0 0 0r!   ro  )numpyr   rP  pandas.util._test_decoratorsutil_test_decoratorsrj  pandasr  r   r   r   r   r   r   r	   pandas._testing_testingr\   pandas.core.reshape.concatr
   pandas.core.reshape.merger   rm  r    r+   r?   rN   rP   rR   ro  r>   r!   r   <module>r     s        ) ) ) ) ) ) ) ) )                            - - - - - - + + + + + + A A A    
A 
A 
A 
A 
A 
A / / /e0 e0 e0 e0 e0 e0 e0 e0Ps0 s0 s0 s0 s0 s0 s0 s0 s0 s0r!   