U
    Ãmœd1� ã                   @   sÆ  d 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	Z	ddl
mZmZ ddlmZ ddlmZ ddlmZ dd	lmZmZmZmZmZ ej ej e¡¡Zej d
d¡Ze  eej! e ¡Z"ej d
d¡Z#e  ej ee#¡¡Z$G dd„ dƒZ%G dd„ dƒZ&G dd„ dƒZ'G dd„ de'ƒZ(G dd„ de(ƒZ)G dd„ de(ƒZ*G dd„ de'ƒZ+G dd„ de+ƒZ,G dd„ de'ƒZ-G dd „ d e-ƒZ.G d!d"„ d"e-ƒZ/G d#d$„ d$e-ƒZ0G d%d&„ d&e'ƒZ1G d'd(„ d(e1ƒZ2G d)d*„ d*e1ƒZ3G d+d,„ d,e1ƒZ4G d-d.„ d.e1ƒZ5G d/d0„ d0ƒZ6G d1d2„ d2e6ƒZ7G d3d4„ d4e6ƒZ8G d5d6„ d6e6ƒZ9G d7d8„ d8e6ƒZ:G d9d:„ d:e6ƒZ;G d;d<„ d<e6ƒZ<G d=d>„ d>e6ƒZ=G d?d@„ d@e6ƒZ>G dAdB„ dBe6ƒZ?G dCdD„ dDe6ƒZ@G dEdF„ dFe6ƒZAG dGdH„ dHe6ƒZBG dIdJ„ dJe6ƒZCG dKdL„ dLe6ƒZDG dMdN„ dNe6ƒZEG dOdP„ dPe6ƒZFG dQdR„ dRe6ƒZGG dSdT„ dTe6ƒZHG dUdV„ dVe6ƒZIG dWdX„ dXe6ƒZJG dYdZ„ dZe6ƒZKG d[d\„ d\e6ƒZLG d]d^„ d^e6ƒZMG d_d`„ d`e6ƒZNG dadb„ dbe6ƒZOG dcdd„ dde6ƒZPG dedf„ dfe6ƒZQG dgdh„ dhe6ƒZRG didj„ dje6ƒZSG dkdl„ dle6ƒZTG dmdn„ dne6ƒZUG dodp„ dpe6ƒZVG dqdr„ dre6ƒZWG dsdt„ dte6ƒZXG dudv„ dve6ƒZYG dwdx„ dxe6ƒZZG dydz„ dze6ƒZ[G d{d|„ d|e6ƒZ\G d}d~„ d~e6ƒZ]G dd€„ d€e6ƒZ^G d�d‚„ d‚e6ƒZ_G dƒd„„ d„e6ƒZ`G d…d†„ d†e6ƒZaG d‡dˆ„ dˆe6ƒZbG d‰dŠ„ dŠe6ƒZcG d‹dŒ„ dŒe6ƒZdG d�dŽ„ dŽe6ƒZeG d�d�„ d�e6ƒZfG d‘d’„ d’e6ƒZgG d“d”„ d”e6ƒZhG d•d–„ d–e6ƒZiG d—d˜„ d˜e6ƒZjG d™dš„ dše6ƒZkG d›dœ„ dœe6ƒZlG d�dž„ dže6ƒZmG dŸd „ d e6ƒZnG d¡d¢„ d¢e6ƒZoG d£d¤„ d¤e6ƒZpG d¥d¦„ d¦e6ƒZqG d§d¨„ d¨e6ƒZrd©dª„ Zsd«d¬„ Ztd­d®„ Zud¯d°„ Zvd±d²„ Zwd³d´„ Zxe	jyjzdµd¶„ ƒZ{d·d¸„ Z|d¹dº„ Z}dæd¼d½„Z~e	jyj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ØdÙ„ Z�dÚdÛ„ ZŽdÜdÝ„ Z�e	jyj�dÞdß„ ƒZ‘dàdá„ Z’dâdã„ Z“dädå„ Z”dS )çzG
Tests for SARIMAX models

Author: Chad Fulton
License: Simplified-BSD
é    N)ÚPLATFORM_WIN)ÚsarimaxÚtoolsé   )Úresults_sarimax)Úadd_constant)ÚBunch)Úassert_Úassert_equalÚassert_almost_equalÚassert_raisesÚassert_allcloseÚresultszresults_realgdpar_stata.csvzresults_sarimax_coverage.csvc                   @   sT   e Zd ZdZe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 )ÚTestSARIMAXStatsmodelsz™
    Test ARIMA model using SARIMAX class against statsmodels ARIMA class

    Notes
    -----

    Standard errors are quite good for the OPG case.
    c                 C   s„   t j| _| jd }tƒ }d|_d|_d|_d|_t 	dddg¡|_
t 	d	d
dg¡|_|| _tj|ddddd�| _| jjdd�| _d S )NÚdatagÖIÍö=ë`ÀgÖIÍö=kq@gEsäÊ8r@g	V�qY´q@g°FÉí�þç?g%XÁŠùë?gEüP‘^Ú¿gÆ#†W±Ò?gÛBÂ½S°?g¨mä6ñ@¿?©r   r   r   ÚcT)ÚorderÚtrendÚsimple_differencingÚhamilton_representationéÿÿÿÿ©Údisp)r   Úwpi1_stationaryÚtruer   ÚllfÚaicÚbicÚhqicÚnpÚarrayÚparamsÚbseÚresult_ar   ÚSARIMAXZmodel_bÚfitÚresult_b)ÚclsÚendogr$   © r*   úf/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/tsa/statespace/tests/test_sarimax.pyÚsetup_class+   s    

þz"TestSARIMAXStatsmodels.setup_classc                 C   s   t | jj| jjƒ d S ©N)r   r'   r   r$   ©Úselfr*   r*   r+   Útest_loglike?   s    z#TestSARIMAXStatsmodels.test_loglikec                 C   s   t | jj| jjƒ d S r-   )r   r'   r   r$   r.   r*   r*   r+   Útest_aicB   s    zTestSARIMAXStatsmodels.test_aicc                 C   s   t | jj| jjƒ d S r-   )r   r'   r   r$   r.   r*   r*   r+   Útest_bicE   s    zTestSARIMAXStatsmodels.test_bicc                 C   s   t | jj| jjƒ d S r-   )r   r'   r   r$   r.   r*   r*   r+   Ú	test_hqicH   s    z TestSARIMAXStatsmodels.test_hqicc                 C   sB   | j j ¡ }d|d  |d  |d< t| jjd d… |dd� d S )Nr   r   r   g-Cëâ6
?©Úatol)r$   r"   Úcopyr   r'   )r/   Zparams_ar*   r*   r+   Útest_mleK   s    zTestSARIMAXStatsmodels.test_mlec                 C   s@   | j jdd�}| ¡ d }t|dd… | jjdd … dd� d S )NT©Zapprox_complex_stepç      à?r   r   çñhãˆµøä>r4   )r'   Ú_cov_params_approxÚdiagonalr   r$   r#   )r/   Zcpar#   r*   r*   r+   Útest_bseR   s    zTestSARIMAXStatsmodels.test_bsec                 C   s.   dd l m  m} | | j¡ | | j¡ d S )Nr   )Zstatsmodels.tools._testingr   Z_testingZcheck_ttest_tvaluesr'   Zcheck_ftest_pvalues)r/   Zsmtr*   r*   r+   Útest_t_testX   s    z"TestSARIMAXStatsmodels.test_t_testN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr,   r0   r1   r2   r3   r7   r=   r>   r*   r*   r*   r+   r   "   s   
r   c                   @   s,   e Zd ZdZedd„ ƒZdd„ Zdd„ ZdS )	ÚTestRealGDPARStatazË
    Includes tests of filtered states and standardized forecast errors.

    Notes
    -----
    Could also test the usual things like standard errors, etc. but those are
    well-tested elsewhere.
    c                 C   s`   t  td ¡ ¡ dd … j}tj|dddd�| _ddd	d
dddddddddg}| j |¡| _	d S )NÚvaluer   )é   r   r   ÚnT)r   r   r   g.*˜çwÚ?gd¤r°
È?gã™D{Ä�¿g	rŠmÖ	…¿gØEò¦¢¿g¨¸?Q¸¢½?g³1Dˆ
Yš?g�f4f¿gœª÷+ÏIÁ?g‚Ëß”$¶?gMÊQ>Æ±?g=é+å[»¿gªÆ�rø?)
r    ÚlogÚrealgdp_resultsÚdiffÚvaluesr   r%   ÚmodelÚfilterr   )r(   Zdlgdpr"   r*   r*   r+   r,   i   s&    
ÿ          ýzTestRealGDPARStata.setup_classc                 C   s@   t dƒD ]2}ttjdd … d|d   | jjj| dd� qd S )NrF   r   zu%dç�íµ ÷Æ°>r4   )Úranger   rI   Úilocr   Úfilter_resultsÚfiltered_state)r/   Úir*   r*   r+   Útest_filtered_statev   s    ýz&TestRealGDPARStata.test_filtered_statec                 C   s*   t tjdd … d | jjjd dd� d S )Nr   Zrstdr   çü©ñÒMbP?r4   )r   rI   rP   r   rQ   Ústandardized_forecasts_errorr.   r*   r*   r+   Ú!test_standardized_forecasts_error~   s
    ýz4TestRealGDPARStata.test_standardized_forecasts_errorN)r?   r@   rA   rB   rC   r,   rT   rW   r*   r*   r*   r+   rD   `   s
   
rD   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚSARIMAXStataTestsc                 C   s   t | jj| jd dƒ d S )NZloglikeé   )r   Úresultr   r   r.   r*   r*   r+   r0   ‡   s
     þzSARIMAXStataTests.test_loglikec                 C   s   t | jj| jd dƒ d S )Nr   é   )r   rZ   r   r   r.   r*   r*   r+   r1   �   s
     þzSARIMAXStataTests.test_aicc                 C   s   t | jj| jd dƒ d S )Nr   r[   ©r   rZ   r   r   r.   r*   r*   r+   r2   “   s
     þzSARIMAXStataTests.test_bicc                 C   sF   d| j j dt t | j j¡¡ | j jjd   }t| j j|dƒ d S )Néþÿÿÿé   r   r[   )	rZ   r   r    rH   Znobs_effectiver"   Úshaper   r   )r/   r   r*   r*   r+   r3   ™   s    
ÿÿÿ þzSARIMAXStataTests.test_hqicc                 C   s&   | j j}d | j _| j j}t||ƒ d S r-   )rZ   rV   Z_standardized_forecasts_errorr   )r/   Z
cython_sfeZ
python_sfer*   r*   r+   rW   ¤   s    z3SARIMAXStataTests.test_standardized_forecasts_errorN)r?   r@   rA   r0   r1   r2   r3   rW   r*   r*   r*   r+   rX   †   s
   rX   c                   @   s$   e Zd ZdZedd„ ƒZdd„ ZdS )ÚARIMAz?
    ARIMA model

    Stata arima documentation, Example 1
    c                 O   s�   || _ |d }| dd¡ | dd¡ tj|f|ždddœ|—Ž| _d|d	 d
  |d d
  }tj||d	 |d |d f }| j |¡| _d S )Nr   r   Tr   r   r   ©r   r   r   Ú	params_arr   Úparams_meanÚ	params_maÚparams_variance)	r   Ú
setdefaultr   r%   rL   r    Úr_rM   rZ   ©r(   r   ÚargsÚkwargsr)   Z	interceptr"   r*   r*   r+   r,   ±   s    ÿ
ÿÿzARIMA.setup_classc                 C   s&   | j jdd�}t|j| jjdd� d S ©Nr   r   rU   r4   ©rL   r&   r   r"   rZ   ©r/   rZ   r*   r*   r+   r7   Ä   s     þzARIMA.test_mleN©r?   r@   rA   rB   rC   r,   r7   r*   r*   r*   r+   r`   «   s   
r`   c                       sD   e Zd ZdZe‡ fdd„ƒZdd„ Zdd„ Zdd	„ Zd
d„ Z	‡  Z
S )ÚTestARIMAStationaryúr
    Notes
    -----

    Standard errors are very good for the OPG and complex step approximation
    cases.
    c                    s   t t| ƒ tj¡ d S r-   )Úsuperro   r,   r   r   ©r(   ©Ú	__class__r*   r+   r,   Ô   s    
ÿzTestARIMAStationary.setup_classc                 C   sf   t | jjdƒ t | jjdƒ t | jjdƒ t| jjd | jd dd� t| jjd | jd	 dd� d S ©
NÚopgTFr   Ú	se_ar_opgçH¯¼šò×z>r4   r^   Ú	se_ma_opg©r
   rZ   Úcov_typeZ_cov_approx_complex_stepZ_cov_approx_centeredr   r#   r   r.   r*   r*   r+   r=   Ú   s
    zTestARIMAStationary.test_bsec                 C   sJ   | j jdd� ¡ d }t|d | jd dd� t|d | jd	 dd� d S )
NTr8   r9   r   Ú	se_ar_oimrx   r4   r^   Ú	se_ma_oim©rZ   r;   r<   r   r   ©r/   r#   r*   r*   r+   Útest_bse_approxã   s    ÿÿz#TestARIMAStationary.test_bse_approxc                 C   sD   | j j ¡ d }t|d | jd dd� t|d | jd dd� d S )	Nr9   r   r|   rU   r4   r^   r}   ç{®Gáz„?©rZ   Úcov_params_oimr<   r   r   ©r/   Zoim_bser*   r*   r+   Útest_bse_oimû   s    z TestARIMAStationary.test_bse_oimc                 C   sn   | j j ¡ d }| j j}| ¡ d }tj| jd | jd f }t|dd… |dd� t|dd… |dd� d S )	Nr9   Zse_ar_robustZse_ma_robustr   r[   r�   r4   rU   )rZ   Úcov_params_robust_oimr<   Úcov_params_robust_approxr    rg   r   r   )r/   Zrobust_oim_bseZcpraZrobust_approx_bseZtrue_robust_bser*   r*   r+   Útest_bse_robust  s    ÿz#TestARIMAStationary.test_bse_robust)r?   r@   rA   rB   rC   r,   r=   r€   r…   rˆ   Ú__classcell__r*   r*   rs   r+   ro   Ì   s   	ro   c                       s<   e Zd ZdZe‡ fdd„ƒZdd„ Zdd„ Zdd	„ Z‡  Z	S )
ÚTestARIMADiffuseú…
    Notes
    -----

    Standard errors are very good for the OPG and quite good for the complex
    step approximation cases.
    c                    s0   d|d< t jd |d< tt| ƒjt jf|Ž d S )NÚapproximate_diffuseÚinitializationÚinitial_variance)r   Zwpi1_diffuserq   rŠ   r,   )r(   rj   rs   r*   r+   r,     s    ÿÿzTestARIMADiffuse.setup_classc                 C   sf   t | jjdƒ t | jjdƒ t | jjdƒ t| jjd | jd dd� t| jjd | jd	 dd� d S ru   rz   r.   r*   r*   r+   r=     s
    zTestARIMADiffuse.test_bsec                 C   sJ   | j jdd� ¡ d }t|d | jd dd� t|d | jd	 dd� d S )
NTr8   r9   r   r|   ç-Cëâ6?r4   r^   r}   r~   r   r*   r*   r+   r€   '  s    ÿÿz TestARIMADiffuse.test_bse_approxc                 C   sF   | j  ¡  ¡ d }t|d | jd dd� t|d | jd dd� d S )	Nr9   r   r|   r�   r4   r^   r}   çš™™™™™¹?©rZ   Z_cov_params_oimr<   r   r   r   r*   r*   r+   r…   ?  s    zTestARIMADiffuse.test_bse_oim©
r?   r@   rA   rB   rC   r,   r=   r€   r…   r‰   r*   r*   rs   r+   rŠ     s   	rŠ   c                   @   s$   e Zd ZdZedd„ ƒZdd„ ZdS )ÚAdditiveSeasonalz^
    ARIMA model with additive seasonal effects

    Stata arima documentation, Example 2
    c                 O   s–   || _ t |d ¡}| dd¡ | dd¡ tj|f|ždddœ|—Ž| _d|d	 d
  |d d
  }tj||d	 |d |d f }| j |¡| _	d S )Nr   r   Tr   )r   r   )r   r   r   r   r   ra   r   rb   r   rc   rd   re   ©
r   r    rH   rf   r   r%   rL   rg   rM   rZ   rh   r*   r*   r+   r,   L  s&    ÿÿ ÿÿÿzAdditiveSeasonal.setup_classc                 C   s&   | j jdd�}t|j| jjdd� d S rk   rl   rm   r*   r*   r+   r7   `  s     þzAdditiveSeasonal.test_mleNrn   r*   r*   r*   r+   r“   F  s   
r“   c                       s<   e Zd ZdZe‡ fdd„ƒZdd„ Zdd„ Zdd	„ Z‡  Z	S )
ÚTestAdditiveSeasonalr‹   c                    s   t t| ƒ tj¡ d S r-   )rq   r•   r,   r   Zwpi1_seasonalrr   rs   r*   r+   r,   p  s    
ÿz TestAdditiveSeasonal.setup_classc                 C   sj   t | jjdƒ t | jjdƒ t | jjdƒ t| jjd | jd dd� t| jjdd	… | jd
 dd� d S )Nrv   TFr   rw   rN   r4   r^   rY   ry   r:   rz   r.   r*   r*   r+   r=   v  s    ÿzTestAdditiveSeasonal.test_bsec                 C   sN   | j jdd� ¡ d }t|d | jd dd� t|dd	… | jd
 dd� d S )NTr8   r9   r   r|   r�   r4   r^   rY   r}   r~   r   r*   r*   r+   r€   €  s    ÿÿz$TestAdditiveSeasonal.test_bse_approxc                 C   sJ   | j  ¡  ¡ d }t|d | jd dd� t|dd… | jd d	d� d S )
Nr9   r   r|   r�   r4   r^   rY   r}   r�   r‘   r   r*   r*   r+   r…   ™  s    z!TestAdditiveSeasonal.test_bse_oimr’   r*   r*   rs   r+   r•   h  s   
r•   c                   @   s$   e Zd ZdZedd„ ƒZdd„ ZdS )ÚAirlinez`
    Multiplicative SARIMA model: "Airline" model

    Stata arima documentation, Example 3
    c                 O   sz   || _ t |d ¡}| dd¡ | dd¡ tj|f|žddddœ|—Ž| _tj|d	 |d
 |d f }| j |¡| _	d S )Nr   r   Tr   )r   r   r   )r   r   r   rF   rG   )r   Úseasonal_orderr   rd   Zparams_seasonal_mare   r”   )r(   r   ri   rj   r)   r"   r*   r*   r+   r,   ¦  s&    ÿþ þþÿzAirline.setup_classc              	   C   sD   t  ¡ �2 t  d¡ | jjdd�}t|j| jjdd� W 5 Q R X d S )NÚignorer   r   r�   r4   )ÚwarningsÚcatch_warningsÚsimplefilterrL   r&   r   r"   rZ   rm   r*   r*   r+   r7   ¸  s    

 þzAirline.test_mleNrn   r*   r*   r*   r+   r–      s   
r–   c                       s<   e Zd ZdZe‡ fdd„ƒZdd„ Zdd„ Zdd	„ Z‡  Z	S )
ÚTestAirlineHamiltonrp   c                    s   t t| ƒ tj¡ d S r-   )rq   rœ   r,   r   Úair2_stationaryrr   rs   r*   r+   r,   Ë  s    
ÿzTestAirlineHamilton.setup_classc                 C   sf   t | jjdƒ t | jjdƒ t | jjdƒ t| jjd | jd dd� t| jjd | jd	 dd� d S ©
Nrv   TFr   ry   rN   r4   r   Zse_seasonal_ma_opgrz   r.   r*   r*   r+   r=   Ñ  s    ÿzTestAirlineHamilton.test_bsec                 C   sJ   | j jdd� ¡ d }t|d | jd dd� t|d | jd	 dd� d S ©
NTr8   r9   r   r}   rN   r4   r   Úse_seasonal_ma_oimr~   r   r*   r*   r+   r€   Û  s    ÿÿz#TestAirlineHamilton.test_bse_approxc                 C   sD   | j j ¡ d }t|d | jd dd� t|d | jd dd� d S ©Nr9   r   r}   r�   r4   r   r    r‚   r„   r*   r*   r+   r…   ö  s    z TestAirlineHamilton.test_bse_oimr’   r*   r*   rs   r+   rœ   Ã  s   
rœ   c                       s<   e Zd ZdZe‡ fdd„ƒZdd„ Zdd„ Zdd	„ Z‡  Z	S )
ÚTestAirlineHarveyrp   c                    s   t t| ƒjtjdd� d S )NF)r   )rq   r¢   r,   r   r�   rr   rs   r*   r+   r,     s    
 ÿzTestAirlineHarvey.setup_classc                 C   sf   t | jjdƒ t | jjdƒ t | jjdƒ t| jjd | jd dd� t| jjd | jd	 dd� d S rž   rz   r.   r*   r*   r+   r=     s    ÿzTestAirlineHarvey.test_bsec                 C   sJ   | j jdd� ¡ d }t|d | jd dd� t|d | jd	 dd� d S rŸ   r~   r   r*   r*   r+   r€     s    ÿÿz!TestAirlineHarvey.test_bse_approxc                 C   sD   | j j ¡ d }t|d | jd dd� t|d | jd dd� d S r¡   r‚   r„   r*   r*   r+   r…   0  s    zTestAirlineHarvey.test_bse_oimr’   r*   r*   rs   r+   r¢   ý  s   
r¢   c                       sL   e Zd ZdZe‡ fdd„ƒZdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
‡  ZS )ÚTestAirlineStateDifferencingr‹   c                    s   t t| ƒjtjddd� d S )NF)r   r   )rq   r£   r,   r   r�   rr   rs   r*   r+   r,   ?  s
    
 þz(TestAirlineStateDifferencing.setup_classc                 C   s   t | jj| jd dƒ d S )Nr   r   r\   r.   r*   r*   r+   r2   F  s
     þz%TestAirlineStateDifferencing.test_bicc                 C   s*   | j jdddd�}t|j| jjdd� d S )NÚnmiè  r   )ÚmethodÚmaxiterr   rU   r4   rl   rm   r*   r*   r+   r7   O  s     þz%TestAirlineStateDifferencing.test_mlec                 C   sf   t | jjdƒ t | jjdƒ t | jjdƒ t| jjd | jd dd� t| jjd | jd	 dd� d S rž   rz   r.   r*   r*   r+   r=   U  s    ÿz%TestAirlineStateDifferencing.test_bsec                 C   sJ   | j jdd� ¡ d }t|d | jd dd� t|d | jd	 dd� d S )
NTr8   r9   r   r}   r�   r4   r   r    r~   r   r*   r*   r+   r€   _  s    ÿÿz,TestAirlineStateDifferencing.test_bse_approxc                 C   sD   | j j ¡ d }t|d | jd dd� t|d | jd dd� d S r¡   r‚   r„   r*   r*   r+   r…   y  s    z)TestAirlineStateDifferencing.test_bse_oim)r?   r@   rA   rB   rC   r,   r2   r7   r=   r€   r…   r‰   r*   r*   rs   r+   r£   7  s   	
r£   c                   @   s   e Zd ZdZeddd„ƒZdS )ÚFriedmanzb
    ARMAX model: Friedman quantity theory of money

    Stata arima documentation, Example 4
    Nc                 O   sš   || _ tj|d d  }|d kr0t|d d ƒ}| dd¡ | dd¡ tj|f|ž|ddœ|—Ž| _tj|d	 |d
 |d |d f }| j |¡| _	d S )Nr   ÚconsumpÚm2r   Tr   ©r   r   r   ©Úexogr   Úparams_exogrb   rd   re   )
r   r    rg   r   rf   r   r%   rL   rM   rZ   )r(   r   r¬   ri   rj   r)   r"   r*   r*   r+   r,   †  s*    ÿÿ ÿÿ ÿzFriedman.setup_class)N)r?   r@   rA   rB   rC   r,   r*   r*   r*   r+   r§   €  s   r§   c                       sD   e Zd ZdZe‡ fdd„ƒZdd„ Zdd„ Zdd	„ Zd
d„ Z	‡  Z
S )ÚTestFriedmanMLERegressionrp   c                    s   t t| ƒ tj¡ d S r-   )rq   r®   r,   r   Úfriedman2_mlerr   rs   r*   r+   r,   ¢  s    
ÿz%TestFriedmanMLERegression.setup_classc                 C   s6   | j jdd�}|j| jj }t|t d¡ddd� d S )Nr   r   é   r�   rU   ©r5   Úrtol)rL   r&   r"   rZ   r   r    Úones)r/   rZ   Úratior*   r*   r+   r7   ¨  s    z"TestFriedmanMLERegression.test_mlec                 C   s†   t | jjdƒ t | jjdƒ t | jjdƒ t| jjdd… | jd dd� t| jjd | jd	 d
d� t| jjd | jd d
d� d S )Nrv   TFr   r^   Úse_exog_opgr�   r4   rw   rN   r[   ry   rz   r.   r*   r*   r+   r=   ®  s    ÿz"TestFriedmanMLERegression.test_bsec                 C   sf   | j jdd� ¡ d }t|dd… | jd dd� t|d | jd	 d
d� t|d | jd d
d� d S )NTr8   r9   r   r^   Úse_exog_oimr�   r4   r|   rN   r[   r}   r~   r   r*   r*   r+   r€   ¹  s    ÿÿz)TestFriedmanMLERegression.test_bse_approxc                 C   s|   | j j ¡ d }t|d | jd d dd� t|d | jd d dd� t|d | jd	 dd� t|d
 | jd dd� d S )Nr9   r   r¶   r   ©r²   r�   r4   r^   r|   r[   r}   r‚   r   r*   r*   r+   r…   ×  s
    z&TestFriedmanMLERegression.test_bse_oim)r?   r@   rA   rB   rC   r,   r7   r=   r€   r…   r‰   r*   r*   rs   r+   r®   š  s   r®   c                       sd   e Zd ZdZe‡ f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‡  ZS )ÚTestFriedmanStateRegressiona@  
    Notes
    -----

    MLE is not very close and standard errors are not very close for any set of
    parameters.

    This is likely because we're comparing against the model where the
    regression coefficients are also estimated by MLE. So this test should be
    considered just a very basic "sanity" test.
    c                    s¤   t tjƒ}t|d d ƒd }|d d d … |d< |d d d … |d< g |d< g |d< tt| ƒj||d	d
� tj|d |d |d |d f | _	| j
 | j	¡| _d S )Nr   r©   ç      $@r­   Úmle_params_exogrµ   Zmle_se_exogZse_exogF)r¬   Úmle_regressionrb   rd   re   )Údictr   r¯   r   rq   r¸   r,   r    rg   Útrue_paramsrL   rM   rZ   )r(   r   r¬   rs   r*   r+   r,   ì  s     

  ÿ ÿz'TestFriedmanStateRegression.setup_classc                 C   s(   | j jdd�}t|j| jjddd� d S )Nr   r   r�   çš™™™™™É?r±   rl   rm   r*   r*   r+   r7     s      þz$TestFriedmanStateRegression.test_mlec                 C   s,   t | jjjdd …df d | jd dƒ d S )Nr]   r   r¹   rº   r   )r   rZ   rQ   rR   r   r.   r*   r*   r+   Útest_regression_parameters	  s
    	 þz6TestFriedmanStateRegression.test_regression_parametersc                 C   s   d S r-   r*   r.   r*   r*   r+   r0     s    z(TestFriedmanStateRegression.test_loglikec                 C   s   d S r-   r*   r.   r*   r*   r+   r1     s    z$TestFriedmanStateRegression.test_aicc                 C   s   d S r-   r*   r.   r*   r*   r+   r2     s    z$TestFriedmanStateRegression.test_bicc                 C   sf   t | jjdƒ t | jjdƒ t | jjdƒ t| jjd | jd dd� t| jjd | jd	 dd� d S )
Nrv   TFr   rw   r�   r4   r   ry   rz   r.   r*   r*   r+   r=   "  s
    z$TestFriedmanStateRegression.test_bsec                 C   sJ   | j jdd� ¡ d }t|d | jd dd� t|d | jd	 dd� d S )
NTr8   r9   r   r|   r�   r4   r   r}   r~   r   r*   r*   r+   r€   +  s    ÿÿz+TestFriedmanStateRegression.test_bse_approxc                 C   sF   | j  ¡  ¡ d }t|d | jd dd� t|d | jd dd� d S )Nr9   r   r|   r�   r4   r   r}   r‘   r   r*   r*   r+   r…   D  s    z(TestFriedmanStateRegression.test_bse_oim)r?   r@   rA   rB   rC   r,   r7   r¿   r0   r1   r2   r=   r€   r…   r‰   r*   r*   rs   r+   r¸   à  s   	r¸   c                       sL   e Zd ZdZe‡ fdd„ƒZdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
‡  ZS )ÚTestFriedmanPredictaõ  
    ARMAX model: Friedman quantity theory of money, prediction

    Stata arima postestimation documentation, Example 1 - Dynamic forecasts

    This follows the given Stata example, although it is not truly forecasting
    because it compares using the actual data (which is available in the
    example but just not used in the parameter MLE estimation) against dynamic
    prediction of that data. Here `test_predict` matches the first case, and
    `test_dynamic_predict` matches the second.
    c                    s   t t| ƒ tj¡ d S r-   )rq   rÀ   r,   r   Úfriedman2_predictrr   rs   r*   r+   r,   W  s    
ÿzTestFriedmanPredict.setup_classc                 C   s   d S r-   r*   r.   r*   r*   r+   r0   `  s    z TestFriedmanPredict.test_loglikec                 C   s   d S r-   r*   r.   r*   r*   r+   r1   c  s    zTestFriedmanPredict.test_aicc                 C   s   d S r-   r*   r.   r*   r*   r+   r2   f  s    zTestFriedmanPredict.test_bicc                 C   s   t | j ¡ | jd dƒ d S )NÚpredictr[   )r   rZ   rÂ   r   r.   r*   r*   r+   Útest_predicti  s
     þz TestFriedmanPredict.test_predictc                 C   s:   t | jd d ƒd d }t| jj|d�| jd dƒ d S )Nr   r¨   é   r   ©ÚdynamicZdynamic_predictr[   )Úlenr   r   rZ   rÂ   )r/   rÆ   r*   r*   r+   Útest_dynamic_predicto  s     þz(TestFriedmanPredict.test_dynamic_predict)r?   r@   rA   rB   rC   r,   r0   r1   r2   rÃ   rÈ   r‰   r*   r*   rs   r+   rÀ   K  s   rÀ   c                       sL   e Zd ZdZe‡ fdd„ƒZdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
‡  ZS )ÚTestFriedmanForecasta  
    ARMAX model: Friedman quantity theory of money, forecasts

    Variation on:
    Stata arima postestimation documentation, Example 1 - Dynamic forecasts

    This is a variation of the Stata example, in which the endogenous data is
    actually made to be missing so that the predict command must forecast.

    As another unit test, we also compare against the case in State when
    predict is used against missing data (so forecasting) with the dynamic
    option also included. Note, however, that forecasting in State space models
    amounts to running the Kalman filter against missing datapoints, so it is
    not clear whether "dynamic" forecasting (where instead of missing
    datapoints for lags, we plug in previous forecasted endog values) is
    meaningful.
    c                    sŒ   t tjƒ}|d d dd … |d d dd … dœ|d< |d d d d… |d d d d… dœ|d< tt| ƒ |¡ | j | jj	¡| _d S )Nr   r¨   iñÿÿÿr©   )r¨   r©   Úforecast_data)
r¼   r   rÁ   rq   rÉ   r,   rL   rM   rZ   r"   )r(   r   rs   r*   r+   r,   ‰  s    
þ
þ
z TestFriedmanForecast.setup_classc                 C   s   d S r-   r*   r.   r*   r*   r+   r0   �  s    z!TestFriedmanForecast.test_loglikec                 C   s   d S r-   r*   r.   r*   r*   r+   r1      s    zTestFriedmanForecast.test_aicc                 C   s   d S r-   r*   r.   r*   r*   r+   r2   £  s    zTestFriedmanForecast.test_bicc                 C   sN   t | jd d ƒd d }t| jd d ƒ}t| jj||d�| jd d	ƒ d S )
Nr   r¨   rÄ   r   rÊ   r©   )Úendr¬   Úforecastr[   ©rÇ   r   r   r   rZ   rÂ   )r/   rË   r¬   r*   r*   r+   Útest_forecast¦  s     þz"TestFriedmanForecast.test_forecastc                 C   sf   t | jd d ƒd d }t | jd d ƒd }t| jd d ƒ}t| jj|||d�| jd d	ƒ d S )
Nr   r¨   rÄ   r   rÊ   r©   )rË   rÆ   r¬   Zdynamic_forecastr[   rÍ   )r/   rË   rÆ   r¬   r*   r*   r+   Útest_dynamic_forecast®  s     þz*TestFriedmanForecast.test_dynamic_forecast)r?   r@   rA   rB   rC   r,   r0   r1   r2   rÎ   rÏ   r‰   r*   r*   rs   r+   rÉ   w  s   rÉ   c                   @   sZ   e Zd Zeddd„ƒZdd„ Zdd„ Zd	d
„ Zdd„ Ze	j
jdd„ ƒZdd„ Zdd„ ZdS )ÚSARIMAXCoverageTestrY   Nc                 O   sŽ   |d krt j}tj| d | _t dd„ tj| d  d¡D ƒ¡| _| jd d | jd< || _	| 
dd	¡ | 
d
d	¡ tj|f|ž|Ž| _d S )Nr   c                 S   s   g | ]}t |ƒ‘qS r*   )Úfloat)Ú.0Úxr*   r*   r+   Ú
<listcomp>Á  s    z3SARIMAXCoverageTest.setup_class.<locals>.<listcomp>Ú
parametersú,r   r^   r   Tr   )r   Ú	wpi1_dataÚcoverage_resultsÚlocÚtrue_logliker    r!   Úsplitr½   Údecimalrf   r   r%   rL   )r(   rS   rÜ   r)   ri   rj   r*   r*   r+   r,   ¹  s    
ÿ
zSARIMAXCoverageTest.setup_classc                 C   s4   | j  | j¡| _t| jj| jdd| j   d� d S )Ngffffffæ?é
   r4   )rL   rM   r½   rZ   r   r   rÚ   rÜ   r.   r*   r*   r+   r0   Ð  s    ýz SARIMAXCoverageTest.test_loglikec                 C   s<   | j j}| j j}d| j _d| j _| j j || j _|| j _d S )NF)rL   Úenforce_stationarityÚenforce_invertibilityÚstart_params)r/   ÚstatÚinvr*   r*   r+   Útest_start_paramsÙ  s    z%SARIMAXCoverageTest.test_start_paramsc                 C   s*  | j }|j|j }}| j}| | j¡ |j}|j}|| ¡  }|jdksft	 
tjd|dd …  f ¡oŽt|ƒdkpŽt	 
tjd|dd …  f ¡|_|j}|j}	|	|	 ¡  }
|jdksÐt	 
tjd|dd … f ¡oöt|
ƒdkpöt	 
tjd|
dd … f ¡|_| |¡}| |¡}t||dƒ ||_||_d S )Nr   r   rY   )rL   rÞ   rß   r½   ÚupdateÚpolynomial_arÚpolynomial_seasonal_arZnonzeroÚk_arr   Zis_invertibler    rg   rÇ   Úpolynomial_maÚpolynomial_seasonal_maÚk_maZuntransform_paramsZtransform_paramsr   )r/   rL   rá   râ   Ztrue_constrainedÚparZpsarZcontracted_psarZpmaZpsmaZcontracted_psmaZunconstrainedZconstrainedr*   r*   r+   Útest_transform_untransformä  s.    (ý&ý

z.SARIMAXCoverageTest.test_transform_untransformc                 C   sN   | j  | j¡| _| j ¡  | jj | jj | jj | jj | jj	 | jj
 d S r-   )rL   rM   r½   rZ   ÚsummaryÚcov_params_defaultZcov_params_approxrƒ   Úcov_params_opgr†   r‡   r.   r*   r*   r+   Útest_results  s    
z SARIMAXCoverageTest.test_resultsc                 C   s   | j  | j¡| _| j ¡  d S r-   )rL   rM   r½   rZ   Úplot_diagnostics)r/   Zclose_figuresr*   r*   r+   Útest_plot_diagnostics  s    z)SARIMAXCoverageTest.test_plot_diagnosticsc                 C   sz  | j  | j¡}| ¡ }t|j| j jfƒ |jddd�}t|jdƒ |jdddd�}t|jdƒ | j jdkrÚ|j| j j| j jd dd�}t|jdƒ |j| j j| j jd dd�}| ¡ }t|jdƒ | d¡}t|jd	ƒ nœ| j j}t	j
dg| d
   d
|¡}|j| j j| j jd d|d�}t|jdƒ |j| j j| j jd d|d�}t	j
dg|   d|¡}|j|d�}t|jdƒ d S )NrÝ   é   ©ÚstartrË   )é   )rõ   rË   rÆ   r   iöÿÿÿ©r   )rÝ   rö   ©rõ   rË   rÆ   r¬   r   ©r¬   )rL   rM   r½   rÂ   r
   r_   ÚnobsÚk_exogrÌ   r    rg   Zreshape)r/   rZ   rÂ   rÌ   rû   r¬   r*   r*   r+   rÃ     sJ    

 ÿ

 ÿ


 þ

 þz SARIMAXCoverageTest.test_predictc           	      C   sl   | j }| j  ¡ }|jj}|jj}tj||f|Ž}| j  | j¡}| | j¡}t	rRdnd}t
|j|j|d� d S ©NrN   g‚vIhÂ%<=r·   )rL   Ú_get_init_kwdsr   Ú
orig_endogÚ	orig_exogr   r%   rM   r½   r   r   r   ©	r/   Úmod1rj   r)   r¬   Zmodel2Úres1Úres2r²   r*   r*   r+   Útest_init_keys_replicateH  s    
z,SARIMAXCoverageTest.test_init_keys_replicate)rY   N)r?   r@   rA   rC   r,   r0   rã   rì   rð   ÚpytestÚmarkÚ
matplotlibrò   rÃ   r  r*   r*   r*   r+   rÐ   ¸  s   	#
,rÐ   c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_arc                    s"   d|d< t t| ƒjd|ž|Ž d S )N©r[   r   r   r   r   )r   )rq   r  r,   ©r(   ri   rj   rs   r*   r+   r,   Z  s    zTest_ar.setup_class©r?   r@   rA   rC   r,   r‰   r*   r*   rs   r+   r  V  s   r  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_ar_as_polynomialc                    s.   dddgddf|d< t t| ƒjd|ž|Ž d S )Nr   r   r   )r   )rq   r  r,   r
  rs   r*   r+   r,   d  s    z!Test_ar_as_polynomial.setup_classr  r*   r*   rs   r+   r  `  s   r  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_ar_trend_cc                    sR   d|d< d|d< t t| ƒjd|ž|Ž | j}d|dd…  ¡  |d  | jd< d S )	Nr	  r   r   r   r   rY   r   )r   )rq   r  r,   r½   Úsum©r(   ri   rj   Útpsrs   r*   r+   r,   n  s
    zTest_ar_trend_c.setup_classr  r*   r*   rs   r+   r  j  s   r  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_ar_trend_ctc                    sZ   d|d< d|d< t t| ƒjd|ž|Ž | j}d|dd…  ¡  |d d…  | jd d…< d S )	Nr	  r   Úctr   r^   r   r°   )r^   )rq   r  r,   r½   r  r  rs   r*   r+   r,   }  s
    zTest_ar_trend_ct.setup_classr  r*   r*   rs   r+   r  y  s   r  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_ar_trend_polynomialc                    sb   d|d< ddddg|d< t t| ƒjd	|ž|Ž | j}d|dd…  ¡  |d d…  | jd d…< d S )
Nr	  r   r   r   r   r[   r^   r°   )r[   )rq   r  r,   r½   r  r  rs   r*   r+   r,   Œ  s
    z$Test_ar_trend_polynomial.setup_classr  r*   r*   rs   r+   r  ˆ  s   r  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_ar_diffc                    s"   d|d< t t| ƒjd|ž|Ž d S )N)r[   r^   r   r   rY   )rY   )rq   r  r,   r
  rs   r*   r+   r,   ›  s    zTest_ar_diff.setup_classr  r*   r*   rs   r+   r  —  s   r  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_ar_seasonal_diffc                    s*   d|d< d|d< t t| ƒjd|ž|Ž d S )Nr	  r   ©r   r^   r   rY   r—   r°   )r°   )rq   r  r,   r
  rs   r*   r+   r,   ¥  s    z!Test_ar_seasonal_diff.setup_classr  r*   r*   rs   r+   r  ¡  s   r  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_ar_diffusec                    s2   d|d< d|d< d|d< t t| ƒjd|ž|Ž d S )	Nr	  r   rŒ   r�   ç    eÍÍArŽ   é   )r  )rq   r  r,   r
  rs   r*   r+   r,   °  s    zTest_ar_diffuse.setup_classr  r*   r*   rs   r+   r  ¬  s   r  c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )ÚTest_ar_no_enforcec                    sL   d|d< d|d< d|d< d|d< d|d	< t t| ƒjd|ž|Ž d| jj_d S )Nr	  r   FrÞ   rß   r  rŽ   r   Úloglikelihood_burnr  )r  )rq   r  r,   rL   Ússmr  r
  rs   r*   r+   r,   ¼  s    zTest_ar_no_enforce.setup_classc           	      C   sx   | j }| j  ¡ }|jj}|jj}tj||f|Ž}|jj|j_| j  	| j
¡}| 	| j
¡}tr^dnd}t|j|j|d� d S rü   )rL   rý   r   rþ   rÿ   r   r%   r  r�   rM   r½   r   r   r   r   r*   r*   r+   r  È  s    
z+Test_ar_no_enforce.test_init_keys_replicate)r?   r@   rA   rC   r,   r  r‰   r*   r*   rs   r+   r  ¸  s   r  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_ar_exogenousc                    s>   d|d< t j}|t |¡ d |d< tt| ƒjd|ž|Ž d S )Nr	  r   r^   r¬   é   )r  )r   r×   r    Úfloorrq   r  r,   ©r(   ri   rj   r)   rs   r*   r+   r,   Ý  s    zTest_ar_exogenous.setup_classr  r*   r*   rs   r+   r  Ù  s   r  c                       s0   e Zd Ze‡ fdd„ƒZdd„ Zdd„ Z‡  ZS )ÚTest_ar_exogenous_in_statec                    sb   d|d< t j}|t |¡ d |d< d|d< tt| ƒjd
|ž|Ž | jd | _| jd	d … | _d S )Nr	  r   r^   r¬   Fr»   r  r   r   )r  )	r   r×   r    r  rq   r!  r,   r½   Útrue_regression_coefficientr   rs   r*   r+   r,   é  s    z&Test_ar_exogenous_in_state.setup_classc                 C   s(   | j  | j¡| _t| jj| jdd� d S )Nr^   r4   )rL   rM   r½   rZ   r   r   rÚ   r.   r*   r*   r+   r0   ó  s    ýz'Test_ar_exogenous_in_state.test_loglikec                 C   s2   | j  | j¡| _t| jjjd d | j| jƒ d S )Nr[   r   )	rL   rM   r½   rZ   r   rQ   rR   r"  rÜ   r.   r*   r*   r+   Útest_regression_coefficientþ  s    ýz6Test_ar_exogenous_in_state.test_regression_coefficient)r?   r@   rA   rC   r,   r0   r#  r‰   r*   r*   rs   r+   r!  å  s   	r!  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_mac                    s"   d|d< t t| ƒjd|ž|Ž d S )N©r   r   r[   r   é   )r&  )rq   r$  r,   r
  rs   r*   r+   r,     s    zTest_ma.setup_classr  r*   r*   rs   r+   r$    s   r$  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_ma_as_polynomialc                    s.   dddddgf|d< t t| ƒjd|ž|Ž d S )Nr   r   r   r&  )r&  )rq   r'  r,   r
  rs   r*   r+   r,     s    z!Test_ma_as_polynomial.setup_classr  r*   r*   rs   r+   r'    s   r'  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_ma_trend_cc                    s*   d|d< d|d< t t| ƒjd|ž|Ž d S )Nr%  r   r   r   é	   )r)  )rq   r(  r,   r
  rs   r*   r+   r,   #  s    zTest_ma_trend_c.setup_classr  r*   r*   rs   r+   r(    s   r(  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_ma_trend_ctc                    s*   d|d< d|d< t t| ƒjd|ž|Ž d S )Nr%  r   r  r   rÝ   )rÝ   )rq   r*  r,   r
  rs   r*   r+   r,   .  s    zTest_ma_trend_ct.setup_classr  r*   r*   rs   r+   r*  *  s   r*  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_ma_trend_polynomialc                    s2   d|d< ddddg|d< t t| ƒjd|ž|Ž d S )Nr%  r   r   r   r   rö   )rö   )rq   r+  r,   r
  rs   r*   r+   r,   9  s    z$Test_ma_trend_polynomial.setup_classr  r*   r*   rs   r+   r+  5  s   r+  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_ma_diffc                    s"   d|d< t t| ƒjd|ž|Ž d S )N)r   r^   r[   r   rF   )rF   )rq   r,  r,   r
  rs   r*   r+   r,   D  s    zTest_ma_diff.setup_classr  r*   r*   rs   r+   r,  @  s   r,  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_ma_seasonal_diffc                    s*   d|d< d|d< t t| ƒjd|ž|Ž d S )Nr%  r   r  r—   é   )r.  )rq   r-  r,   r
  rs   r*   r+   r,   N  s    z!Test_ma_seasonal_diff.setup_classr  r*   r*   rs   r+   r-  J  s   r-  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_ma_diffusec                    s2   d|d< d|d< d|d< t t| ƒjd|ž|Ž d S )	Nr%  r   rŒ   r�   r  rŽ   é   )r0  )rq   r/  r,   r
  rs   r*   r+   r,   Y  s    zTest_ma_diffuse.setup_classr  r*   r*   rs   r+   r/  U  s   r/  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_ma_exogenousc                    s>   d|d< t j}|t |¡ d |d< tt| ƒjd|ž|Ž d S )Nr%  r   r^   r¬   rÄ   )rÄ   )r   r×   r    r  rq   r1  r,   r   rs   r*   r+   r,   e  s    zTest_ma_exogenous.setup_classr  r*   r*   rs   r+   r1  a  s   r1  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )Ú	Test_armac                    s"   d|d< t t| ƒjd|ž|Ž d S )N)r[   r   r[   r   é   )r3  )rq   r2  r,   r
  rs   r*   r+   r,   q  s    zTest_arma.setup_classr  r*   r*   rs   r+   r2  m  s   r2  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_arma_trend_cc                    sZ   d|d< d|d< t t| ƒjd|ž|Ž | j}d|dd…  ¡  |d d…  | jd d…< d S )	N©r[   r   r^   r   r   r   é   r   rY   )r6  )rq   r4  r,   r½   r  r  rs   r*   r+   r,   {  s
    zTest_arma_trend_c.setup_classr  r*   r*   rs   r+   r4  w  s   r4  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_arma_trend_ctc                    sZ   d|d< d|d< t t| ƒjd	|ž|Ž | j}d|dd…  ¡  |d d…  | jd d…< d S )
Nr5  r   r  r   é   r   r^   r°   )r8  )rq   r7  r,   r½   r  r  rs   r*   r+   r,   Š  s
    zTest_arma_trend_ct.setup_classr  r*   r*   rs   r+   r7  †  s   r7  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_arma_trend_polynomialc                    sb   d|d< ddddg|d< t t| ƒjd	|ž|Ž | j}d|dd…  ¡  |d d…  | jd d…< d S )
Nr5  r   r   r   r   é   r^   r°   )r:  )rq   r9  r,   r½   r  r  rs   r*   r+   r,   ™  s
    z&Test_arma_trend_polynomial.setup_classr  r*   r*   rs   r+   r9  •  s   r9  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_arma_diffc                    s"   d|d< t t| ƒjd|ž|Ž d S )N©r[   r^   r^   r   ró   )ró   )rq   r;  r,   r
  rs   r*   r+   r,   ¨  s    zTest_arma_diff.setup_classr  r*   r*   rs   r+   r;  ¤  s   r;  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_arma_seasonal_diffc                    s*   d|d< d|d< t t| ƒjd|ž|Ž d S )Nr5  r   r  r—   é   )r>  )rq   r=  r,   r
  rs   r*   r+   r,   ²  s    z#Test_arma_seasonal_diff.setup_classr  r*   r*   rs   r+   r=  ®  s   r=  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_arma_diff_seasonal_diffc                    s*   d|d< d|d< t t| ƒjd|ž|Ž d S )Nr<  r   r  r—   é   )r@  )rq   r?  r,   r
  rs   r*   r+   r,   ½  s    
 ÿÿÿz(Test_arma_diff_seasonal_diff.setup_classr  r*   r*   rs   r+   r?  ¹  s   r?  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_arma_diffusec                    s2   d|d< d|d< d|d< t t| ƒjd|ž|Ž d S )	Nr5  r   rŒ   r�   r  rŽ   é   )rB  )rq   rA  r,   r
  rs   r*   r+   r,   É  s    zTest_arma_diffuse.setup_classr  r*   r*   rs   r+   rA  Å  s   rA  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_arma_exogenousc                    s>   d|d< t j}|t |¡ d |d< tt| ƒjd|ž|Ž d S )Nr5  r   r^   r¬   é   )rD  )r   r×   r    r  rq   rC  r,   r   rs   r*   r+   r,   Õ  s    zTest_arma_exogenous.setup_classr  r*   r*   rs   r+   rC  Ñ  s   rC  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_arc                    s*   d|d< d|d< t t| ƒjd|ž|Ž d S )N©r   r   r   r   ©r[   r   r   rY   r—   é   )rH  )rq   rE  r,   r
  rs   r*   r+   r,   á  s    zTest_seasonal_ar.setup_classr  r*   r*   rs   r+   rE  Ý  s   rE  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_ar_as_polynomialc                    s8   d|d< dddgdddf|d< t t| ƒjd|ž|Ž d S )	NrF  r   r   r   rY   r—   rH  )rH  )rq   rI  r,   r
  rs   r*   r+   r,   ì  s    
 ÿÿÿz*Test_seasonal_ar_as_polynomial.setup_classr  r*   r*   rs   r+   rI  è  s   rI  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_ar_trend_cc                    sb   d|d< d|d< d|d< t t| ƒjd
|ž|Ž | j}d|dd	…  ¡  |d d…  | jd d…< d S )NrF  r   rG  r—   r   r   é   r   rY   )rK  )rq   rJ  r,   r½   r  r  rs   r*   r+   r,   ø  s    z$Test_seasonal_ar_trend_c.setup_classr  r*   r*   rs   r+   rJ  ô  s   rJ  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_ar_trend_ctc                    sb   d|d< d|d< d|d< t t| ƒjd|ž|Ž | j}d|d	d
…  ¡  |d d	…  | jd d	…< d S )NrF  r   rG  r—   r  r   é   r   r^   r°   )rM  )rq   rL  r,   r½   r  r  rs   r*   r+   r,     s    z%Test_seasonal_ar_trend_ct.setup_classr  r*   r*   rs   r+   rL    s   rL  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )Ú!Test_seasonal_ar_trend_polynomialc                    sj   d|d< d|d< ddddg|d< t t| ƒjd|ž|Ž | j}d|d	d
…  ¡  |d d	…  | jd d	…< d S )NrF  r   rG  r—   r   r   r   é   r^   r°   )rO  )rq   rN  r,   r½   r  r  rs   r*   r+   r,     s    
 ÿÿÿz-Test_seasonal_ar_trend_polynomial.setup_classr  r*   r*   rs   r+   rN    s   rN  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_ar_diffc                    s*   d|d< d|d< t t| ƒjd|ž|Ž d S )N©r   r^   r   r   rG  r—   é   )rR  )rq   rP  r,   r
  rs   r*   r+   r,   (  s    z!Test_seasonal_ar_diff.setup_classr  r*   r*   rs   r+   rP  $  s   rP  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_ar_seasonal_diffc                    s*   d|d< d|d< t t| ƒjd|ž|Ž d S )NrF  r   )r[   r^   r   rY   r—   é   )rT  )rq   rS  r,   r
  rs   r*   r+   r,   3  s    
 ÿÿÿz*Test_seasonal_ar_seasonal_diff.setup_classr  r*   r*   rs   r+   rS  /  s   rS  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_ar_diffusec                    s:   d|d< d|d< d|d< d|d< t t| ƒjd
|ž|Ž d S )NrF  r   rG  r—   rŒ   r�   r  rŽ   é   )rV  )rq   rU  r,   r
  rs   r*   r+   r,   ?  s
    z$Test_seasonal_ar_diffuse.setup_classr  r*   r*   rs   r+   rU  ;  s   rU  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_ar_exogenousc                    sF   d|d< d|d< t j}|t |¡ d |d< tt| ƒjd|ž|Ž d S )	NrF  r   rG  r—   r^   r¬   é    )rX  )r   r×   r    r  rq   rW  r,   r   rs   r*   r+   r,   L  s
    z&Test_seasonal_ar_exogenous.setup_classr  r*   r*   rs   r+   rW  H  s   rW  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_mac                    s*   d|d< d|d< t t| ƒjd|ž|Ž d S )NrF  r   ©r   r   r[   rY   r—   é!   )r[  )rq   rY  r,   r
  rs   r*   r+   r,   Y  s    zTest_seasonal_ma.setup_classr  r*   r*   rs   r+   rY  U  s   rY  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_ma_as_polynomialc                    s8   d|d< dddddgdf|d< t t| ƒjd|ž|Ž d S )	NrF  r   r   r   rY   r—   r[  )r[  )rq   r\  r,   r
  rs   r*   r+   r,   d  s    
 ÿÿÿz*Test_seasonal_ma_as_polynomial.setup_classr  r*   r*   rs   r+   r\  `  s   r\  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_ma_trend_cc                    s:   d|d< d|d< d|d< d|d< t t| ƒjd
|ž|Ž d S )NrF  r   rZ  r—   r   r   r[   rÜ   é"   )r^  )rq   r]  r,   r
  rs   r*   r+   r,   p  s
    z$Test_seasonal_ma_trend_c.setup_classr  r*   r*   rs   r+   r]  l  s   r]  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_ma_trend_ctc                    s2   d|d< d|d< d|d< t t| ƒjd|ž|Ž d S )	NrF  r   rZ  r—   r  r   é#   )r`  )rq   r_  r,   r
  rs   r*   r+   r,   }  s    z%Test_seasonal_ma_trend_ct.setup_classr  r*   r*   rs   r+   r_  y  s   r_  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )Ú!Test_seasonal_ma_trend_polynomialc                    sB   d|d< d|d< ddddg|d< d|d	< t t| ƒjd|ž|Ž d S )NrF  r   rZ  r—   r   r   r   r[   rÜ   é$   )rb  )rq   ra  r,   r
  rs   r*   r+   r,   ‰  s    
 ÿÿÿz-Test_seasonal_ma_trend_polynomial.setup_classr  r*   r*   rs   r+   ra  …  s   ra  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_ma_diffc                    s*   d|d< d|d< t t| ƒjd|ž|Ž d S )NrQ  r   rZ  r—   é%   )rd  )rq   rc  r,   r
  rs   r*   r+   r,   —  s    z!Test_seasonal_ma_diff.setup_classr  r*   r*   rs   r+   rc  “  s   rc  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_ma_seasonal_diffc                    s*   d|d< d|d< t t| ƒjd|ž|Ž d S )NrF  r   )r   r^   r[   rY   r—   é&   )rf  )rq   re  r,   r
  rs   r*   r+   r,   ¢  s    
 ÿÿÿz*Test_seasonal_ma_seasonal_diff.setup_classr  r*   r*   rs   r+   re  ž  s   re  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_ma_diffusec                    s:   d|d< d|d< d|d< d|d< t t| ƒjd
|ž|Ž d S )NrF  r   rZ  r—   rŒ   r�   r  rŽ   é'   )rh  )rq   rg  r,   r
  rs   r*   r+   r,   ®  s
    z$Test_seasonal_ma_diffuse.setup_classr  r*   r*   rs   r+   rg  ª  s   rg  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_ma_exogenousc                    sF   d|d< d|d< t j}|t |¡ d |d< tt| ƒjd|ž|Ž d S )	NrF  r   rZ  r—   r^   r¬   é(   )rj  )r   r×   r    r  rq   ri  r,   r   rs   r*   r+   r,   »  s
    z&Test_seasonal_ma_exogenous.setup_classr  r*   r*   rs   r+   ri  ·  s   ri  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_armac                    s*   d|d< d|d< t t| ƒjd|ž|Ž d S )NrF  r   ©r[   r   r^   rY   r—   é)   )rm  )rq   rk  r,   r
  rs   r*   r+   r,   È  s    zTest_seasonal_arma.setup_classr  r*   r*   rs   r+   rk  Ä  s   rk  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_arma_trend_cc                    sb   d|d< d|d< d|d< t t| ƒjd
|ž|Ž | j}d|dd	…  ¡  |d d…  | jd d…< d S )NrF  r   rl  r—   r   r   é*   r   rY   )ro  )rq   rn  r,   r½   r  r  rs   r*   r+   r,   Ó  s    z&Test_seasonal_arma_trend_c.setup_classr  r*   r*   rs   r+   rn  Ï  s   rn  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_arma_trend_ctc                    sb   d|d< d|d< d|d< t t| ƒjd|ž|Ž | j}d|d	d
…  ¡  |d d	…  | jd d	…< d S )NrF  r   rl  r—   r  r   é+   r   r^   r°   )rq  )rq   rp  r,   r½   r  r  rs   r*   r+   r,   ã  s    
 ÿÿÿz'Test_seasonal_arma_trend_ct.setup_classr  r*   r*   rs   r+   rp  ß  s   rp  c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )Ú#Test_seasonal_arma_trend_polynomialc                    sr   d|d< d|d< ddddg|d< d|d	< t t| ƒjd|ž|Ž | j}d|dd…  ¡  |d d…  | jd d…< d S )NrF  r   rl  r—   r   r   r   r[   rÜ   é,   r^   r°   )rs  )rq   rr  r,   r½   r  r  rs   r*   r+   r,   ô  s    
 ÿÿÿz/Test_seasonal_arma_trend_polynomial.setup_classc                 C   s6   | j  | j¡| _| j ¡  | jj | jj | jj d S r-   ©rL   rM   r½   rZ   rí   rî   rƒ   rï   r.   r*   r*   r+   rð     s
    
z0Test_seasonal_arma_trend_polynomial.test_results©r?   r@   rA   rC   r,   rð   r‰   r*   r*   rs   r+   rr  ð  s   rr  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_arma_diffc                    s*   d|d< d|d< t t| ƒjd|ž|Ž d S )NrQ  r   rl  r—   é-   )rw  )rq   rv  r,   r
  rs   r*   r+   r,     s    z#Test_seasonal_arma_diff.setup_classr  r*   r*   rs   r+   rv    s   rv  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )Ú Test_seasonal_arma_seasonal_diffc                    s*   d|d< d|d< t t| ƒjd|ž|Ž d S )NrF  r   ©r[   r^   r^   rY   r—   é.   )rz  )rq   rx  r,   r
  rs   r*   r+   r,      s    
 ÿÿÿz,Test_seasonal_arma_seasonal_diff.setup_classr  r*   r*   rs   r+   rx    s   rx  c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )Ú%Test_seasonal_arma_diff_seasonal_diffc                    s*   d|d< d|d< t t| ƒjd|ž|Ž d S )NrQ  r   ry  r—   é/   )r|  )rq   r{  r,   r
  rs   r*   r+   r,   ,  s    
 ÿÿÿz1Test_seasonal_arma_diff_seasonal_diff.setup_classc                 C   s6   | j  | j¡| _| j ¡  | jj | jj | jj d S r-   rt  r.   r*   r*   r+   rð   3  s
    
z2Test_seasonal_arma_diff_seasonal_diff.test_resultsru  r*   r*   rs   r+   r{  (  s   r{  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_arma_diffusec                    sB   d|d< d|d< d|d< d|d< d	|d
< t t| ƒjd|ž|Ž d S )NrF  r   rl  r—   r[   rÜ   rŒ   r�   r  rŽ   é0   )r~  )rq   r}  r,   r
  rs   r*   r+   r,   G  s    z&Test_seasonal_arma_diffuse.setup_classr  r*   r*   rs   r+   r}  C  s   r}  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_seasonal_arma_exogenousc                    sF   d|d< d|d< t j}|t |¡ d |d< tt| ƒjd|ž|Ž d S )	NrF  r   rl  r—   r^   r¬   é1   )r€  )r   r×   r    r  rq   r  r,   r   rs   r*   r+   r,   U  s    
 ÿÿÿz(Test_seasonal_arma_exogenous.setup_classr  r*   r*   rs   r+   r  Q  s   r  c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )ÚTest_sarimax_exogenousc                    sF   d|d< d|d< t j}|t |¡ d |d< tt| ƒjd|ž|Ž d S )	Nr<  r   ry  r—   r^   r¬   é2   )r‚  )r   r×   r    r  rq   r�  r,   r   rs   r*   r+   r,   c  s
    z"Test_sarimax_exogenous.setup_classc                 C   sj   | j  | j¡}t| jdd… |jƒ t| jdd… |jƒ t| jdd… |jƒ t| jdd… |jƒ d S )Nr   rY   r  r)  rö   )rL   rM   r½   r   ÚarparamsÚmaparamsZseasonalarparamsZseasonalmaparamsrm   r*   r*   r+   Útest_results_paramsk  s
    z*Test_sarimax_exogenous.test_results_params)r?   r@   rA   rC   r,   r…  r‰   r*   r*   rs   r+   r�  _  s   r�  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )Ú#Test_sarimax_exogenous_not_hamiltonc                    sV   d|d< d|d< t j}|t |¡ d |d< d|d< d|d	< tt| ƒjd|ž|Ž d S )Nr<  r   ry  r—   r^   r¬   Fr   r   r‚  )r‚  )r   r×   r    r  rq   r†  r,   r   rs   r*   r+   r,   w  s    
 ÿÿÿz/Test_sarimax_exogenous_not_hamilton.setup_classr  r*   r*   rs   r+   r†  s  s   r†  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTest_sarimax_exogenous_diffusec                    s^   d|d< d|d< t j}|t |¡ d |d< d|d< d|d	< d
|d< tt| ƒjd|ž|Ž d S )Nr<  r   ry  r—   r^   r¬   rÜ   rŒ   r�   r  rŽ   é3   )rˆ  )r   r×   r    r  rq   r‡  r,   r   rs   r*   r+   r,   ˆ  s    
 ÿÿÿz*Test_sarimax_exogenous_diffuse.setup_classr  r*   r*   rs   r+   r‡  ƒ  s   r‡  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )Ú'Test_arma_exog_trend_polynomial_missingc                    sÄ   t jtj }|t  |¡ d dd … |d< t j|dd…< |dd … |d d…  }t j|d< d|d< d	d	d	dg|d
< d|d< tt| ƒjd|žd|i|—Ž | j	}d|dd…  
¡  |d	  | j	d	< d S )Nr^   r   r¬   r)  r:  r   r5  r   r   r   rÜ   é4   r)   r°   )rŠ  )r    rg   r   r×   r  Únanrq   r‰  r,   r½   r  )r(   ri   rj   r)   r  rs   r*   r+   r,   ›  s&    

 ÿÿÿÿz3Test_arma_exog_trend_polynomial_missing.setup_classr  r*   r*   rs   r+   r‰  •  s   r‰  c               	   C   sŒ   t  d¡d } d|  }tj| |dddd�}t ¡ � t d¡ |jd	d
�}W 5 Q R X t|j	ddgdƒ t|j
jd dd … dgd dƒ d S )Néd   ç      ð?r^   rF  TF)r¬   r   Útime_varying_regressionr»   r˜   r   r   r   r°   r   r9   éc   r)  )r    Úaranger   r%   r™   rš   r›   r&   r   r"   rQ   rR   )r)   r¬   ÚmodÚresr*   r*   r+   Útest_simple_time_varying¯  s    û

r“  c                   C   s   t ttjdddgddd� d S )Nr   r^   r[   T)r)   r»   rŽ  )r   Ú
ValueErrorr   r%   r*   r*   r*   r+   Útest_invalid_time_varyingÉ  s    ûr•  c            	      C   s  t j} tj| dd�}| ddddg¡}tj| dd�}|j |jj|jj	¡ | ddddg¡}tj| dd|jj|jj	d�}| ddddg¡}tj| dd	d
�}| ddddg¡}t
|j|jƒ t
|jj|jjƒ t
|j|jƒ t
|jj|jjƒ t
|j|jƒ t
|jj|jjƒ d S )Nr	  ©r   r9   r¾   r�   r   Úknown©r   r�   Úinitial_stateÚinitial_state_covZ
stationary)r   r�   )r   r×   r   r%   rM   r  Úinitialize_knownrQ   r™  rš  r   r   rR   ©	r)   r  r  Úmod2r  Zmod3Úres3Úmod4Zres4r*   r*   r+   Ú%test_manual_stationary_initializationÒ  s<    ÿ üÿÿÿr   c            	      C   s  t j} tj| dd�}|j d¡ | ddddg¡}tj| dd�}|j |jj	|jj
¡ | ddddg¡}tj| dd|jj	|jj
d	�}| ddddg¡}tj| dd
dd�}| ddddg¡}t|j|jƒ t|jj|jjƒ t|j|jƒ t|jj|jjƒ t|j|jƒ t|jj|jjƒ d S )Nr	  r–  r  r9   r¾   r�   r   r—  r˜  rŒ   )r   r�   rŽ   )r   r×   r   r%   r  Zinitialize_approximate_diffuserM   r›  rQ   r™  rš  r   r   rR   rœ  r*   r*   r+   Ú.test_manual_approximate_diffuse_initializationù  sD    ÿ üþÿÿÿr¡  c                  C   sœ   t j} tj| dd�}|jdddgdd�}t|jdƒ t|jdƒ t|jt	 
d	d
¡d
t	j  ƒ t|jt	 
d	d
¡d
t	j  ƒ t|jdgƒ t|jdgƒ d S )Nrª   r–  r9   g      à¿r   Zoim)r{   ç       @r   r^   )r   r×   r   r%   rM   r   ZarrootsZmarootsZarfreqr    Zarctan2ÚpiZmafreqrƒ  r„  )r)   r‘  r’  r*   r*   r+   rð   $  s    rð   c                  C   sÔ  d} d}t j d¡ t jj| |fd�}t j|d d…df< t jj| dfd�}t jj| dfd�}tjdd	| d
�}tj||d�}tj| 	¡ |d�}tj||d�}t
j||dd�t
j||dd�t
j||ddd�t
j||dd�t
j||dd�t
j||ddd�g}	|	D ]º}
|
j |
jdd�}| ¡  | ¡  |jdd� | ¡  t jjd|
jfd�}|jd|d� |jd|d� t jjd|
jfd�}tt|jd|d� t jjd|
jd fd�}tt|jd|d� qúttt
j|t  d¡dd� d S )Nró   r   i¸  ©ÚsizerY   r   r^   z
1970-01-01ZQS©ÚfreqÚperiods©Úindex©r   r   r   r«   F)r¬   r   r   r   TrÅ   )Zstepsr¬   )rÝ   rY   )r    ÚrandomÚseedÚnormalr‹  ÚpdÚ
date_rangeÚ	DataFrameÚSeriesZsqueezer   r%   rà   r&   rí   rÂ   Úget_predictionrû   rÌ   Zget_forecastr   r”  Úzeros)rú   Úk_endogr)   Zexog1Zexog2rª  Zendog_pdZexog1_pdZexog2_pdÚmodelsr‘  r’  Zoos_exogr*   r*   r+   Útest_misc_exog4  sN    
ÿ
ÿùÿr·  c                  C   sP   t j d¡ t jjdddd�} t jjdddd�}tj| |dd�}|jdd	� d S )
Ni‘� r   r9   rŒ  r¤  ©r   r   r   r«   r   r   )r    r¬  r­  Zbinomialr   r%   r&   )r)   r¬   r‘  r*   r*   r+   Útest_datasetsg  s
    r¹  c                  C   sj   t j d¡ t t jjdd�¡} tj| dd�}| |j	¡}|j
dddgd�}t|j t dg¡¡d	ƒ d S )
Néç r‚  r¤  r¸  r–  r   Úa)rõ   rË   rª  T)r    r¬  r­  r¯  r±  r®  r   r%   Úsmoothrà   rÂ   r
   rª  ÚequalsÚIndex)r)   r‘  r’  Úoutr*   r*   r+   Útest_predict_custom_indexr  s    rÀ  c                  C   s¸  t j d¡ d} t t jj| d�¡}tj|ddd�}| |j	¡}t
|j|jƒ tj|ddd�}| |j	¡}t
|jdd …dd …f | ¡ dd … jƒ t jj| d�}t  | ¡d	 | }t  | ¡}tj|d|d
�}d|j_| ddg¡}t
|jd |dd� tj|d|dd�}d|j_| ddgt  ddg¡¡ | dg¡}t
|jd |dd� t
|jd d	dd� tj|d|ddd�}d|j_| dgt  dg¡¡ | ddg¡}t
|jd d	dd� d S )Nrº  r‚  r¤  rF  F)r   Úmeasurement_error)r   r   r   r   rÝ   )r   r¬   Tr¹   r�  r   g»½×Ùß|Û=r4   )r   r¬   r»   ç        )r   r¬   r»   rŽ  )r    r¬  r­  r¯  r±  r®  r   r%   r¼  rà   r   Úsmoothed_stateÚTrJ   r³   r  Úfilter_univariater›  Zdiag)rú   r)   r‘  r’  Úerrorr¬   r*   r*   r+   Útest_arima000{  s@    *

ÿ
 ÿrÇ  Fc           #      C   s"  t  tj¡}ddg}ddg}ddg}d t  |¡g}d dg}ddg}ddg}dd l}	d	d
dddddg}
|	 |||||||¡D �] }tt|
|ƒƒ}| 	dd¡r¢d|d< d|d< t
j|f|Ž}t
j|fddi|—Ž}| |j_| |j_|j}| |¡}t j|df }d}|d �r |d	 d k	�r |d7 }|d �r2|d7 }d}|d �sJ|d �rNd}t j|d | … |j|| d …  f }| |¡}t|j|j|d� |jjD ].}|dk�r¬�qštt|j|ƒt|j|ƒƒ �qš|j}dddddg}|D ],}t|j|ƒ}t|j|ƒ}t|||d� �qâdddd d!d"d#d$g}|jj ¡ |jjk}t j| | d d …f }|D ]p}t|j|ƒd%|d …f }t|j|ƒd%|d …f }|d&k�r´|d �r´t|| || |d� nt|||d� �qTd'd(d)d*d+d,d-d.d/d0d1d2d3g}|D ]p}t|j|ƒd%|d …f }t|j|ƒd%|d …f }|d4k�rH|d �rHt|| || |d� nt|||d� �qèd5d6d7d8g}|D ](}t||ƒ}t||ƒ}t|||d� �qj|jd9d:�}|jd9d:�}t||d|d;� |jd<d:�}|jd<d:�}t||d|d;� |jd=d:�}|jd=d:�}t||d|d;� d }|d	 d k	�r6t  d>|j  d df¡}|j!d?d>d@|dA�}|j!d?d>d@|dA�}t|j"|j"|d� t|j#|j#|d� t j$ %dB¡ |jj&�ròt j$j'd@dC�} t j$j'd@dC�}!t j$j'|j(dfdC�}"| )d@| |!|"¡}| )d@| |!|"¡}t|||d� |jj&rz| *d@¡}| *d@¡}t|||d� qzd S )DNr¸  ©r^   r^   r^   ©r   r   r   r   ©r   r   r   rY   TFÚtr   r¬   r   r—   r   rÁ  rŽ  r   r»   Z	toleranceZconcentrate_scaler   r:   rU   r4   ZobsÚpredicted_staterR   Ú	forecastsÚforecasts_errorZkalman_gainÚllf_obsrV   Úpredicted_state_covÚfiltered_state_covZtmp1Ztmp2Ztmp3Ztmp4.)rÐ  rÑ  rÃ  Úsmoothed_state_covÚsmoothed_state_autocovÚsmoothed_state_disturbanceÚsmoothed_state_disturbance_covÚ smoothed_measurement_disturbanceÚ$smoothed_measurement_disturbance_covÚscaled_smoothed_estimatorÚscaled_smoothed_estimator_covÚsmoothing_errorZsmoothed_forecastsZsmoothed_forecasts_errorZsmoothed_forecasts_error_cov)rÒ  rÓ  r   r   r   r  Z
jarquebera)r¥   )r²   r5   ZbreakvarZljungboxé‚   rŒ  rÝ   rø   i6  r¤  )+r    rJ   r   r×   Ú	ones_likeÚ	itertoolsÚproductr¼   ÚzipÚgetr   r%   r  rÅ  rà   r¼  rg   Úscaler   r   ZshapesÚgetattrrQ   r  rš  r<   rŽ   Zs_Ztest_normalityZtest_heteroskedasticityZtest_serial_correlationr³   rú   r³  Úpredicted_meanZse_meanr¬  r­  Ztime_invariantr®  Úk_statesZsimulateZimpulse_responses)#rÅ  r)   ÚordersÚseasonal_ordersÚsimple_differencingsÚexogsÚtrendsÚtime_varying_regressionsÚmeasurement_errorsrÝ  ÚnamesÚelementrj   Zmod_origZmod_concZconc_paramsZres_concZorig_paramsZk_snrr5   Zres_origÚnameÚdZfilter_attrÚactualÚdesiredZfilter_attr_burnZdiffuse_maskZixZsmoothed_attrÚoutputr¬   Zmeasurement_shocksZstate_shocksr™  r*   r*   r+   Úcheck_concentrated_scale§  s   
 ÿý

	

ÿ


ÿ ÿ    þ
ÿ
ÿ  ÷
ÿ


ÿ
ÿ
ÿ

ÿ
ÿ

ró  c                   C   s   t dd� t dd� d S )NF)rÅ  T)ró  r*   r*   r*   r+   Útest_concentrated_scalej	  s    
rô  c            	      C   s  d} t  | ¡d }t  | ¡}tj||dd�}| dddg¡}d}t  d¡}t  d¡}t|jd|d	�dƒ t|jd|d	�dƒ t|jd|d	�dƒ d
}t  |¡}t  |df¡}t|j||d	�dƒ t|j||d	�dƒ tt|j|dd	� tt|j|ddgd	� tt|j|t  |df¡d	� d S )NrŒ  r¢  r¸  r«   rÂ  r�  r   )r   r   rù   rÝ   r^   )	r    r³   r   r%   r¼  r   rÌ   r   r”  )	rú   r)   r¬   r‘  r’  Zexog_fcast_scalarZexog_fcast_1dimZexog_fcast_2dimÚhr*   r*   r+   Útest_forecast_exogp	  s&    



rö  c                 C   s¸   ddddddddd	d
ddddddddddddddddddg}dddd d!d"d#d$d%d&d'g}|D ]"}t |ƒ tt||ƒt| |ƒƒ qZ|D ]}tt|j|ƒt| j|ƒƒ q‚t| ¡ |  ¡ ƒ d S )(NrÁ  Zstate_errorr»   Zstate_regressionrŽ  r   rÞ   rß   r   r   rå   rè   ræ   ré   Zpolynomial_trendrç   Zk_ar_paramsZk_diffrê   Zk_ma_paramsZseasonal_periodsZk_seasonal_arZk_seasonal_ar_paramsZk_seasonal_diffZk_seasonal_maZk_seasonal_ma_paramsZk_trendrû   rú   rµ  rä  Zk_posdefZobs_interceptZdesignZobs_covZstate_interceptZ
transitionZ	selectionZ	state_cov)Úprintr
   râ  r  rý   )r‘  r�  ÚattrsZ	ssm_attrsÚattrr*   r*   r+   Úcheck_equivalent_models�	  s^                       ÷         þrú  c               	   C   sü   d} t  | ¡d }t  | ¡}ddg}ddg}ddg}d t  |¡g}d d	g}ddg}ddg}	d
d l}
dddddddg}|
 |||||	||¡D ]l}tt||ƒƒ}| dd¡r°d|d< | dd ¡}t	j
|fd|i|—Ž}t	j
|fd|i| ¡ —Ž}t||ƒ qŠd S )NrŒ  r¢  r¸  rÈ  rÉ  rÊ  TFrË  r   r¬   r   r—   r   rÁ  rŽ  r   r»   )r    r³   rÜ  rÝ  rÞ  r¼   rß  rà  Úpopr   r%   rý   rú  )rú   r)   r¬   rå  ræ  rç  rè  ré  rê  rë  rÝ  rì  rí  rj   r‘  r�  r*   r*   r+   Útest_recreate_modelª	  s6    

 ÿýrü  c            	   	   C   s<  t  d¡} t  | ¡}ddddg}tj| |ddd�}| |¡}tj| d d… |d d… ddd�}| |¡}|j| dd … |dd … d�}t|j|jƒ t	|j
|j
ƒ d	D ]}tt||ƒt||ƒƒ q¦d
D ]}tt||ƒt||ƒƒ qÆt	|jdt  d¡d�|jdt  d¡d�ƒ tjtdd�� | | dd … ¡ W 5 Q R X d S )NrŒ  r�  r�   r¸  rË  ©r¬   r   r   r‚  rù   ©rú   r   rÏ  r  ©rR   rÑ  rÌ  rÐ  rÍ  rÎ  Zforecasts_error_covrV   Zforecasts_error_diffuse_covZpredicted_diffuse_state_covrØ  rÙ  rÚ  rÃ  rÒ  rÓ  rÖ  rÔ  r×  rÕ  rÝ   ú!Cloning a model with an exogenous©Úmatch)r    r�  rÜ  r   r%   r¼  Úappendr
   Úspecificationr   rî   râ  rÌ   r³   r  Úraisesr”  ©	r)   r¬   r"   r  r  r�  r  rž  rù  r*   r*   r+   Útest_append_resultsË	  s*    


ÿ
ÿr  c            
   	   C   s2  t  d¡} t  | ¡}ddddg}tj| |ddd�}| |¡}tj| d d… |d d… ddd�}| |¡}|j| dd … |dd … d�}t|j|jdd … ƒ d	D ]6}t	||ƒ}	|	d k	rÆ|	d
dd …f }	t
t	||ƒ|	ƒ q t|jdt  d¡d�|jdt  d¡d�ƒ tjtdd�� | | dd … ¡ W 5 Q R X d S )NrŒ  r�  r�   r¸  rË  rý  r‚  rù   rÿ  .rÝ   r   r  ©r    r�  rÜ  r   r%   r¼  Úextendr   rÏ  râ  r
   rÌ   r³   r  r  r”  ©
r)   r¬   r"   r  r  r�  r  rž  rù  rñ  r*   r*   r+   Útest_extend_resultsõ	  s*    


ÿ

ÿr  c            
   	   C   s:  t  d¡} t  | ¡}ddddg}tj| |ddd�}| |¡}tj| d d… |d d… ddd�}| |¡}|j| dd … |dd … d�}t|j|jdd … ƒ d	D ]6}t	||ƒ}	|	d k	rÆ|	d
dd …f }	t
t	||ƒ|	ƒ q t|jdt  d¡d d�|jdt  d¡d d�ƒ tjtdd�� | | dd … ¡ W 5 Q R X d S )NrŒ  r�  r�   r¸  rË  rý  r   rù   rÿ  .r�  rÝ   r^   r   r  r  r
  r*   r*   r+   Útest_extend_by_one
  s*    


ÿ

ÿr  c            	   	   C   sL  t  d¡} t  | ¡}ddddg}tj| d d… |d d… ddd�}| |¡}tj| dd … |dd … ddd�}| |¡}|j| d d… |d d… d�}t|j|jƒ t	|j
|j
ƒ d	D ]}tt||ƒt||ƒƒ q¶d
D ]}tt||ƒt||ƒƒ qÖt	|jdt  d¡d�|jdt  d¡d�ƒ tjtdd�� | | dd … ¡ W 5 Q R X d S )NrŒ  r�  r�   r‚  r¸  rË  rý  rù   rþ  rÿ  rÝ   r   r  )r    r�  rÜ  r   r%   r¼  Úapplyr
   r  r   rî   râ  rÌ   r³   r  r  r”  r  r*   r*   r+   Útest_apply_resultsI
  s.    

ÿ
ÿ
ÿr  c                  C   sÔ   t  td ¡ ¡ dd … j} tj| d d… dd�}d}tjt	|d��. |j
}t|ddddt  | d d… ¡gƒ W 5 Q R X tj| d d… d	d
d�}d}tjt	|d��( |j
}t|dt  | d d… ¡gƒ W 5 Q R X d S )NrE   r   rY   )rY   r   r   r–  zHToo few observations to estimate starting parameters for ARMA and trend.r  r   rF  )r   r   r   rY   )r   r—   zGToo few observations to estimate starting parameters for seasonal ARMA.)r    rH   rI   rJ   rK   r   r%   r  ÚwarnsÚUserWarningrà   r   Úvar)r)   r‘  r  rà   r*   r*   r+   Útest_start_params_small_nobsu
  s    ,ÿr  c                  C   sZ   t  td ¡j} tj| t tt| ƒƒ¡d�}t	j
|ddd�}t|j |jdd … ¡ƒ d S )NrE   r©  r«  T©r   r   r   )r    rH   rI   rK   r¯  r²  r¾  rO   rÇ   r   r%   r	   Ú_indexr½  rª  ©rK   r)   r‘  r*   r*   r+   Ú#test_simple_differencing_int64indexŒ
  s    r  c                  C   sZ   t  td ¡j} tj| tjdt| ƒd�d�}tj	|ddd�}t
|j |jdd … ¡ƒ d S )	NrE   r   ©rõ   Ústopr©  r«  Tr  r   )r    rH   rI   rK   r¯  r²  Ú
RangeIndexrÇ   r   r%   r	   r  r½  rª  r  r*   r*   r+   Ú#test_simple_differencing_rangeindex”
  s    r  c                  C   s\   t  td ¡j} tj| tjdt| ƒdd�d�}tj	|ddd�}t
|j |jd	d … ¡ƒ d S )
NrE   Ú2000ÚM)rõ   r¨  r§  r©  r«  Tr  r   )r    rH   rI   rK   r¯  r²  Zperiod_rangerÇ   r   r%   r	   r  r½  rª  r  r*   r*   r+   Ú"test_simple_differencing_dateindexœ
  s    
  ÿ
r  c               	   C   sœ   t  td ¡j} t tt| ƒƒ¡ t	¡}tj
| |d�}t t¡� tj|ddd�}W 5 Q R X t|j tjdt| ƒd d�¡ƒ t|jj |dd … ¡ƒ d S )	NrE   r©  r«  Tr  r   r   r  )r    rH   rI   rK   r¯  r¾  rO   rÇ   ÚmapÚstrr²  r  r  r  r   r%   r	   r  r½  r  r   Z
row_labels)rK   rª  r)   r‘  r*   r*   r+   Ú!test_simple_differencing_strindex¥
  s    "r   c               	   C   sV   t  d¡} t t¡� tj| dd� W 5 Q R X t t¡� tj| dd� W 5 Q R X d S )NrÝ   r÷   r–  )r   r^   r[   rY   ©r    r´  r  r  r”  r   r%   ©r)   r*   r*   r+   Útest_invalid_order°
  s
    
r#  c               	   C   sæ   t  d¡} t t¡� tj| dd� W 5 Q R X t t¡� tj| dd� W 5 Q R X t t¡� tj| dd� W 5 Q R X t t¡� tj| dd� W 5 Q R X t t¡� tj| dd� W 5 Q R X t t¡� tj| dd� W 5 Q R X d S )	NrÝ   r÷   )r—   )r   r^   r[   rY   r°   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r!  r"  r*   r*   r+   Útest_invalid_seasonal_order¸
  s    
r$  c                  C   sÌ   t jd } tjddt| ƒd�}tj| |d�}tj|ddd�}| ¡ }|d	 }|j	|d
 dd�}|j	|d
 |d�}t
|j|jƒ |j	|d
 | ¡ d�}t
|j|jƒ |j	|d
 | d¡d�}t
|j|jƒ d S )Nr   z1980-1-1ZMSr¦  r©  r«  r   ra   iôÿÿÿièÿÿÿrF   rÅ   z%Y-%m-%d)r   r   r¯  r°  rÇ   r²  r   r%   r&   r³  r   rã  Zto_pydatetimeÚstrftime)r   rª  Zseriesr‘  r’  rÆ   rñ  rð  r*   r*   r+   Útest_dynamic_strÈ
  s    

ÿr&  c              	   C   sÎ   t jtjjdd�ddd�}tjtdd�� | ¡ }W 5 Q R X tj	t
dd�� |jd	d
� W 5 Q R X tj d¡}t j|ddddd�}tjtdd�� | ¡ }W 5 Q R X tj	t
dd�� |jdd
� W 5 Q R X d S )NrÝ   r¤  )rÝ   r   r   F)r   rÞ   zToo fewr  zLength of endogenous)rÄ   r°   )Zfigsizer)  r   )r   r   r   rF   )r   r—   rÞ   rß   )rT  rÄ   )r   r%   r    r¬  r®  r  r  r  r&   r  r”  rñ   Ústandard_normal)Úreset_randomstater‘  r   Úyr*   r*   r+   Útest_plot_too_few_obsÙ
  s*      ÿûr*  c                 C   sT   t j d¡}tj|dddd�jdd�}t  t  |jt	|ƒt	|ƒd d	�¡¡sPt
‚d S )
Nr6  r   )r   r   r   rF   rG   )r)   r   r—   r   Fr   rö   rô   ©r    r¬  r'  r   r%   r&   ÚallÚisfiniterÂ   rÇ   ÚAssertionError©r(  r)  Zsarimax_modelr*   r*   r+   Ú,test_sarimax_starting_values_few_obsevationsó
  s       ÿþÿr0  c                 C   s|   t j d¡}dddddddd	d
ddddddddddg}tj|ddd�jdd�}t  t  |jt	|ƒt	|ƒd d�¡¡sxt
‚d S )Nr)  gš™™™™ô§@gfffffx©@gfffffë«@g33333¿ª@g     ¬@gš™™™™µ­@gÍÌÌÌÌ2ª@g33333t¯@g     L²@gš™™™°@g33333V®@g     ³­@g     @¨@g     ì«@gfffffŠª@gÍÌÌÌÌ)¨@gš™™™™¨@gfffffE¨@g33333÷¦@)r   r   r°   rG   )r)   r   r   Fr   rö   rô   r+  r/  r*   r*   r+   Ú4test_sarimax_starting_values_few_obsevations_long_ma   s>                    ý  ÿþÿr1  c                 C   sj   t  d¡}t  d¡}tj||ddd�}| ddddg¡}t|jd	d	d
�dƒ t|jdddgd
�ddƒ d S )NrÝ   r¸  r   )r)   r¬   r   r   r¾   gš™™™™™Ù?r9   r�  r   rù   g433333ã?r^   gš™™™™™ñ?)r    r´  r   r%   r¼  r   rÌ   )r(  r)  rÓ   r‘  r’  r*   r*   r+   Ú test_sarimax_forecast_exog_trend  s    

r2  )F)•rB   Úosr™   Zstatsmodels.compat.platformr   Únumpyr    Zpandasr¯  r  Zstatsmodels.tsa.statespacer   r   r   r   Zstatsmodels.toolsr   Zstatsmodels.tools.toolsr   Znumpy.testingr	   r
   r   r   r   ÚpathÚdirnameÚabspathÚ__file__Úcurrent_pathÚjoinZrealgdp_pathZread_csvÚseprI   Zcoverage_pathrØ   r   rD   rX   r`   ro   rŠ   r“   r•   r–   rœ   r¢   r£   r§   r®   r¸   rÀ   rÉ   rÐ   r  r  r  r  r  r  r  r  r  r  r!  r$  r'  r(  r*  r+  r,  r-  r/  r1  r2  r4  r7  r9  r;  r=  r?  rA  rC  rE  rI  rJ  rL  rN  rP  rS  rU  rW  rY  r\  r]  r_  ra  rc  re  rg  ri  rk  rn  rp  rr  rv  rx  r{  r}  r  r�  r†  r‡  r‰  r“  r•  r   r¡  rð   r·  r  Zsmoker¹  rÀ  rÇ  ró  Zslowrô  rö  rú  rü  r  r  r  r  r  r  r  r  r   r#  r$  r&  r  r*  r0  r1  r2  r*   r*   r*   r+   Ú<module>   s  >&%!A9"8#::IFk,A 


!&




!	'+3

	,
 D
 !***,	
