o
    ŀgM                     @   s  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 dZejde d	d
d
e d	d
dfe	dde	ddfe	de	dfe	jd d
de	jddddfgdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ ZdS )%    )datetimeN)find_common_type)is_dtype_equal)	DataFrameIndex
MultiIndexSeriesc                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	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d Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Ze	j
d&dd'gd(d) Zd*d+ Zd,S )-TestDataFrameCombineFirstc                 C   s   t ddgtdd}t tdtdd}t||d}t ddgtddd}t tdtddd}t||d}ttdg d	dg d
d}||}t|| d S )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combined r"   a/var/www/html/myenv/lib/python3.10/site-packages/pandas/tests/frame/methods/test_combine_first.pytest_combine_first_mixed   s   
z2TestDataFrameCombineFirst.test_combine_first_mixedc                 C   s  |d d |dd  }}| |}||j}t|| t|j|j t|d |d  | }d|d< |d= | }d|d< |d= | |}|d dk	 sUJ t|d |d  t|d |d  t|d |d  |d d  |}}d|d< | |}|d d d dk	 sJ d|j
d d|jdf< | |}|d d d dk	 sJ |d d }	|dd  }
|	 |
}t|d |	j|	d  t|d |
j|
d  |rtnd }tj|d	d
 | t }W d    n	1 sw   Y  t|| t  |}t||  | tddgd}d|jv s,J tddgitdddgd}tdgd}| |}d|v sLJ d S )Nr   r   r   Cr   r   D
   zempty entries)matchfazboor   r
   i  r   columns)r   reindexr   r   r   assert_index_equalr,   assert_series_equalcopyallilocget_locFutureWarningassert_produces_warningr   
sort_indexr   )r   float_frameusing_infer_stringheadtailr!   reordered_framefcopyfcopy2r   r   warningcombdfdf2resultr"   r"   r#   test_combine_first!   sT   





z,TestDataFrameCombineFirst.test_combine_firstc                 C   s   t g d}tg d|d}tg d|d}tg d|d}t|||d}t g d}tg d|d}tg d|d}tg d|d}t|||d}||}t|jdksZJ d S )	N)r
   r   ce)      @g      "      @g      Y@r   )      r   a   )col0col2col3)r
   r   rD   r   )col1rL   col5r   )r   r   r   r   lenr,   )r   idxser1ser2ser3frame1frame2r!   r"   r"   r#   test_combine_first_mixed_bug`   s   
z6TestDataFrameCombineFirst.test_combine_first_mixed_bugc                 C   s|   t g dg dgg dd}t ddggdgddgd	}||}t|| tj|jd
< ||}d|jd
< t|| d S )N)      ?       @FT)rG   rF   TF)r   r   bool1bool2r+   -   r   r   r   )r   r,   )r   r   )r   r   r   r   npnanloc)r   r@   otherrB   r"   r"   r#   $test_combine_first_same_as_in_updater   s   


z>TestDataFrameCombineFirst.test_combine_first_same_as_in_updatec                 C   s   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}||}t g d
tjdddddgd}t|| d S )NrX         @rF   rY         @r   rG         @g       @)r   r      r   re   rd   r   re   rI   r      )r   r]   r^   r   r   r   )r   df1rA   rB   expectedr"   r"   r#   test_combine_first_doc_example   s   $
 z8TestDataFrameCombineFirst.test_combine_first_doc_examplec                 C   s   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d
}tg dd	td}||d	 }t|| ||d	 }t|| d S )Nrb   Tgffffffrd   FgLE)g      g?Fr   r   r   )TTF)namedtype)r   r]   r^   r   boolr   r   r/   )r   rg   rA   rh   	result_12	result_21r"   r"   r#   -test_combine_first_return_obj_type_with_bools   s     zGTestDataFrameCombineFirst.test_combine_first_return_obj_type_with_boolszdata1, data2, data_expectedi  r   r   re   c                 C   s@   t d|it d|i}}||}t d|i}t|| d S )Nr
   r   r   r   r   )r   data1data2data_expectedrg   rA   rB   rh   r"   r"   r#   -test_combine_first_convert_datatime_correctly   s   
zGTestDataFrameCombineFirst.test_combine_first_convert_datatime_correctlyc                 C   s   t tddggddgd}t dgdggdgd}|d jdks"J |d jd	ks+J ||}t tdtjgddgd
ddgd}t|| |d jdksRJ |d jd	ks[J |jd d |}t t	j
t	j
gddgd
ddgd}t|| |d jdksJ |d jd	ksJ d S )N
2011-01-01r   r
   r   r+   rI   r   zdatetime64[ns]int64r
   r   r   float64)r   pd	Timestamprk   r   NaTr   r   r2   r]   r^   )r   dfadfbresr    r"   r"   r#   test_combine_first_align_nan   s"   
"z6TestDataFrameCombineFirst.test_combine_first_align_nanc                 C   s  t dd|}tddg|t jdddd}t d	d|}tdd
g|t jdddd}|dg |}tt jdddt jdddgt jdddt jgdddgt jddddd| dd}|d j	d| dksrJ |d j	d| dksJ t
|| d S )Nz20100101 01:01UTCUTCdatetimeabc20140627r   )periods)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   r&   )r   freqdatetime64[, UTC])r,   r   rk   )ry   to_datetimetz_localizeas_unitr   
date_ranger   rz   r{   rk   r   r   )r   unitrq   rg   rr   rA   r~   r    r"   r"   r#   test_combine_first_timezone   s4   
z5TestDataFrameCombineFirst.test_combine_first_timezonec                 C   sp   t jddd|d}td|i}t jddd|d}td|i}||}t|| |d jd| dks6J d S )	N
2015-01-01
2015-01-05r   r   r   DATE
2015-01-03r   r   ry   r   r   r   r   r   rk   )r   r   dts1rg   dts2rA   r~   r"   r"   r#   test_combine_first_timezone2   s   
z6TestDataFrameCombineFirst.test_combine_first_timezone2c           	      C   s   t jg ddd|}td|ig dd}t jg ddd|}td|ig dd}||}t jg d	dd|}td|ig d
d}t|| d S )N)ru   r{   
2011-01-03
2011-01-04
US/Easternr   r   r   re   r   r   r   
2012-01-01
2012-01-02z
2012-01-03r   rI   r   )ru   r   r{   r   r   r   r   r   re   rI   r   r   )ry   DatetimeIndexr   r   r   r   r   	r   r   r   rg   r   rA   r~   exp_dtsr    r"   r"   r#   test_combine_first_timezone3
  s*   

z6TestDataFrameCombineFirst.test_combine_first_timezone3c                 C   s`   t jdddd}td|i}t dd}td|i}||}t|| |d jdks.J d S )Nr   r   r   r   r   r   zdatetime64[ns, US/Eastern]r   )r   r   rg   r   rA   r~   r"   r"   r#   test_combine_first_timezone4$  s   
z6TestDataFrameCombineFirst.test_combine_first_timezone4c           	      C   s   t jddd|d}td|i}t jdd|d}td|i}||}t jdddt jdddt dg}td|i}t|| |d jd	ksIJ d S )
Nr   z
2015-01-02r   r   r   r   )r   r   object)ry   r   r   r   rz   r   r   rk   r   r"   r"   r#   test_combine_first_timezone50  s   
z6TestDataFrameCombineFirst.test_combine_first_timezone5c                 C   s   t g d}td|ig dd}t g d}td|ig dd}||}t g d}td|ig dd}t|| |d jd	ksGJ d S )
N)1 dayr{   3 day4dayTDr   r   )10 day11 dayz12 dayr   )r   r   r{   r   r   z4 dayr   ztimedelta64[ns])ry   TimedeltaIndexr   r   r   r   rk   )r   rq   rg   rr   rA   r~   r   r    r"   r"   r#   test_combine_first_timedelta@  s   
z6TestDataFrameCombineFirst.test_combine_first_timedeltac           	   	   C   sF  t jg ddd}td|ig dd}t jg ddd}td|ig dd}||}t jg d	dd}td|ig d
d}t|| |d j|jksNJ t jg ddd}td|ig dd}||}t jdddt jdddt jt jdddt jdddt jdddg}td|ig d
d}t|| |d jdksJ d S )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   r&   r   r   r   r   r   r   )	ry   PeriodIndexr   r   r   r   rk   Periodr{   )	r   rq   rg   rr   rA   r~   r   r    r   r"   r"   r#   test_combine_first_periodN  s0   

z3TestDataFrameCombineFirst.test_combine_first_periodc                 C   sx   t dg didd}t dddgidd}||}t dg di}t|| ||}t dg di}t|| d S )Nr
   )r   r   re   r   rv   rk   r   rI   )r   rI   re   r   rp   )r   rg   rA   rm   expected_12rn   expected_21r"   r"   r#   test_combine_first_intm  s   

z0TestDataFrameCombineFirst.test_combine_first_intvalrX   c                 C   sH   t d|gi}t ddgi}||}t dg|gd}t|| d S )NisNumisBoolT)r   r   rp   )r   r   rg   rA   r~   r    r"   r"   r#   (test_combine_first_with_asymmetric_other{  s
   
zBTestDataFrameCombineFirst.test_combine_first_with_asymmetric_otherc                 C   s   t ddgtjgd d|d}t dgtjgd|d}|jddgdd	 |jddgdd	 ||}t ddgtjgd d|dddg}t|| d S )
N96285r   rw   r   r
   r   T)inplace)r   ry   NA	set_indexr   r   r   )r   nullable_string_dtyper@   rA   rB   rh   r"   r"   r#   'test_combine_first_string_dtype_only_na  s   

zATestDataFrameCombineFirst.test_combine_first_string_dtype_only_naN)__name__
__module____qualname__r$   rC   rW   ra   ri   ro   pytestmarkparametrizer   ry   r{   rt   r   r   r   r   r   r   r   r   r   r   r   r"   r"   r"   r#   r	      sP    ?        

 

r	   zscalar1, scalar2  r   r   z
2020-01-01r&   z
2020-01-02z89 daysz60 min)leftrightre   r   )r   r   closedc           
      C   s   |}t ||ggddgd}t | |ggddgd}t|jd |jd g}t|ds3|jd |jd kr6| }n|}||}t |||ggg dd}	|	d ||	d< t||	 d S )Nr
   r   r+   rD   r   r
   r   rD   )r   r   dtypesr   r   astyper   r   )
scalar1scalar2nulls_fixturena_valueframer`   common_dtyper   rB   rh   r"   r"   r#    test_combine_first_timestamp_bug  s   
r   c                  C   s   t tjtjggddgd} t tdddtdddggddgd}| |}t tjtdddtdddggg dd}t|| d S )	Nr
   r   r+   r   r   r   rD   r   )r   ry   r{   r   r   r   r   )r   r`   rB   rh   r"   r"   r#   $test_combine_first_timestamp_bug_NaT  s   
"r   c                  C   s  t jdddddtjgg dgddgd} tdg di| d}t jg dg dgddgd}tg d|d}|td	|i}t jdddddddddd	tjgg d
gddgd}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|d}t|| d S )Nr   rD   r
   )r   r   re   rI   r   r   names)r   r   r   r   r   r   r   )r
   r   rD   r
   r   dr   )r   r   rI   r   r   r   r   r   re   r   r   r   rX   rG   rY   rF   rb   rc   )rD   r   )	r   from_arraysr]   r^   r   r   r   r   r   )mi1r@   mi2sr~   mi_expectedrh   r"   r"   r#   &test_combine_first_with_nan_multiindex  s,    "r   c                  C   s   t ddgtdd} t tdtdd}t| |d}t ddgtddd}t tdd	tddd}t||d
}tddtjtjgg dtjtjddgdg dd}||}t|| d S )Nr
   r   r   r   r   r   r   r   )r   r%   )r   r   r   r   r   r   r%   r   )r   r   r   r]   r^   r   r   r   )a_columnb_columnrg   c_columnrA   rh   r!   r"   r"   r#   test_combine_preserve_dtypes  s   
r   c                  C   s   t dg ditjg dtjddggddgdd	} t d
g ditjg dtjddggddgdd	}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dd	}| |}t|| d S )Nx)	   r'      r   r   re   r   r   r
   r   r   r   y)rH         )r   r   rI   r   g      "@g      $@g      &@g      (@g      *@g      ,@)r   r   )r   r   re   rI   )r   r   r   r]   r^   r   r   r   )rg   rA   rh   r!   r"   r"   r#   7test_combine_first_duplicates_rows_for_nan_index_values  s$   
 
 
	r   c                  C   sh   t g dg dd} t g dg dg dd}| |}t g dg dg dd}t|| d S )Nr   )rI   r   r   r   )r         )(   2   <   )rH   "   A   r   rp   )df_1df_2rB   rh   r"   r"   r#   ,test_combine_first_int64_not_cast_to_float64  s
   
r  c                  C   s   t ddgtjtjgg} t ddgtjtjgg}tdd dgi| d}tdddgi|d}||}t g dtjtjtjtjgg}tdtjdddgi|d}t|| d S )Nr   r   r
   rI   r   re   )r   r   r   r   )r   r   r]   r^   r   r   r   r   )midxmidx2rg   rA   rB   expected_midxrh   r"   r"   r#   test_midx_losing_dtype  s   
r  c                  C   sD   t ddgd} t ddgd}| |}t g dd}t|| d S )Nr
   r   r+   rD   r   rp   )r   r   rB   rh   r"   r"   r#    test_combine_first_empty_columns'  s
   
r  )r   numpyr]   r   pandas.core.dtypes.castr   pandas.core.dtypes.commonr   pandasry   r   r   r   r   pandas._testing_testingr   r	   r   r   r   	TimedeltaIntervalr   r   r   r   r   r  r  r  r"   r"   r"   r#   <module>   s8       
		