U
    Ãmœdr*  ã                   @   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   úd/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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{®Gáz„?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   ÚmissingéÿÿÿÿF)Ú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:Œ0âŽyE>é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+   Ú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     