a
    PfN                     @   sp   d dl Zd dlZd dlmZ d dlmZ d dlm  m	Z
 d dlmZmZmZmZ d dlmZ G dd dZdS )    N)using_pyarrow_string_dtype)ChainedAssignmentError)	DataFrameNaTSeries
date_rangec                   @   s  e Zd Zdd Zdd Zdd Zejje	 ddd	d
 Z
ejje	 dd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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d.d/gd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Z ejdd>d?gd@dA Z!ejdBd-d,gejdCg dDdEdF Z"dGdH Z#dIdJ Z$ejdKdLdMejdNedOd/ejdPedOd/gdQdR Z%ejdKg dSdTdU Z&dVS )WTestDataFrameInterpolatec                 C   s   t tdtdtdg}|jjdks*J | }t |d |d d |d g}t|| | }| }| }t	|| d S )Nz1+1jnanz2+2jcr         ?   )
r   complexfloatdtypekindinterpolatetmassert_series_equalZto_frameassert_frame_equal)selfserresexpecteddf r   d/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/frame/methods/test_interpolate.pytest_interpolate_complex   s    z1TestDataFrameInterpolate.test_interpolate_complexc                 C   s   t tddd}| }t|d< || }||}t|| |jd}|| }||jd}t|| ||d  }	||	 }
|||d  }t|
| d S )Nz
2012-01-01   )periodsr   z
US/Pacificr   )	r   r   copyr   r   r   assert_equaldtZtz_localize)r   frame_or_seriesorigr   r   r   Zser_tzZres_tzZexpected_tzZser_tdZres_tdZexpected_tdr   r   r   $test_interpolate_datetimelike_values!   s    z=TestDataFrameInterpolate.test_interpolate_datetimelike_valuesc                 C   s   |r$|t u r$tjjdd}|| |dtjdg}|j}|jdd |g d}t	
|| t||jspJ | d dksJ d S )	Nz'.values-based in-place check is invalidreason   r   Tinplace)r'   r   r   r   )r   pytestmarkxfailZapplymarkernpr	   valuesr   r   r    shares_memoryZsqueeze)r   r"   using_array_managerrequestr+   objr#   r   r   r   r   test_interpolate_inplace7   s    
z1TestDataFrameInterpolate.test_interpolate_inplacez#interpolate doesn't work for stringr%   c           	      C   s  t ddtjdgdddtjgg dtdd}t g dg d	g dtdd}d
}tjt|d | }W d    n1 s0    Y  t|| |d j	}|d j
}|rt||d j	sJ t||d j	sJ n.t||d j	rJ t||d j	r
J tjt|d |jdd}W d    n1 s<0    Y  |d u sTJ t|| t|d j	|sxJ t|d j	|sJ d S )Nr'   r      	   r'   r      r   abcdABCD      ?       @      @      @)r?   rB         "@rC   'DataFrame.interpolate with object dtypematchr<   r=   Tr(   )r   r-   r	   listr   assert_produces_warningFutureWarningr   r   Z_valuesr.   r/   )	r   using_copy_on_writer   r   msgresultZcvaluesZdvaluesr   r   r   r   test_interp_basicH   s>    &

,z*TestDataFrameInterpolate.test_interp_basicc                 C   s   t ddtjdgdddtjgg dtdd}d}|s:tnd }tj||d	 |d
 }W d    n1 sp0    Y  |d
}d|j	d< d|j	d< t
|| d S )Nr'   r   r4   r5   r6   r8   r9   rD   rE   r<   r7   r7   r:   )r   r;   )r   r-   r	   rG   rI   r   rH   	set_indexr   locr   )r   Zusing_infer_stringr   rK   warningrL   r   r   r   r   &test_interp_basic_with_non_range_indext   s    	,


z?TestDataFrameInterpolate.test_interp_basic_with_non_range_indexc                 C   s.   t  }| }||usJ |}t|| d S )N)r   r   r   r   r   r   rL   r   r   r   r   test_interp_empty   s
    z*TestDataFrameInterpolate.test_interp_emptyc                 C   sj   t ddtjdgdddtjgg dd}d}tjt|d |jd	d
 W d    n1 s\0    Y  d S )Nr'   r   r4   r5   r6   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.rE   Znot_a_methodmethod)r   r-   r	   r*   raises
ValueErrorr   r   r   rK   r   r   r   test_interp_bad_method   s    z/TestDataFrameInterpolate.test_interp_bad_methodc                 C   s   t ddtjdgdddtjgg dtdd	}|d
  }tg dd
d}t|| d}tjt	|d  |d
 jdd}W d    n1 s0    Y  tg dd
d}t|| d S )Nr?   r@   rB   r'   r4   r5   r6   r8   r9   r:   r>   )name:The 'downcast' keyword in Series.interpolate is deprecatedrE   inferdowncastr'   r   r7   r4   )
r   r-   r	   rG   r   r   r   r   rH   rI   )r   r   rL   r   rK   r   r   r   test_interp_combo   s    	.z*TestDataFrameInterpolate.test_interp_comboc              	   C   s  t ddtjdgdddtjgg dtdd	}d
}d}d}tjt|dJ tjt	|d |j
dd W d    n1 sz0    Y  W d    n1 s0    Y  tjt|dN tjt	|d  |d j
dd W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr?   r@   rB   r'   r4   r5   r6   r8   r9   z'downcast must be either None or 'infer'=The 'downcast' keyword in DataFrame.interpolate is deprecatedr]   rE   int64r_   r:   )r   r-   r	   rG   r*   rX   rY   r   rH   rI   r   )r   r   rK   Zmsg2Zmsg3r   r   r    test_inerpolate_invalid_downcast   s     	Hz9TestDataFrameInterpolate.test_inerpolate_invalid_downcastc                 C   sn   t ddtjdgtjdddgd}|d}d}tjt|d |jd	d
 W d    n1 s`0    Y  d S )Nr'   r   r4   r7   r:   r;   r:   zkInterpolation with NaNs in the index has not been implemented. Try filling those NaNs before interpolating.rE   r.   rV   )r   r-   r	   rO   r*   rX   NotImplementedErrorr   rZ   r   r   r   test_interp_nan_idx   s    "
z,TestDataFrameInterpolate.test_interp_nan_idxc                 C   sV  t d tddtjddtjdgg dd}|d	}| }|jd
dd}d|jd< d|jd< t	
|| |jdd}d|jd< d|jd< t	
|| |jdd}d|jd< d|jd< t	j
||dd |jdd}d|jd< d|jd< t	
|| |jdd}d|jd< d|jd< t	
|| |jdd}d|jd< d|jd< t	j
||dd d S )Nscipyr'   r   r4   r      r'   r   r7   r            r:   r<   r<   
polynomialrW   ordergUUU@rN   gu:@)rm   r:   ZcubicrV   gv:@gb+hZ@ZnearestF)Zcheck_dtypeZ	quadraticg^r@g!g@ZslineargX ;@zeror@   )r*   importorskipr   r-   r	   rO   r   r   rP   r   r   r   r   r   rL   r   r   r   test_interp_various   s<    













z,TestDataFrameInterpolate.test_interp_variousc                 C   s  t d tddtjddtjdgg dd}|jd	d
}| }d|jd< d|jd< t	|| d}tj
t|d |jd	dd}W d    n1 s0    Y  t	||tj |jdd
}| }|d |d< t	|| |jdd
}d|jd< d|jd< t	|| d S )Nri   r'   r   r4   r   rj   rk   ro   ZbarycentricrV   r7   )r   r:      )r   r:   rc   rE   r^   )rW   r`   Zkroghr:   Zpchip      @)r*   rt   r   r-   r	   r   r   rP   r   r   rH   rI   astyperd   )r   r   rL   r   rK   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g d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   r4   r7   r   rw   rj   ra   )r   r'   r   r7   r4   axis)r7   r'   )r   r   )r'   r7   r.   r|   rW   r   )
r   r-   r	   r   r   rP   ry   float64r   r   rS   r   r   r   test_interp_rowwise  s(    	


z,TestDataFrameInterpolate.test_interp_rowwisezaxis_name, axis_numberrowsr   Zrows_0)idindexZindex_0columnsr'   Z	columns_1c                 C   sZ   dt jdgdt jdgg dd}t|t jd}|j|dd	}|j|dd	}t|| d S )
Nr   rw   r'   rj   )r   r   rl   )r   r'   r   r   linearr}   )r-   r	   r   r~   r   r   r   )r   	axis_nameaxis_numberdatar   rL   r   r   r   r   test_interp_axis_names2  s
    
 z/TestDataFrameInterpolate.test_interp_axis_namesc              
   C   s:   t dddtjddtjtjdg	g dd}|jdd	 d S )
Nr         ?r?   r4   rl   @   )	r'   r   r7   r4   r7   r   r'   r   )r   r'   r{   )r   r-   r	   r   )r   r   r   r   r   test_rowwise_altC  s    z)TestDataFrameInterpolate.test_rowwise_altcheck_scipyFTri   )Zmarksc                 C   sr   t tjtjdddgtjddtjdgd}| }| }d|jd	< t|| |rn|jd
dd}t|| d S )Nr   g      ?r   g      rf   g      )r7   r;   rp   r'   rq   )r   r-   r	   r   r   rP   r   r   )r   r   r   rL   r   r   r   r   test_interp_leading_nansM  s    $
z1TestDataFrameInterpolate.test_interp_leading_nansc                 C   s   t ddtjdgg dtjdddgtjtjddgg dd	}d
}tjt|d" |dj|d W d    n1 sv0    Y  d S )Nr'   r   r4   )abr
   dr   rj   r5   ra   )r:   r;   r<   r=   EvCannot interpolate with all object-dtype columns in the DataFrame. Try setting at least one column to a numeric dtype.rE   objectr{   )r   r-   r	   r*   rX   	TypeErrorry   r   )r   r|   r   rK   r   r   r   test_interp_raise_on_only_mixed]  s    
z8TestDataFrameInterpolate.test_interp_raise_on_only_mixedc                 C   sX   t g dg dddd}d}tjt|d |  W d    n1 sJ0    Y  d S )N)r'   r   r7   )r4   r   rw   rf   r   r   r   rE   )r   r*   rX   r   r   rZ   r   r   r   %test_interp_raise_on_all_object_dtypeo  s
    z>TestDataFrameInterpolate.test_interp_raise_on_all_object_dtypec                 C   s  t dddtjdgi}t dg di}| }| }|rt   |d jdd}W d    n1 sh0    Y  |d u s~J t|| nVtjt	dd	  |d jdd}W d    n1 s0    Y  |d u sJ t|| | }d
}|rVtjt	t
f|d	" |d jddd}W d    n1 s00    Y  |d u sHJ t|| nbtjt	|d	" |d jddd}W d    n1 s0    Y  |d u sJ t||d d S )Nr   r?   r@   rB   r>   Tr(   zinplace methodrE   r]   r^   )r)   r`   rd   )r   r-   r	   r   r   Zraises_chained_assignment_errorr   r   rH   rI   r   ry   )r   rJ   r   r   Zexpected_cowrL   return_valuerK   r   r   r   test_interp_inplacez  s4    
..22z,TestDataFrameInterpolate.test_interp_inplacec                 C   s^   t g dtjdddgg dd}|jddd	d
}|jdddd
}|d u sNJ t|| d S )Nr>   r@   rA   rB   )r7   r   r   r   )r   r   r
   r   r'   F)rW   r|   r)   T)r   r-   r	   r   r   r   )r   rL   r   r   r   r   r   test_interp_inplace_row  s    z0TestDataFrameInterpolate.test_interp_inplace_rowc                 C   s  t ddtjdgg dddtjdgg dd	}t tjg dd
dtjg dddtjg dd
dtjg dd
dd	}d}tjt|d |jd d}W d    n1 s0    Y  t|| tjt|d$ |ddg jd d}W d    n1 s0    Y  t||ddg  d S )Nr'   r   r4   ra   r?   r@   rB   r>   r9   r~   r   rd   )r?   r@   r7   rB   rc   rE   r_   r;   r=   )	r   r-   r	   arrayr   rH   rI   r   r   )r   r   r   rK   rL   r   r   r   test_interp_ignore_all_good  s*    	*2z4TestDataFrameInterpolate.test_interp_ignore_all_goodc                 C   s|   d}t d|d}tjd||f}tj||dk < t|||d}|jddd	}|jddd
d}|d u slJ t|| d S )Nr   z
2014-01-01)startr   r   r   )r   r   r   r   timer}   T)r|   rW   r)   )	r   r-   randomZdefault_rngr	   r   r   r   r   )r   r   idxr   r   rL   r   r   r   r   test_interp_time_inplace_axis  s    z6TestDataFrameInterpolate.test_interp_time_inplace_axis)r   r   )r   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'   r   )r   r   r   gGz?)r   r   rW   r|   )
r-   Zlinspacesinr   ZtileZarangeZreindexr   r   r   )r   r   r   xyr   rL   r   r   r   r   test_interp_string_axis  s    
z0TestDataFrameInterpolate.test_interp_string_axis
multiblockrW   )ffillZbfillpadc              	   C   s   |r|dv rt | 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}|rhtj|d< d|d< |dkrt|nd}t|||d}d| d}	tjt|	d |j	||d}
W d    n1 s0    Y  t
|
| d S )N)r'   r   r?   r@   rA   rB   g      @rx   g       @g      $@rC   g      >@rU   r=   r   r   r   r{   z"DataFrame.interpolate with method=z is deprecatedrE   r   )tdZ&mark_array_manager_not_yet_implementedr   r-   r	   getattrr   rH   rI   r   r   )r   r1   r|   r   rW   r0   r   Zmethod2r   rK   rL   r   r   r   test_interp_fillna_methods  s"    

,z3TestDataFrameInterpolate.test_interp_fillna_methodsc                 C   s6   t  }| }|jdd}|d u s&J t|| d S )NTr(   r   r   r   r   r   ru   r   r   r   test_interpolate_empty_df  s
    z2TestDataFrameInterpolate.test_interpolate_empty_dfc                 C   sX   t dg di|d}| }|jdd}t dg didd}t|| t|| d S )Nr   r'   NNNr7   r   r   limitr'   r   r@   Nr7   Float64r   )r   Zany_int_ea_dtyper   r#   rL   r   r   r   r   test_interpolate_ea  s    z,TestDataFrameInterpolate.test_interpolate_ear   r   ZFloat32zfloat32[pyarrow]pyarrowfloat64[pyarrow]c                 C   sX   t dg di|d}| }|jdd}t dg di|d}t|| t|| d S )Nr   r   r   r   r   r   r   )r   r   r   r#   rL   r   r   r   r   test_interpolate_ea_float  s    z2TestDataFrameInterpolate.test_interpolate_ea_float)rd   Zuint64Zint32Zint16Zint8Zuint32Zuint16Zuint8c                 C   sR   t d tdg di|d d}|jdd}tdg did	d}t|| d S )
Nr   r   r   z	[pyarrow]r   r   r   r   r   )r*   rt   r   r   r   r   )r   r   r   rL   r   r   r   r   test_interpolate_arrow  s
    
z/TestDataFrameInterpolate.test_interpolate_arrowN)'__name__
__module____qualname__r   r$   r3   r*   r+   r,   r   rM   rR   rT   r[   rb   re   rh   rv   rz   r   Zparametrizeparamr   r   r   Z
skip_if_nor   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sv   
)

'
	

!

		
	r   )numpyr-   r*   Zpandas._configr   Zpandas.errorsr   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasr   r   r   r   Zpandas._testingZ_testingr   r   r   r   r   r   <module>   s   