
    A>iF                        S SK J r   S SKrS SKrS SKrS SKrS SKJr  S SKr	S SKJ
r
JrJrJr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\R2                  R5                  S
SS\
" SS/SS/S.SS/S94SS\
" SS/SS/S.SS/S94SS\
" / SQSS\R6                  /S./ SQS94SS\
" / SQ\R6                  SS/S./ SQS94SS\
" \R6                  SS// SQS./ SQS94SS\
" SS\R6                  // SQS./ SQS94S S\
" S SS\R6                  /\R6                  SSS!/S./ S"QS94S S\
" S SS\R6                  /\R6                  SSS!/S./ S"QS94/5      S# 5       rS$ rS% r\R2                  R5                  S&S'S(/5      S) 5       rS* r S+ r!S, r"S- r#S. r$S/ r%S0 r&S1 r'S2 r(S3 r) " S4 S55      r*g)6    )datetimeN)
MergeError)	DataFrameIndex
MultiIndex
date_rangeperiod_range)concatc                  6    [        / SQ/ SQS.[        S5      S9$ )Nabcdcatdogweaselhorser   r      index)r   range     c/var/www/html/land-tabula/venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_join.pyleft_no_dupr      s    ")JKAh r   c                  T    [        / SQ/ SQS.[        S5      S9R                  S5      $ )N)r   r   r   r   e)meowbarkum... weasel noise?naychirpr   r      r   r   )r   r   	set_indexr   r   r   right_no_dupr)      s.    *H	
 Ah inr   c                 6    [        U [        S/S/S.S/S9/SS9$ )Nr   cowr      r   T)sort)r
   r   )r   s    r   left_w_dupsr.   )   s+    	ise5' :1#FGd r   c                 V    [        U [        S/S/S.S/S9/5      R                  S5      $ )Nr    moor&   r,   r   r   )r
   r   r(   )r)   s    r   right_w_dupsr1   0   s2    	yuE7!;A3GHinr   zhow, sort, expectedinnerF   
      d   r         r   Tleftr3   r4   r   r7   r8   r   r   r4   r3   )r   r8   r7   right,  r6   r5   r,   r8   r7   r6   r5   r?   r8   r7   r,   outerr?   )r   r8   r7   r,   c                     [        S/ SQ0/ SQS9n[        S/ SQ0/ SQS9nUR                  X@USS	9n[        R                  " XR5        g )
Nr   r:   r;   r   r   r>   r@   1:1)howr-   validate)r   jointmassert_frame_equal)rF   r-   expectedr9   r=   results         r   	test_joinrM   7   sI    X c;'y9DsO,I>EYYuD5YAF&+r   c                     [        S/ SQ05      n [        / SQ/ SQS.5      n[        / SQ/ SQS.5      nSn[        R                  " [        US9   U R	                  U/S	S
9  S S S 5        [        R                  " [        US9   U R	                  X/SS9  S S S 5        [        R                  " [        US9   U R	                  X/S	SS9  S S S 5        [        R                  " [        SS9   U R	                  X/5        S S S 5        U R	                  U/5      nU R	                  U5      n[
        R                  " XE5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N{= f)Nkey)r8   r7   r,   r   r'   )r8      r,   r7   r'   )rO   v1)r'   r7   r,   r   r8   )keysv2z7Suffixes not supported when joining multiple DataFramesmatchy)lsuffixx)rsuffixrW   rY   zIndexes have overlapping values)r   pytestraises
ValueErrorrH   rI   rJ   )firstsecondthirdmsg
arr_joinednorm_joineds         r   test_suffix_on_list_joinrd   i   s   uo./EoFGFoFGE DC	z	-

F8S
) 
.	z	-

F?C
0 
.	z	-

F?C
= 
.	z)J	K

F?# 
L UG$J**U#K*2 
.	-	-	-	-	-	K	Ks0   D>E5E )E1>
E
E 
E.1
E?c                     Sn[         R                  " [        US9   U R                  USSS9  S S S 5        g ! , (       d  f       g = f)Nz"invalid" is not a valid argument. Valid arguments are:
- "1:1"
- "1:m"
- "m:1"
- "m:m"
- "one_to_one"
- "one_to_many"
- "many_to_one"
- "many_to_many"rT   r   invalidonrG   )r[   r\   r]   merge)r   r)   ra   s      r   test_join_invalid_validaterj      s=    		  
z	-,3C 
.	-	-s	   7
Adtypeobjectstring[pyarrow]c                 L   US:X  a  [         R                  " S5        U R                  U5      n UR                  R                  U5      Ul        U R	                  USSS9  Sn[         R
                  " [        US9   U R	                  USSS9  S S S 5        g ! , (       d  f       g = f)	Nrm   pyarrowr   one_to_manyrg   zBMerge keys are not unique in right dataset; not a one-to-one mergerT   
one_to_one)r[   importorskipastyper   rH   r\   r   )r   r1   rk   ra   s       r   $test_join_on_single_col_dup_on_rightrt      s     !!I&$$U+K%++2259L   OC	z	-! 	 	
 
.	-	-s   :B
B#c                     U R                  USSS9  Sn[        R                  " [        US9   U R                  USSS9  S S S 5        g ! , (       d  f       g = f)Nr   many_to_onerg   zAMerge keys are not unique in left dataset; not a one-to-one mergerT   rq   rH   r[   r\   r   )r.   r)   ra   s      r   #test_join_on_single_col_dup_on_leftrx      s^        NC	z	-! 	 	
 
.	-	-s   A
Ac                 >   U R                  USSS9  Sn[        R                  " [        US9   U R                  USSS9  S S S 5        Sn[        R                  " [        US9   U R                  USSS9  S S S 5        g ! , (       d  f       ND= f! , (       d  f       g = f)	Nr   many_to_manyrg   zCMerge keys are not unique in right dataset; not a many-to-one mergerT   rv   zBMerge keys are not unique in left dataset; not a one-to-many mergerp   rw   )r.   r1   ra   s      r   #test_join_on_single_col_dup_on_bothr{      s     \cNC PC	z	-" 	 	
 
. OC	z	-" 	 	
 
.	- 
.	- 
.	-s   A="B=
B
Bc                  l   [        / SQ/ SQ/ SQS.[        S5      S9R                  SS/5      n [        / S	Q/ S
Q/ SQS.[        S5      S9R                  SS/5      n[        / S	Q/ S
Q/ SQ/ SQS.[        S5      S9R                  SS/5      nU R                  USSS9n[        R
                  " X25        g )N)r   r   r   r   )r   r8   r   r8   r   r   r   r   r   r   r   r   )r   r   r   )r   r8   r   )r!   r"   r#   )r   r   r   r,   )r   r   r   r   r2   rE   )rF   rG   )r   r   r(   rH   rI   rJ   )r9   r=   expected_multirL   s       r    test_join_on_multi_col_check_dupr      s     %2	

 Ah ic
 	  8	

 Ah ic
 
  )8		
 Ah ic
  YYu'EY:F&1r   c                 P   U R                   U R                  S S SS/4   nU R                   U R                  SS  SS/4   R                  S S S2   nUR                  U5      n[        R
                  " UR                  UR                  5        [        / SQ5      n[        R
                  " UR                  U5        UR                  US	S
9n[        R
                  " UR                  UR                  5        [        R
                  " UR                  U5        UR                  USS
9n[        R
                  " UR                  UR                  5        [        R
                  " UR                  U5        UR                  USS
9n[        R
                  " UR                  UR                  SS 5        [        R
                  " UR                  U5        UR                  USS
9n[        R
                  " UR                  U R                  R                  5       5        [        R
                  " UR                  U5        UR                  USS
9n[        R
                  " UR                  U R                  S S 5        [        R
                  " UR                  U5        UR                  USS
9n[        R
                  " UR                  U R                  SS  S S S2   5        [        R
                  " UR                  U5        Sn[        R                  " [        [        R                  " U5      S9   UR                  USS
9  S S S 5        SnS H4  n[        R                  " [        US9   U R                  XS
9  S S S 5        M6     g ! , (       d  f       NK= f! , (       d  f       MY  = f)Nr4   ABr'   CD)r   r   r   r   r9   rF   r=   r2   rC   	left_anti
right_antiz^'foo' is not a valid Merge type: left, right, inner, outer, left_anti, right_anti, cross, asofrT   foozcolumns overlap but no suffix)rC   r9   r2   )locr   ilocrH   rI   assert_index_equalr   columnssort_valuesr[   r\   r]   reescape)float_frameff2joinedexpected_columnsjoin_msgra   rF   s           r   test_join_indexr      s    	))#2.c
:;A	**12.c
:	;	@	@2	FBVVBZF!''6<<012&..*:;VVBFV#F&,,0&..*:;VVBGV$F&,,1&..*:; VVBGV$F&,,"6&..*:; VVBGV$F&,,(9(9(E(E(GH&..*:; VVBKV(F&,,(9(9"1(=>&..*:; VVBLV)F&,,(9(9"#(>tt(DE&..*:;	-  
z8)<	=	ru 
> *C)]]:S1[2 21 * 
>	= 21s   /N(N
N
N%	c                    U R                   S S 2SS/4   nU R                   S S S2SS/4   nUR                  5       nU S   S S S2   US'   U S   S S S2   US'   UR                  U5      n[        R                  " XC5        UR                  USS9n[        R                  " XCS S S2   5        UR                  USS9n[        R                  " XCR                   S S 2UR
                  4   5        g )Nr   r   r7   r   r   r=   r   )r   copyrH   rI   rJ   r   )r   afbfrK   rL   s        r   test_join_index_morer   0  s    	S#J	'B	1sCj	)BwwyH$SqS)HSM$SqS)HSMWWR[F&+WWRWW%F&3Q3-0WWRWW%F&,,q&../@"ABr   c                 D   U R                  5       nUR                  U R                  S   5      nUR                  U5      n[        R
                  " X05        S Ul        [        R                  " [        SS9   UR                  U5        S S S 5        g ! , (       d  f       g = f)Nr   zmust have a namerT   )
r   popr   rH   rI   rJ   namer[   r\   r]   )r   dfserr   s       r   test_join_index_seriesr   B  sq    				B
&&$$R(
)CWWS\F&.CH	z);	<
 
=	<	<s   6B
Bc                    U R                   S S 2/ SQ4   nU R                   S S 2/ SQ4   nUR                  USSS9nUR                   S S 2SS/4   R                  S5      nUR                   S S 2SS/4   R                  S5      nU R                   S S 2SS	/4   nUR                  U5      R                  U5      n[        R                  " X7R                   S S 2UR
                  4   5        g )
N)r   r   r   )r   r   r   _df1_df2rZ   r   r   r   r   )r   rH   
add_suffixrI   rJ   r   )r   df1df2r   df1_sufdf2_suf
no_overlaprK   s           r   test_join_overlapr   N  s    
//!_,
-C
//!_,
-CXXc66X:Fgga#sm$//7Ggga#sm$//7GS#J/J||G$))*5H &,,q&../@"ABr   c            
         [        [        R                  " S5      R                  SS5      [	        S5      [        SSSS9S9n U R                  S	 S
9n[        R                  " U R                  /S-  SS9nU R                  R                  UR                  5      nU R                  U5      n[        X#U R                  S9n[        R                  " XE5        g )Nr3   r   r'   abcde2000Y)startfreqperiods)datar   r   c                     U  U  3$ )Nr   )rO   s    r   <lambda>(test_join_period_index.<locals>.<lambda>c  s    #se}r   r   r7   r8   )axis)r   nparangereshapelistr	   renameconcatenatevaluesr   appendrH   r   rI   rJ   )frame_with_period_indexotherjoined_valuesjoined_colsr   rK   s         r   test_join_period_indexr   ]  s    'YYr]""1a(Wc1=
 $**3L*MENN$;$B$B#Ca#GaPM)1188GK$))%0F7N7T7TH &+r   c                  :   [        S/ SQ0/ SQS9n [        S/ SQ0/ SQS9n[        S/ S	Q0/ S
QS9nU R                  X/SS9n[        / SQ[        R                  SSS/[        R                  SS[        R                  /S./ SQS9n[        R
                  " X45        g )Nr   r<   rB   r   r   rA   )r   r,   r7   r   )    iX  )r7   r7   r   r9   r   )r   r4   r4   r3   r?   r5   r   r   r}   )r8   r7   r7   r,   )r   rH   r   nanrI   rJ   )r   r   df3r   rK   s        r   (test_join_left_sequence_non_unique_indexr   q  s    
S+&i
8C
S/*)
<C
S/*)
<CXXsjfX-F &&#sC(&&#sBFF+	

 H &+r   c                     U R                   R                  5       nU R                  U SS/   /nUR                  U5      n[        R
                  " X05        g )Nr   r   )r   to_framer   rH   rI   rJ   )r   r9   r=   rL   s       r   test_join_list_seriesr     sI     ==!!#D]]Kc
34EYYuF&.r   c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)TestDataFrameJoini  c                 \   UnUR                   UR                  S S S/4   nUR                   UR                  SS  SS/4   nUR                  USS9R                  UR                  5      nUR	                  5       R
                  R	                  5       n[        R                  U[        R                  " UR
                  5      '   [        XbR                  UR                  S9n[        R                  " UR
                  5      R                  5       (       a   e[        R                  " XV5        g )	Nr'   r   r7   r   r   rC   r   r   r   )r   r   rH   reindexr   r   r   r   isnanr   r   allrI   rJ   )self multiindex_dataframe_random_dataframer   r   r   rK   s          r   rM   TestDataFrameJoin.test_join  s    0IIekk"1ou,-IIekk!"oSz12w'//<::<&&++-,.FF&--()X[[%--P88FMM*..0000
f/r   c                     [        SS/SS/SS/S.5      n[        SS/SS/SS/S.5      nUR                  SS/5      nUR                  SS/5      nS H  nUR                  X#S9  M     g )	Nr8   r7   )r   r   rX   )r   r   rV   r   r   )r9   r=   rC   r   )r   r(   rH   )r   r   r   rF   s       r   test_join_segfault$TestDataFrameJoin.test_join_segfault  sx    q!fAq6A?@q!fAq6A?@mmS#J'mmS#J'-CHHSH" .r   c                     SS/n[        SSS5      [        SSS5      /n[        U[        S5      S/S9n[        S	S/S
S//XS9nUR                  USS9n[	        UR
                  5      S
:X  d   eg )N2012020920120222i  r7   	      aar   r8   r,   r   rh   )r   r   r   rH   lenr   )r   	str_datesdt_datesr   r   tsts         r   test_join_str_datetime(TestDataFrameJoin.test_join_str_datetime  s~    ,	T1a((4B*?@iuQx$@1v1v&iJffQ4f 3;;1$$$r   c                 $   [        / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/	/ S
QS9R                  SS/5      n[        SS/SS//SS/S9R                  S/5      n[        SS/SS/SS/SS/SS/SS/S[        R                  /S[        R                  /S[        R                  //	UR                  SS/S9n[
        R                  " UR                  USS9U5        [
        R                  " UR                  US S9USS/   5        [        R                  " SS// S!Q/SS/S"9n[        SS/SS/SS/SS/SS/SS//USS/S9n[
        R                  " UR                  US S9U5        [
        R                  " UR                  USS9USS/   5        g )#N)r   rX   R
1?)r   rV   ?)r   z<+J	?)r   rX   4ֿ)r   rV   ^9S?)r   r   ?)r   rX   r8   )r   rV   r7   )r   r   r,   )r^   r_   value1r   r^   r_   r   r4   r   r3   value2r   r   r   r   r   r   g      ?g       @g      @r   r   r9   r   r=   )rX   rV   r   names)
r   r(   r   r   r   rI   rJ   rH   r   from_product)r   r   r   expexp_idxs        r   test_join_multiindex_leftright0TestDataFrameJoin.test_join_multiindex_leftright  s   $$$%$%
 2
 )Wh'
( 	 #rS"I.(8KLVVI
 222B2B266"266"266"
 ))x(
" 	chhsh7=
chhsh8#x>R:ST))3Z)'81D
 222B2B x(
 	chhsh8#>
chhsh7h=Q9RSr   c                    [         R                  " SSS5      R                  5       n[        R                  " SU4/SS/S9n[        SS/0US9n[        R                  " SU4/SS/S9n[        S	S/0US9n[        R                  " SU4/SS/S9n[        S
S/0US9nUR                  XW/5      n[        R                  " SU4/SS/S9n	[        S/S/S/S.U	S9n
[        R                  " X5        g )Ni  r8   r   index_0dater   col1r   col2col3)r   r   r  )	pd	Timestampr   r   from_tuplesr   rH   rI   assert_equal)r   r   	df1_indexr   	df2_indexr   	df3_indexr   rL   expected_indexrK   s              r   test_join_multiindex_dates,TestDataFrameJoin.test_join_multiindex_dates  s   ||D!Q',,.**QI;y&>QR	!Y7**QI;y&>QR	!Y7**QI;y&>QR	!Y73*%#//!TIvCVWS1#s3>
 	)r   c                    [        SS/SS/SS//S9n[        R                  " SS	/5      n[        USS
/SS//S9n[        R                  " [
        SS9   [        R                  " XSS9  S S S 5        [        R                  " [
        SS9   UR                  USS9  S S S 5        g ! , (       d  f       NA= f! , (       d  f       g = f)Nr   r   r8      r   r   )r   r   )r    )r   c1!   ,   z-Not allowed to merge between different levelsrT   r   )	r   r   r  r[   r\   r   r  ri   rH   )r   r   r   r   s       r   'test_merge_join_different_levels_raises9TestDataFrameJoin.test_merge_join_different_levels_raises  s    
 c
1b'Ar71CD (()[)AB2wB.@A ]]M
 HHS#&
 ]]M
 HHSSH!
 

 

 
s   B%B6%
B36
Cc           
         [         R                  " S5      n[        [        R                  " S5      [        SSSUS9S9n[        [        R                  " S5      [        SS	S
US9[        S	S5      S9nUR                  USS9nUR                  R                  UR                  5      n[        R                  " UR                  U5        UR                  R                  R                  S:X  d   eg )Nz
US/Central)   r,   z2012-11-15 00:00:00r  100ms)r   r   tzr   )r,   r,   r,   250msr   rC   r   )zoneinfoZoneInfor   r   zerosr   r   rH   r   unionrI   r   r  rO   )r   r  test1test2rL   rK   s         r   test_frame_join_tzaware)TestDataFrameJoin.test_frame_join_tzaware  s    |,HHV2AGPRS
 HHV2AGPRS!QK
 Ew/;;$$U[[1
fllH5||""l222r   c                 |   [         R                  " SS/[         R                  " / SQSS9SS9nSR                  5       nS	R                  5       n[	        XS
.5      R                  S5      n[	        XS.5      R                  S5      n[         R                  " S/UR                  SS9Ul        [         R                  " S/UR                  SS9Ul        UR                  U5      n[	        XUS.5      R                  S5      n[         R                  " SS/UR                  SS9Ul        [        R                  " Xg5        g )Nr,   r   )r7   r,   r   r'   Int64)rk   T)
categoriesorderedza bzfoo bar)hrvalues1r%  )r%  values2other_hr)rk   r   )r%  r&  r'  )r  CategoricalSeriessplitr   r(   CategoricalIndexrk   r   rH   rI   rJ   )r   cat_datar&  r'  r   r   	df_joinedrK   s           r   !test_frame_join_categorical_index3TestDataFrameJoin.test_frame_join_categorical_index,  s   >>FyyW=

 ++-//#x<=GGMx<=GGM))1#X^^*U))1#X^^*UHHSM	GD

)D/ 	 ..F(..z
 	i2r   r   N)__name__
__module____qualname____firstlineno__rM   r   r   r   r
  r  r  r/  __static_attributes__r   r   r   r   r     s,    0#	%:Tx*(".3$3r   r   )+r   r   r  numpyr   r[   pandas.errorsr   pandasr  r   r   r   r   r	   pandas._testing_testingrI   pandas.core.reshape.concatr
   fixturer   r)   r.   r1   markparametrizer   rM   rd   rj   rt   rx   r{   r   r   r   r   r   r   r   r   r   r   r   r   <module>r?     s    	    $    -         	%"bc
#CAq6RS	$	RSz"B1a&QRKsC.@AS	
 KrvvsC.@AS	
 RVVR,?C9U	
 RRVV,?C9U	
 "b"&&)c30GH"	
 "b"&&)c30GH"	
?'*V,W*V,3,D& 8->"?@
 A
.
&
0!2H43nC$	C,(,(/t3 t3r   