U
    Kvf,                     @   s  d dl mZ d dlZd dlZd dlZd dlmZ d dlZ	d dl
Z
d dlmZ d dlmZmZ ejejeZejeddZe	eZdd	 ejD e_ejeje_ed
dgZe
jdddgddd Z dd Z!e
jdddd Z"e
jdddd Z#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.d0d1 Z/d2d3 Z0d4d5 Z1d6d7 Z2e
j3j4d8d9 Z5d:d; Z6d<d= Z7d>d? Z8dS )A    )	MONTH_ENDN)assert_allclose)co2)STLDecomposeResultresultszstl_test_results.csvc                 C   s   g | ]}|  qS  )strip).0cr   r   F/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/tsa/stl/tests/test_stl.py
<listcomp>   s     r   scenarioidxmoduleTF)scopeparamsc                 C   s   | j S N)param)requestr   r   r   robust   s    r   c            	      C   s   t jtdd} ttj| d djd d df }|}|j	d }d}t
|d|  df}t|}t
|}t
|}t||j	d |dd	d
dddddddd||||dS )Nr   zstl_co2.csv)headerr            #               )ynnpnsntnlnoninsjumpntjumpnljumpisdegitdegildegrwtrendseasonwork)ospathjoincur_dirr"   Zasarraypdread_csvZilocshapezerosonesdict)		file_pathr   r    nobsZnperiodr1   r.   r/   r0   r   r   r   default_kwargs_base   s:    "



r>   function)r   c                   C   s   t  S r   )r>   r   r   r   r   default_kwargs;   s    r@   c               
   C   sv   t  } | d d d }|jd }t|d| d   df}t|}t|}t|}| t||||||d | S )Nr    r   r   r"   r   )r    r!   r.   r/   r0   r1   )r>   r8   r"   r9   r:   updater;   )kwargsr    r=   r1   r.   r/   r0   r   r   r   default_kwargs_short@   s    



rD   c                 C   s   | d }| d }| d }| d }| d }| d }| d }| d }	| d	 }
| d
 }| d }| d }| d }t ||||||||	||
||d}|||fS )Nr    r"   r#   r$   r%   r+   r,   r-   r(   r)   r*   r&   r'   )endogperiodseasonalr/   low_passZseasonal_degZ	trend_degZlow_pass_degr   seasonal_jump
trend_jumplow_pass_jump)r;   )rC   r   rE   r"   r#   r$   r%   r+   r,   r-   r(   r)   r*   
outer_iter
inner_iterclass_kwargsr   r   r   _to_class_kwargsO   s8    rO   c                 C   s   t | \}}}tf |}|j||d}tjd  }t|j|j t|j|j	 t|j
|j |d |j |j	 }t|j| d S )NrL   rM   ZbaselinerE   )rO   r   fitr   loc
sort_indexr   r/   rG   r0   weightsr.   resid)r@   rN   outerinnermodresexpectedrU   r   r   r   test_baseline_classn   s    
r[   c                 C   sb   t | \}}}tf |}|j||d}tjd  }t|j|j t|j	|j	 t|j
|j d S )NrP   shortrO   r   rQ   r   rR   rS   r   rG   r0   r/   rT   r.   )rD   rN   rV   rW   rX   rY   rZ   r   r   r   test_short_class{   s    
r^   c                 C   sj   d| d< t | \}}}tf |}|j||d}tjd  }t|j|j t|j	|j	 t|j
|j d S )Nr   r*   rP   znljump-1r]   r@   rN   rV   rW   rX   rY   rZ   r   r   r   test_nljump_1_class   s    
r`   c                 C   sj   d| d< t | \}}}tf |}|j||d}tjd  }t|j|j t|j	|j	 t|j
|j d S )Nr   r)   rP   zntjump-1r]   r_   r   r   r   test_ntjump_1_class   s    
ra   c                 C   sr   d| d< d| d< t | \}}}tf |}|j||d}tjd  }t|j|j t|j	|j	 t|j
|j d S )Nr   r*   r)   rP   znljump-1-ntjump-1r]   r_   r   r   r   test_nljump_1_ntjump_1_class   s    
rb   c              	   C   s   t | \}}}|d }t|d d d f |d d d f f}|d }tjtdd t||d W 5 Q R X d}tjt|d t|dd W 5 Q R X tjt|d t|dd W 5 Q R X tjt|d t|d	d W 5 Q R X d S )
NrE   rF   z endog is required to have ndim 1matchrE   rF   z&period must be a positive integer >= 2r   ig      @)rO   r"   Zhstackpytestraises
ValueErrorr   )r@   rN   _rE   Zendog2rF   rd   r   r   r   test_parameter_checks_period   s    &rj   c              	   C   s   t | \}}}|d }|d }d}tjt|d t||dd W 5 Q R X tjt|d t||dd W 5 Q R X tjt|d t||dd W 5 Q R X d S )	NrE   rF   z-seasonal must be an odd positive integer >= 3rc   r   )rE   rF   rG   ig      *@rO   rf   rg   rh   r   r@   rN   ri   rE   rF   rd   r   r   r   test_parameter_checks_seasonal   s    rm   c              	   C   s   t | \}}}|d }|d }d}tjt|d t||dd W 5 Q R X tjt|d t||dd W 5 Q R X tjt|d t||dd W 5 Q R X tjt|d t||d	d W 5 Q R X d S )
NrE   rF   z?trend must be an odd positive integer >= 3 where trend > periodrc      )rE   rF   r/            3@rk   rl   r   r   r   test_parameter_checks_trend   s    rr   c              	   C   s   t | \}}}|d }|d }d}tjt|d t||dd W 5 Q R X tjt|d t||dd W 5 Q R X tjt|d t||dd W 5 Q R X tjt|d t||d	d W 5 Q R X d S )
NrE   rF   zElow_pass must be an odd positive integer >= 3 where low_pass > periodrc   rn   )rE   rF   rH   r   rp   rq   rk   rl   r   r   r   test_parameter_checks_low_pass   s    rs   c              	   C   s  t | \}}}|d }|d }tjtdd t||dd W 5 Q R X tjtdd t||dd W 5 Q R X tjtdd t||dd	 W 5 Q R X tjtdd t||dd	 W 5 Q R X tjtd
d t||dd W 5 Q R X tjtd
d t||dd W 5 Q R X d S )NrE   rF   z low_pass_jump must be a positiverc   r   )rE   rF   rK   g      ?z seasonal_jump must be a positive)rE   rF   rI   ztrend_jump must be a positive)rE   rF   rJ   rk   )r@   rN   ri   rE   rF   r   r   r   test_jump_errors   s    rt   c                 C   s8   t | |\}}}|d }|d }t||d}|  d S )NrE   rF   re   )rO   r   rQ   )r@   r   rN   ri   rE   rF   rX   r   r   r   test_defaults_smoke   s
    ru   c                 C   s   t | |\}}}tj|d dd}|d }t||d}| }t|jtjsPtt|jtjsbtt|j	tjsttt|j
tjstd S )NrE   r    namerF   re   )rO   r6   Seriesr   rQ   
isinstancer/   AssertionErrorrG   rU   rT   )r@   r   rN   ri   rE   rF   rX   rY   r   r   r   test_pandas  s    r{   c                 C   st   t | \}}}tf |}| }|d= |d }tjddtd}tj||d|d< tf |}| }t|j|j d S )NrF   rE   z1-1-1959i\  )Zperiodsfreq)index)	rO   r   rQ   r6   Z
date_ranger   rx   r   rG   )r@   rN   ri   rX   rY   rE   r}   Zres_implicit_periodr   r   r   test_period_detection  s    

r~   c              	   C   sN   t | \}}}|d= t|d |d< tjtdd tf | W 5 Q R X d S )NrF   rE   zUnable to determine period fromrc   )rO   r6   rx   rf   rg   rh   r   )r@   rN   ri   r   r   r   test_no_period  s
    r   c                 C   sZ   t | \}}}tf |j||d}|  tj|d dd|d< tf | }|  d S )NrP   rE   ZCO2rv   )rO   r   rQ   Zplotr6   rx   )r@   Zclose_figuresrN   rV   rW   rY   r   r   r   	test_plot'  s    r   c                 C   s   t | \}}}d|d< d |d< tf |}|d }|d }ttd| dd|   }||d dkrhdnd7 }|jd |kstd	|d< tf |}|d }|d }ttd| dd|   }||d dkrdnd7 }|jd |kstd S )
N   rG   r/   rF   g      ?r   r   r   r   )rO   r   intr"   ceilconfigrz   )r@   rN   ri   rX   rF   rG   rZ   r   r   r   test_default_trend2  s     

r   c           	      C   sl   t | \}}}tf |}| }t|}t|}| }t|j|j t|j|j |j	|j	ksht
d S r   )rO   r   rQ   pickledumpsloadsr   r/   rG   r   rz   )	r@   rN   rV   rW   rX   rY   ZpklZreloadedZres2r   r   r   test_pickleG  s    


r   c                  C   s:   t  j} | t  } t|  }t	|t
s6td S r   )r   loaddataZresampler   ZmeanZffillr   rQ   ry   r   rz   )r   rY   r   r   r   test_squezable_to_1dS  s    
r   )F)9Zstatsmodels.compat.pandasr   r2   r   Znumpyr"   Znumpy.testingr   Zpandasr6   rf   Zstatsmodels.datasetsr   Zstatsmodels.tsa.seasonalr   r   r3   dirnameabspath__file__r5   r4   r<   r7   r   columnsr   applystrr	   Z	set_indexZfixturer   r>   r@   rD   rO   r[   r^   r`   ra   rb   rj   rm   rr   rs   rt   ru   r{   r~   r   markZ
matplotlibr   r   r   r   r   r   r   r   <module>   sR   

 






