U
    >vf                     @   s   d dl m Z mZmZ d dlZd dlZd dlZd dlmZm	Z	m
Z
mZmZmZmZmZmZmZ d dlmZ d dlmZ G dd dZG dd dZdS )	    )datetime	timedeltatimezoneN)
Categorical	DataFrameDatetimeIndexNaTPeriodSeries	Timedelta	Timestamp
date_rangeisna)period_arrayc                   @   s  e Z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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"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zejd,d-d-d-d.d-d-gfd-d.d.d/d-d-d.d.d.gfd0d-id-d-d.ejejgfd-d.d1d-d-d.d.ejgfed-d-ejd.ejejgfed-d0gd2d-d-d.ejejgfed-d.d1d-d-d.d.ejgfed-d.gd3d4gd2d-ejd.d-d.gfgd5d6 Zejd,ed-d.d7d8d9gd-d.d.d8d9gfed.d8d-d8d-gd-d8d.d8d-gfeed.d8d-d8d-gd.d7d8d9d-gd:d-d8d.d8d-gfgd;d< Zd=d> Z ejd?e!d@dAgejdBe"j#ejdCdDdEgdFdG Z$dHdI Z%dJdK Z&dLdM Z'dNdO Z(dPdQ Z)ejdRdSdTdUdSgdTdSdTdTdSgdSdTgfdSdTejdSgdTdSdTdTdSgdSdTgfgdVdW Z*dUS )XTestSeriesFillNAc                 C   s`  t dddtjgdd}|jdd}|j|jd d}| }|jd |jd	< t|| t|| t	d
|i}|jdd}|j|jd d}t	d
|i}t
|| t
|| t tjdddgdd}|jdd}|j|d d}| }|d |d< t|| t|| t	d
|i}|jdd}|j|d d}t	d
|i}t
|| t
|| d S )Nr         M8[ns]dtypepadmethodvalue   Abfill)r
   r   _valuefillnavaluescopyZiloctmassert_series_equalr   Zassert_frame_equal)selfseriesfilledZfilled2expectedZdf r(   K/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/series/methods/test_fillna.pytest_fillna_nat   s4    z TestSeriesFillNA.test_fillna_natc              	   C   s0   d}t jt|d |jddd W 5 Q R X d S )Nz(Cannot specify both 'value' and 'method'matchr   ffill)r   r   )pytestraises
ValueErrorr   )r$   datetime_seriesmsgr(   r(   r)   test_fillna_value_or_methodA   s    z,TestSeriesFillNA.test_fillna_value_or_methodc              	   C   s   t dddddgtdd}t||jdd	 tj|d
< t dddddg|jd}t|jdd	| t dddddg|jd}t|jdd	| t dddddg|jd}t|jdd| d}tj	t
|d |  W 5 Q R X d S )N              ?       @      @      @   indexr-   r   r   backfillg      @r   z'Must specify a fill 'value' or 'method'r+   )r
   r"   makeDateIndexr#   r   npNaNr;   r.   r/   r0   )r$   tsexpr2   r(   r(   r)   test_fillnaF   s    
zTestSeriesFillNA.test_fillnac                 C   s$  t tjg}t dg}||}t dg}t|| |i }t|| |t dtd}t|| ||}t|| |ddi}t|| |ddi}t|t tjg |ddd}t|| |t ddd}t|| |t dddddgd	}t|| d S )
Nr   r5   r(   r   r   )r   r      r9   r:   )r
   r>   nanr   r"   r#   objectr$   s1s2resultr'   r(   r(   r)   test_fillna_nonscalarZ   s*    




z&TestSeriesFillNA.test_fillna_nonscalarc                 C   sX   t dddgtd}t dtjdgtd}||}t dddgtd}t|| d S )Nr   r   r   abcZbacr6   )r
   listr>   rD   r   r"   r#   rF   r(   r(   r)   test_fillna_alignsr   s
    
z#TestSeriesFillNA.test_fillna_alignsc                 C   s   t tjdddgd}|jddd}t dtjtjgdddgd}t|| |jddd}t ddtjgdddgd}t|| d S )Nr   r   r   r:   i  )limitr
   r>   rD   r   r"   r#   r$   serrI   r'   r(   r(   r)   test_fillna_limity   s    z"TestSeriesFillNA.test_fillna_limitc                 C   s^   dddg}|D ]J}t ddtjtjdgdd}||}t dd||dgd	d}t|| qd S )
N0z1.5z-0.3r   r   rC   float64r   rE   rO   )r$   valsvalrQ   rI   r'   r(   r(   r)   test_fillna_dont_cast_strings   s    

z.TestSeriesFillNA.test_fillna_dont_cast_stringsc                 C   s   t tdtg}|tddd}t tdtdddgdd}t|| |ddgtddd}t|| |ddgtddd}t|| |d	}t tdd	g}t|| | }d	|d
< t|| d S )N20130101
US/Easterntz
2013-01-01rE   r   TFZfoor   )r
   r   r   r   r"   r#   wherer!   )r$   rQ   rI   r'   ser2r(   r(   r)   test_fillna_consistency   s"    
z(TestSeriesFillNA.test_fillna_consistencyc                 C   sp   t dtjg}|jddd}t ddg}t|| t dtjg}|jddidd}t ddg}t|| d S )Nr5   r   inferZdowncastr   rO   rP   r(   r(   r)   test_fillna_downcast   s    z%TestSeriesFillNA.test_fillna_downcastc                 C   sN  t dt}t j|d< t|}|jddd}tt dt jd}t	|| |j
dd}tddddd	gt jd}t	|| |jdd}tdddd	d	gt jd}t	|| d
|d< tddd
dd	gt jd}|jddd}t	|| |j
dd}tddd
d
d	gt jd}t	|| |jdd}tddd
d	d	gt jd}t	|| d S )Nr9   r   r`   ra   r   r   r   r   rC   g      @)r>   arangeastyperE   rD   r
   r   Zint64r"   r#   r-   r   rT   )r$   arrrQ   resr'   r(   r(   r)   -test_fillna_downcast_infer_objects_to_numeric   s,    
z>TestSeriesFillNA.test_fillna_downcast_infer_objects_to_numericc                 C   s\  t tdtdtdtdg}| }||}|tdd}t tdtdtdtdddg}||}t|| |d}|t	d}t|| |tdd}t tddtdtdtdddg}||}t|| |tddd}t tdddtdtdtdddg}||}t|| |t
d	}t tddtdtdtdddg}||}t|| |t}t ttdtdtdddgd
d}||}t|| t
j|d< ||}| }|tdd}t
j|d< ||}t|| t
j|d< ||}| }|tdd}tddd|d< ||}t|| d S )NrX   2013010220130103 9:01:01r   )secondsr   i~  )daysrj   i ʚ;zm8[ns]r   r   )r
   r   Zdiffr   r   r   r"   assert_equalrd   rE   r>   Ztimedelta64r   rD   r-   r   )r$   frame_or_seriesrQ   tdobjrI   r'   rf   r(   r(   r)   test_timedelta_fillna   s    







	


z&TestSeriesFillNA.test_timedelta_fillnac                 C   s   t tdtdtdtdg}tj|d< | }t tdtdtdtdg}t|| | }t tdtdtdtdg}t|| d S )NrX   rh   ri   r   )r
   r   r>   rD   r-   r"   r#   r   rP   r(   r(   r)   test_datetime64_fillnaB  s4    
z'TestSeriesFillNA.test_datetime64_fillnac                 C   s@   t ttdgdd}t dddgdd}|jdd}t|| d S )Nz2013-08-05 15:30:00.000001r   r   r<   r   )r
   r   r   r"   r#   )r$   rQ   r'   rI   r(   r(   r)   test_datetime64_fillna_backfille  s    z0TestSeriesFillNA.test_datetime64_fillna_backfillr[   rY   z
Asia/Tokyoc                 C   s  t tdttdtg}t ddddg}|td}t tdtdtdtdg}t|| tt|| |td|d}t tdtd|dtdtd|dg}t|| tt|| |d}t tddtddgtd}t|| tt|| |td|dtd	d
}t tdtd|dtdtd	g}t|| tt|| |tdtd	d
}t tdtdtdtd	g}t|| tt|| tdtdtg|d}t |}|j	d| dkst
tt|| |td}t td|dtdtd|dtdg}t|| tt|| |td|d}tddddg|d}t |}t|| tt|| |td|d }tddddg|d}t |}t|| tt|| |d}t td|ddtd|ddgtd}t|| tt|| |td|dtd	d
}t td|dtd|dtd|dtd	g}t|| tt|| |td|dtd	|dd
}t td|dtd|dtd|dtd	|dg}t|| tt|| |td}t td|dtdtd|dtdg}t|| tt|| |tddd}t td|dtddd|td|dtddd|g}t|| tt|| d S )Nz2011-01-01 10:00z2011-01-03 10:00FTz2011-01-02 10:00rZ   ZAAAr   z2011-01-04 10:00r   r   zdatetime64[ns, ]rX   r\   
US/Pacific)r
   r   r   r   r"   r#   r   rE   r   r   AssertionErrorZto_pydatetime
tz_convert)r$   r[   rQ   Znull_locrI   r'   idxr(   r(   r)   test_datetime64_tz_fillnau  sD   


	



		


	













z*TestSeriesFillNA.test_datetime64_tz_fillnac                 C   st   t tdtg}t tdtdg}t|jdd| t ttdg}t tdtdg}t|jdd| d S )Nz2012-11-11 00:00:00+01:00r   r   r   )r
   r   r   r"   r#   r   )r$   rQ   rA   r(   r(   r)   test_fillna_dt64tz_with_method?  s    z/TestSeriesFillNA.test_fillna_dt64tz_with_methodc                 C   sL   t tjtdgddgd}|td}t tdddgd}t|| d S )Nz1 daysr   Br:   r   )r
   r>   rD   r   r   r   r"   r#   rP   r(   r(   r)   test_fillna_pytimedeltaT  s    z(TestSeriesFillNA.test_fillna_pytimedeltac                 C   sh   t tdddtdddg}|tddd}t tdddtdddg}t|| |jdksdtd S )Nz2011-01Mfreqr   z2012-01z	Period[M])r
   r	   r   r"   r#   r   rv   )r$   rQ   rf   rA   r(   r(   r)   test_fillna_period\  s
    z#TestSeriesFillNA.test_fillna_periodc                 C   s   t tdtdtdtdg}tj|d< ||}|td}t tdtdtdtdg}||}t|| |t}|}t|| d S )NrX   rh   ri   r   Z20130104)r
   r   r>   rD   r   r"   rl   r   )r$   rm   rQ   ro   rI   r'   r(   r(   r)   test_fillna_dt64_timestampe  s,    

z+TestSeriesFillNA.test_fillna_dt64_timestampc                 C   sV   t tdttdg}tdd}||}t tdtdtdg}t|| d S )Nz
2010-01-01
2000-01-01z
1975-04-05ms)r
   r   r   r>   Z
datetime64r   r"   r#   )r$   rQ   rV   rI   r'   r(   r(   r)   test_fillna_dt64_non_nao  s    
z)TestSeriesFillNA.test_fillna_dt64_non_naoc                 C   sb   t tjdtjdtjgdddddg}| }|jdd	d
}|d ksFt|jdd}t|| d S )Nr5   r7   zabcdr   T)r   inplacer   )r
   r>   rD   r!   r   rv   r"   r#   )r$   xyreturn_valuer'   r(   r(   r)   test_fillna_numeric_inplace  s    $z,TestSeriesFillNA.test_fillna_numeric_inplacezfill_value, expected_outputr   r   )r   r   rC   r   rs   r:   r   rC   c                 C   sV   dt jdt jt jg}tt|ddgd}tt|ddgd}||}t|| d S )Nr   r   
categoriesr>   rD   r
   r   r   r"   r#   r$   Z
fill_valueZexpected_outputdatarQ   rA   rI   r(   r(   r)   test_fillna_categorical  s
    
z(TestSeriesFillNA.test_fillna_categoricalr   r   er   c                 C   sb   dt jdt jt jg}tt|dddddgd}tt|dddddgd}||}t|| d S )Nr   r   r   r   r   r   r   r   r(   r(   r)   +test_fillna_categorical_with_new_categories  s
    
z<TestSeriesFillNA.test_fillna_categorical_with_new_categoriesc              	   C   s:  dt jdt jt jg}tt|ddgd}|j}d}tjt|d |d W 5 Q R X d}tjt	|d |td W 5 Q R X tjt|d |ddd W 5 Q R X d	}tjt|d |ddg W 5 Q R X d
}tjt|d |d W 5 Q R X d}tjt|d |t
dgdgd W 5 Q R X d S )Nr   r   r   z3Cannot setitem on a Categorical with a new categoryr+   r   z!Length of 'value' does not match.rs   C"value" parameter must be a scalar or dict, but you passed a "list"D"value" parameter must be a scalar or dict, but you passed a "tuple")r   r   zP"value" parameter must be a scalar, dict or Series, but you passed a "DataFrame")r>   rD   r
   r   _valuesr.   r/   	TypeErrorr   r0   r   )r$   r   rQ   catr2   Zmsg2r(   r(   r)   test_fillna_categorical_raises  s*    z/TestSeriesFillNA.test_fillna_categorical_raisesr   float32rT   	fill_typescalarTFc           
      C   s   t tjdg|d}t ddg|d}|r2|jd}||}t ddg|d}t|| t tjdg|d}| 	 }|||< t|| t tjdg|d}|j
||dd t|| t tjdg|d}|| |}	t|	| d S )N333333?r   r   r6   T)r   )r
   r>   rD   r   typer   r"   r#   r   Zto_numpymaskr]   )
r$   r   r   r   rQ   Zfill_valuesrI   r'   r   rf   r(   r(   r)   test_fillna_float_casting  s"    
z*TestSeriesFillNA.test_fillna_float_castingc                 C   sD   t tjdgtjd}|ddi}t ddgtjd}t|| d S )Nr   r   r   r   r5   )r
   r>   rD   r   r   r"   r#   rP   r(   r(   r)    test_fillna_f32_upcast_with_dict  s    z1TestSeriesFillNA.test_fillna_f32_upcast_with_dictc              
   C   sH   z|j dd W n2 tk
rB } zdt|ks2tW 5 d }~X Y nX d S )NZffilr   )r   r0   strrv   )r$   r1   instr(   r(   r)   test_fillna_invalid_method  s    z+TestSeriesFillNA.test_fillna_invalid_methodc              	   C   sl   t tjddd}d}tjt|d |ddg W 5 Q R X d}tjt|d |d	 W 5 Q R X d S )
Nd   2   r   r+   r   r   r   )r   r   )r
   r>   randomrandintr.   r/   r   r   )r$   rQ   r2   r(   r(   r)   test_fillna_listlike_invalid  s    z-TestSeriesFillNA.test_fillna_listlike_invalidc                 C   sb   t dddd g}ddddg}dD ]8}d	D ].}tjt|d
 |jd||d W 5 Q R X q,q$d S )Nr   r   r   |z*Cannot specify both 'value' and 'method'\.zLimit must be greater than 0zLimit must be an integer)r   r5   r6   )r<   r   r   r-   Nr+   )rN   r   )r
   joinr.   r/   r0   r   )r$   rQ   r2   rN   r   r(   r(   r)   $test_fillna_method_and_limit_invalid  s    z5TestSeriesFillNA.test_fillna_method_and_limit_invalidc                 C   s   t tdddd}| }t|d< |tdddtjd}t	|| t
d	d
d}t |jd}|jjdksrt||}t |d ||jj|d g|jd}t	|| d S )NZ2020r   UTC)periodsr[   r   i  r   tzinfor   ru   rZ   zdateutil/US/Pacificr}   r   r   )r
   r   r!   r   r   r   r   utcr"   r#   r   r   rw   r   kindrv   r[   )r$   rQ   r'   rI   r@   r^   r(   r(   r)   +test_fillna_datetime64_with_timezone_tzinfo*  s    
z<TestSeriesFillNA.test_fillna_datetime64_with_timezone_tzinfoz7input, input_fillna, expected_data, expected_categoriesr   r{   Nc           
      C   sF   t |}t||}||}||}t ||d}	t||	 d S )Nr   )r   r
   r   r"   Zassert_categorical_equal)
r$   inputZinput_fillnaZexpected_dataZexpected_categoriesr   rQ   r&   rI   r'   r(   r(   r)   (test_fillna_categorical_accept_same_type>  s    

z9TestSeriesFillNA.test_fillna_categorical_accept_same_type)+__name__
__module____qualname__r*   r3   rB   rJ   rM   rR   rW   r_   rb   rg   rp   rq   rr   r.   markparametrizery   rz   r|   r   r   r   r   r>   rD   r
   r   r   r   r   floatr"   ZALL_REAL_NUMPY_DTYPESr   r   r   r   r   r   r   r(   r(   r(   r)   r      s   %
$e#
 J	"
	 


 r   c                   @   sv   e Z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dd Zejdddgdd ZdS )TestFillnaPadc                 C   s   t tjdtjdtjgdddddg}|jdd	}t tjddddg|j}t|| |jd
d	}t ddddtjg|j}t|| d S )Nr5   r7   r   r   r   r   r   r-   r   r   )r
   r>   rD   r   r;   r"   r#   )r$   rQ   r&   r'   r(   r(   r)   test_fillna_bugR  s    $zTestFillnaPad.test_fillna_bugc                 C   sB   t dddddgtdd}tj|d< t| |jd	d
 d S )Nr4   r5   r6   r7   r8   r9   r:   r   r-   r   )r
   r"   r=   r>   r?   r#   r-   r   r$   r@   r(   r(   r)   
test_ffill\  s    
zTestFillnaPad.test_ffillc                 C   s2   t tdddtjddg}| }t|| d S )Ni  r   r   )r
   r   pytzr   r-   r"   r#   )r$   r%   rI   r(   r(   r)   ,test_ffill_mixed_dtypes_without_missing_dataa  s    z:TestFillnaPad.test_ffill_mixed_dtypes_without_missing_datac                 C   sB   t dddddgtdd}tj|d< t| |jd	d
 d S )Nr4   r5   r6   r7   r8   r9   r:   r   r   r   )r
   r"   r=   r>   r?   r#   r   r   r   r(   r(   r)   
test_bfillg  s    
zTestFillnaPad.test_bfillc                 C   s   t tjdtjdtjgdddddgtd}|jd	d
d}|d ksBtt tjddddgdddddgtd}t|dd  |dd   t|d stt|d d S )Nr5   r7   r   r   r   r   r   r   r   Tr   r   r   r   )	r
   r>   rD   r   r   rv   r"   r#   isnan)r$   r   r   r'   r(   r(   r)   test_pad_nanl  s        zTestFillnaPad.test_pad_nanc                 C   s   t d}tt jd|d}|d d |}|jddd}|d d |jdd}t j|dd < t	|| |d	d  |}|jd
dd}|d	d  |jdd}t j|d d< t	|| d S )N
   r:   r   r   r9   r   rN   r   r   r<   r   
r>   rc   r
   r   ZrandnZreindexr   rD   r"   r#   r$   r;   srI   r'   r(   r(   r)   test_series_fillna_limitz  s    
z&TestFillnaPad.test_series_fillna_limitc                 C   s   t d}tt jd|d}|d d j|ddd}|d d |jdd}t j|dd < t	|| |d	d  j|d
dd}|d	d  |jd
d}t j|d d< t	|| d S )Nr   r:   r   r   r9   r   r   r   r   r<   r   r   r   r(   r(   r)   test_series_pad_backfill_limit  s    
z,TestFillnaPad.test_series_pad_backfill_limitc                 C   sH   t tjddd}|jddd}|d ks.tt|jddd| d S )Nr   r   r   r-   Tr   F)r
   r>   r   r   r   rv   r"   r#   )r$   rQ   r   r(   r(   r)   test_fillna_int  s    zTestFillnaPad.test_fillna_intc                 C   s   t tttdddddddtjdg}|jdd	}t tdddddddtjdtdddddddtjdtdddddddtjdg}t|| d S )
Ni              i r   r   r   )r
   r   r   r   r   r   r"   r#   )r$   r   r&   r'   r(   r(   r)   $test_datetime64tz_fillna_round_issue  s    z2TestFillnaPad.test_datetime64tz_fillna_round_issuec                 C   s~   t tjtdd ddd}t|d}t|d< ttdtdtdtd	td
gdd}t|}|jdd}t	
|| d S )Nr   )Znanosecondsr9   ns)r   r   r   z2262-04-11 23:47:16.854775797z2262-04-11 23:47:16.854775798z2262-04-11 23:47:16.854775800z2262-04-11 23:47:16.854775801r~   r   r   )r   r   maxr   r
   Z	to_periodr   r   r   r"   r#   )r$   ZdtirQ   re   r'   r&   r(   r(   r)   test_fillna_parr  s&      
zTestFillnaPad.test_fillna_parrfuncr   r<   c              	   C   s4   t dddg}tt t||  W 5 Q R X d S )Nr   r   r   )r
   r"   Zassert_produces_warningFutureWarninggetattr)r$   r   rQ   r(   r(   r)   test_pad_backfill_deprecated  s    z*TestFillnaPad.test_pad_backfill_deprecatedN)r   r   r   r   r   r   r   r   r   r   r   r   r   r.   r   r   r   r(   r(   r(   r)   r   Q  s   
r   )r   r   r   Znumpyr>   r.   r   Zpandasr   r   r   r   r	   r
   r   r   r   r   Zpandas._testingZ_testingr"   Zpandas.core.arraysr   r   r   r(   r(   r(   r)   <module>   s   0      <