
    iS                        d dl m Z  d dlZd dlZd dlmZ d dlmZ d dlZ	d dlm
Z
mZmZmZ d dlmZ  G d d      Zej$                  j'                  d e d	d
d
       e d	d
d      f e	j(                  dd       e	j(                  dd      f e	j*                  d       e	j*                  d      f e	j,                  d d
       e	j,                  ddd      fg      d        Zd Zd Zd Zd Zd Zd Zd Zd Zy)    )datetimeN)find_common_type)is_dtype_equal)	DataFrameIndex
MultiIndexSeriesc                   6   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zej                   j#                  d eddd       eddd       eddd      gej(                  ej(                  ej(                  g eddd       eddd       eddd      gfej(                  ej(                  ej(                  g eddd       eddd       eddd      g eddd       eddd       eddd      gf eddd      ej(                  ej(                  g eddd       eddd       eddd      g eddd       eddd       eddd      gf eddd       eddd       eddd      g eddd      ej(                  ej(                  g eddd       eddd       eddd      gff      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej                   j#                  dddg      d        Zd Z ej                   j#                  d d!      d"        Z!d# Z"y$)%TestDataFrameCombineFirstc                    t        ddgt        d            }t        t        d      t        d            }t        ||d      }t        ddgt        dd            }t        t        d      t        dd            }t        ||d      }t        t        d      g d	dg d
      }|j	                  |      }t        j                  ||       y )Nab   indexAB      abab)r      r   r   r   r   r      )r	   ranger   listcombine_firsttmassert_frame_equal)selfr   r   fgexpcombineds          j/app/cer_product_mecsu/.venv/lib/python3.12/site-packages/pandas/tests/frame/methods/test_combine_first.pytest_combine_first_mixedz2TestDataFrameCombineFirst.test_combine_first_mixed   s    C:U1X.5858,AA&'C:U1a[1585A;/AA&'d6l>lS??1%
h,    c                    |d d |dd  }}|j                  |      }|j                  |j                        }t        j                  ||       t        j
                  |j                  |j                         t        j                  |d   |d          t        j                  |d   j                  |j                        |d          t        j                  |d   j                  |j                        |d          y )Nr   r   )r   reindexr   r   r   assert_index_equalcolumnsassert_series_equal)r    float_frameheadtailr$   reordered_frames         r%   test_combine_first_disjointz5TestDataFrameCombineFirst.test_combine_first_disjoint!   s     !_k!"od%%d+%--hnn=
h8
h..0C0CD
x}oc.BC
x}44TZZ@$s)L
x}44TZZ@$s)Lr'   c                 ^   |j                         }d|d<   |d= |j                         }d|d<   |d= |j                  |      }|d   dk(  j                         sJ t        j                  |d   |d          t        j                  |d   |d          t        j                  |d   |d          y )Nr   r   Cr   r   D)copyr   allr   r,   )r    r-   fcopyfcopy2r$   s        r%   test_combine_first_same_indexz7TestDataFrameCombineFirst.test_combine_first_same_index-   s      "c
#J!!#s3K&&v."'')))
x}eCj9
x}fSk:
x}eCj9r'   c                    |d d j                  |dd        }|j                  |j                        }|d d j                         |j                         }}d|d<   |j                  |      }|d   d d dk(  j	                         sJ y )Nr   
   r   r   )r   r)   r   r5   r6   r    r-   r$   r0   r.   r/   s         r%   test_combine_first_overlapz4TestDataFrameCombineFirst.test_combine_first_overlap=   s    r?00QRA%--hnn=$Sb)..0/2F2F2HdS	%%d+cr"a',,...r'   c                 B   |d d j                  |dd        }|j                  |j                        }|d d j                         |}}d|j                  d d|j
                  j                  d      f<   |j                  |      }|d   d d dk(  j                         sJ y )Nr   r;   r   r   )r   r)   r   r5   ilocr+   get_locr6   r<   s         r%   "test_combine_first_reverse_overlapz<TestDataFrameCombineFirst.test_combine_first_reverse_overlapE   s    r?00QRA%--hnn=$Sb)..0/d45		#2#t||++C001%%d+cr"a',,...r'   c                     |j                  t                     }t        j                  ||       t               j                  |      }t        j                  ||j	                                y )N)r   r   r   r   
sort_indexr    r-   combs      r%   test_combine_first_with_emptyz7TestDataFrameCombineFirst.test_combine_first_with_emptyN   sO    ((5
dK0{((5
dK$:$:$<=r'   c                 ^    |j                  t        ddg            }d|j                  v sJ y )Nfazboor   )r   r   r   rD   s      r%   !test_combine_first_with_new_indexz;TestDataFrameCombineFirst.test_combine_first_with_new_indexU   s-    ((%)HI

"""r'   c                     t        ddgit        ddd      g      }t        dg      }|j                  |      }d|v sJ y )Nr   r   i  r   r   r+   )r   r   r   )r    dfdf2results       r%   test_combine_first_column_unionz9TestDataFrameCombineFirst.test_combine_first_column_unionY   sH    aSz(4A*>)?@&!!#&f}}r'   c                 ~   t        g d      }t        g d|      }t        g d|      }t        g d|      }t        |||d      }t        g d      }t        g d|      }t        g d|      }t        g d|      }t        |||d      }|j                  |      }t	        |j
                        dk(  sJ y )	N)r   r   ce)      @g      "      @g      Y@r   )      r   a   )col0col2col3)r   r   rR   r!   )col1rZ   col5r   )r   r	   r   r   lenr+   )r    idxser1ser2ser3frame1frame2r$   s           r%   test_combine_first_mixed_bugz6TestDataFrameCombineFirst.test_combine_first_mixed_bug`   s    ()-S9*#6nC0D$EF()-S9*#6nC0D$EF''/8##$)))r'   c                 J   t        g dg dgg d      }t        ddggdgddg	      }|j                  |      }t        j                  ||       t        j
                  |j                  d
<   |j                  |      }d|j                  d
<   t        j                  ||       y )N)      ?       @FT)rU   rT   TF)r   r   bool1bool2rL   -   r   r   r   r   r+   )r   r   )r   r   r   r   npnanloc)r    rM   otherrO   s       r%   $test_combine_first_same_as_in_updatez>TestDataFrameCombineFirst.test_combine_first_same_as_in_updater   s    $&=>0

 B8*QC#sD!!%(
fb)v!!%(v
fb)r'   c           	         t        dt        j                  ddt        j                  gt        j                  ddt        j                  dgd      }t        dddt        j                  ddgt        j                  t        j                  dddd	gd      }|j                  |      }t        g d
t        j                  dddddgd      }t	        j
                  ||       y )Nrg         @rT   rh         @r   rU         @g       @)r   r      r   rv   ru   r   rv   rW   r      r   rm   rn   r   r   r   r    df1rN   rO   expecteds        r%   test_combine_first_doc_examplez8TestDataFrameCombineFirst.test_combine_first_doc_example   s    S"&&1c266SV8WX
 3RVVS#6ffbffc3S9
 ""3'#7rvvq!QPQST>UVW
fh/r'   c                    t        t        j                  ddgdt        j                  dgt        j                  ddgg      }t        dt        j                  dgg dgdd	g
      }t        g dd	t              }|j                  |      d	   }t        j                  ||       |j                  |      d	   }t        j                  ||       y )Nrs   Tgffffffru   FgLE)g      g?Fr   r   r   )TTF)namedtype)r   rm   rn   r	   boolr   r   r,   )r    rz   rN   r{   	result_12	result_21s         r%   -test_combine_first_return_obj_type_with_boolszGTestDataFrameCombineFirst.test_combine_first_return_obj_type_with_bools   s     ffc4 4"6e8LM
 %.0BCAq6R-ATB%%c*1-	
y(3%%c*1-	
y(3r'   zdata1, data2, data_expectedi  r   r   rv   c                     t        d|i      t        d|i      }}|j                  |      }t        d|i      }t        j                  ||       y )Nr   r   r   r   r   )r    data1data2data_expectedrz   rN   rO   r{   s           r%   -test_combine_first_convert_datatime_correctlyzGTestDataFrameCombineFirst.test_combine_first_convert_datatime_correctly   sN    < c5\*IsEl,CS""3'c=12
fh/r'   c                    t        j                  d      j                  d      }t        |dggddg      }t        dgdggdg      }|d   j                  d	k(  sJ |d   j                  d
k(  sJ |j                  |      }t        |t         j                  gddgdddg      }t        j                  ||       |d   j                  d	k(  sJ |d   j                  d
k(  sJ |j                  d d j                  |      }t        t        j                  t        j                  gddgdddg      }t        j                  ||       |d   j                  dk(  sJ |d   j                  d
k(  sJ y )N
2011-01-01sr   r   r   rL   rW   r   zdatetime64[s]int64r   r   r   float64)pd	Timestampas_unitr   r   r   NaTr   r   r?   rm   rn   )r    tsdfadfbresr#   s         r%   test_combine_first_align_nanz6TestDataFrameCombineFirst.test_combine_first_align_nan   sb   \\,'//4"a	C:6!qc
SE23x~~0003x~~((($rvv,aV,#J
 	c3'3x~~0003x~~(((hhrl((-rvvrvv.aV<sCjQ
c3'3x~~***3x~~(((r'   c           
         t        j                  d      j                  d      j                  |      }t	        ddg|t        j
                  dd|            }t        j                  d	      j                  d      j                  |      }t	        dd
g|t        j
                  dd|            }|dg   j                  |      }t	        t        j                  dd      t        j                  dd      gt        j                  dd      t         j                  gdddgt        j
                  ddd|      d| d      }|d   j                  d| dk(  sJ |d   j                  d| dk(  sJ t        j                  ||       y )Nz20100101 01:01UTCUTCdatetimeabc20140627r   )periodsunit)r+   datar   z20121212 12:12xyz20140628z2010-01-01 01:01tzz2012-12-12 12:12z2010-01-01 01:01:00)r   r   r   r4   )r   freqr   datetime64[, UTC])r+   r   r   )r   to_datetimetz_localizer   r   
date_ranger   r   r   r   r   r   )r    r   r   rz   r   rN   r   r#   s           r%   test_combine_first_timezonez5TestDataFrameCombineFirst.test_combine_first_timezone   s|   /0<<UCKKDQ"E*--
ADA

 /0<<UCKKDQ"E*--
ADA

 =/"005 LL!3>LL!3>  %:uErvvN #E*--
ACdKvV,
 =!''[f+EEEE5z[f#====
c3'r'   c                    t        j                  ddd|      }t        d|i      }t        j                  ddd|      }t        d|i      }|j                  |      }t	        j
                  ||       |d   j                  d| dk(  sJ y )	N
2015-01-01
2015-01-05r   r   r   DATE
2015-01-03r   r   r   r   r   r   r   r   r   r    r   dts1rz   dts2rN   r   s          r%   test_combine_first_timezone2z6TestDataFrameCombineFirst.test_combine_first_timezone2   s    }}\<EM'}}\<EM'$
c3'6{  k$v$>>>>r'   c                    t        j                  g dd      j                  |      }t        d|ig d      }t        j                  g dd      j                  |      }t        d|ig d      }|j	                  |      }t        j                  g d	d      j                  |      }t        d|ig d
      }t        j                  ||       y )N)r   r   
2011-01-03
2011-01-04
US/Easternr   r   r   rv   r   r   r   
2012-01-01
2012-01-02z
2012-01-03r   rW   r   )r   r   r   r   r   r   r   r   rv   rW   r   r   )r   DatetimeIndexr   r   r   r   r   	r    r   r   rz   r   rN   r   exp_dtsr#   s	            r%   test_combine_first_timezone3z6TestDataFrameCombineFirst.test_combine_first_timezone3  s    =,

'$- 	 l;6<

'$- 	 i8$"" 

 '$- 	 )1CD
c3'r'   c                    t        j                  ddd|      }t        d|i      }t        j                  dd|      }t        d|i      }|j                  |      }t	        j
                  ||       |d   j                  d| d	k(  sJ y )
Nr   r   r   r   r   r   r   r   z, US/Eastern]r   r   s          r%   test_combine_first_timezone4z6TestDataFrameCombineFirst.test_combine_first_timezone4$  s    }}\<LtT'}}\<dC' $
c3'6{  k$}$EEEEr'   c                    t        j                  ddd|      }t        d|i      }t        j                  dd|      }t        d|i      }|j                  |      }t        j                  dd      t        j                  dd      t        j                  d      g}t        d|i      }t        j                  ||       |d   j                  d	k(  sJ y )
Nr   z
2015-01-02r   r   r   r   r   r   object)r   r   r   r   r   r   r   r   r   s	            r%   test_combine_first_timezone5z6TestDataFrameCombineFirst.test_combine_first_timezone50  s    }}\<LtT'}}\<dC'$LL,7LL,7LL&

 )*
c3'6{  H,,,r'   c                 j   t        j                  g d      }t        d|ig d      }t        j                  g d      }t        d|ig d      }|j                  |      }t        j                  g d      }t        d|ig d      }t	        j
                  ||       |d   j                  d	k(  sJ y )
N)1 dayr   3 day4dayTDr   r   )10 day11 dayz12 dayr   )r   r   r   r   r   z4 dayr   ztimedelta64[us])r   TimedeltaIndexr   r   r   r   r   )r    r   rz   r   rN   r   r   r#   s           r%   test_combine_first_timedeltaz6TestDataFrameCombineFirst.test_combine_first_timedelta@  s    !!"CDu\:!!"@AuY7$##B
 w/AB
c3'4y"3333r'   c           	      t   t        j                  g dd      }t        d|ig d      }t        j                  g dd      }t        d|ig d      }|j                  |      }t        j                  g d	d      }t        d|ig d
      }t	        j
                  ||       |d   j                  |j                  k(  sJ t        j                  g dd      }t        d|ig d      }|j                  |      }t        j                  dd      t        j                  dd      t         j                  t        j                  dd      t        j                  dd      t        j                  dd      g}t        d|ig d
      }t	        j
                  ||       |d   j                  dk(  sJ y )N)2011-01r   2011-032011-04M)r   Pr   r   )r   2012-02z2012-03r   )r   z2012-01r   r   r   r   r   r   r4   r   r   r   r   r   r   )	r   PeriodIndexr   r   r   r   r   Periodr   )	r    r   rz   r   rN   r   r   r#   r   s	            r%   test_combine_first_periodz3TestDataFrameCombineFirst.test_combine_first_periodN  se   GcReL9C#NeI6$..JQT
 g.@A
c3'3x~~,,, ~~HsSd95$IIic*IIl-FFIIl-IIic*IIic*
 g.@A
c3'3x~~)))r'   c                     t        dg did      }t        dddgid      }|j                  |      }t        dg di      }t        j                  ||       |j                  |      }t        dg di      }t        j                  ||       y )Nr   )r   r   rv   r   r   r   r   rW   )r   rW   rv   r   r   )r    rz   rN   r   expected_12r   expected_21s          r%   test_combine_first_intz0TestDataFrameCombineFirst.test_combine_first_intm  s     l+7;q!fW5%%c*	l 34
i5%%c*	l 34
i5r'   valrg   c                     t        d|gi      }t        ddgi      }|j                  |      }t        |gdgd      }t        j                  ||       y )NisNumisBoolT)r   r   r   )r    r   rz   rN   r   r#   s         r%   (test_combine_first_with_asymmetric_otherzBTestDataFrameCombineFirst.test_combine_first_with_asymmetric_other{  sY     3%()D6*+$3%D6:;
c3'r'   c                    t        ddgt        j                  gdz  d|      }t        dgt        j                  gd|      }|j                  ddgd	       |j                  ddgd	       |j	                  |      }t        ddgt        j                  gdz  d|      j                  ddg      }t        j                  ||       y )
N96285r   r   r   r   r   T)inplace)r   r   NA	set_indexr   r   r   )r    nullable_string_dtyperM   rN   rO   r{   s         r%   'test_combine_first_string_dtype_only_nazATestDataFrameCombineFirst.test_combine_first_string_dtype_only_na  s    $-ruugk2:O
 tfBEE73;PQ
c3Z.sCj$/!!#&$-ruugk2:O

)S#J
 	 	fh/r'   zwide_val, dtype))l   +YNJ9 UInt64)l+YNJ9 Int64c                     t        d|dgi|      }t        ddd|gi|      }|j                  |      }t        d|d|gi|      }t        j                  ||       y )Nr   r   r   r   r   r   )r    wide_valr   rz   rN   rO   r{   s          r%   (test_combine_first_preserve_EA_precisionzBTestDataFrameCombineFirst.test_combine_first_preserve_EA_precision  si     xm,E:q!X./u=""3'cHa#:;5I
fh/r'   c                    t        dt        j                  gddggddgddg      }t        g d	d
dt        j                  ggg dddg      }|j                  |      }t        g dg dgddgg d      }t	        j
                  ||       y )Nr   rv   rW   r   Qr   r   )r+   r   )r   r   r   rw   	   )r   r   r   )r   rt   ru   )rv   rU   rU   rl   rx   ry   s        r%   %test_combine_first_non_unique_columnsz?TestDataFrameCombineFirst.test_combine_first_non_unique_columns  s    !RVVq!f-Sz#sTArvv'c

 ""3'M*3*o
 	fh/r'   N)#__name__
__module____qualname__r&   r1   r9   r=   rA   rF   rJ   rP   re   rq   r|   r   pytestmarkparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r'   r%   r   r      s   -
M: //>#*$* 0"4  [[% $1%xa';XdAq=QR($1%xa';XdAq=QR ($1%xa';XdAq=QR$1%xa';XdAq=QR $1%rvvrvv6$1%xa';XdAq=QR$1%xa';XdAq=QR $1%xa';XdAq=QR$1%rvvrvv6$1%xa';XdAq=QR!	
20320)4(@	?(2
F- 4*>6 [[UQH-( .(0 [[	
00
0r'   r   zscalar1, scalar2  r   r   z
2020-01-01r4   z
2020-01-02z89 daysz60 min)leftrightrv   r  )r  r  closedc                    |}t        ||ggddg      }t        | |ggddg      }t        |j                  d   |j                  d   g      }t        |d      s[|j                  d   |j                  d   k(  s<|j                  d   j                  |j                  d   j                  cxk(  rdk(  rn n| }n|}|j                  |      }t        |||ggg d      }	|	d   j                  |      |	d<   t        j                  ||	       y )Nr   r   rL   rR   r   r   r   r   rR   )	r   r   dtypesr   kindr   astyper   r   )
scalar1scalar2nulls_fixturena_valueframerp   common_dtyper   rO   r{   s
             r%    test_combine_first_timestamp_bugr    s    H(+,sCjAE)*S#J?E#U\\#%6S8I$JKL 	|X.<<S 11<<!!U\\#%6%;%;BsB  'F8S'23_MHSM((6HSM&(+r'   c            	      l   t        t        j                  t        j                  ggddg      } t        t        ddd      t        ddd      ggddg      }| j	                  |      }t        t        j                  t        ddd      t        ddd      ggg d      }t        j                  ||       y )	Nr   r   rL   r   r   r   rR   r  )r   r   r   r   r   r   r   )r  rp   rO   r{   s       r%   $test_combine_first_timestamp_bug_NaTr    s    '(3*=E
4A
q! 4	56c
E   'F
&&(4A&q!(<	=>H &(+r'   c                     t        j                  dddddt        j                  gg dgddg      } t	        dg di|       }t        j                  g dg dgddg      }t        g d|      }|j                  t	        d	|i            }t        j                  dddddddddd	t        j                  gg d
gddg      }t	        t        j                  t        j                  dddddt        j                  dt        j                  dgddt        j                  ddt        j                  t        j                  dt        j                  dt        j                  gd|      }t        j                  ||       y )Nr   rR   r   )r   r   rv   rW   r   r   names)r   r   r   r   r   r   r   )r   r   rR   r   r   dr  )r   r   rW   r   r   r   r   r   rv   r   r   r   rg   rU   rh   rT   rs   rt   )rR   r  )	r   from_arraysrm   rn   r   r	   r   r   r   )mi1rM   mi2r   r   mi_expectedr{   s          r%   &test_combine_first_with_nan_multiindexr    sQ    
 
 
sCc266	*,>?SzC 
C+,C	8B

 
 	');<S#JC 	!-A


9c1X.
/C((#sCc3S#rvvF-	
 CjK &&"&&!Q1aBFFAFsBFFCbffbffc2663PRPVPVW	
 H #x(r'   c                     t        ddgt        d            } t        t        d      t        d            }t        | |d      }t        ddgt        dd            }t        t        dd	      t        dd            }t        ||d
      }t        ddt        j                  t        j                  gg dt        j                  t        j                  ddgdg d      }|j                  |      }t        j                  ||       y )Nr   r   r   r   r   r   r   r   )r   r3   )r   r   r  r   r   r   r3   r   )r	   r   r   rm   rn   r   r   r   )a_columnb_columnrz   c_columnrN   r{   r$   s          r%   test_combine_preserve_dtypesr!     s    sCja1HeAheAh/H
(2
3CsCja4HeBl%1+6H
(2
3CsBFFBFF+&&"&&#s+	

 H   %H(H-r'   c            
         t        dg dit        j                  g dt        j                  ddggddg      	      } t        d
g dit        j                  g dt        j                  ddggddg      	      }t        dddt        j                  gddt        j                  dgdt        j                  g dt        j                  dddggddg      	      }| j                  |      }t        j                  ||       y )Nx)r   r;      r   r   rv   r   r   r   r   r  r   y)rV         )r   r   rW   r   g      "@g      $@g      &@g      (@g      *@g      ,@)r#  r&  )r   r   rv   rW   )r   r   r  rm   rn   r   r   r   )rz   rN   r{   r$   s       r%   7test_combine_first_duplicates_rows_for_nan_index_valuesr)    s    
	k$$i"&&!Q%@c
SC
 	l$$i"&&!Q%@c
SC
 tT266*bffd+	
 $$BFFAq!,-c3Z
H   %H(H-r'   c                      t        g dg dd      } t        g dg dg dd      }| j                  |      }t        g dg dg dd      }t        j                  ||       y )Nr%  )rW   r   r   r   )r         )(   2   <   )rV   "   A   r  r   )df_1df_2rO   r{   s       r%   ,test_combine_first_int64_not_cast_to_float64r4  /  sS    9956D;\MND%Fyy|LMH&(+r'   c                  ^   t        j                  ddgt        j                  t        j                  gg      } t        j                  ddgt        j                  t        j                  gg      }t	        dd dgi|       }t	        dddgi|      }|j                  |      }t        j                  g dt        j                  t        j                  t        j                  t        j                  gg      }t	        dt        j                  dddgi|      }t        j                  ||       y )Nr   r   r   rW   r   rv   )r   r   r   r   )r   r  rm   rn   r   r   r   r   )midxmidx2rz   rN   rO   expected_midxr{   s          r%   test_midx_losing_dtyper9  8  s    !!Aq6BFFBFF+;"<=D""QFRVVRVV,<#=>E
S4)$D
1C
S1a&M
/Cs#F**	78M #1a01GH&(+r'   c                      t        ddg      } t        ddg      }| j                  |      }t        g d      }t        j                  ||       y )Nr   r   rL   rR   r  r   )r  r  rO   r{   s       r%    test_combine_first_empty_columnsr;  F  sH    c3Z(DsCj)E&F1H&(+r'   c                      t        g dg dd      } t        ddgidg      }| j                  |      }t        g dg dd      }t        j                  ||       y )	Nr%  )rW   Nr   )r   r   r   r   r   r   )rU   rT   rt   r   )rz   rN   rO   r{   s       r%   (test_combine_first_preserve_column_orderr=  N  sT    
),7
8C
S1#Jqc
*Cs#Fy?@H&(+r'   ) r   numpyrm   r   pandas.core.dtypes.castr   pandas.core.dtypes.commonr   pandasr   r   r   r   r	   pandas._testing_testingr   r   r   r   r   	TimedeltaIntervalr  r  r  r!  r)  r4  r9  r;  r=  r   r'   r%   <module>rF     s      4 4   Z0 Z0z 	$1	xa34	<	%yryys'CD	i	 ,",,x"89	!1	%{r{{6'RS	,,6,):.,.2,,,,r'   