
    Mhy                     R   S SK rS SKrS SKJs  Jr  S SKrS SKJ	r	J
r
JrJrJrJrJr  S SKJr  S SKJr  S SKJr  \R.                  S 5       r\R.                  S 5       r\R.                  S 5       r\R.                  S 5       r\R.                  S	 5       r " S
 S5      r " S S5      rg)    N)	DataFrameIndex
MultiIndex
RangeIndexSeries	Timestampoption_context)concat)mergec                      / SQn / SQn[         R                  R                  S5      R                  [	        U 5      5      n[        XUS.5      $ )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      W/var/www/html/env/lib/python3.13/site-packages/pandas/tests/reshape/merge/test_multi.pyleftr       sB     SDUD99  #33CI>Dd$?@@    c                 B    U nSS/UR                   l        / SQUl        U$ )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%BHHN.BJIr!   c                  \    [        / SQ/ SQ/ SQ/ SQ/ SQS./ SQS9R                  / SQ5      $ )	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?   *   s7    /44;3	
 I	 i?@	Ar!   c                  \    [        / SQ/ SQ/ SQ/ SQ/ SQS./ SQS9R                  / SQ5      $ )	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   s7    9>@;5	
 L	 i?@	Ar!   c                  
    / SQ$ )N)r6   r7   r8   r>   r>   r!   r   on_cols_multirP   F   s    ..r!   c            
          \ rS rSrS r\R                  R                  SS\R                  " S\	R                  " S5      S9/5      \R                  R                  SSS/5      S	 5       5       r\R                  R                  SSS/5      S
 5       rS rS rS rS rS rS rS r\R                  R                  SS\R*                  \\/5      S 5       r\R                  R                  SSS/5      S 5       r\R4                  S 5       r\R4                  S 5       r\R4                  S 5       rS rS rS r S r!S  r"S!r#g)"TestMergeMultirI   c                 <   SS/nUR                  X$US9R                  SS9n[        XR                  5       XCS9n[        R                  " XV5        UR                  X$USS9R                  SS9n[        XR                  5       XCSS9n[        R                  " XV5        g )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_multikey%TestMergeMulti.test_merge_on_multikeyL   s    6"5)<HHdHS002wN
f/5)$GSS T 
 ##%'t
 	f/r!   infer_stringFTpyarrow)marksrY   c                   ^^	 [        SU5         / SQm	S mUU	4S jn[        [        [        [        R
                  " [        S5      [        S5      S-   5      5      5      n[        [        R                  R                  S5      R                  US	5      S
S/S9nUR                  SS[        R                  R                  S5      R                  SS[        U5      5      R                  S5      5        [        R                  R                  S5      R                  [        U5      5      nUR                   U   R#                  5       nT" U5      US'   T" U5      * US'   UR%                  T	SS9  U" XWU5        [        R&                  UR(                  SS S2S
4'   [        R&                  UR(                  SS S2S4'   [        R&                  UR(                  SS S2S4'   T" U5      US'   [        R                  R                  S5      R                  [        U5      5      nUR                   US S24   nT" U5      * US'   UR%                  T	SS9  U" XWU5        S S S 5        g ! , (       d  f       g = f)Nzfuture.infer_string)1st2nd3rdc                 z   ^ S mU4S jnU" U S   5      U" U S   5      S-  -   U S   R                  S5      S-  -   $ )	Nc                 &    X :w  a  S$ [        U 5      $ )Nr   )ord)rC   s    r   <lambda>NTestMergeMulti.test_left_join_multi_index.<locals>.bind_cols.<locals>.<lambda>g   s    af!8#a&!8r!   c                 >   > U R                  T5      [        S5      -
  $ )NrC   )maprn   )tsiords    r   ro   rp   h   s    rvvd|c#h6r!   ri   rk   g      Y@rj   r   
   )fillna)r*   frt   s     @r   	bind_cols<TestMergeMulti.test_left_join_multi_index.<locals>.bind_colsf   sG    86E|a5	lS&882e9;K;KA;NQS;SSSr!   c                   > U R                  UTSUS9n[        U 5      [        U5      S-   :  d   eUS   R                  5       R                  5       (       a   eUS   R                  5       R                  5       (       a   e[        R
                  " US   US   * SS9  T" UR                  S S 2S S24   5      n[        R
                  " US   USS9  UR                  b   eU(       a$  [        R                  " X3R                  TS	S
95        [        XR                  5       TUSS9n[        [        U5      5      Ul        [        R                  " XS5        g )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   outrx   icolss         r   run_asserts>TestMergeMulti.test_left_join_multi_index.<locals>.run_assertsk   s&   ii%V$iG4y3s8a<///u:??,002222u:??,002222&&s5zCJ;ER"388AssF#34&&s5z6uM{{***))#u;/WXD"3"3"5%dPVW&s3x0	%%c/r!   rC   zr{   r   )2   r   ri   rk   r;   rj   r   ru   floatr|   r}   T)inplace            )r	   listrr   chrr   arangern   r   r   r   choiceinsertintegersr   astypepermutationr   copyr=   nanloc)
r^   rY   re   r   lcr    ir+   rx   r   s
           @@r   test_left_join_multi_index)TestMergeMulti.test_left_join_multi_index^   s   
 1<@)ET
0( c#ryyS3s8a<@ABB		%%a(//G<uenD KK		%%a(11!RTCJJ7S 		%%a(44SY?AIIaL%%'E#D/DK%e,,E%LOOE4O0T* %'FFDHHQTT5[!$&FFDHHQTT5[!$&FFDHHQTT5[!#D/DK		%%a(44SY?AIIa"f%E%e,,E%LOOE4O0T*w A@@s   II  
I.c                     SS/nUR                  X$SSUS9nUR                  XSSUS9nXeR                     n[        R                  " XV5        g )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_left'TestMergeMulti.test_merge_right_vs_left   sj     6" JJ&t ' 
 !;;tt ' 

 ,,E,EF
/Br!   c                 F   [        [        S5      [        R                  " SS// SQ/SS/S9SS	9n[	        [        S
5      / SQSS.5      n[        X!R                  5       SS/S9n[	        [        S
5      / SQS/S-  [        S5      S.5      n[        R                  " X45        g )Nr   r-   r.   r{   r   r   lev1lev2r'   Amount)r   AAABBB)r{   r   r   r{   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_index=TestMergeMulti.test_merge_multiple_cols_with_mixed_cols_index   s    !H##c3Z$;FFCST

 X8JSTUVr==?/?@X*sQw(	
 	f/r!   c                    [        S5       Vs/ s H  n[        U5      PM     nn[        R                  " US5      nUS S S2   n[	        UU[        R
                  R                  S5      R                  S5      S.5      n[	        US S S2   US S S2   [        R
                  R                  S5      R                  S5      S.5      n[        XESS9  g s  snf )	Ni'  r   r   i N  )r   r   value1)r   r   value2outerrV   )	r   strr   tiler   r   r   r   r   )r^   r   r   r   r*   df2s         r    test_compress_group_combinations/TestMergeMulti.test_compress_group_combinations   s     %e-1A-wwtQDbDz))//2BB5I
 SqS	SqS	))//2BB5I
 	b7#+ .s   Cc           
         SS/n[        / SQS-  SS/S-  [        R                  " [        R                  " S5      [        R                  S	9S
.5      n[
        R                  " SS/5      n[        SSS/0US9nUR                  XAS9nUR                  5       n[        R                  US'   SUR                  UR                  S:H  UR                  S:H  -  S4'   SUR                  UR                  S:H  UR                  S:H  -  S4'   [        R                  " XV5        UR                  USSS9  UR                  XASS9n[        R                  " XV5        [        / SQS-  SS/S-  [        R                  " / SQS-  [        R                   S	9[        R                  " [        R                  " S5      [        R"                  S	9S.5      n[
        R                  " SS/5      n[        SSS/0US9nUR                  XAS9nUR                  5       n[        R                  US'   SUR                  UR                  S:H  UR                  S:H  -  S4'   SUR                  UR                  S:H  UR                  S:H  -  S4'   [        R                  " XV5        UR                  USS9nUR                  XASS9n[        R                  " XV5        g )Nk1k2)r   r{   r      r   r         dtype)r   r   v)r   r   )r{   r   v2r      r&   r   r   r{   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_order2TestMergeMulti.test_left_join_index_preserve_order   so   ,!menr)XXbiim288<
 &&
J'?@4!Q.65-99;JKhkkQ&8;;%+?@$FGJKhkkQ&8;;%+?@$FG
f/7dC99UT9:
f/ !menr)hhy1}BJJ?XXbiim288<	
 &&
J'?@4!Q.65-99;JKhkkQ&8;;%+?@$FGJKhkkQ&8;;%+?@$FG
f/##G+#>99UT9:
f/r!   c                 l   [        / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/
/ SQ/ SQS9n[        / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ// SQS9R                  / SQ5      nUR                  U/ SQS S!9n[        / S"Q/ S#QS$S%S&S'[        R                  // S(Q/ S)Q/ S*QS+S%S,S-[        R                  // S.Q/ S/Q/ S0Q/ S1Q/ S2Q/ S3Q/ S4Q// S5Q/ S6QS9n[
        R                  " X45        UR                  U/ SQS S7S89nUR                  / SQS9S:9n[
        R                  " X45        g );N)XYr/   rC   )Wr   r/   e)VQr-   h)r   RDr   )r   r   r   rD   )r   r   r-   rE   )r   r   r.   rw   )r   r   r/   g)r   r   r/   j)r   r   r.   d)colacolbcolctag)
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   r-   r{   )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   r{   )r   r   r-   rE   r   )r   r   r.   rw   r   )r   r   r.   rw   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   r{   r{   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_multiindex:TestMergeMulti.test_left_join_index_multi_match_multiindex  sI   $$$$$$$$$$ 40
" """"""""##""##  4#
$ ),
-% 	( 5%=6J''c3RVV,('(c3RVV,'''''''  ;<%
* 	f/5%=6PTU''(@{'S
f/r!   c                 x   [        SS/SS/SS/SS//SS	// S
QS9n[        SS/SS/SS/SS/SS/SS/SS/SS//SS/S9R                  S5      nUR                  USSS9n[        / SQ/ SQ/ SQ/ SQSS[        R                  // SQ/ SQSS[        R                  /// S Q/ S!QS9n[
        R                  " X45        UR                  USSS"S#9nUR                  SS$S%9n[
        R                  " X55        [        XR                  5       SSS&9n[        [        U5      5      Ul        [
        R                  " X45        g )'NrE   r   rD   r{   rC   r   r   r   r   )r   r   r{   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   r{   r{   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_match/TestMergeMulti.test_left_join_index_multi_matchX  sn   1XQx#qC84EN
 c
c
c
c
c
c
c
c
	 FO
 )E
 	 5U7a a 	 +*
 	f/5UTB(([(A	
f0 t..0fG#CM2
f/r!   c           	         [        [        S5      [        R                  R	                  S5      R                  S5      [        R                  R	                  S5      R                  S5      [        S5      [        R                  R	                  S5      R                  S5      S./ SQS9n[        SS[        R                  [        R                  [        R                  /SS	[        R                  [        R                  [        R                  /S
.5      n[        XSSS9nUR                  S/SS9nUR                  U5      n[        R                  " X55        g )Nabcder   r   )idv1r   dummyv3r;   rC   rD   gX9v?gʡE@)r  sv3r  r    rT   r{   )axis)r   r   r   r   r   r   r   r   rW   rZ   r\   r]   )r^   r    r+   ra   rdfrb   s         r   test_left_merge_na_buglet(TestMergeMulti.test_left_merge_na_buglet  s    7mii++A.>>qAii++A.>>qAgii++A.>>qA 6	
 C8ubffbffbff=
 tt8jj$aj(99S>
f/r!   c           
      n   / SQ/ SQ/ SQSS[         R                  // SQ/ SQSS[         R                  // S	Q/ S
Q/	n[        U/ SQS9nSS[         R                  /SS[         R                  /SS[         R                  /SS[         R                  /SS[         R                  /SS[         R                  //n[        U/ SQS9nUR                  USS9nUR	                  S5      R                  UR	                  S5      SS9nUR                  S[         R                  5      n[        R                  " XV5        g )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   rv   replacer\   r]   )r^   r   frame
other_dataotherra   rb   s          r   test_merge_na_keys!TestMergeMulti.test_merge_na_keys  s   33

 $(AB 333333

 *.GHU0<<%++ELL,>G+L##D"&&1
f/r!   klassNc                    [        / SQ/ SQS/S9n[        R                  " UR                  5      Ul        UR                  R                  nUb  U" U5      n[
        R                  " / SQ[
        R                  S9n[        / SQUS.5      nUR                  USU/SS	9n[        R                  " Xe5        [        U/ SQ/ SQS
.5      nUR                  X"R                  R                  /SS	9n[        R                  " Xe5        g 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_index(TestMergeMulti.test_merge_datetime_index  s     AC5
 >>"((+HHMM	i(IHH/rxx@	9yAB"#y!1w?
f/y9UV"((--g>
f/r!   
merge_typer    r+   c           	         [        SSS/0[        R                  " [        S5      S/[        S5      S//SS/S	9S
9n[        [        R                  " / SS/S	9S/S9n[        R                  " [        S5      S/[        S5      S//SS/S	9nUS:X  ah  [        SS/[        R
                  " [        R                  [        R                  /[        S9S.US
9nUR                  USSS/S9nUR                  USS9nOg[        [        R
                  " [        R                  [        R                  /[        S9SS/S.US
9nUR                  USSS/S9nUR                  USS9n[        R                  " Xe5        [        R                  " Xu5        g )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_df7TestMergeMulti.test_merge_datetime_multi_index_empty_df  s    c
 ((L)3/)L2I31OPw'	
 ((FG3DEPWy
 $//%s+i.Es-KL7#

   #JXXrvvrvv&6fE %H !JJu&fg=NJOM99U97L XXrvvrvv&6fE #J %H "KK'vw>OKPM ::d:8L
m6
l5r!   c                 P    [        / SQ/ SQ/ SQS./ SQS9R                  S5      nU$ )Nr   )r   r{   r   )ffffAPAi^ )household_idmalewealthr;   r6  r<   )r^   	households     r   r9  TestMergeMulti.household  s6     )!6
 7
 )N
# 	 r!   c                     [        / SQSSSSSS[        R                  /SSS	S	S
S[        R                  // SQS./ SQS9R                  SS/5      nU$ )Nr{   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?rJ        ?rH  )r6  asset_idr   sharer;   r6  rM  )r   r   r   r=   )r^   	portfolios     r   rO  TestMergeMulti.portfolio  sy     5""""""FF ''4,FF ?), B/
0 )^Z0
11 	2 r!   c           	          [        / SQ/ SQ/ SQ/ SQ/ SQ/ SQS.5      R                  SS	/5      R                  / S
QS9nU$ )N)r   r{   r{   r   r   r   )r4  r5  r5      xArR  rR  )rB  rC  rD  rD  rE  rF  )rH  rI  rJ  rK  rJ  rL  )r{   r   r   r   r   r   )r=  r>  r?  r?  r@  rA  )r7  r8  r   rN  r6  rM  r6  rM  )r7  r8  r   rN  r;   )r   r=   reindex)r^   rb   s     r   rb   TestMergeMulti.expected1  sX     . B$6!)> Y
34W@WAC 	F r!   c                     UR                  5       nUR                  5       nUR                  USS9n[        R                  " XC5        g )Nr  r   )r   rZ   r\   r]   r^   rO  r9  rb   ra   s        r   test_join_multi_levels%TestMergeMulti.test_join_multi_levelsX  s<    NN$	NN$	 	w7
f/r!   c                     UR                  5       nUR                  5       n[        UR                  5       UR                  5       S/SS9R                  SS/5      n[        R
                  " XC5        g )Nr6  r  rT   rM  )r   r   r[   r=   r\   r]   rV  s        r   (test_join_multi_levels_merge_equivalence7TestMergeMulti.test_join_multi_levels_merge_equivalencea  sk    NN$	NN$	 !!#!!#	

 )^Z0
1 	 	f/r!   c                 8   UR                  5       nUR                  5       nUR                  USS9n[        U[        SS/0[        R
                  " S[        R                  4/SS/S9S	9/S
SS9R                  UR                  S9n[        R                  " XCSS9  g )Nr   r   rN  rH  r   r6  rM  r   r   r   T)r  rY   r;   F)check_index_type)r   rZ   r
   r   r   r   r   r   rS  r(   r\   r]   rV  s        r   test_join_multi_levels_outer+TestMergeMulti.test_join_multi_levels_outern  s    NN$	NN$		w7 4&)(44[M.*1M
 
 '(**'
+ 	 	fGr!   c                    UR                  5       nUR                  5       nSUR                  l        [        R                  " [
        SS9   UR                  USS9  S S S 5        UR                  5       nUR                  R                  SS/5        [        R                  " [
        SS9   UR                  USS9  S S S 5        g ! , (       d  f       Nn= f! , (       d  f       g = f)Nr   z+cannot join with no overlapping index names)matchr  r   r6  z'columns overlap but no suffix specified)r   r&   r   pytestraises
ValueErrorrZ   	set_names)r^   rO  r9  
portfolio2s       r   test_join_multi_levels_invalid-TestMergeMulti.test_join_multi_levels_invalid  s    NN$	NN$	  %	]]K
 NN9'N2

 ^^%
""NE#:;]]:-VWOOI7O3 XW
 
 XWs   C*C
C
C#c           
         [        / SQSSSSSS[        R                  // SQS./ SQS9R                  S	S
/5      n[        / SQ/ SQ/ SQS.5      R                  S
S/5      n[        / SQ/ SQ/ SQ/ SQ/ SQS.5      R                  / SQ5      R	                  SS/S9n[        UR                  5       UR                  5       S
/SS9R                  / SQ5      n[        R                  " XC5        [        / SQ/ SQ/ SQ/ SQ/ SQS.5      R                  / SQ5      R	                  SS/S9n[        UR                  5       UR                  5       S
/S S9R                  / SQ5      n[        R                  " XC5        g )!Nr<  r=  r?  r@  rA  rG  )r6  rM  rN  r;   r6  rM  )r?  r?  r?  r@  r@  )               )S緖?D >?
?HRE?)rM  t
log_returnrt  )r   r   r   r   r   r   r   r   )r?  r?  r?  r?  r?  r?  r@  r@  )rj  rk  rl  rj  rk  rl  rm  rn  )rJ  rJ  rJ  rK  rK  rK  rJ  rJ  )ro  rp  rq  ro  rp  rq  rr  rs  )r6  rM  rt  rN  ru  )r6  rM  rt  rN  ru  r  rT   )r   r   r   r   r   r   r   r   r   r{   r   r   )r?  r?  r?  r?  r?  r?  r@  r@  rA  r=  r=  N)rj  rk  rl  rj  rk  rl  rm  rn  NNNN)rJ  rJ  rJ  rK  rK  rK  rJ  rJ  rL  rH  rI  rH  )ro  rp  rq  ro  rp  rq  rr  rs  NNNNr   )	r   r   r   r=   rS  r   r[   r\   r]   )r^   r9  ru  rb   ra   s        r   test_join_multi_levels2&TestMergeMulti.test_join_multi_levels2  s     5""""""FF ? :
 )^Z0
1 	"  /
$ )Z%
&% 	* $<	! BH	#6 Y89Wg|4W5; 	B !!#""$|	

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

 )5
6 	 	f/r!   r>   )$__name__
__module____qualname____firstlineno__rc   rb  markparametrizeparamtd
skip_if_nor   r   r   r   r   r   r   r	  r  r   asarrayr   r   r'  r1  fixturer9  rO  rb   rW  rZ  r^  rg  rv  __static_attributes__r>   r!   r   rR   rR   K   s}   0$ [[Ty9Q RS [[VdE]3<+ 4<+| [[VeT]3C 4C 0&$240lC0J00d000@ [[WtRZZ&GH0 I0, [[\FG+<=,6 >,6\ ^^	 	 ^^ 8 ^^$ $L00H,4$Z0r!   rR   c                       \ rS rSrS rS r\R                  R                  SS\	R                  \\/5      S 5       rS rS rS	rg)
TestJoinMultiMultii3  c                    UR                   R                  nUR                   R                  nUS:X  a  XeR                  U5      -   nOXVR                  U5      -   n[        UR	                  5       UR	                  5       UUS9R                  U5      R                  5       nUR                  X#S9R                  5       n	[        R                  " X5        g )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_multi(TestJoinMultiMulti.test_join_multi_multi4  s    %%++
!''--%(=(=k(JJK$'='=j'IIK &&('') 	 Y{#Z\ 	 <GGI
f/r!   c                 
   UR                  UR                  S9nUR                  UR                  S9nUR                  R                  nUR                  R                  nUS:X  a  XeR	                  U5      -   nOXVR	                  U5      -   n[        UR                  5       UR                  5       UUS9R                  U5      R                  5       nUR                  X#S9R                  5       n	[        R                  " X5        g )Nr;   r+   r   r   )rW   r(   r&   r'   r  r   r[   r=   r  rZ   r\   r]   r  s
             r   test_join_multi_empty_frames/TestJoinMultiMulti.test_join_multi_empty_framesJ  s      __Z-?-?_@
!&&{/B/B&C%%++
!''--%(=(=k(JJK$'='=j'IIK &&('') 	 Y{#Z\ 	 <GGI
f/r!   boxNc                    [        / SQ/ SQS/S9n[        R                  " UR                  5      Ul        UR                  R                  nUb  U" U5      n[
        R                  " / SQ[
        R                  S9n[        / SQUS.5      nUR                  USU/SS	9n[        R                  " Xe5        [        U/ SQ/ SQS
.5      nUR                  X"R                  R                  /SS	9n[        R                  " Xe5        g r  r"  )r^   r  r*   r%  r&  rb   ra   s          r   r'  ,TestJoinMultiMulti.test_merge_datetime_indexe  s     AC5
 >>"((+HHMM	?IIHH/rxx@	9yAB"#y!1w?
f/y9UV"((--g>
f/r!   c                 n   [         R                  " / SQSS/S9n[        / SQ/ SQS.US9n[         R                  " / S	QSS
/S9n[        / SQ/ SQS.US9nUR                  U5      n[	        UR                  5       UR                  5       S/SS9R                  / SQ5      n[        R                  " XV5        g )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_level+TestJoinMultiMulti.test_single_common_level|  s    ++6ucl

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

)%
& 	 	f/r!   c                 8   [         R                  " SS/SS//SS/S9n[         R                  " / SQSS/S9n[        US	/ S
Q0S9n[        US/ SQ0S9nUR	                  U5      n[        U/ S
QSSS[
        R                  /S.S9n[        R                  " XV5        g )Nr{   r   r   r   rC   rD   r   ))r   r{   )r   r   )r   r{   r   )ru         (   )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_order.TestJoinMultiMulti.test_join_multi_wrong_order  s     ''!Q!Q(8c
K&&'?SzRuC1A+BCS2H,IJ5!'vueRVV.LM

 	f/r!   r>   )rx  ry  rz  r{  r  r  rb  r|  r}  r   r  r   r   r'  r  r  r  r>   r!   r   r  r  3  sI    0,06 [[UT2::vu$EF0 G0,020r!   r  )numpyr   rb  pandas.util._test_decoratorsutil_test_decoratorsr  pandasr#  r   r   r   r   r   r   r	   pandas._testing_testingr\   pandas.core.reshape.concatr
   pandas.core.reshape.merger   r  r    r+   r?   rN   rP   rR   r  r>   r!   r   <module>r     s      ) )     - + A A   
A 
A 
A 
A / /e0 e0Ps0 s0r!   