U
    Kvfr*                     @   s   d Z ddlZddlZddlmZmZmZmZm	Z	 ddl
Z
ddlmZ ddlZejejeZejedZG dd dZdd	 Zd
d ZdS )a  
Lowess testing suite.

Expected outcomes are generated by R's lowess function given the same
arguments. The R script test_lowess_r_outputs.R can be used to
generate the expected outcomes.

The delta tests utilize Silverman's motorcycle collision data,
available in R's MASS package.
    N)assert_assert_allcloseassert_almost_equalassert_equalassert_raises)lowessresultsc                   @   s   e Zd Zdd Zejdddgdd Zdd	 Ze	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d!d" Zd#d$ Zd%d& Zd'd( ZdS )*
TestLowessc                 C   s$   dd l m} |jj}tt|k d S )Nr   )Zstatsmodels.apiapiZnonparametricr   r   )selfsmZlowess1 r   O/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/nonparametric/tests/test_lowess.pytest_import"   s    zTestLowess.test_import
use_pandasFTc                    sn   t dt dt dd |r4 fdd D  t  d  d gj}t d  d }t||d d S )	N   xyoutc                    s   i | ]}|t  | qS r   )pdZSeries).0k	test_datar   r   
<dictcomp>2   s      z(TestLowess.test_flat.<locals>.<dictcomp>r   r   r      )nparangezerosarrayTr   r   )r   r   expected_lowessactual_lowessr   r   r   	test_flat*   s    zTestLowess.test_flatc                 C   sX   t dt dt dd}t |d |d gj}t|d |d }t||d d S )Nr   r   r   r   r   r   )r   r   r    r!   r   r   )r   r   r"   r#   r   r   r   
test_range7   s    zTestLowess.test_ranger   r   r   Nr   c           
      C   s~   |d kri n|}t jtjt|ddd}| t_t|r@||}t	|| || f|}t 
|| || gj}	t||	| d S )N,T	delimiternames)r   
genfromtxtospathjoinrpathr   descriptioncallabler   r    r!   )
namefnamer   r   r   kwargsdecimaldataresultexpectr   r   r   generateA   s      zTestLowess.generatec                 C   s   |  dd d S )Ntest_simpletest_lowess_simple.csvr8   r   r   r   r   r9   O   s    zTestLowess.test_simplec                 C   s   | j dddddid d S )Ntest_iter_0test_lowess_iter.csvout_0itr   r   r3   r;   r<   r   r   r   r=   R   s    zTestLowess.test_iter_0c                 C   s   | j dddddid d S )Nr=   r>   Zout_3r@      rA   r;   r<   r   r   r   test_iter_0_3Z   s    zTestLowess.test_iter_0_3c                 C   s   | j dddddid d S )Ntest_frac_2_3test_lowess_frac.csvZout_2_3fracgUUUUUU?rA   r;   r<   r   r   r   rD   b   s    zTestLowess.test_frac_2_3c                 C   s   | j dddddid d S )Ntest_frac_1_5rE   Zout_1_5rF   g?rA   r;   r<   r   r   r   rG   j   s    zTestLowess.test_frac_1_5c                 C   s   | j dddddid d S )Ntest_delta_0test_lowess_delta.csvr?   rF   皙?rA   r;   r<   r   r   r   rH   r   s    zTestLowess.test_delta_0c                 C   s   | j ddddd d d S )NZtest_delta_RdefrI   Zout_Rdefc                 S   s   ddt | d  dS )NrJ   g{Gz?r   rF   delta)r   Zptp)r5   r   r   r   <lambda>   s    z,TestLowess.test_delta_rdef.<locals>.<lambda>rA   r;   r<   r   r   r   test_delta_rdefz   s    zTestLowess.test_delta_rdefc                 C   s   | j dddddddd d S )	Ntest_delta_1rI   Zout_1rJ   g8   ?rK   
   )r   r3   r4   r;   r<   r   r   r   rO      s    zTestLowess.test_delta_1c                 C   s~  t jtd}tjt|dddd}|d |d  }}|d }t|d |d gj}t	||dd	}t
||d
d t||d}t	|d |d dd	}t
||d
d t	||ddd}	t
|	|d
d t	|d d d |d d d dd}	t
|	|d d ddf d
d t	||dddd}	t
|	|d d df d
d t	t|t|dd	}	t	t||dd	}t
|	|d
d t|	jttk t	|t|tdd	}	t	|t|dd	}t
|	|d
d t|	jttk tt|d }
tj|
 t	||||
 dd}t
|	|
df |d
d tj|ddg< tj|d< t|t|@ }t	||dd	}	t	|| || dd	}t
|	|d
d ttt	||dd tt|}
tj|
 ||
 }||
 }t	||dd	}t
|	|d
d t	||ddd}t|t|@ }tt||  t|}|| }|t| }t
||d d df d
d t|	jd }
t	|||	|
df dd}t
|	|
df |d
d d S )Nr:   rbr&   Tr'   r   r   r   	is_sorted   r4   )r   r   none)rS   missingF)return_sorted   )rY   rW   rS      )xvalsrY         rB   raise)rW   )rS   rY   r   )r+   r,   r-   r.   r   r*   openr    r!   r   r   r   Z	DataFrameroundZastypeintr   Zdtypefloatr   lenrandomshufflenanisfiniter   
ValueErrorr   isnanZargsortshape)r   rfiler   r   r   Zres1_fittedr"   actual_lowess1Zdfr#   perm_idxactual_lowess2Z
mask_validZypermZxpermactual_lowess3Zsort_idxZyhatZactual_lowess4r   r   r   test_options   s    "    
  
   
  
 
  zTestLowess.test_optionsc                 C   sx   dgdgd  dgd  dg }|t jjt|dd  }t||dt| dd	}t|dd
df |dd
 dd d S )Nr   rZ   d   r[   rB   )sizeg:0yE>2   rF   r@   rX   r   rU   )r   re   normalrd   r   r   r   r   r   r6   r   r   r   test_duplicate_xs   s     zTestLowess.test_duplicate_xsc                 C   s   t ddd}t |d d }t||dt| dd}tt |d d df t |d	 k tt |d d df t |d	 k  d S )
Nr   rP   i  r[   r]      rZ   ru   rJ   )	r   Zlinspacecosr   rd   r   allminmaxrw   r   r   r   
test_spike   s
    (zTestLowess.test_spikec              	   C   s  t jtd}tjt|dddd}|d |d  }}t||dd}tt	|d	 }tj
| t|||| d
d}t||df |dd t||ddd}t|||| dd}	t|| |	dd tt$ t||ttjddgdd W 5 Q R X t|||dd}
t|
|d d df  tj|ddg< tj|d< t||dd}t|jd }t||||df d}t||df |dd t|||dd}	t|t|@ }t|	| |d d df  tt" t||tdgdggd W 5 Q R X d S )Nr:   rQ   r&   Tr'   r   r   rR   r[   rV   )r\   rW   rZ   rT   rU   Fr   )rY   r@   )r\   r@   r]   rB   r_   )r\   rS   r^   )r\   ZdroprP   )r+   r,   r-   r.   r   r*   r`   r   r   rd   re   rf   r   pytestZraisesri   r    rg   r   rk   rh   )r   rl   r   r   r   targetrn   r#   Z
target_it0ro   rp   rm   Z
all_finiter   r   r   test_exog_predict   s4    (
zTestLowess.test_exog_predict)r   r   r   Nr   )__name__
__module____qualname__r   r   markZparametrizer$   r%   staticmethodr8   r9   r=   rC   rD   rG   rH   rN   rO   rq   rx   r~   r   r   r   r   r   r	   !   s$   

	V
r	   c                  C   sD   dgd dgd  } t d}t| |dd}t|t || f d S )Nr   rP   rZ   r   皙?)rF   )r   r   r   r   Zcolumn_stack)r   r   r6   r   r   r   test_returns_inputs%  s    
r   c                 C   sN   dgd dgd  }t d}t||d|d d d}t|t ddd	 d S )
Nr   rP   rZ   r   r   r]   )rF   r\   g-q=)Zatol)r   r   r   r   r   )Zreset_randomstater   r   Zresults_xvalsr   r   r   test_xvals_dtype-  s    
r   )__doc__r+   Znumpyr   Znumpy.testingr   r   r   r   r   r   Z*statsmodels.nonparametric.smoothers_lowessr   Zpandasr   r,   dirnameabspath__file__curdirr-   r.   r	   r   r   r   r   r   r   <module>   s     