U
    ÃmœdW^  ã                $   @   sJ  d dl Zd dlZd dlZd dlmZmZmZ d dl	m
ZmZ d dlmZ dd„ Zdd„ Zd	d
„ Zej dd d d d e dg¡dfdd d d e ddg¡dfdd d d e ddg¡dfdd d d e dddg¡dfdd d d e dgd dg ¡dfd dd d e dg¡dfd ddde dg¡dfddd d e ddg¡dfdddde ddg¡dfd d d d e dg¡dfdd d d e ddg¡dfdd d d e ddg¡dfdd d d e dddg¡dfdd d d e dgd dg ¡dfd dd d e dg¡dfd ddde dg¡dfddd d e ddg¡dfdddde ddg¡dfg¡dd„ ƒZej dddddddd d!dddd"gd d dd d dd#d#d$fddd d d d d dd"gdd#d#d$fdddgd dd"gdd"gd ddgdd#d#d$fd%d&d'd(d)d*d+dd,gddd"ddd"d-d$d#d#fd.d,gddd"ddd"d-d$d#d#fd.d,d/gddd"ddd"d-d$d#d#fd#d,d/gddd"ddd"d-d$d#d#fd0g¡d1d2„ ƒZd3d4„ Zd5d6„ Zej d7d8d9dddd:d;d<d=d>d?gfd@d9dddd:d;d=d>d?gfdAd9dddd<d=d>d?gfdBd9dddd=d>d?gfd8dCdddd>d?gfd@d9d#ddd>d?gfd@d9d$ddd:d;d=d?gfd@d9dd#dd:d;d=d>d?gfd@d9dd$dd:d;d=d>d?gfd@d9ddd#d:d;d=d?gfg
¡dDdE„ ƒZdFdG„ ZdS )Hé    N)Úassert_equalÚassert_allcloseÚassert_raises)Úconstrain_stationary_univariateÚ!unconstrain_stationary_univariate)Úspecificationc                 C   s
  |\}}}|\}	}
}}t | j|||fƒ t | j|	|
||fƒ t | j|ƒ t | j|ƒ t | j|ƒ t | j|	ƒ t | j|
ƒ t | j|ƒ t | j	|ƒ t | j
t|tƒr¤|nt d|d ¡ƒ t | jt|tƒrÊ|nt d|d ¡ƒ t | jt|	tƒrð|	nt d|	d ¡ƒ t | jt|tƒ�r|nt d|d ¡ƒ t|tƒ�r>|d n|}t|tƒ�rV|d n|}t|	tƒ�rn|	d n|	}t|tƒ�r†|d n|}t | j|ƒ t | j|ƒ t | j|ƒ t | j|ƒ t | j|||  ƒ t | j|||  ƒ t | j|ƒ t | j|ƒ t | j|ƒ d S )Né   éÿÿÿÿ)r   ÚorderÚseasonal_orderÚar_orderÚdiffÚma_orderÚseasonal_ar_orderÚseasonal_diffÚseasonal_ma_orderÚseasonal_periodsZar_lagsÚ
isinstanceÚlistÚnpÚarangeZma_lagsZseasonal_ar_lagsZseasonal_ma_lagsÚmax_ar_orderÚmax_ma_orderÚmax_seasonal_ar_orderÚmax_seasonal_ma_orderZmax_reduced_ar_orderZmax_reduced_ma_orderÚenforce_stationarityÚenforce_invertibilityÚconcentrate_scale)Úspecr
   r   r   r   r   ÚpÚdÚqÚPÚDÚQÚsr   r   r   r   © r&   úg/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/tsa/arima/tests/test_specification.pyÚcheck_attributes   sP    
ÿÿÿÿ
ÿ
ÿr(   c                 C   s†  |\}}}|\}}}}t |ƒ}t|tƒr0t |ƒn|}t|tƒrFt |ƒn|}t|tƒr\t |ƒn|}t|tƒrrt |ƒn|}t| ƒ}||	 |
 | | }|s¢| d¡ t| j|ƒ t| j|ƒ t| j|| dkƒ t| j	|dkƒ t| j
|ƒ t| j|ƒ t| j|ƒ t| j|ƒ t| j|ƒ t| j|| | | | | ƒ t| j|ƒ t| j|	ƒ t| j|
ƒ t| j|ƒ t| j|ƒ t| j|ƒ d S )NÚsigma2r   )Úlenr   r   ÚintÚappendr   Úis_ar_consecutiveÚis_ma_consecutiveZis_integratedZis_seasonalÚk_exog_paramsÚk_ar_paramsÚk_ma_paramsÚk_seasonal_ar_paramsÚk_seasonal_ma_paramsZk_paramsÚ
exog_namesÚar_namesÚma_namesÚseasonal_ar_namesÚseasonal_ma_namesÚparam_names)r   r
   r   r   r   r   r-   r.   r4   r5   r6   r7   r8   r   r    r!   r"   r#   r$   r%   r/   r0   r1   r2   r3   Zk_variance_paramsr9   r&   r&   r'   Úcheck_properties;   sJ    

ÿ

ÿÿþÿr:   c                 C   s€  t j||||	|
|f }||||	|
dœ}|s2||d< t|  |¡|ƒ t| jf |Ž|ƒ t|  |¡d ƒ tt| jg ƒ tt| jdg|dd …  ¡  ƒ tt| jt jt j	|dd … f ƒ tt| jt jt j
|dd … f ƒ | jdk�r*t j|t  |¡|t  |	¡|
|f }|�rtt| j|ƒ nt|  |¡d ƒ | jdk�r~t j||t  |¡|	t  |
¡|f }|�rntt| j|ƒ nt|  |¡d ƒ | jdk�rÒt j|t  |¡|t  |	¡|
|f }|�rÂtt| j|ƒ nt|  |¡d ƒ | jdk�r&t j||t  |¡|	t  |
¡|f }|�rtt| j|ƒ nt|  |¡d ƒ |�stt j||||	|
df }tt| j|ƒ t j||||	|
df }tt| j|ƒ |}|}|	}|
}|}| jdk�r¨|�r¨tt  |¡ƒ}| jdk�rÊ|�rÊtt  |¡ ƒ}| jdk�rê|�rêtt  |	¡ƒ}| jdk�r|�rtt  |¡ ƒ}|�s|d }t j||||||f }t j||||	|
|f }t|  |¡|ƒ t|  |¡|ƒ t|  |  |¡¡|ƒ d S )	N)Úexog_paramsÚ	ar_paramsÚ	ma_paramsÚseasonal_ar_paramsÚseasonal_ma_paramsr)   Úar   r   ç        r	   ç      à?)r   Zr_r   Zsplit_paramsÚjoin_paramsZvalidate_paramsr   Ú
ValueErrorÚtolistÚinfÚnanr   Z	ones_likeZ
zeros_liker   r   r   ÚunconstrainÚarrayr   Zunconstrain_paramsZconstrain_params)r   r
   r   r   r   r   r;   r<   r=   r>   r?   r)   ÚparamsÚdesiredZunconstrained_ar_paramsZunconstrained_ma_paramsZ unconstrained_seasonal_ar_paramsZ unconstrained_seasonal_ma_paramsZunconstrained_sigma2Zunconstrained_paramsr&   r&   r'   Úcheck_methodse   sÔ     ÿûÿÿÿ þ þ þ þ ÿ ÿÿÿ þÿ ÿ ÿrL   zn,d,D,s,params,whichç      ð?r   r   rB   gš™™™™™É¿g      Y@é   é   rA   é   r!   c              
   C   s’  |dkr6| |d  }}}dd„ t d|d ƒD ƒ}g }	n,d||   }}}g }dd„ t d|d ƒD ƒ}	|d |… }
||d… }|d }d|d|f\}}}}|||f||||ff}d d d dœ}| ¡ }| d	d	g ||	g g d
œ¡ | ¡ }| g |
|g g |dœ¡ tj|||f||||fd�}t|f|ž|Ž t|f|ž|Ž t|f|ž|Ž tj|||||||d�}t|f|ž|Ž t|f|ž|Ž t|f|ž|Ž d S )Nr   r   c                 S   s   g | ]}d | ‘qS ©zar.L%dr&   ©Ú.0Úir&   r&   r'   Ú
<listcomp>ñ   s     z/test_specification_ar_or_ma.<locals>.<listcomp>r   c                 S   s   g | ]}d | ‘qS ©zma.L%dr&   rR   r&   r&   r'   rU   ö   s     r	   ©r   r   r   T©r-   r.   r4   r5   r6   r7   r8   ©r;   r<   r=   r>   r?   r)   )r
   r   )r   r   r   r   r   r   r   )ÚrangeÚcopyÚupdater   ÚSARIMAXSpecificationr(   r:   rL   )Únr    r#   r%   rJ   Úwhichr   r!   r5   r6   r<   r=   r)   r"   r$   ÚargsÚkwargsÚproperties_kwargsÚmethods_kwargsr   r&   r&   r'   Útest_specification_ar_or_maÖ   sl    ýù	ú	 
ÿ     þrd   zUendog,exog,p,d,q,P,D,Q,s,enforce_stationarity,enforce_invertibility,concentrate_scale)NNr   r   r   r   r   r   r   TTF)NNr   r   r   r   r   r   r   TTF)NNr   r   r   r   r   r   r   TTF)NNr   r   r   r   r   r   rP   TTF)NNr   r   r   r   r   r   rP   TTF)NNr   r   r   r   r   r   rP   TTF)NNr   r   r   r   r   r   rP   TTF)NNrN   r   é   rP   r   re   é   TTFre   TF)NNrN   r   re   rP   r   re   rf   FFT)NNrN   r   re   rP   r   re   rf   TFT)NNrN   r   re   rP   r   re   rf   FTT)TNrN   r   re   rP   r   re   rf   FTT)NrN   rN   r   re   rP   r   re   rf   FTT)TrN   rN   r   re   rP   r   re   rf   FTT)ÚyNrN   r   re   rP   r   re   rf   FTTÚx1rf   rg   Úx2)rg   rN   rN   r   re   rP   r   re   rf   FTTc                    s
  t |tƒrt|ƒ}|d }n| }}t |tƒr@t|ƒ}|d }n| }}t |tƒrdt|ƒ}|d }n| }}t |tƒrˆt|ƒ}|d }n| }}||ˆ   td| d d| ˆ  d ||ˆ  ƒ d }| dkrÞt |¡d } n8t | tƒ�rtjt |¡d | d�} n| d k	�rt	dƒ‚t |t
ƒ�rTdd	„ t|ƒD ƒ}t |t|ƒ ¡ |t|ƒ¡}nVt |tƒ�r’|}t |t|ƒ ¡ |t|ƒ¡}tj||d
�}n|d k�r¢g }nt	dƒ‚|||f|||ˆ ff}|	|
|dœ}| ¡ }t |tƒ �oè|dk}t |tƒ �oþ|dk}| |||dd	„ t |tƒ�r |ntd|d ƒD ƒdd	„ t |tƒ�rF|ntd|d ƒD ƒ‡ fdd	„t |tƒ�rp|ntd|d ƒD ƒ‡ fdd	„t |tƒ�rš|ntd|d ƒD ƒdœ¡ | ¡ }| t t|ƒ¡|dk�rØg ntt |¡d ƒ|dk�rög ntt |¡d d ƒ|dk�rg ntt |¡d ƒ|dk�r6g ntt |¡d d ƒ|�rTg nddœ¡ tj| ||||f|||ˆ f|	|
|d�}t|f|ž|Ž t|f|ž|Ž t|f|ž|Ž tj| |||||||ˆ |	|
|d�}t|f|ž|Ž t|f|ž|Ž t|f|ž|Ž d S )Nr	   re   r   TrM   ©ÚnamezInvalid `endog` in test setup.c                 S   s   g | ]}d |d  ‘qS )zx%dr   r&   rR   r&   r&   r'   rU   x  s     z&test_specification.<locals>.<listcomp>©ÚcolumnszInvalid `exog` in test setup.rW   r   c                 S   s   g | ]}d | ‘qS rQ   r&   rR   r&   r&   r'   rU   ‘  s   ÿc                 S   s   g | ]}d | ‘qS rV   r&   rR   r&   r&   r'   rU   ”  s   ÿc                    s   g | ]}d |ˆ   ‘qS )zar.S.L%dr&   rR   ©r%   r&   r'   rU   —  s   ÿc                    s   g | ]}d |ˆ   ‘qS )zma.S.L%dr&   rR   rn   r&   r'   rU   š  s   ÿrX   é
   éd   rP   g46<½@rY   )Úexogr
   r   r   r   r   )rq   r   r   r   r   r   r   r   r   r   r   )r   r   r*   Úmaxr   r   ÚstrÚpdÚSeriesrD   r+   rZ   ZreshapeÚ	DataFramer[   r\   Ú	constrainr   r]   r(   r:   rL   )Úendogrq   r   r    r!   r"   r#   r$   r%   r   r   r   r0   r   r1   r   r2   r   r3   r   Znobsr4   r`   ra   rb   r-   r.   rc   r   r&   rn   r'   Útest_specification(  sÔ    *







ýý
 
ýþþ
þ
þóò  
û      úry   c               	   C   sn   t  ¡ } t| jdƒ t| jdƒ t jtjdgdd�tjddggddgd�d	d
dddd�} d}tt| ƒ|ƒ d S )N©r   r   r   ©r   r   r   r   r   rg   rj   rh   ri   rl   )r   r   rN   )rN   r   r   rf   FT)rx   rq   r
   r   r   r   r   z°SARIMAXSpecification(endog=y, exog=['x1', 'x2'], order=(1, 1, 2), seasonal_order=(2, 1, 0, 12), enforce_stationarity=False, enforce_invertibility=False, concentrate_scale=True))	r   r]   r   r
   r   rt   ru   rv   Úrepr)r   rK   r&   r&   r'   Ú	test_miscÉ  s      ûr}   c                  C   sL  t ttjddd� t ttjddd� t ttjdd� t ttjdd� t ttjdd� t ttjd	d� t ttjd
d� t ttjdd� t ttjdd� t ttjdd� t ttjdd� t ttjdd� t ttjdd� t ttjdd� t ttjdd� t ttjdd� t ttjdt d¡d� tjdd�} t t| jƒ t t| jddgd� d S )N©r   r   r   r   )r
   r   )r   r   )r	   r   r   )r
   )ç      ø?r   r   )r   r	   r   )r   r   r   )r   )r   r   r   rP   )r   )r	   r   r   rP   )r   r   r   rP   )r   r	   r   rP   )r   r   r   r   )r   r   r   r	   )r   r   r   r   )r   )ro   rN   )r
   rx   )r   gš™™™™™É?g333333Ó?)r<   )r   rD   r   r]   r   ZzerosrC   ©r   r&   r&   r'   Útest_invalidÝ  sr     ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿr�   zWorder,seasonal_order,enforce_stationarity,enforce_invertibility,concentrate_scale,validrz   r{   Úyule_walkerÚburgÚinnovationsÚhannan_rissanenÚinnovations_mleÚ
statespacer~   )r   r   r   )r   r   r   )r   r   r   rP   c           
      C   sÞ   t j| ||||d�}tddddddgƒ}t|ƒ}t|j|ƒ |D ]}	t| |	¡d ƒ q@| |¡D ]}	t|	|ƒ tt	|j|	ƒ q`t jt
jg| ||||d�}t|jtdgƒƒ t| d¡d ƒ | dg¡D ]}	tt	|j|	ƒ qÆd S )	N)r
   r   r   r   r   r‚   rƒ   r„   r…   r†   r‡   )rx   r
   r   r   r   r   )r   r]   Úsetr   Zvalid_estimatorsÚvalidate_estimatorÚ
differenceÚprintr   rD   r   rG   )
r
   r   r   r   r   Zvalidr   Z
estimatorsrK   Z	estimatorr&   r&   r'   Útest_valid_estimators  s>    # ü  ÿ
 ûrŒ   c                  C   s   t  ¡ } tt| jdƒ d S )NZnot_an_estimator)r   r]   r   rD   r‰   r€   r&   r&   r'   Útest_invalid_estimatorH  s    r�   )Únumpyr   Zpandasrt   ZpytestZnumpy.testingr   r   r   Z statsmodels.tsa.statespace.toolsr   rw   r   rH   Zstatsmodels.tsa.arimar   r(   r:   rL   ÚmarkZparametrizerI   rd   ry   r}   r�   rŒ   r�   r&   r&   r&   r'   Ú<module>   sÖ   -*q  ê
:(ãþ!
 *
 ÿÿ
 ÿÿ
ÿÿ
ÿ
ÿ
ÿ

ÿ
ÿÿ
ÿÿ

ÿåþ 
!