U
    f/e0                     @   sT   d dl Zd dlZd dlm  mZ d dlmZm	Z	m
Z
 d dlmZ G dd dZdS )    N)	DataFrameSeries
date_rangec                
   @   s:  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	dd Z
ej	dd Zdd Zejdejddddejddddejddddgdd Zdd Zejdd ejd!ej	d"gd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zejdd1d2gd3d4 Zejejd5d6d7d8gd9d: Zd;d< Zd=S )>TestDataFrameInterpolatec                 C   s   t ddtjdgdddtjgddddgtdd}t d	d
ddgd	dddgddddgtdd}| }t|| |d }|d}d|jd< d|jd< t|| d S )N         	         abcdABCD      ?       @      @      @      "@r   )r
   r   )r   r   )	r   npnanlistinterpolatetmassert_frame_equal	set_indexlocselfdfexpectedresult r$   O/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/frame/methods/test_interpolate.pytest_interp_basic   s*    






z*TestDataFrameInterpolate.test_interp_basicc                 C   s.   t  }| }||k	st|}t|| d S )N)r   r   AssertionErrorr   r   r    r!   r#   r"   r$   r$   r%   test_interp_empty)   s
    z*TestDataFrameInterpolate.test_interp_emptyc              	   C   s`   t ddtjdgdddtjgddddgtdd}d	}tjt|d
 |jdd W 5 Q R X d S )Nr   r   r   r	   r
   r   r   r   a  method must be one of \['linear', 'time', 'index', 'values', 'nearest', 'zero', 'slinear', 'quadratic', 'cubic', 'barycentric', 'krogh', 'spline', 'polynomial', 'from_derivatives', 'piecewise_polynomial', 'pchip', 'akima', 'cubicspline'\]. Got 'not_a_method' instead.matchZnot_a_methodmethod)r   r   r   r   pytestraises
ValueErrorr   r    r!   msgr$   r$   r%   test_interp_bad_method1   s    
	z/TestDataFrameInterpolate.test_interp_bad_methodc                 C   s   t ddtjdgdddtjgdddd	gtd
d}|d  }tddddgdd}t|| |d jdd}tddddgdd}t|| d S )Nr   r   r   r   r   r	   r   r
   r   r   r   r   r   )nameinferdowncast)r   r   r   r   r   r   r   Zassert_series_equalr(   r$   r$   r%   test_interp_comboD   s    
	z*TestDataFrameInterpolate.test_interp_comboc              	   C   sZ   t ddtjdgtjdddgd}|d}d}tjt|d |jd	d
 W 5 Q R X d S )Nr   r   r   r
   r   r   r   zkInterpolation with NaNs in the index has not been implemented. Try filling those NaNs before interpolating.r*   valuesr,   )r   r   r   r   r.   r/   NotImplementedErrorr   r1   r$   r$   r%   test_interp_nan_idxV   s    "
z,TestDataFrameInterpolate.test_interp_nan_idxc              	   C   sn  t ddtjddtjdgddddddd	gd
}|d}| }|jddd}d|jjd< d|jjd< t	|| |jdd}d|jjd< d|jjd< t	|| |jdd}d|jjd< d|jjd< tj	||dd |jdd}d|jjd< d|jjd< t	|| |jdd}d|jjd< d|jjd< t	|| |jdd}d|jjd< d|jjd< tj	||dd d S )Nr   r   r   r      r
            r   r   r   
polynomialr-   ordergUUU@gu:@Zcubicr,   gv:@gb+hZ@ZnearestF)Zcheck_dtypeZ	quadraticg^r@g!g@ZslineargX ;@Zzeror   )
r   r   r   r   copyr   r   r   r   r   r   r$   r$   r%   test_interp_various`   s:    (
z,TestDataFrameInterpolate.test_interp_variousc              	   C   s   t ddtjddtjdgddddddd	gd
}|jdd}| }d|jd< d|jd< t|| |jddd}t||tj	 |jdd}| }|d |d< t|| |jdd}d|jd< d|jd< t|| d S )Nr   r   r   r   r=   r
   r>   r?   r@   rA   Zbarycentricr,   )r   r      )r   r   r5   )r-   r7   Zkroghr   Zpchip      @)
r   r   r   r   rE   r   r   r   astypeint64)r    r!   r#   r"   Z	expectedkr$   r$   r%   test_interp_alt_scipy   s$    (



z.TestDataFrameInterpolate.test_interp_alt_scipyc              	   C   s   t ddtjdgdddtjgtjdddgdtjddgddddgd}|jdd	}| }d|jd
< d|jd< d|jd< |d tj|d< t	|| |jddd}t	|| |jdd	}| }t	|| d S )Nr   r   r   r
   r   rG   r=   )r   r   r   r
   r   axis)r
   r   )r   r   )r   r
   r:   rM   r-   r   )
r   r   r   r   rE   r   rI   float64r   r   r(   r$   r$   r%   test_interp_rowwise   s(    
	


z,TestDataFrameInterpolate.test_interp_rowwisezaxis_name, axis_numberZrowsr   Zrows_0)idindexZindex_0columnsr   Z	columns_1c                 C   s\   dt jdgdt jdgdddgd}t|t jd	}|j|d
d}|j|d
d}t|| d S )Nr   rG   r   r=   r   r   r>   )r   r   r   ZdtypelinearrN   )r   r   r   rO   r   r   r   )r    	axis_nameaxis_numberdatar!   r#   r"   r$   r$   r%   test_interp_axis_names   s
    
"z/TestDataFrameInterpolate.test_interp_axis_namesc                 C   sH   t dddtjddtjtjdg	ddd	dd	dddd
g	d}|jdd d S )Nr         ?r   r   r>   @   r   r   r
   )r   r   rL   )r   r   r   r   )r    r!   r$   r$   r%   test_rowwise_alt   s    z)TestDataFrameInterpolate.test_rowwise_altcheck_scipyFT)Zmarksc                 C   sv   t tjtjdddgtjddtjdgd}| }| }d|d	 jd
< t|| |rr|jddd}t|| d S )NrZ   g      ?r   g      r9   g      r   r
   rB   r   rC   )r   r   r   r   rE   r   r   r   )r    r^   r!   r#   r"   r$   r$   r%   test_interp_leading_nans   s    $z1TestDataFrameInterpolate.test_interp_leading_nansc              	   C   sx   t ddtjdgddddgtjddd	gtjtjd
d
gddddgd}d}tjt|d |dj|d W 5 Q R X d S )Nr   r   r   abcdr   r=   r	   r
   )r   r   r   r   EvCannot interpolate with all object-dtype columns in the DataFrame. Try setting at least one column to a numeric dtype.r*   objectrL   )r   r   r   r.   r/   	TypeErrorrI   r   )r    rM   r!   r2   r$   r$   r%   test_interp_raise_on_only_mixed   s    


z8TestDataFrameInterpolate.test_interp_raise_on_only_mixedc              	   C   sH   t dddgdddgddd	}d
}tjt|d |  W 5 Q R X d S )Nr   r   r
   r   r   rG   r9   rh   rT   rg   r*   )r   r.   r/   ri   r   r1   r$   r$   r%   %test_interp_raise_on_all_object_dtype   s
    z>TestDataFrameInterpolate.test_interp_raise_on_all_object_dtypec                 C   s   t dddtjdgi}t dddddgi}| }|d jdd}|d ksNtt|| | }|d jddd	}|d kstt||d
 d S )Nrb   r   r   r   r   T)inplacer5   )rl   r7   rJ   )	r   r   r   rE   r   r'   r   r   rI   )r    r!   r"   r#   return_valuer$   r$   r%   test_interp_inplace  s    z,TestDataFrameInterpolate.test_interp_inplacec                 C   sf   t ddddgtjdddgddddgd}|jdd	d
d}|jdd	dd}|d ksVtt|| d S )Nr   r   r   r   r
   r   )rb   rc   rd   rU   r   F)r-   rM   rl   T)r   r   r   r   r'   r   r   )r    r#   r"   rm   r$   r$   r%   test_interp_inplace_row  s    $z0TestDataFrameInterpolate.test_interp_inplace_rowc              	   C   s   t ddtjdgddddgddtjdgddddgd	}t tjddddgd
dtjddddgddtjddddgd
dtjddddgd
dd	}|jd d}t|| |ddg jd d}t||ddg  d S )Nr   r   r   r
   r   r   r   r   r   rO   rT   rJ   r6   r   r   )r   r   r   arrayr   r   r   r   r$   r$   r%   test_interp_ignore_all_good  s$    

	z4TestDataFrameInterpolate.test_interp_ignore_all_goodc                 C   st   d}t d|d}tj||}tj||dk < t|||d}|jddd}|jddd	d
}|d ksdtt	|| d S )Nr   z
2014-01-01)startperiodsrZ   )rR   rS   rX   r   timerN   T)rM   r-   rl   )
r   r   randomZrandr   r   r   r'   r   r   )r    rM   rs   idxrX   r"   r#   rm   r$   r$   r%   test_interp_time_inplace_axis2  s    z6TestDataFrameInterpolate.test_interp_time_inplace_axis)rR   r   )rS   r   c                 C   sl   t ddd}t |}tt |dt d|dj|d d}|jd	|d
}|jd	|d
}t	|| d S )Nr   d   i  )
   r   ry   )rX   rR   rS   gGz?)rS   rU   r-   rM   )
r   Zlinspacesinr   ZtileZarangeZreindexr   r   r   )r    rV   rW   xyr!   r#   r"   r$   r$   r%   test_interp_string_axis?  s    

  z0TestDataFrameInterpolate.test_interp_string_axisr-   ZffillZbfillpadc              	   C   sh   t ddddtjdgdddtjddgddd	tjtjd
gd}|j||d}|j||d}t|| d S )Nr   r   r   r   g      @rH   g       @g      $@r   g      >@)r   r   r   rN   rz   )r   r   r   Zfillnar   r   r   )r    rM   r-   r!   r"   r#   r$   r$   r%   test_interp_fillna_methodsK  s    z3TestDataFrameInterpolate.test_interp_fillna_methodsc              	   C   s^   t ddddgi}d}tjt|d |dd}W 5 Q R X t ddddgi}t|| d S )	Nrb   r   r   r
   zzIn a future version of pandas all arguments of DataFrame.interpolate except for the argument 'method' will be keyword-onlyr*   r   r   )r   r   Zassert_produces_warningFutureWarningr   r   )r    r!   r2   r#   r"   r$   r$   r%   %test_interpolate_pos_args_deprecationZ  s    z>TestDataFrameInterpolate.test_interpolate_pos_args_deprecationN)__name__
__module____qualname__r&   r)   r3   r8   r<   tdZskip_if_no_scipyrF   rK   rP   r.   markZparametrizeparamrY   r]   ra   rj   rk   rn   ro   rq   rw   r~   Z&skip_array_manager_not_yet_implementedr   r   r$   r$   r$   r%   r      sH   

&

	
 


r   )Znumpyr   r.   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasr   r   r   Zpandas._testingZ_testingr   r   r$   r$   r$   r%   <module>   s
   