
    OwgsD                        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j4                  j7                  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j8                  gdg d      fdd eg dej8                  ddgdg d      fdd eej8                  ddgg ddg d       fdd eddej8                  gg d!dg d"      fd#d ed ddej8                  gej8                  ddd$gdg d%      fd#d ed ddej8                  gej8                  ddd$gdg d%      fg      d&        Zd' Zd( Zej4                  j7                  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j4                  j7                  d7ddg      d8        Z+ G d9 d:      Z,y);    )datetimeN)
MergeError)	DataFrameIndex
MultiIndex
date_rangeperiod_range)concatc            	          t        t        j                  d      j                  dd      t	        d      t        ddd            S )	N         abcde2000Y)startfreqperiodsdatacolumnsindex)r   nparangereshapelistr	        [/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/tests/frame/methods/test_join.pyframe_with_period_indexr       s:    YYr]""1a(Wc1= r   c                  (    t        dg dig d      S )Nar   
   r         r   r   r   r   r   r   leftr*      s    c;'y99r   c                  (    t        dg dig d      S )Nb,  d         r'   r&   r(   r)   r   r   r   rightr3   "   s    c?+9==r   c                  <    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KAh r   c                  Z    t        g dg ddt        d            j                  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   /   s.    *H	
 Ah inr   c                 B    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Gd r   c                 \    t        | t        dgdgddg      g      j                  d      S )NrA   moorG   r2   r(   r"   )r
   r   rH   )rI   s    r   right_w_dupsrP   A   s2    	yuE7!;A3GHin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                 Z    | j                  |||d      }t        j                  ||       y )N1:1)howrL   validate)jointmassert_frame_equal)r*   r3   rX   rL   expectedresults         r   	test_joinr_   H   s+    X 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)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@   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"rf   r"   invalidonrY   )rm   rn   ro   merge)r?   rI   rs   s      r   test_join_invalid_validater|      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)	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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_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      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_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 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   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      s     %2	

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

 Ah ic
 
  )8		
 Ah ic
  YYu'EY:F&.1r   c                    | 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                  |       t        j                  t        d      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)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     s6    	))#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&..*:;	z	7 	ru *C) 3]]:S1 	3[c2	3 	33 	3 	3s   J6K6J?K	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   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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 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   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_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gga#sm$//7Ggga#sm$//7GS#J/J||G$))*5H &(,,q&../@"ABr   c                 <   | j                  d       }t        j                  | j                  gdz  d      }| j                  j                  |j                        }| j                  |      }t        ||| j                        }t        j                  ||       y )Nc                     |  |  S )Nr   )ra   s    r   <lambda>z(test_join_period_index.<locals>.<lambda>_  s    #se} 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    #**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"   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+&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   rZ   r[   r\   )r   r*   r3   r^   s       r   test_join_list_seriesr     sK     ==!!#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|j                  g d      }t        j                  d       5  |j                  ||gd|       }d d d        t        j                  |       y # 1 sw Y    xY w)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     s    6Aq6"3*5A6Aq6"3*5A6Aq6"3*5AE%Ls;CeEl;CeEl;	
H %##/#:		#	#D	) ;AG':;&(+; ;s   CCc                   6    e 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   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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 )	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||      }|j                  |d      }t	        |j
                        d
k(  sJ y )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*?@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"   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
 )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  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  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,   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 (()[)AB2wB.@A ]]M
 	' HHS##&	' ]]M
 	" HHSSH!	" 	"	' 	'	" 	"s   B4C 4B= C	c           	         t        t        j                  d      t        dddd            }t        t        j                  d      t        dd	d
d      t	        d	d            }|j                  |d      }|j                  j                  |j                        }t        j                  |j                  |       |j                  j                  j                  dk(  sJ y )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    HHV%qw<
 HHV%qw< !QK
 Ew/;;$$U[[1
fllH5||##|333r   N)
__name__
__module____qualname__r_   r   r   r  r  r  r   r   r   r   r   r     s'    0#	%:Tx*(".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
#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&3RC$	C,,(/ T5M2, 3,,_4 _4r   