
    .iF                        d dl m Z  d dlZd dlZd dlZd dlZd dlmZ d dlZ	d dlm
Z
mZmZmZ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j2                  j5                  d
dd e
ddgddgdddg      fdd e
ddgddgdddg      fdd e
g dddej6                  gdg d      fdd e
g dej6                  ddgdg d      fdd e
ej6                  ddgg ddg d      fdd e
ddej6                  gg ddg d      fd d e
d ddej6                  gej6                  ddd!gdg d"      fd d e
d ddej6                  gej6                  ddd!gdg d"      fg      d#        Zd$ Zd% Zej2                  j5                  d&d'd(g      d)        Zd* Z d+ Z!d, Z"d- Z#d. Z$d/ Z%d0 Z&d1 Z'd2 Z(d3 Z) G d4 d5      Z*y)6    )datetimeN)
MergeError)	DataFrameIndex
MultiIndex
date_rangeperiod_range)concatc                  <    t        g dg ddt        d            S )Nabcdcatdogweaselhorser   r      index)r   range     b/var/www/app/trading-bot/venv/lib/python3.12/site-packages/pandas/tests/frame/methods/test_join.pyleft_no_dupr      s    ")JKAh r   c                  Z    t        g dg ddt        d            j                  d      S )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                 B    t        | t        dgdgddg      gd      S )Nr   cowr      r   T)sort)r
   r   )r   s    r   left_w_dupsr.   )   s+    	ise5' :1#FGd r   c                 \    t        | t        dgdgddg      g      j                  d      S )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                     t        dg dig d      }t        dg dig d      }|j                  || |d	      }t        j                  ||       y )
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   sM    X c;'y9DsO,I>EYYu#D5YAF&(+r   c                     t        dg di      } t        g dg dd      }t        g dg dd      }d}t        j                  t        |      5  | j	                  |gd	
       d d d        t        j                  t        |      5  | j	                  ||gd       d d d        t        j                  t        |      5  | j	                  ||gd	d       d d d        t        j                  t        d      5  | j	                  ||g       d d d        | j	                  |g      }| j	                  |      }t        j                  ||       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   gxY w)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	- 1

FE?C
01	z	- >

FE?C
=>	z)J	K $

FE?#$ UG$J**U#K*k2* *1 1> >$ $s0   E	EE*<E6EE'*E36E?c                     d}t        j                  t        |      5  | j                  |dd       d d d        y # 1 sw Y   y xY w)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      sJ    		  
z	- D,3CD D Ds	   <Adtypeobjectstring[pyarrow]c                 N   |dk(  rt        j                  d       | j                  |      } |j                  j                  |      |_        | j	                  |dd       d}t        j
                  t        |      5  | j	                  |dd       d d d        y # 1 sw Y   y xY w)	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                     | j                  |dd       d}t        j                  t        |      5  | j                  |dd       d d d        y # 1 sw Y   y xY w)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      sg        NC	z	- 
! 	 	

 
 
s   AAc                 D   | j                  |dd       d}t        j                  t        |      5  | j                  |dd       d d d        d}t        j                  t        |      5  | j                  |dd       d d d        y # 1 sw Y   DxY w# 1 sw Y   y xY w)	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   B
,B
BBc                     t        g dg dg ddt        d            j                  ddg      } t        g d	g d
g ddt        d            j                  ddg      }t        g d	g d
g dg ddt        d            j                  ddg      }| j                  |dd      }t	        j
                  ||       y )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                 R   | j                   | j                  d d ddgf   }| j                   | j                  dd  ddgf   j                  d d d   }|j                  |      }t	        j
                  |j                  |j                         t        g d      }t	        j
                  |j                  |       |j                  |d	
      }t	        j
                  |j                  |j                         t	        j
                  |j                  |       |j                  |d
      }t	        j
                  |j                  |j                         t	        j
                  |j                  |       |j                  |d
      }t	        j
                  |j                  |j                  dd        t	        j
                  |j                  |       |j                  |d
      }t	        j
                  |j                  | j                  j                                t	        j
                  |j                  |       |j                  |d
      }t	        j
                  |j                  | j                  d d        t	        j
                  |j                  |       |j                  |d
      }t	        j
                  |j                  | j                  dd  d d d          t	        j
                  |j                  |       d}t        j                  t        t        j                  |            5  |j                  |d
       d d d        d}dD ]9  }t        j                  t        |      5  | j                  | |
       d d d        ; y # 1 sw Y   JxY w# 1 sw Y   RxY w)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) 3]]:S1 	3[c2	3 	33 	3 	3s   4N2NNN&	c                    | j                   d d ddgf   }| j                   d d dddgf   }|j                         }| d   d d d   |d<   | d   d d d   |d<   |j                  |      }t        j                  ||       |j                  |d      }t        j                  ||d d d          |j                  |d      }t        j                  ||j                   d d |j
                  f          y )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                 >   | j                         }|j                  | j                  d         }|j                  |      }t	        j
                  ||        d |_        t        j                  t        d      5  |j                  |       d d d        y # 1 sw Y   y xY w)Nr   zmust have a namerT   )
r   popr   rH   rI   rJ   namer[   r\   r]   )r   dfserr   s       r   test_join_index_seriesr   B  s|    				B
&&$$R(
)CWWS\F&+.CH	z);	< 
  s   8BBc                    | j                   d d g df   }| j                   d d g df   }|j                  |dd      }|j                   d d ddgf   j                  d      }|j                   d d ddgf   j                  d      }| j                   d d dd	gf   }|j                  |      j                  |      }t        j                  ||j                   d d |j
                  f          y )
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            	         t        t        j                  d      j                  dd      t	        d      t        ddd            } | j                  d	 
      }t        j                  | j                  gdz  d      }| j                  j                  |j                        }| j                  |      }t        ||| j                        }t        j                  ||       y )Nr3   r   r'   abcde2000Y)startfreqperiods)datar   r   c                     |  |  S )Nr   )rO   s    r   <lambda>z(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K7N7T7TH &(+r   c                  Z   t        dg dig d      } t        dg dig d      }t        dg d	ig d
      }| j                  ||gd      }t        g dt        j                  dddgt        j                  ddt        j                  gdg d      }t	        j
                  ||       y )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XXsCjfX-F &&#sC(&&#sBFF+	

 H &(+r   c                     | j                   j                         }| j                  | ddg   g}|j                  |      }t	        j
                  ||        y )Nr   r   )r   to_framer   rH   rI   rJ   )r   r9   r=   rL   s       r   test_join_list_seriesr     sK     ==!!#D]]Kc
34EYYuF&+.r   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestDataFrameJoinc                 \   |}|j                   |j                  d d dgf   }|j                   |j                  dd  ddgf   }|j                  |d      j                  |j                        }|j	                         j
                  j	                         }t        j                  |t        j                  |j
                        <   t        ||j                  |j                        }t        j                  |j
                        j                         rJ t        j                  ||       y )	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   zTestDataFrameJoin.test_join  s    0IIekk"1ou,-IIekk!"oSz12w'//<::<&&++-,.FF&--()XU[[%--P88FMM*..000
fh/r   c                     t        ddgddgddgd      }t        ddgddgddgd      }|j                  ddg      }|j                  ddg      }dD ]  }|j                  ||        y )	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_segfaultz$TestDataFrameJoin.test_join_segfault  s    q!fAq6A?@q!fAq6A?@mmS#J'mmS#J'- 	#CHHScH"	#r   c                     ddg}t        ddd      t        ddd      g}t        |t        d      dg      }t        d	dgd
dgg||      }|j                  |d      }t	        |j
                        d
k(  sJ y )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_datetimez(TestDataFrameJoin.test_join_str_datetime  s    ,	T1a((4B*?@iuQx$@1v1v&iJffQ4f 3;;1$$$r   c                 P   t        g dg dg dg dg dg dg dg dg d	g	g d
      j                  ddg      }t        ddgddggddg      j                  dg      }t        ddgddgddgddgddgddgdt        j                  gdt        j                  gdt        j                  gg	|j                  ddg      }t        j                  |j                  |d      |       t        j                  |j                  |d       |ddg          t        j                  ddgg d!gddg"      }t        ddgddgddgddgddgddgg|ddg      }t        j                  |j                  |d       |       t        j                  |j                  |d      |ddg          y )#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_leftrightz0TestDataFrameJoin.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                    t        j                  ddd      j                         }t        j                  d|fgddg      }t        ddgi|      }t        j                  d|fgddg      }t        d	dgi|      }t        j                  d|fgddg      }t        d
dgi|      }|j                  ||g      }t        j                  d|fgddg      }	t        dgdgdgd|	      }
t        j                  ||
       y )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_datesz,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                    t        ddgddgddgg      }t        j                  dd	g      }t        |dd
gddgg      }t        j                  t
        d      5  t        j                  ||d       d d d        t        j                  t
        d      5  |j                  |d       d d d        y # 1 sw Y   AxY w# 1 sw Y   y xY w)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_raisesz9TestDataFrameJoin.test_merge_join_different_levels_raises  s    
 c
1b'Ar71CD (()[)AB2wB.@A ]]M
 	' HHS##&	' ]]M
 	" HHSSH!	" 	"	' 	'	" 	"s   B4C 4B= C	c           	         t        j                  d      }t        t        j                  d      t        ddd|            }t        t        j                  d      t        dd	d
|      t        d	d            }|j                  |d      }|j                  j                  |j                        }t        j                  |j                  |       |j                  j                  j                  dk(  sJ y )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_tzawarez)TestDataFrameJoin.test_frame_join_tzaware  s    |,HHV2AGPRS
 HHV2AGPRS!QK
 Ew/;;$$U[[1
fllH5||""l222r   c                    t        j                  ddgt        j                  g dd      d      }dj                         }d	j                         }t	        ||d
      j                  d      }t	        ||d      j                  d      }t        j                  dg|j                  d      |_        t        j                  dg|j                  d      |_        |j                  |      }t	        |||d      j                  d      }t        j                  ddg|j                  d      |_        t        j                  ||       y )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_indexz3TestDataFrameJoin.test_frame_join_categorical_index,  s   >>FyyW=

 ++-//#xG<=GGMxG<=GGM))1#X^^*U))1#X^^*UHHSM	GD

)D/ 	 ..F(..z
 	i2r   N)__name__
__module____qualname__rM   r   r   r   r  r  r  r'  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>r4     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   