U
    Kvf;                     @   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   @/tmp/pip-unpacked-wheel-2v6byqio/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   Znumpyr   Zpandasr]   Znumpy.polynomialr   Z statsmodels.tsa.statespace.toolsr   Zstatsmodels.tsa.arima.toolsr   r   r   r   r   r   <module>   s   