
    bMhsD                     t   d dl m 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j        d
             Zej        d             Zej        d             Zej                            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j        gdg d          fdd eg dej        ddgdg d          fdd eej        ddgg ddg d           fdd eddej        gg d!dg d"          fd#d ed ddej        gej        ddd$gdg d%          fd#d ed ddej        gej        ddd$gdg d%          fg          d&             Zd' Zd( Zej                            d)d*d+g          d,             Z d- Z!d. Z"d/ Z#d0 Z$d1 Z%d2 Z&d3 Z'd4 Z(d5 Z)d6 Z*ej                            d7ddg          d8             Z+ G d9 d:          Z,dS );    )datetimeN)
MergeError)	DataFrameIndex
MultiIndex
date_rangeperiod_range)concatc            	          t          t          j        d                              dd          t	          d          t          ddd                    S )	N         abcde2000Y)startfreqperiodsdatacolumnsindex)r   nparangereshapelistr	        d/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pandas/tests/frame/methods/test_join.pyframe_with_period_indexr       sO    Yr]]""1a((Wc1===   r   c                  0    t          dg dig d          S )Nar   
   r         r   r   r   r   r   r   leftr*      s"    c;;;'yyy9999r   c                  0    t          dg dig d          S )Nb,  d         r'   r&   r(   r)   r   r   r   rightr3   "   s"    c???+999====r   c                  L    t          g dg ddt          d                    S )Nr"   r,   cdcatdogweaselhorser"   r,   r   r(   )r   ranger   r   r   left_no_dupr?   '   s:    """)J)J)JKKAhh   r   c                  r    t          g dg ddt          d                                        d          S )N)r"   r,   r6   r7   e)meowbarkum... weasel noise?naychirpr"   r6   r   r(   r"   )r   r>   	set_indexr   r   r   right_no_duprI   /   sM    ***HHH	
 	
 Ahh   innr   c                 R    t          | t          dgdgddg          gd          S )Nr"   cowr=   r2   r(   T)sort)r
   r   )r?   s    r   left_w_dupsrM   :   s>    	ise5' : :1#FFFGd   r   c                 t    t          | t          dgdgddg          g                              d          S )NrA   moorG   r2   r(   r"   )r
   r   rH   )rI   s    r   right_w_dupsrP   A   sB    	yuE7!;!;A3GGGH innr   zhow, sort, expectedinnerFr   r$   r0   r/   r=   r&   r'   r(   Tr*   r#   r%   r   r$   r   )r   r'   r&   r3   r-   r1   r/   r0   r.   r'   r&   r2   outerr.   )r   r'   r&   r2   c                 b    |                      |||d          }t          j        ||           d S )N1:1)howrL   validate)jointmassert_frame_equal)r*   r3   rX   rL   expectedresults         r   	test_joinr_   H   s7    X YYu#D5YAAF&(+++++r   c                  d   t          dg di          } t          g dg dd          }t          g dg dd          }d}t          j        t          |          5  |                     |gd	
           d d d            n# 1 swxY w Y   t          j        t          |          5  |                     ||gd           d d d            n# 1 swxY w Y   t          j        t          |          5  |                     ||gd	d           d d d            n# 1 swxY w Y   t          j        t          d          5  |                     ||g           d d d            n# 1 swxY w Y   |                     |g          }|                     |          }t          j        ||           d S )Nkey)r'   r&   r2   r   r   )r'      r2   r&   r   )ra   v1)r   r&   r2   r   r'   )keysv2z7Suffixes not supported when joining multiple DataFramesmatchy)lsuffixx)rsuffixri   rk   zIndexes have overlapping values)r   pytestraises
ValueErrorrZ   r[   r\   )firstsecondthirdmsg
arr_joinednorm_joineds         r   test_suffix_on_list_joinrv   x   s   uooo.//EoooFFGGFoooFFGGE DC	z	-	-	- * *

F8S
)))* * * * * * * * * * * * * * *	z	-	-	- 1 1

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

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

FE?###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ UG$$J**U##K*k22222sH   BB	B(CCC4DD"DE%%E),E)c                     d}t          j        t          |          5  |                     |dd           d d d            d S # 1 swxY w Y   d S )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"rf   r"   invalidonrY   )rm   rn   ro   merge)r?   rI   rs   s      r   test_join_invalid_validater|      s    		  
z	-	-	- D D,3CCCD D D D D D D D D D D D D D D D D Ds   AAAdtypeobjectstring[pyarrow]c                 n   |dk    rt          j        d           |                     |          } |j                            |          |_        |                     |dd           d}t          j        t          |          5  |                     |dd           d d d            d S # 1 swxY w Y   d S )	Nr   pyarrowr"   one_to_manyry   zBMerge keys are not unique in right dataset; not a one-to-one mergerf   
one_to_one)rm   importorskipastyper   rZ   rn   r   )r?   rP   r}   rs   s       r   $test_join_on_single_col_dup_on_rightr      s    !!!I&&&$$U++K%+22599L     OC	z	-	-	- 
 
! 	 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   B**B.1B.c                     |                      |dd           d}t          j        t          |          5  |                      |dd           d d d            d S # 1 swxY w Y   d S )Nr"   many_to_onery   zAMerge keys are not unique in left dataset; not a one-to-one mergerf   r   rZ   rm   rn   r   )rM   rI   rs   s      r   #test_join_on_single_col_dup_on_leftr      s          NC	z	-	-	- 
 
! 	 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   AA #A c                 l   |                      |dd           d}t          j        t          |          5  |                      |dd           d d d            n# 1 swxY w Y   d}t          j        t          |          5  |                      |dd           d d d            d S # 1 swxY w Y   d S )	Nr"   many_to_manyry   zCMerge keys are not unique in right dataset; not a many-to-one mergerf   r   zBMerge keys are not unique in left dataset; not a one-to-many merger   r   )rM   rP   rs   s      r   #test_join_on_single_col_dup_on_bothr      s^    \cNCCC PC	z	-	-	- 
 
" 	 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 OC	z	-	-	- 
 
" 	 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s#   AA"AB))B-0B-c                     t          g dg dg ddt          d                                        ddg          } t          g d	g d
g ddt          d                                        ddg          }t          g d	g d
g dg ddt          d                                        ddg          }|                     |dd          }t	          j        ||           d S )N)r"   r"   r,   r,   )r   r'   r   r'   r8   r"   r,   r6   r   r(   r"   r,   )r"   r"   r,   )r   r'   r   )rB   rC   rD   )r"   r,   r7   r2   )r9   r:   r;   r5   rQ   rW   )rX   rY   )r   r>   rH   rZ   r[   r\   )r*   r3   expected_multir^   s       r    test_join_on_multi_col_check_dupr      sG    %%%222	
 	

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

 Ahh   ic
 
  )))888		
 	
 Ahh   ic
  YYu'EY::F&.11111r   c                 B   | j         | j        d d         ddgf         }| j         | j        dd          ddgf         j        d d d         }|                    |          }t	          j        |j        |j                   t          g d          }t	          j        |j        |           |                    |d	
          }t	          j        |j        |j                   t	          j        |j        |           |                    |d
          }t	          j        |j        |j                   t	          j        |j        |           |                    |d
          }t	          j        |j        |j        dd                    t	          j        |j        |           |                    |d
          }t	          j        |j        | j                                                   t	          j        |j        |           t          j
        t          d          5  |                    |d
           d d d            n# 1 swxY w Y   d}dD ]L}t          j
        t          |          5  |                     | |
           d d d            n# 1 swxY w Y   Md S )Nr$   ABr   CD)r   r   r   r   r*   rX   r3   rQ   rU   zjoin methodrf   foozcolumns overlap but no suffix)rU   r*   rQ   )locr   ilocrZ   r[   assert_index_equalr   r   sort_valuesrm   rn   ro   )float_frameff2joinedexpected_columnsrs   rX   s          r   test_join_indexr     s    	)#2#.c
:;A	*122.c
:	;	@2	FBVVBZZF!'6<00011122&.*:;;;VVBFV##F&,000&.*:;;;VVBGV$$F&,111&.*:;;; VVBGV$$F&,"666&.*:;;; VVBGV$$F&,(9(E(E(G(GHHH&.*:;;;	z	7	7	7  	ru               *C) 3 3]:S111 	3 	3[c222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	33 3s$   II
I/JJ	J	c                 
   | j         d d ddgf         }| j         d d dddgf         }|                                }| d         d d d         |d<   | d         d d d         |d<   |                    |          }t          j        ||           |                    |d          }t          j        ||d d d                    |                    |d          }t          j        ||j         d d |j        f                    d S )Nr   r   r&   r   r   r3   r   )r   copyrZ   r[   r\   r   )r   afbfr]   r^   s        r   test_join_index_morer   1  s   	S#J	'B	1sCj	)BwwyyH$SSqS)HSM$SSqS)HSMWWR[[F&(+++WWRWW%%F&(33Q3-000WWRWW%%F&(,qqq&./@"ABBBBBr   c                 b   |                                  }|                    | j        d                   }|                    |          }t	          j        ||            d |_        t          j        t          d          5  |                    |           d d d            d S # 1 swxY w Y   d S )Nr   zmust have a namerf   )
r   popr   rZ   r[   r\   namerm   rn   ro   )r   dfserr   s       r   test_join_index_seriesr   C  s    					B
&&$R(
)
)CWWS\\F&+...CH	z);	<	<	<  
                 s   B$$B(+B(c                    | j         d d g df         }| j         d d g df         }|                    |dd          }|j         d d ddgf                             d          }|j         d d ddgf                             d          }| j         d d dd	gf         }|                    |                              |          }t          j        ||j         d d |j        f                    d S )
N)r   r   r   )r   r   r   _df1_df2rl   r   r   r   r   )r   rZ   
add_suffixr[   r\   r   )r   df1df2r   df1_sufdf2_suf
no_overlapr]   s           r   test_join_overlapr   O  s    
/!!!___,
-C
/!!!___,
-CXXc66X::Fgaaa#sm$//77Ggaaa#sm$//77GS#J/J||G$$))*55H &(,qqq&./@"ABBBBBr   c                 2   |                      d           }t          j        | j        gdz  d          }| j                            |j                  }|                     |          }t          ||| j                  }t          j
        ||           d S )Nc                     |  |  S )Nr   )ra   s    r   <lambda>z(test_join_period_index.<locals>.<lambda>_  s    #}s}} r   r   r&   r'   )axisr   )renamer   concatenatevaluesr   appendrZ   r   r   r[   r\   )r    otherjoined_valuesjoined_colsr   r]   s         r   test_join_period_indexr   ^  s    #**3L3L*MMEN$;$B#Ca#GaPPPM)188GGK$))%00FK7N7T  H &(+++++r   c                  j   t          dg dig d          } t          dg dig d          }t          dg d	ig d
          }|                     ||gd          }t          g dt          j        dddgt          j        ddt          j        gdg d          }t	          j        ||           d S )Nr"   rR   rT   r(   r,   rS   )r   r2   r&   r6   )    iX  )r&   r&   r   r*   r   )r   r$   r$   r   r.   r0   r   r   r   )r'   r&   r&   r2   )r   rZ   r   nanr[   r\   )r   r   df3r   r]   s        r   (test_join_left_sequence_non_unique_indexr   m  s    
S+++&iii
8
8
8C
S///*)))
<
<
<C
S///*)))
<
<
<CXXsCjfX--F &#sC(&#sBF+	
 	

 ll  H &(+++++r   c                     | j                                         }| j        | ddg         g}|                    |          }t	          j        ||            d S )Nr   r   )r   to_framer   rZ   r[   r\   )r   r*   r3   r^   s       r   test_join_list_seriesr     sV     =!!##D]Kc
34EYYuF&+.....r   sort_kwc           	      
   t          dddgiddg          }t          ddd	gid
dg          }t          dddgidd
g          }t          dt          d          ddddt          d          dddt          d          dd          }| du r|                    g d          }t          j        d           5  |                    ||gd|           }d d d            n# 1 swxY w Y   t          j        ||           d S )Ncol1r'   r&   r6   r"   r(   col2r   r   r,   col3   rb          @r         ?r   g      @g      @g      @g       @r   r   r   F)r6   r"   r,   rU   )rX   rL   )r   floatreindexr[   assert_produces_warningrZ   r\   )r   r"   r,   r6   r]   r^   s         r   )test_suppress_future_warning_with_sort_kwr     sr   6Aq6"3*555A6Aq6"3*555A6Aq6"3*555AE%LLs;;CeEll;;CeEll;;	
 	
 H %##///#::		#D	)	) ; ;AG'::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;&(+++++s   <C##C'*C'c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestDataFrameJoinc                 <   |}|j         |j        d d         dgf         }|j         |j        dd          ddgf         }|                    |d                              |j                  }|                                j                                        }t          j        |t          j        |j                  <   t          ||j        |j
                  }t          j        |j                                                  rJ t          j        ||           d S )	Nr   r   r&   r   r   rU   r   r   r   )r   r   rZ   r   r   r   r   r   isnanr   r   allr[   r\   )self multiindex_dataframe_random_dataframer"   r,   r   r]   s          r   r_   zTestDataFrameJoin.test_join  s    0Iek"1"ou,-Iek!""oSz12w''//<<::<<&++--,.F&-(()XU[%-PPP8FM**..00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          }|                    ddg          }|                    ddg          }dD ]}|                    ||           d S )	Nr'   r&   )r"   r,   rj   )r"   r,   rh   r"   r,   )r*   r3   rU   r   )r   rH   rZ   )r   r   r   rX   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||          }|                    |d          }t	          |j                  d
k    sJ d S )N2012020920120222i  r&   	      aar   r'   r2   r   rz   )r   r   r>   rZ   lenr   )r   	str_datesdt_datesr   r   tsts         r   test_join_str_datetimez(TestDataFrameJoin.test_join_str_datetime  s    ,	T1a(((4B*?*?@iuQxx$@@@1v1v&iJJJffQ4f  3;1$$$$$$r   c                    t          g dg dg dg dg dg dg dg dg d	g	g d
                              ddg          }t          ddgddggddg                              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        |                    |d          |           t          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        |                    |d           |           t          j        |                    |d          |ddg                    d S )#N)r"   rj   R
1?)r"   rh   ?)r"   z<+J	?)r,   rj   4ֿ)r,   rh   ^9S?)r,   r   ?)r6   rj   r'   )r6   rh   r&   )r6   r   r2   )rp   rq   value1r   rp   rq   r"   r$   r,   r   value2r   r   r   r   r   r   r   r   g      @r   r   r*   r   r3   )rj   rh   r   names)
r   rH   r   r   r   r[   r\   rZ   r   from_product)r   r   r   expexp_idxs        r   test_join_multiindex_leftrightz0TestDataFrameJoin.test_join_multiindex_leftright  s_   $$$$$$$$$%%%$$$%%%
 211
 
 
 )Wh'
(
( 	 #rS"I.(8KLLLVVI
 
 222B2B26"26"26"
 )x(
 
 
" 	chhsh77===
chhsh88#x>R:STTT)3Z)'81D
 
 
 222B2B x(
 
 
 	chhsh88#>>>
chhsh77h=Q9RSSSSSr   c                 .   t          j        ddd                                          }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|          }|                    ||g          }t          j        d|fgddg          }	t          dgdgdgd|	          }
t          j        ||
           d S )Ni  r'   r   index_0dater   r   r(   r   r   r   )	pd	Timestampr  r   from_tuplesr   rZ   r[   assert_equal)r   r  	df1_indexr   	df2_indexr   	df3_indexr   r^   expected_indexr]   s              r   test_join_multiindex_datesz,TestDataFrameJoin.test_join_multiindex_dates  sA   |D!Q'',,..*QI;y&>QRRR	!Y777*QI;y&>QRRR	!Y777*QI;y&>QRRR	!Y7773*%%#/!TIvCVWWWS1#s3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            n# 1 swxY w Y   t          j        t
          d          5  |                    |d           d d d            d S # 1 swxY w Y   d S )Nr"   r,   r'      r   r   )r   r   )r"    )r6   c1!   ,   z-Not allowed to merge between different levelsrf   r   )	r   r   r  rm   rn   r   r  r{   rZ   )r   r   r   r   s       r   'test_merge_join_different_levels_raisesz9TestDataFrameJoin.test_merge_join_different_levels_raises  s   
 c
1b'Ar71CDDD ()[)ABB2wB.@AAA ]M
 
 
 	' 	' HS##&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' ]M
 
 
 	" 	" HHSSH!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s$   "BB
B
,CCCc           	         t          t          j        d          t          dddd                    }t          t          j        d          t          dd	d
d          t	          d	d                    }|                    |d          }|j                            |j                  }t          j	        |j        |           |j        j
        j        dk    sJ d S )N)   r2   z2012-11-15 00:00:00r  100msz
US/Central)r   r   tzr(   )r2   r2   r2   250msr   rU   r   )r   r   zerosr   r>   rZ   r   unionr[   r   r  zone)r   test1test2r^   r]   s        r   test_frame_join_tzawarez)TestDataFrameJoin.test_frame_join_tzaware-  s    HV%qw<  
 
 
 HV%qw<   !QKK
 
 
 Ew//;$$U[11
flH555|#|333333r   N)
__name__
__module____qualname__r_   r   r   r  r  r  r   r   r   r   r   r     s        0 0 0# # #	% 	% 	%:T :T :Tx* * *(" " ".4 4 4 4 4r   r   )-r   numpyr   rm   pandas.errorsr   pandasr  r   r   r   r   r	   pandas._testing_testingr[   pandas.core.reshape.concatr
   fixturer    r*   r3   r?   rI   rM   rP   markparametrizer   r_   rv   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r-     s              $ $ $ $ $ $                        - - - - - -    : : : > > >             	%"bc
#C#CAq6RRRS	$		RSz"B"B1a&QQQRIKKKsC.@AASSS	
 IKKKrvsC.@AASSS	
 IRVR,???CC999UUU	
 IRRV,???CC999UUU	
 I"b"&)c30GHH"ll  	
 I"b"&)c30GHH"ll  	
?'* *V, ,W* *V,
3 3 3,D D D& 8->"?@@
 
 A@
.
 
 
&
 
 
0!2 !2 !2H&3 &3 &3RC C C$	 	 	C C C, , ,, , ,(/ / / T5M22, , 32,,_4 _4 _4 _4 _4 _4 _4 _4 _4 _4r   