U
    Ãmœd;  ã                   @   sJ   d Z ddlZddlZddlmZ ddlmZ ddl	m
Z
 G dd„ dƒZdS )z?
SARIMAX parameters class.

Author: Chad Fulton
License: BSD-3
é    N)Ú
Polynomial)Úis_invertible)Úvalidate_basicc                   @   s–  e Zd ZdZdd„ Zedd„ ƒZejdd„ ƒZedd„ ƒZejd	d„ ƒZed
d„ ƒZ	e	jdd„ ƒZ	edd„ ƒZ
e
jdd„ ƒZ
edd„ ƒZejdd„ ƒZedd„ ƒZejdd„ ƒZedd„ ƒZejdd„ ƒZedd„ ƒZejdd„ ƒZedd„ ƒZejdd„ ƒZedd „ ƒZejd!d „ ƒZed"d#„ ƒZed$d%„ ƒZed&d'„ ƒZejd(d'„ ƒZed)d*„ ƒZed+d,„ ƒZed-d.„ ƒZed/d0„ ƒZd1d2„ Zd3d4„ Zd5d6„ Zd7S )8ÚSARIMAXParamsac  
    SARIMAX parameters.

    Parameters
    ----------
    spec : SARIMAXSpecification
        Specification of the SARIMAX model.

    Attributes
    ----------
    spec : SARIMAXSpecification
        Specification of the SARIMAX model.
    exog_names : list of str
        Names associated with exogenous parameters.
    ar_names : list of str
        Names associated with (non-seasonal) autoregressive parameters.
    ma_names : list of str
        Names associated with (non-seasonal) moving average parameters.
    seasonal_ar_names : list of str
        Names associated with seasonal autoregressive parameters.
    seasonal_ma_names : list of str
        Names associated with seasonal moving average parameters.
    param_names :list of str
        Names of all model parameters.
    k_exog_params : int
        Number of parameters associated with exogenous variables.
    k_ar_params : int
        Number of parameters associated with (non-seasonal) autoregressive
        lags.
    k_ma_params : int
        Number of parameters associated with (non-seasonal) moving average
        lags.
    k_seasonal_ar_params : int
        Number of parameters associated with seasonal autoregressive lags.
    k_seasonal_ma_params : int
        Number of parameters associated with seasonal moving average lags.
    k_params : int
        Total number of model parameters.
    c                 C   sŽ   || _ |j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _|j	| _	|j
| _
|j| _|j| _|jt | j¡tj dd�| _d | _d S )NT)Zallow_infnan)ÚspecZ
exog_namesZar_namesZma_namesZseasonal_ar_namesZseasonal_ma_namesÚparam_namesÚk_exog_paramsÚk_ar_paramsÚk_ma_paramsÚk_seasonal_ar_paramsÚk_seasonal_ma_paramsZk_paramsÚsplit_paramsÚnpÚzerosÚnanÚ_params_splitÚ_params)Úselfr   © r   úU/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/tsa/arima/params.pyÚ__init__8   s$     ÿzSARIMAXParams.__init__c                 C   s
   | j d S )z7(array) Parameters associated with exogenous variables.Úexog_params©r   ©r   r   r   r   r   O   s    zSARIMAXParams.exog_paramsc                 C   s6   t  |¡r|g| j }t|| jdd�| jd< d | _d S )Nzexogenous coefficients©Útitler   )r   Úisscalarr   r   r   r   ©r   Úvaluer   r   r   r   T   s    
  ÿc                 C   s
   | j d S )z1(array) Autoregressive (non-seasonal) parameters.Ú	ar_paramsr   r   r   r   r   r   \   s    zSARIMAXParams.ar_paramsc                 C   s6   t  |¡r|g| j }t|| jdd�| jd< d | _d S )NúAR coefficientsr   r   )r   r   r	   r   r   r   r   r   r   r   r   a   s    
  ÿc                 C   s:   t  | jjd ¡}d|d< | jj}| jd  ||< t|ƒS )z:(Polynomial) Autoregressive (non-seasonal) lag polynomial.é   r   r   )r   r   r   Úmax_ar_orderÚar_lagsr   r   ©r   ÚcoefÚixr   r   r   Úar_polyi   s
    zSARIMAXParams.ar_polyc                 C   s’   t |tƒr|j}t|| jjd dd�}|d dkr:tdƒ‚g }td| jjd ƒD ]6}|| jjkrr| 	||  ¡ qP|| dkrPtdƒ‚qP|| _
d S )Nr!   zAR polynomialr   r   z*AR polynomial constant must be equal to 1.úWAR polynomial includes non-zero values for lags that are excluded in the specification.)Ú
isinstancer   r%   r   r   r"   Ú
ValueErrorÚranger#   Úappendr   )r   r   r   Úir   r   r   r'   r   s    
ÿ
c                 C   s
   | j d S )z1(array) Moving average (non-seasonal) parameters.Ú	ma_paramsr   r   r   r   r   r.   …   s    zSARIMAXParams.ma_paramsc                 C   s6   t  |¡r|g| j }t|| jdd�| jd< d | _d S )NúMA coefficientsr   r.   )r   r   r
   r   r   r   r   r   r   r   r.   Š   s    
  ÿc                 C   s8   t  | jjd ¡}d|d< | jj}| jd ||< t|ƒS )z:(Polynomial) Moving average (non-seasonal) lag polynomial.r!   r   r.   )r   r   r   Úmax_ma_orderÚma_lagsr   r   r$   r   r   r   Úma_poly’   s
    zSARIMAXParams.ma_polyc                 C   s�   t |tƒr|j}t|| jjd dd�}|d dkr:tdƒ‚g }td| jjd ƒD ]4}|| jjkrp| 	|| ¡ qP|| dkrPtdƒ‚qP|| _
d S )Nr!   zMA polynomialr   r   z*MA polynomial constant must be equal to 1.úWMA polynomial includes non-zero values for lags that are excluded in the specification.)r)   r   r%   r   r   r0   r*   r+   r1   r,   r.   )r   r   r.   r-   r   r   r   r2   ›   s    
ÿ
c                 C   s
   | j d S )z+(array) Seasonal autoregressive parameters.Úseasonal_ar_paramsr   r   r   r   r   r4   ®   s    z SARIMAXParams.seasonal_ar_paramsc                 C   s6   t  |¡r|g| j }t|| jdd�| jd< d | _d S )Núseasonal AR coefficientsr   r4   )r   r   r   r   r   r   r   r   r   r   r4   ³   s    
  ÿc                 C   s‚   | j j}dg}|dkrzt | j j¡}tj| j jtd�d }| jd  ||< tj	dt 
t |d¡d|d dfgd¡ ¡ f }t|ƒS )z4(Polynomial) Seasonal autoregressive lag polynomial.r!   r   ©Zdtyper4   ©éÿÿÿÿr!   ©r   r   Úconstant)r   Úseasonal_periodsr   r   Úmax_seasonal_ar_orderÚarrayÚseasonal_ar_lagsÚintr   Úr_ÚpadÚreshapeÚflattenr   ©r   Úsr%   Úexpandedr&   r   r   r   Úseasonal_ar_poly»   s     ÿzSARIMAXParams.seasonal_ar_polyc                 C   s¦   | j j}t|tƒr|j}t|d|| j j  dd�}|d dkrFtdƒ‚g }td| j jd ƒD ]>}|| j j	kr‚| 
|||   ¡ q\|||  dkr\tdƒ‚q\|| _d S )Nr!   zseasonal AR polynomialr   r   ú'Polynomial constant must be equal to 1.r(   )r   r;   r)   r   r%   r   r<   r*   r+   r>   r,   r4   )r   r   rE   r4   r-   r   r   r   rG   É   s    
ÿ
c                 C   s
   | j d S )z+(array) Seasonal moving average parameters.Úseasonal_ma_paramsr   r   r   r   r   rI   Þ   s    z SARIMAXParams.seasonal_ma_paramsc                 C   s6   t  |¡r|g| j }t|| jdd�| jd< d | _d S )Núseasonal MA coefficientsr   rI   )r   r   r   r   r   r   r   r   r   r   rI   ã   s    
  ÿc                 C   s†   | j j}t dg¡}|dkr~t | j j¡}tj| j jtd�d }| jd ||< tj	dt 
t |d¡d|d dfgd¡ ¡ f }t|ƒS )z4(Polynomial) Seasonal moving average lag polynomial.r!   r   r6   rI   r7   r9   r:   )r   r;   r   r=   r   Úmax_seasonal_ma_orderÚseasonal_ma_lagsr?   r   r@   rA   rB   rC   r   rD   r   r   r   Úseasonal_ma_polyë   s     ÿzSARIMAXParams.seasonal_ma_polyc                 C   s¤   | j j}t|tƒr|j}t|d|| j j  dd�}|d dkrFtdƒ‚g }td| j jd ƒD ]<}|| j j	kr€| 
|||  ¡ q\|||  dkr\tdƒ‚q\|| _d S )Nr!   zseasonal MA polynomialr   r   rH   r3   )r   r;   r)   r   r%   r   rK   r*   r+   rL   r,   rI   )r   r   rE   rI   r-   r   r   r   rM   ù   s    
ÿ
c                 C   s
   | j d S )z(float) Innovation variance.Úsigma2r   r   r   r   r   rN     s    zSARIMAXParams.sigma2c                 C   s0   t | jj ƒ}t||dd� ¡ | jd< d | _d S )NrN   r   )r?   r   Úconcentrate_scaler   Úitemr   r   )r   ÚparamsÚlengthr   r   r   rN     s      ÿc                 C   s   | j | j S )z8(Polynomial) Reduced form autoregressive lag polynomial.)r'   rG   r   r   r   r   Úreduced_ar_poly  s    zSARIMAXParams.reduced_ar_polyc                 C   s   | j | j S )z8(Polynomial) Reduced form moving average lag polynomial.)r2   rM   r   r   r   r   Úreduced_ma_poly  s    zSARIMAXParams.reduced_ma_polyc                 C   s&   | j dkr| jjf | jŽ| _ | j  ¡ S )z"(array) Complete parameter vector.N)r   r   Zjoin_paramsr   Úcopyr   r   r   r   rQ   $  s    
zSARIMAXParams.paramsc                 C   s   | j  |¡| _d | _d S )N)r   r   r   r   r   r   r   r   rQ   +  s    c                 C   s   t  t  | j¡¡ S )zA(bool) Are current parameter values all filled in (i.e. not NaN).)r   ÚanyÚisnanrQ   r   r   r   r   Úis_complete0  s    zSARIMAXParams.is_completec                 C   s4   d}z| j  | j¡ W n tk
r.   d}Y nX |S )z>(bool) Are current parameter values valid (e.g. variance > 0).TF)r   Zvalidate_paramsrQ   r*   )r   Zvalidr   r   r   Úis_valid5  s    
zSARIMAXParams.is_validc                 C   s`   t | j| jdd� t | j| jdd� d}d}| jdkrBt| jjƒ}| jdkrXt| jjƒ}|o^|S )z?(bool) Is the reduced autoregressive lag poylnomial stationary.r    r   r5   Tr   )	r   r   r	   r4   r   r   r'   r%   rG   )r   Zar_stationaryZseasonal_ar_stationaryr   r   r   Úis_stationary?  s    
ÿ
ÿ

zSARIMAXParams.is_stationaryc                 C   s`   t | j| jdd� t | j| jdd� d}d}| jdkrBt| jjƒ}| jdkrXt| jjƒ}|o^|S )z?(bool) Is the reduced moving average lag poylnomial invertible.r/   r   rJ   Tr   )	r   r.   r
   rI   r   r   r2   r%   rM   )r   Zma_stationaryZseasonal_ma_stationaryr   r   r   r   P  s    
ÿ
ÿ

zSARIMAXParams.is_invertiblec                 C   s
   | j  ¡ S )a¢  
        Return the parameters split by type into a dictionary.

        Returns
        -------
        split_params : dict
            Dictionary with keys 'exog_params', 'ar_params', 'ma_params',
            'seasonal_ar_params', 'seasonal_ma_params', and (unless
            `concentrate_scale=True`) 'sigma2'. Values are the parameters
            associated with the key, based on the `params` argument.
        )r   rU   r   r   r   r   Úto_dictb  s    zSARIMAXParams.to_dictc                 C   s   t j| j| jd�S )z¸
        Return the parameters as a Pandas series.

        Returns
        -------
        series : pd.Series
            Pandas series with index set to the parameter names.
        )Úindex)ÚpdZSeriesrQ   r   r   r   r   r   Ú	to_pandasp  s    	zSARIMAXParams.to_pandasc                 C   s¬   g }| j r| dt| jƒ ¡ | jr8| dt| jƒ ¡ | jrR| dt| jƒ ¡ | jrl| dt| j	ƒ ¡ | j
r†| dt| jƒ ¡ | jjsž| d| j ¡ dd |¡ S )	z+Represent SARIMAXParams object as a string.zexog=%szar=%szma=%szseasonal_ar=%szseasonal_ma=%sz	sigma2=%szSARIMAXParams(%s)z, )r   r,   Ústrr   r	   r   r
   r.   r   r4   r   rI   r   rO   rN   Újoin)r   Ú
componentsr   r   r   Ú__repr__{  s$    ÿÿzSARIMAXParams.__repr__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   Úsetterr   r'   r.   r2   r4   rG   rI   rM   rN   rS   rT   rQ   rX   rY   rZ   r   r[   r^   rb   r   r   r   r   r      sz   (

























	

r   )rf   Únumpyr   Zpandasr]   Znumpy.polynomialr   Z statsmodels.tsa.statespace.toolsr   Zstatsmodels.tsa.arima.toolsr   r   r   r   r   r   Ú<module>   s   