o
    0Gf;                     @   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   <lib/python3.10/site-packages/statsmodels/tsa/arima/params.py__init__8   s"   
zSARIMAXParams.__init__c                 C   
   | j d S )z7(array) Parameters associated with exogenous variables.exog_paramsr   r   r   r   r   r   O      
zSARIMAXParams.exog_paramsc                 C   6   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      

c                 C   r   )z1(array) Autoregressive (non-seasonal) parameters.	ar_paramsr   r   r   r   r   r#   \   r   zSARIMAXParams.ar_paramsc                 C   r   )NAR coefficientsr   r#   )r   r   r	   r   r   r   r    r   r   r   r#   a   r"   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 ]}|| jjv r9|	||   q(|| dkrCtdq(|| _
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   r   )z1(array) Moving average (non-seasonal) parameters.	ma_paramsr   r   r   r   r   r2      r   zSARIMAXParams.ma_paramsc                 C   r   )NMA coefficientsr   r2   )r   r   r
   r   r   r   r    r   r   r   r2      r"   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   r2   )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 ]}|| jjv r8|	||  q(|| dkrBtdq(|| _
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   r4   r.   r/   r5   r0   r2   )r   r!   r2   r1   r   r   r   r6      s   

c                 C   r   )z+(array) Seasonal autoregressive parameters.seasonal_ar_paramsr   r   r   r   r   r8      r   z SARIMAXParams.seasonal_ar_paramsc                 C   r   )Nseasonal AR coefficientsr   r8   )r   r   r   r   r   r   r    r   r   r   r8      r"   c                 C   s   | j j}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 autoregressive lag polynomial.r%   r   Zdtyper8   r%   r   r   constant)r   seasonal_periodsr   r   max_seasonal_ar_orderarrayseasonal_ar_lagsintr   r_padreshapeflattenr   r   sr)   Z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r#tdg }td| j jd D ]}|| j j	v rA|
|||    q.|||  dkrMt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/   rB   r0   r8   )r   r!   rI   r8   r1   r   r   r   rJ      s    

c                 C   r   )z+(array) Seasonal moving average parameters.seasonal_ma_paramsr   r   r   r   r   rL      r   z SARIMAXParams.seasonal_ma_paramsc                 C   r   )Nseasonal MA coefficientsr   rL   )r   r   r   r   r   r   r    r   r   r   rL      r"   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   r:   rL   r;   r=   r>   )r   r?   r   rA   r   max_seasonal_ma_orderseasonal_ma_lagsrC   r   rD   rE   rF   rG   r   rH   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r#tdg }td| j jd D ]}|| j j	v r@|
|||   q.|||  dkrLtdq.|| _d S )Nr%   zseasonal MA polynomialr   r   rK   r7   )r   r?   r-   r   r)   r   rN   r.   r/   rO   r0   rL   )r   r!   rI   rL   r1   r   r   r   rP      s    

c                 C   r   )z(float) Innovation variance.sigma2r   r   r   r   r   rQ     r   zSARIMAXParams.sigma2c                 C   s0   t | jj }t||dd | jd< d | _d S )NrQ   r   )rC   r   concentrate_scaler   itemr   r   )r   paramslengthr   r   r   rQ     s   
c                 C      | j | j S )z8(Polynomial) Reduced form autoregressive lag polynomial.)r+   rJ   r   r   r   r   reduced_ar_poly     zSARIMAXParams.reduced_ar_polyc                 C   rV   )z8(Polynomial) Reduced form moving average lag polynomial.)r6   rP   r   r   r   r   reduced_ma_poly  rX   zSARIMAXParams.reduced_ma_polyc                 C   s*   | j du r| jjdi | j| _ | j  S )z"(array) Complete parameter vector.Nr   )r   r   Zjoin_paramsr   copyr   r   r   r   rT   $  s   

zSARIMAXParams.paramsc                 C   s   | j || _d | _d S )N)r   r   r   r   r    r   r   r   rT   +  s   
c                 C   s   t t | j S )zA(bool) Are current parameter values all filled in (i.e. not NaN).)r   anyZisnanrT   r   r   r   r   is_complete0  s   zSARIMAXParams.is_completec                 C   s2   d}z
| j | j W |S  ty   d}Y |S w )z>(bool) Are current parameter values valid (e.g. variance > 0).TF)r   Zvalidate_paramsrT   r.   )r   Zvalidr   r   r   is_valid5  s   zSARIMAXParams.is_validc                 C   `   t | j| jdd t | j| jdd d}d}| jdkr!t| jj}| jdkr,t| jj}|o/|S )z?(bool) Is the reduced autoregressive lag poylnomial stationary.r$   r   r9   Tr   )	r   r#   r	   r8   r   r   r+   r)   rJ   )r   Zar_stationaryZseasonal_ar_stationaryr   r   r   is_stationary?  s   



zSARIMAXParams.is_stationaryc                 C   r^   )z?(bool) Is the reduced moving average lag poylnomial invertible.r3   r   rM   Tr   )	r   r2   r
   rL   r   r   r6   r)   rP   )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   rZ   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SeriesrT   r   r   r   r   r   	to_pandasp  s   	zSARIMAXParams.to_pandasc                 C   s   g }| j r|dt| j  | jr|dt| j  | jr)|dt| j  | jr6|dt| j	  | j
rC|dt| j  | jjsO|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   r0   strr   r	   r#   r
   r2   r   r8   r   rL   r   rR   rQ   join)r   Z
componentsr   r   r   __repr__{  s$   zSARIMAXParams.__repr__N)__name__
__module____qualname____doc__r   propertyr   setterr#   r+   r2   r6   r8   rJ   rL   rP   rQ   rW   rY   rT   r\   r]   r_   r   r`   rc   rf   r   r   r   r   r      s|    (

























	

r   )rj   Znumpyr   Zpandasrb   Znumpy.polynomialr   Z statsmodels.tsa.statespace.toolsr   Zstatsmodels.tsa.arima.toolsr   r   r   r   r   r   <module>   s    