
    "g;                     P    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      Zy)z?
SARIMAX parameters class.

Author: Chad Fulton
License: BSD-3
    N)
Polynomial)is_invertible)validate_basicc                      e Zd ZdZd Zed        Zej                  d        Zed        Zej                  d        Zed        Z	e	j                  d        Z	ed	        Z
e
j                  d
        Z
ed        Zej                  d        Zed        Zej                  d        Zed        Zej                  d        Zed        Zej                  d        Zed        Zej                  d        Zed        Zej                  d        Zed        Zed        Zed        Zej                  d        Zed        Zed        Zed        Zed        Zd Zd  Zd! Zy")#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                 D   || _         |j                  | _        |j                  | _        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        |j                  | _        |j                  | _        |j                  | _	        |j                  | _
        |j                  | _        |j                  | _        |j                  t        j                  | j                        t        j                   z  d      | _        d | _        y )NT)allow_infnan)spec
exog_namesar_namesma_namesseasonal_ar_namesseasonal_ma_namesparam_namesk_exog_paramsk_ar_paramsk_ma_paramsk_seasonal_ar_paramsk_seasonal_ma_paramsk_paramssplit_paramsnpzerosnan_params_split_params)selfr
   s     Y/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/tsa/arima/params.py__init__zSARIMAXParams.__init__8   s    	 //!%!7!7!%!7!7++!//++++$($=$=!$($=$=! "..HHT]]#bff,4 / A    c                      | j                   d   S )z7(array) Parameters associated with exogenous variables.exog_paramsr   r   s    r   r"   zSARIMAXParams.exog_paramsO   s     !!-00r    c                     t        j                  |      r|g| j                  z  }t        || j                  d      | j                  d<   d | _        y )Nzexogenous coefficientstitler"   )r   isscalarr   r   r   r   r   values     r   r"   zSARIMAXParams.exog_paramsT   sK    ;;uGd000E,:4%%-E-G=)r    c                      | j                   d   S )z1(array) Autoregressive (non-seasonal) parameters.	ar_paramsr#   r$   s    r   r,   zSARIMAXParams.ar_params\        !!+..r    c                     t        j                  |      r|g| j                  z  }t        || j                  d      | j                  d<   d | _        y )NAR coefficientsr&   r,   )r   r(   r   r   r   r   r)   s     r   r,   zSARIMAXParams.ar_paramsa   J    ;;uGd...E*84##+<+>;'r    c                     t        j                  | j                  j                  dz         }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ixs      r   ar_polyzSARIMAXParams.ar_polyi   s[     xx		..23QYY&&{33R$r    c                    t        |t              r|j                  }t        || j                  j
                  dz   d      }|d   dk7  rt        d      g }t        d| j                  j
                  dz         D ]C  }|| j                  j                  v r|j                  ||           1||   dk7  s:t        d       || _
        y )Nr2   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   r6   r   r
   r3   
ValueErrorranger4   appendr,   )r   r*   r,   is       r   r8   zSARIMAXParams.ar_polyr   s     eZ(JJEudii&<&<q&@%468q=IJJ	q$))00145 	4ADII%%%  %(+qQ  "3 4 4		4 #r    c                      | j                   d   S )z1(array) Moving average (non-seasonal) parameters.	ma_paramsr#   r$   s    r   rA   zSARIMAXParams.ma_params   r-   r    c                     t        j                  |      r|g| j                  z  }t        || j                  d      | j                  d<   d | _        y )NMA coefficientsr&   rA   )r   r(   r   r   r   r   r)   s     r   rA   zSARIMAXParams.ma_params   r0   r    c                     t        j                  | j                  j                  dz         }d|d<   | j                  j                  }| j
                  d   ||<   t        |      S )z:(Polynomial) Moving average (non-seasonal) lag polynomial.r2   r   rA   )r   r   r
   max_ma_orderma_lagsr   r   r5   s      r   ma_polyzSARIMAXParams.ma_poly   sX     xx		..23QYY%%k2R$r    c                    t        |t              r|j                  }t        || j                  j
                  dz   d      }|d   dk7  rt        d      g }t        d| j                  j
                  dz         D ]B  }|| j                  j                  v r|j                  ||          0||   dk7  s9t        d       || _
        y )Nr2   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   r6   r   r
   rE   r<   r=   rF   r>   rA   )r   r*   rA   r?   s       r   rG   zSARIMAXParams.ma_poly   s     eZ(JJEudii&<&<q&@%468q=IJJ	q$))00145 	4ADII%%%  q*qQ  "3 4 4		4 #r    c                      | j                   d   S )z+(array) Seasonal autoregressive parameters.seasonal_ar_paramsr#   r$   s    r   rK   z SARIMAXParams.seasonal_ar_params        !!"677r    c                     t        j                  |      r|g| j                  z  }t        || j                  d      | j                  d<   d | _        y )Nseasonal AR coefficientsr&   rK   )r   r(   r   r   r   r   r)   s     r   rK   z SARIMAXParams.seasonal_ar_params   L    ;;uGd777E3A4,,4N4P/0r    c                    | j                   j                  }dg}|dkD  rt        j                  | j                   j                        }t        j
                  | j                   j                  t              dz
  }| j                  d    ||<   t        j                  dt        j                  t        j                  |d      d|dz
  dfgd      j                         f   }t        |      S )z4(Polynomial) Seasonal autoregressive lag polynomial.r2   r   dtyperK   r2   r   r   constant)r
   seasonal_periodsr   r   max_seasonal_ar_orderarrayseasonal_ar_lagsintr   r_padreshapeflattenr   r   sr6   expandedr7   s        r   seasonal_ar_polyzSARIMAXParams.seasonal_ar_poly   s     II&&sq5xx		 ? ?@H$))44C@1DB ../CDDHRL55BFF2::h#@$*QUAJ#7EELWYO PD$r    c                    | j                   j                  }t        |t              r|j                  }t        |d|| j                   j                  z  z   d      }|d   dk7  rt        d      g }t        d| j                   j                  dz         D ]I  }|| j                   j                  v r|j                  |||z             4|||z     dk7  s@t        d       || _        y )Nr2   zseasonal AR polynomialr&   r   'Polynomial constant must be equal to 1.r:   )r
   rW   r;   r   r6   r   rX   r<   r=   rZ   r>   rK   )r   r*   ra   rK   r?   s        r   rc   zSARIMAXParams.seasonal_ar_poly   s    II&& eZ(JJEua!dii.M.M*M&M%=?8q=FGGq$))99A=> 	4ADII..."))5Q<-8q1u"  "3 4 4		4 #5r    c                      | j                   d   S )z+(array) Seasonal moving average parameters.seasonal_ma_paramsr#   r$   s    r   rg   z SARIMAXParams.seasonal_ma_params   rL   r    c                     t        j                  |      r|g| j                  z  }t        || j                  d      | j                  d<   d | _        y )Nseasonal MA coefficientsr&   rg   )r   r(   r   r   r   r   r)   s     r   rg   z SARIMAXParams.seasonal_ma_params   rO   r    c                    | j                   j                  }t        j                  dg      }|dkD  rt        j                  | j                   j
                        }t        j                  | j                   j                  t              dz
  }| j                  d   ||<   t        j                  dt        j                  t        j                  |d      d|dz
  dfgd      j                         f   }t        |      S )z4(Polynomial) Seasonal moving average lag polynomial.r2   r   rQ   rg   rS   rU   rV   )r
   rW   r   rY   r   max_seasonal_ma_orderseasonal_ma_lagsr[   r   r\   r]   r^   r_   r   r`   s        r   seasonal_ma_polyzSARIMAXParams.seasonal_ma_poly   s     II&&xx}q5xx		 ? ?@H$))44C@1DB--.BCHRL55BFF2::h#@$*QUAJ#7EELWYO PD$r    c                    | j                   j                  }t        |t              r|j                  }t        |d|| j                   j                  z  z   d      }|d   dk7  rt        d      g }t        d| j                   j                  dz         D ]H  }|| j                   j                  v r|j                  |||z            3|||z     dk7  s?t        d       || _        y )Nr2   zseasonal MA polynomialr&   r   re   rI   )r
   rW   r;   r   r6   r   rk   r<   r=   rl   r>   rg   )r   r*   ra   rg   r?   s        r   rm   zSARIMAXParams.seasonal_ma_poly   s    II&& eZ(JJEua!dii.M.M*M&M%=@8q=FGGq$))99A=> 	4ADII..."))%A,7q1u"  "3 4 4		4 #5r    c                      | j                   d   S )z(float) Innovation variance.sigma2r#   r$   s    r   rp   zSARIMAXParams.sigma2  s     !!(++r    c                     t        | j                  j                         }t        ||d      j	                         | j
                  d<   d | _        y )Nrp   r&   )r[   r
   concentrate_scaler   itemr   r   )r   paramslengths      r   rp   zSARIMAXParams.sigma2  sF    4445'5F((,,0DF 	8$r    c                 4    | j                   | j                  z  S )z8(Polynomial) Reduced form autoregressive lag polynomial.)r8   rc   r$   s    r   reduced_ar_polyzSARIMAXParams.reduced_ar_poly       ||d3333r    c                 4    | j                   | j                  z  S )z8(Polynomial) Reduced form moving average lag polynomial.)rG   rm   r$   s    r   reduced_ma_polyzSARIMAXParams.reduced_ma_poly  rx   r    c                     | j                   + | j                  j                  di | j                  | _         | j                   j	                         S )z"(array) Complete parameter vector. )r   r
   join_paramsr   copyr$   s    r   rt   zSARIMAXParams.params$  sB     <<049900F43E3EFDL||  ""r    c                 R    | j                   j                  |      | _        d | _        y )N)r
   r   r   r   r)   s     r   rt   zSARIMAXParams.params+  s     !YY33E:r    c                 h    t        j                  t        j                  | j                               S )zA(bool) Are current parameter values all filled in (i.e. not NaN).)r   anyisnanrt   r$   s    r   is_completezSARIMAXParams.is_complete0  s#     66"((4;;/000r    c                 z    d}	 | j                   j                  | j                         |S # t        $ r d}Y |S w xY w)z>(bool) Are current parameter values valid (e.g. variance > 0).TF)r
   validate_paramsrt   r<   )r   valids     r   is_validzSARIMAXParams.is_valid5  sF     	II%%dkk2   	E	s   %+ ::c                 V   t        | j                  | j                  d       t        | j                  | j                  d       d}d}| j                  dkD  rt        | j                  j                        }| j                  dkD  rt        | j                  j                        }|xr |S )z?(bool) Is the reduced autoregressive lag poylnomial stationary.r/   r&   rN   Tr   )	r   r,   r   rK   r   r   r8   r6   rc   )r   ar_stationaryseasonal_ar_stationarys      r   is_stationaryzSARIMAXParams.is_stationary?  s     	t~~t'7'7.	0t..0I0I7	9 !%a)$,,*;*;<M$$q(%243H3H3M3M%N"7!77r    c                 V   t        | j                  | j                  d       t        | j                  | j                  d       d}d}| j                  dkD  rt        | j                  j                        }| j                  dkD  rt        | j                  j                        }|xr |S )z?(bool) Is the reduced moving average lag poylnomial invertible.rC   r&   ri   Tr   )	r   rA   r   rg   r   r   rG   r6   rm   )r   ma_stationaryseasonal_ma_stationarys      r   r   zSARIMAXParams.is_invertibleP  s     	t~~t'7'7.	0t..0I0I7	9 !%a)$,,*;*;<M$$q(%243H3H3M3M%N"7!77r    c                 6    | j                   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   r~   r$   s    r   to_dictzSARIMAXParams.to_dictb  s     !!&&((r    c                 X    t        j                  | j                  | j                        S )z
        Return the parameters as a Pandas series.

        Returns
        -------
        series : pd.Series
            Pandas series with index set to the parameter names.
        )index)pdSeriesrt   r   r$   s    r   	to_pandaszSARIMAXParams.to_pandasp  s     yyD,<,<==r    c                    g }| j                   r'|j                  dt        | j                        z         | j                  r'|j                  dt        | j
                        z         | j                  r'|j                  dt        | j                        z         | j                  r'|j                  dt        | j                        z         | j                  r'|j                  dt        | j                        z         | j                  j                  s|j                  d| j                  z         ddj                  |      z  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   rA   r   rK   r   rg   r
   rr   rp   join)r   
componentss     r   __repr__zSARIMAXParams.__repr__{  s
   
i#d.>.>*??@gDNN(;;<gDNN(;;<$$.!$"9"9:; <$$.!$"9"9:; <yy**kDKK78"TYYz%:::r    N)__name__
__module____qualname____doc__r   propertyr"   setterr,   r8   rA   rG   rK   rc   rg   rm   rp   rw   rz   rt   r   r   r   r   r   r   r   r|   r    r   r   r      s   &P. 1 1   / /       ^^# #$ / /       ^^# #$ 8 8       5 5( 8 8       5 5( , , ]]  4 4 4 4 # # ]]  1 1   8 8  8 8")	>;r    r   )r   numpyr   pandasr   numpy.polynomialr    statsmodels.tsa.statespace.toolsr   statsmodels.tsa.arima.toolsr   r   r|   r    r   <module>r      s'      ' : 6}; };r    