
    !g4                        d Z ddlZ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 ej                  j                  ej                  j                  e            Zej                  j%                  ed      Zej                  j%                  ed      Zej                  j%                  ed      Zej                  j%                  ed      Z ej.                  edg	      Z ej.                  edg	      Z ej.                  edg	      Z ej6                  g d
 ej8                  ddd            Z ej6                  g d ej8                  ddd            Z ej6                  g d ej8                  ddd            Z G d d      Z  G d de       Z! G d de       Z" G d de       Z# G d d e       Z$ G d! d"e       Z% G d# d$e       Z& G d% d&e       Z' G d' d(e       Z( G d) d*e       Z) G d+ d,e       Z* G d- d.e       Z+ G d/ d0      Z, G d1 d2e,      Z- G d3 d4e,      Z. G d5 d6e,      Z/ G d7 d8e,      Z0 G d9 d:e,      Z1 G d; d<e,      Z2 G d= d>      Z3 G d? d@e3      Z4 G dA dBe3      Z5 G dC dDe3      Z6 G dE dFe3      Z7 G dG dHe3      Z8 G dI dJe3      Z9dK Z: G dL dM      Z; G dN dOe;      Z< G dP dQe;      Z= G dR dSe;      Z> G dT dUe;      Z? G dV dWe;      Z@ G dX dYe;      ZA G dZ d[e       ZBd\ ZCd] ZDy)^a	  
Tests for exponential smoothing models

Notes
-----

These tests are primarily against the `fpp` functions `ses`, `holt`, and `hw`
and against the `forecast` function `ets`. There are a couple of details about
how these packages work that are relevant for the tests:

Trend smoothing parameterization
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Note that `fpp` and `ets` use
different parameterizations for the trend smoothing parameter. Our
implementation in `statespace.exponential_smoothing` uses the same
parameterization as `ets`.

The `fpp` package follows Holt's recursive equations directly, in which the
trend updating is:

.. math::

    b_t = \beta^* (\ell_t - \ell_{t-1}) + (1 - \beta^*) b_{t-1}

In our implementation, state updating is done by the Kalman filter, in which
the trend updating equation is:

.. math::

    b_{t|t} = b_{t|t-1} + \beta (y_t - l_{t|t-1})

by rewriting the Kalman updating equation in the form of Holt's method, we
find that we must have :math:`\beta = \beta^* \alpha`. This is the same
parameterization used by `ets`, which does not use the Kalman fitler but
instead uses an innovations state space framework.

Loglikelihood
^^^^^^^^^^^^^

The `ets` package has a `loglik` output value, but it does not compute the
loglikelihood itself, but rather a version without the constant parameters. It
appears to compute:

.. math::

    -\frac{n}{2} \log \left (\sum_{t=1}^n \varepsilon_t^2 \right)

while the loglikelihood is:

.. math::

    -\frac{n}{2}
    \log \left (2 \pi e \frac{1}{n} \sum_{t=1}^n \varepsilon_t^2 \right)

See Hyndman et al. (2008), pages 68-69. In particular, the former equation -
which is the value returned by `ets` - is -0.5 times equation (5.3), since for
these models we have :math:`r(x_{t-1}) = 1`. The latter equation is the log
of the likelihood formula given at the top of page 69.

Confidence intervals
^^^^^^^^^^^^^^^^^^^^

The range of the confidence intervals depends on the estimated variance,
sigma^2. In our default, we concentrate this variance out of the loglikelihood
function, meaning that the default is to use the maximum likelihood estimate
for forecasting purposes. forecast::ets uses a degree-of-freedom-corrected
estimate of sigma^2, and so our default confidence bands will differ. To
correct for this in the tests, we set `concentrate_scale=False` and use the
estimated variance from forecast::ets.

TODO: may want to add a parameter allowing specification of the variance
      estimator.

Author: Chad Fulton
License: BSD-3
    N)assert_assert_equalassert_allclose)ExponentialSmoothingresultsz exponential_smoothing_params.csvz!exponential_smoothing_predict.csvz exponential_smoothing_states.csv)	index_col)g4	({@g'֩g|@gz|@g2nzz@g[W|@g8h{@g4 Rz@gK/{#dR~@gFEŠ@g#WUv@gF&@g2U`~@19962007Y)startendfreqindex)g=U1@g#J{/5@g477@g=,Ԛ:@g~jt:@ga<@g9>@gjt>@g	/>@g}8g?@gzI@@g`@@g*ÂC@g^vD@g.[D@19902004)gVWD@gmV}
8@g\sG)@@gB@gHG@g'ҨX=@gt=B@gl%}E@ga+esH@gk".?@gLB@g5[y5D@gP|zI@gr_!?@gӸ7}D@g(.E@gϚK@gV`@@g5|	E@g=ϟ6F@g
%M@gclA@g)[$(F@gĖMG@2005Q12010Q4zQ-OCTc                   F    e Zd Zed        Zd Zd Zd Zd Zd Z	d Z
d Zy	)
CheckExponentialSmoothingc                     || _         || _        |j                  | _        t        t        d| j                   z           | j                  z
  | _        |j                  | j
                        | _        y Nz%s_mean)nameresnobslenresults_predict	nforecastget_forecastforecast)clsr   r   s      x/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/tsa/statespace/tests/test_exponential_smoothing.pysetup_classz%CheckExponentialSmoothing.setup_class|   sT    88OI,@ABSXXM''6    c                     t         d| j                  z     }t        | j                  j                  |j
                  d | j                          y r   )r   r   r   r   fittedvaluesilocr   self	predicteds     r"   test_fittedz%CheckExponentialSmoothing.test_fitted   s8    #I		$9:	--y~~jtyy/IJr$   c                    t        j                  t        | j                     d          }|rt	        | j
                  j                  t        | j                     d          d| j                  z  t        j                  t        j                  | j
                  j                  dz              z  }t	        |t        | j                     d          y t	        | j
                  j                  t        | j                     d          y )Nllfmseg         sse)npisnanresults_paramsr   r   r   r.   r   logsumresidr0   )r)   has_llfactuals      r"   test_outputz%CheckExponentialSmoothing.test_output   s    
 88N4995e<==DHHLL.*CE*JK
 DII%rvvdhhnna6G/H(IIFFN499$=e$DEDHHLL.*CE*JKr$   c                     t         d| j                  z     }t        | j                  j                  |j
                  | j                  d         y r   )r   r   r   r    predicted_meanr'   r   r(   s     r"   test_forecastsz(CheckExponentialSmoothing.test_forecasts   s<    #I		$9:	MM((NN499:&	
r$   c                 ,   | j                   j                  d      }t        d| j                  z     }t        d| j                  z     }t	        |d   |j
                  | j                  d         t	        |d   |j
                  | j                  d         y )N皙?alpha%s_lower%s_upperzlower yzupper yr    conf_intr   r   r   r'   r   r)   ci_95loweruppers       r"   test_conf_intz'CheckExponentialSmoothing.test_conf_int   s{    &&T&2
TYY 67
TYY 67i(%**TYYZ*@Ai(%**TYYZ*@Ar$   c                 (   t         j                  j                  j                  | j                        }t         j
                  d d |f   j                         j                  d   }t        | j                  j                  j                  d   |       y )Nr   )results_statescolumnsstr
startswithr   locdropnar'   r   r   initial_stater)   maskdesireds      r"   test_initial_statesz-CheckExponentialSmoothing.test_initial_states   si    %%))44TYY? $$QW-446;;A>..33A6@r$   c                 (   t         j                  j                  j                  | j                        }t         j
                  d d |f   j                         j                  dd  }t        | j                  j                  dd  j                  |       y )N   )rK   rL   rM   rN   r   rO   rP   r'   r   r   filtered_stateTrR   s      r"   test_statesz%CheckExponentialSmoothing.test_states   sm    %%))44TYY? $$QW-446;;AB?//355w?r$   c                    | j                   j                  }t        |j                  t	        |j
                               t        |j                  t	        |j                               | j                   j                          y N)r   modelr   k_paramsr   start_paramsparam_namessummary)r)   mods     r"   	test_miscz#CheckExponentialSmoothing.test_misc   sQ    hhnnS\\3s'7'7#89S\\3s#78 	r$   N)__name__
__module____qualname__classmethodr#   r+   r9   r<   rI   rU   rZ   rc    r$   r"   r   r   {   s<    7 7KL"
BA
@
r$   r   c                   (     e Zd Ze fd       Z xZS )TestSESFPPFixed02c                     t        t        d      }|j                  t        d   d   g      }t        |   d|       y )Nsimpleinitialization_methodoil_fpp1r@   r   oildatafilterr3   superr#   r!   rb   r   	__class__s      r"   r#   zTestSESFPPFixed02.setup_class   ;     #7(Kjj.4W=>?J,r$   rd   re   rf   rg   r#   __classcell__ru   s   @r"   rj   rj          - -r$   rj   c                   (     e Zd Ze fd       Z xZS )TestSESFPPFixed06c                     t        t        d      }|j                  t        d   d   g      }t        |   d|       y )Nrl   rm   oil_fpp2r@   rp   rt   s      r"   r#   zTestSESFPPFixed06.setup_class   rv   r$   rw   ry   s   @r"   r|   r|      rz   r$   r|   c                   (     e Zd Ze fd       Z xZS )TestSESFPPEstimatedc                     t        t        dd      }|j                  t        d   d   t        d   d   t        d   d   g      }t        |   d|       y )N	estimatedFrn   concentrate_scaleoil_fpp3r@   sigma2l0rp   rt   s      r"   r#   zTestSESFPPEstimated.setup_class   s`     #7+5:<jj.4W=(4X>(4T:< = 	J,r$   rw   ry   s   @r"   r   r      s    	- 	-r$   r   c                   .     e Zd Ze fd       Zd Z xZS )TestSESETSEstimatedc                     t        t        dd      }|j                  t        d   d   t        d   d   t        d   d   g      }t        |   d|       y )Nr   Fr   oil_etsr@   r   r   rp   rt   s      r"   r#   zTestSESETSEstimated.setup_class   s`     #7+5:<jj.3G<(3H=(3D9; < 	Is+r$   c                     | j                   j                  j                  d      }t        | j                   j                  |j                  k         y Nr   dispr   r]   fitr   r-   r)   mle_ress     r"   test_mle_estimatesz&TestSESETSEstimated.test_mle_estimates   8     ((..$$!$,+,r$   rd   re   rf   rg   r#   r   rx   ry   s   @r"   r   r      s    	, 	,-r$   r   c                   .     e Zd Ze fd       Zd Z xZS )TestHoltFPPFixedc                     t        t        ddd      }t        d   d   t        d   d   t        d   d   g}|d	   |d
   z  |d
<   |j                  |      }t        |   d|       y )NTFrl   )trendr   rn   air_fpp1r@   	beta_starr   r   rW   r   airr3   rr   rs   r#   r!   rb   paramsr   ru   s       r"   r#   zTestHoltFPPFixed.setup_class   s~    
 #3de9AC !,W5 ,[9 ,X68 1Iq	)q	jj J,r$   c                    t        j                  dd      }| j                  j                  \  }}}t         j                  d|||z  z   f   }|dt        j
                  |dz        z   z  dz  }t        | j                  j                  |       y )NrW      r   r/         ?)	r1   aranger   r   r_cumsumr   r    se_mean)r)   jr@   betar   cses          r"   rI   zTestHoltFPPFixed.test_conf_int  sx     IIa"hhootVEE!UTAX%%&BIIadO+,s2--r2r$   rd   re   rf   rg   r#   rI   rx   ry   s   @r"   r   r      s    - - 3r$   r   c                   (     e Zd Ze fd       Z xZS )TestHoltDampedFPPEstimatedc                     t        t        ddd      }t        d   d   t        d   d   t        d   d   t        d   d   t        d   d	   t        d   d
   g}|j                  |      }t        |   d|       y )NTFr   damped_trendr   air_fpp2r@   r   phir   r   b0r   r   s       r"   r#   z&TestHoltDampedFPPEstimated.setup_class  s    
 #3d5:< ,W5 ,V4 ,U3 ,X6 ,T2 ,T24 jj J,r$   rw   ry   s   @r"   r   r     s    - -r$   r   c                   .     e Zd Ze fd       Zd Z xZS )TestHoltDampedETSEstimatedc                     t        t        ddd      }t        d   d   t        d   d   t        d   d   t        d   d   t        d   d	   t        d   d
   g}|j                  |      }t        |   d|       y )NTFr   air_etsr@   r   r   r   r   r   r   r   s       r"   r#   z&TestHoltDampedETSEstimated.setup_class)  s    
 #3d5:< +G4 +F3 +E2 +H5 +D1 +D13 jj Is+r$   c                     | j                   j                  j                  d      }t        | j                   j                  |j                  k         y r   r   r   s     r"   r   z-TestHoltDampedETSEstimated.test_mle_estimates:  r   r$   r   ry   s   @r"   r   r   (  s    , , -r$   r   c                   (     e Zd Ze fd       Z xZS )TestHoltWintersFPPEstimatedc                 Z   t        t        ddd      }t        j                  t        d   d   t        d   d   t        d   d   t        d   d	   t        d   d
   t        d   d   t        d   d   t        d   d   t        d   d   f	   }|j                  |      }t        |   d|       y )NT   Fr   seasonalr   	aust_fpp1r@   r   gammar   r   r   s0_0s0_1s0_2r   austr1   r   r3   rr   rs   r#   r   s       r"   r#   z'TestHoltWintersFPPEstimated.setup_classB      
 #4ta5:<;'0;'/;'0;'1;'-;'-;'/;'/;'/0	1 jj K-r$   rw   ry   s   @r"   r   r   A      . .r$   r   c                   (     e Zd Ze fd       Z xZS )TestHoltWintersETSEstimatedc                 Z   t        t        ddd      }t        j                  t        d   d   t        d   d   t        d   d   t        d   d	   t        d   d
   t        d   d   t        d   d   t        d   d   t        d   d   f	   }|j                  |      }t        |   d|       y )NTr   Fr   	aust_ets1r@   r   r   r   r   r   r   r   r   r   r   s       r"   r#   z'TestHoltWintersETSEstimated.setup_classY  r   r$   rw   ry   s   @r"   r   r   X  r   r$   r   c                   .     e Zd Ze fd       Zd Z xZS )!TestHoltWintersDampedETSEstimatedc                 r   t        t        dddd      }t        j                  t        d   d   t        d   d   t        d   d   t        d   d	   t        d   d
   t        d   d   t        d   d   t        d   d   t        d   d   t        d   d   f
   }|j                  |      }t        |   d|       y )NTr   F)r   r   r   r   	aust_ets2r@   r   r   r   r   r   r   r   r   r   r   r   s       r"   r#   z-TestHoltWintersDampedETSEstimated.setup_classp  s    
 #4t$,-H;'0;'/;'0;'.;'1;'-;'-;'/;'/;'/	0
1 jj K-r$   c                     | j                   j                  j                  dd      }t        | j                   j                  |j                  k         y )Nr   d   r   maxiterr   r   s     r"   r   z4TestHoltWintersDampedETSEstimated.test_mle_estimates  s:     ((..$$!S$9+,r$   r   ry   s   @r"   r   r   o  s    . .*-r$   r   c                   4     e Zd Ze fd       Zd Zd Z xZS )"TestHoltWintersNoTrendETSEstimatedc           	      ,   t        t        dd      }t        j                  t        d   d   t        d   d   t        d   d   t        d   d   t        d   d	   t        d   d
   t        d   d   f   }|j                  |      }t        |   d|       y )Nr   F)r   r   	aust_ets3r@   r   r   r   r   r   r   r   r   s       r"   r#   z.TestHoltWintersNoTrendETSEstimated.setup_class  s    
 #4!uM;'0;'0;'1;'-;'/;'/;'/01 jj K-r$   c                 T   t        j                  dd      }| j                  j                  d d \  }}}t         j                  d|||dz  dk(  j                  t              z  z   f   }|dt        j                  |dz        z   z  dz  }t        | j                  j                  |       y )NrW         r   r   r/   r   )r1   r   r   r   r   astypeintr   r   r    r   )r)   r   r@   r   r   r   r   s          r"   rI   z0TestHoltWintersNoTrendETSEstimated.test_conf_int  s     IIaO#xxr2ufEE!UUq1ul%:%:3%????@BIIadO+,s2--r2r$   c                     g d}| j                   j                  j                  |dd      }t        | j                   j                  |j                  k         y )N)r   皙?r       ffffff@r   r   r   r   )r)   r_   r   s      r"   r   z5TestHoltWintersNoTrendETSEstimated.test_mle_estimates  sA     6((..$$\3$G+,r$   )rd   re   rf   rg   r#   rI   r   rx   ry   s   @r"   r   r     s    . ."3"-r$   r   c                   (    e Zd Zed        Zd Zd Zy)CheckKnownInitializationc                 t   || _         || _        |j                  j                  }| j                   j	                  |dd      | _        | j
                  j                  j                  dd       | _        | j
                  j                  j                  dd       | _	        d | _
        | j                   j                  rk| j
                  j                  d   gt        d| j                   j                  dz
        D cg c]  }| j
                  j                  d|z       c}z   | _
        | j
                  j                  d d j                  d      | _        | j
                  j                  dd  | _        | j                   j!                  |d	| j                  | j                  | j                  
      | _        y c c}w )Nr   r   r   initial_levelinitial_trendinitial_seasonalrW   zinitial_seasonal.L%dknownrn   r   r   r   )rb   r_   data
orig_endogr   r   r   getr   r   r   r   rangeseasonal_periodsdropinit_paramsclone	known_mod)r!   rb   r_   endogis        r"   r#   z$CheckKnownInitialization.setup_class  sl   
 '##''++lC+@  GGNN..EGGNN..E#77 234!!SWW%=%=%ABD 77>>"81"<= DD   WW^^$4_5::?K
''..)9: e7474E4E474E4E7:7K7K & MDs   9#F5c                    | j                   j                  | j                        }t        |j                  | j
                  j                         t        |j                  | j
                  j                         t        |j                  | j
                  j                         t        |j                  | j
                  j                         y r\   )	r   rr   r   r   r-   r   predicted_statepredicted_state_covrX   )r)   	known_ress     r"   test_given_paramsz*CheckKnownInitialization.test_given_params  s     NN))$++6		txx||4	114883K3KL	5544	6	00$((2I2IJr$   c                    | j                   j                  | j                  j                         | j                  dd      }| j
                  j                  | j                  d d j                  d      d      }t        |j                  d d j                  d      |j                         t        |j                  |j                         t        |j                  |j                         t        |j                  |j                         t        |j                  |j                         t        |j                  |j                         y )NTr   )r_   includes_fixedr   r   r   )rb   fit_constrainedr   to_dictr_   r   r   r   r   r   r-   scaler   r   rX   )r)   fit_res1fit_res2s      r"   test_estimated_paramsz.CheckKnownInitialization.test_estimated_params  s    88++$$&T5F5Fa , ) >>%%./44_EA & O 	OO,_-22?COO	 	hll3700(2J2JK44 44	6//1H1HIr$   Nrd   re   rf   rg   r#   r   r  rh   r$   r"   r   r     s"    M M:	KJr$   r   c                   (     e Zd Ze fd       Z xZS )TestSESKnownInitializationc                     t        t              }t        j                  ddg|j                        }t
        |   ||       y )Ng?g     {@r   r   rq   pdSeriesr`   rs   r#   r!   rb   r_   ru   s      r"   r#   z&TestSESKnownInitialization.setup_class  s4    "7+yy#tCOODC.r$   rw   ry   s   @r"   r  r    s    / /r$   r  c                   (     e Zd Ze fd       Z xZS )TestHoltKnownInitializationc                     t        t        d      }t        j                  g d|j                        }t
        |   ||       y )NTr   ffffff?Mb@?      .@      ?r   r   r   r	  r
  r`   rs   r#   r  s      r"   r#   z'TestHoltKnownInitialization.setup_class   s5    "3d3yy$COO=C.r$   rw   ry   s   @r"   r  r        / /r$   r  c                   (     e Zd Ze fd       Z xZS )!TestHoltDampedKnownInitializationc                     t        t        dd      }t        j                  g d|j                        }t
        |   ||       y )NTr   r   )?r  r  g      ,@       @r   r  r  s      r"   r#   z-TestHoltDampedKnownInitialization.setup_class
  s8    "3dFyy's@C.r$   rw   ry   s   @r"   r  r  	      / /r$   r  c                   (     e Zd Ze fd       Z xZS )"TestHoltWintersKnownInitializationc                     t        t        dd      }t        j                  g d|j                        }t
        |   ||       y )NTr   r   r   )r  -C6:?r        @@r         @       g      "r   r   r   r	  r
  r`   rs   r#   r  s      r"   r#   z.TestHoltWintersKnownInitialization.setup_class  s:    "4ta@yy://# 	C.r$   rw   ry   s   @r"   r  r    r  r$   r  c                   (     e Zd Ze fd       Z xZS )(TestHoltWintersDampedKnownInitializationc                     t        t        ddd      }t        j                  g d|j                        }t
        |   ||       y )NTr   r   r   r   	r  r"  r  r  g      1@r  gɿ皙?r   r   r  r  s      r"   r#   z4TestHoltWintersDampedKnownInitialization.setup_class  s?    "3d,-/yyE//# 	C.r$   rw   ry   s   @r"   r(  r(    s    / /r$   r(  c                   (     e Zd Ze fd       Z xZS ))TestHoltWintersNoTrendKnownInitializationc                     t        t        d      }t        j                  g d|j                        }t
        |   ||       y )Nr   r   )r   \(\?g      >@r  r   r   r   r&  r  s      r"   r#   z5TestHoltWintersNoTrendKnownInitialization.setup_class(  s6    "4!4yy(AC.r$   rw   ry   s   @r"   r.  r.  '  r  r$   r.  c                       e Zd Zed        Zy)CheckHeuristicInitializationc                 @   || _         | j                   j                  | j                   j                        | _        t        j
                  | j                   j                     }| j                   j                  r)t        j
                  || j                   j                  f   }| j                   j                  r)t        j
                  || j                   j                  f   }|| _        | j                   j                  j                  }| j                   j                  }| j                   j                  |d| j                   j                  | j                   j                  |      | _        | j                   j                  | j                   j                        | _        y )Nr   r   )rb   rr   r_   r   r1   r   _initial_levelr   _initial_trendr   _initial_seasonalinit_heuristicr   r   r   r   r   )r!   rb   r8  r   r   s        r"   r#   z(CheckHeuristicInitialization.setup_class1  s   ''..!5!56 sww55677==UU>3773I3I#IJN77UU>3773L3L#LMN+ ''7744e747GG4J4J47GG4J4J7G & I sww';';<r$   N)rd   re   rf   rg   r#   rh   r$   r"   r3  r3  0  s    = =r$   r3  c                   .     e Zd Ze fd       Zd Z xZS )TestSESHeuristicInitializationc                 F    t        t        d      }t        |   |       y )N	heuristicrm   )r   rq   rs   r#   r!   rb   ru   s     r"   r#   z*TestSESHeuristicInitialization.setup_classI  s    "7+NC r$   c                 4   d}t         j                  t        j                  |      t        j                  |      dz   f   }t         j                  j                  |      j                  t        j                  d |       d   }t        | j                  |       y )N
   rW   r   )r1   c_onesr   linalgpinvdotrq   valuesr   r8  r)   r   exogrT   s       r"   test_heuristicz-TestSESHeuristicInitialization.test_heuristicN  sl    uuRWWT]BIIdOa$778))..&**7>>%4+@A!D++W5r$   rd   re   rf   rg   r#   rH  rx   ry   s   @r"   r:  r:  H  s    ! !6r$   r:  c                   .     e Zd Ze fd       Zd Z xZS )TestHoltHeuristicInitializationc                 H    t        t        dd      }t        |   |       y )NTr<  )r   rn   r   r   rs   r#   r=  s     r"   r#   z+TestHoltHeuristicInitialization.setup_classW  s"    "3d9DFC r$   c                 .   d}t         j                  t        j                  |      t        j                  |      dz   f   }t         j                  j                  |      j                  t        j                  d |       }t        | j                  |       y )Nr?  rW   )r1   r@  rA  r   rB  rC  rD  r   rE  r   r8  rF  s       r"   rH  z.TestHoltHeuristicInitialization.test_heuristic]  sg    uuRWWT]BIIdOa$778))..&**3::et+<=++W5r$   rI  ry   s   @r"   rK  rK  V  s    ! !
6r$   rK  c                   .     e Zd Ze fd       Zd Z xZS )%TestHoltDampedHeuristicInitializationc                 J    t        t        ddd      }t        |   |       y )NTr<  )r   r   rn   rM  r=  s     r"   r#   z1TestHoltDampedHeuristicInitialization.setup_classf  s$    "3d9DFC r$   c                 .    t         j                  |        y r\   )rK  rH  r)   s    r"   rH  z4TestHoltDampedHeuristicInitialization.test_heuristicl  s    '66t<r$   rI  ry   s   @r"   rP  rP  e  s    ! !
=r$   rP  c                   .     e Zd Ze fd       Zd Z xZS )&TestHoltWintersHeuristicInitializationc                 J    t        t        ddd      }t        |   |       y )NTr   r<  )r   r   rn   r   r   rs   r#   r=  s     r"   r#   z2TestHoltWintersHeuristicInitialization.setup_classq  s$    "4ta9DFC r$   c                    t         d d j                  d      j                         j                  d      j                         j                  d      j	                         }d}t
        j                  t        j                  |      t        j                  |      dz   f   }t
        j                  j                  |      j                  |d |       }| j                  j                  s|d d }t         |z
  }t        j                  |j                  j!                  dd      d	      }|d d d
   }t
        j"                  ||t        j                  |      z
  f   }t%        | j&                  |       y )N   r   r/   r   r?  rW      r   )axis)r   rollingmeanshiftrP   r1   r@  rA  r   rB  rC  rD  rb   r   nanmeanrE  reshaper   r   r8  )r)   r   r   rG  rT   	detrendedr   s          r"   rH  z5TestHoltWintersHeuristicInitialization.test_heuristicw  s    cr""1%**,"71:ddfUU2Yvvx 	uuRWWT]BIIdOa$778))..&**5$<8xx~~bqkG 5L	::i&6&6&>&>q!&D1M
 ,DbD1%%!1BGG<L4M!MMN++W5r$   rI  ry   s   @r"   rU  rU  p  s    ! !
6r$   rU  c                   .     e Zd Ze fd       Zd Z xZS ),TestHoltWintersDampedHeuristicInitializationc                 L    t        t        dddd      }t        |   |       y )NTr   r<  )r   r   r   rn   rW  r=  s     r"   r#   z8TestHoltWintersDampedHeuristicInitialization.setup_class  s)    "4t$,-9DF 	C r$   c                 .    t         j                  |        y r\   rU  rH  rS  s    r"   rH  z;TestHoltWintersDampedHeuristicInitialization.test_heuristic      .==dCr$   rI  ry   s   @r"   rd  rd    s    ! !Dr$   rd  c                   .     e Zd Ze fd       Zd Z xZS )-TestHoltWintersNoTrendHeuristicInitializationc                 H    t        t        dd      }t        |   |       y )Nr   r<  )r   rn   rW  r=  s     r"   r#   z9TestHoltWintersNoTrendHeuristicInitialization.setup_class  s"    "4!9DFC r$   c                 .    t         j                  |        y r\   rg  rS  s    r"   rH  z<TestHoltWintersNoTrendHeuristicInitialization.test_heuristic  rh  r$   rI  ry   s   @r"   rj  rj    s    ! !
Dr$   rj  c                  ^   t        t        d      } t        t              }| j                  dg      }|j                  ddid      }| j	                  d      }|j	                  d      }t        |j                  |j                         t        |j                  |j                  d       y )	Nconcentratedrm   r,  smoothing_levelr   r   h㈵>)rtol)r   rq   rr   r   r   r   r-   rQ   )mod1mod2res1res2s       r"    test_concentrated_initializationrv    s      ~ND(D ;;uD!2C 8qAD 888D888DDHHdhh'D&&(:(:Fr$   c                   *    e Zd Zedd       Zd Zd Zy)CheckConcentratedInitializationNc                    || _         || _        || _        || _        |j	                  |j
                  j                  d      | _        t        j                  g dg d      | _
        g }| j                  j                  s|ddgz  }n| j                  j                  s|dgz  }| j                  j                  s|dgz  }| j                  j                  |d	
       y )Nrn  rm   )r   皙?rz  r  )ro  smoothing_trendsmoothing_seasonaldamping_trendr   r{  r}  r|  T)inplace)r_   atolrq  rb   r   r   r   conc_modr	  r
  r   r   r   r   r   )r!   rb   r_   r  rq  r   s         r"   r#   z+CheckConcentratedInitialization.setup_class  s     ( yy!4!47E ! G YY4 = 
 ww}}&88D%%_%%Dww)**D

d+r$   c                    | j                   j                  | j                  j                         d      }| j                  j                  | j                  j                        }t        |j                  |j                  | j                  | j                         t        |j                  |j                  | j                  | j                         y )Nr   r   r  rq  )rb   r   r   r   r  rr   rE  r   r-   r  rq  rQ   r)   r   conc_ress      r"   r   z1CheckConcentratedInitialization.test_given_params  s     hh&&t{{':':'<1&E==''(:(:;cggDIIDIIN..0A0A!YYTYY	8r$   c                    | j                   j                  | j                  dd      }t        j                  d       | j
                  j                  | j                  d t        | j                         d      }t        |j                  |j                  | j                  | j                         t        |j                  |j                  | j                  | j                         y )Nr   r   r   T)suppressr   r  )rb   r   r_   r1   set_printoptionsr  r   r   r   r-   r  rq  rQ   r  s      r"   r  z5CheckConcentratedInitialization.test_estimated_params  s    hhll4,,1clB
T*==$$T%6%67HDKK8H%I*+ % - 	cggDIIDIIN..0A0A!YYTYY	8r$   )Nr   gHz>r  rh   r$   r"   rx  rx    s    , ,>	8	8r$   rx  c                   (     e Zd Ze fd       Z xZS )!TestSESConcentratedInitializationc                     t        t              }t        j                  ddg|j                        }t
        |   ||d       y )Ng333333?g     {@r   rp  r_   rq  r  r  s      r"   r#   z-TestSESConcentratedInitialization.setup_class  s9    "7+yy$S__EClFr$   rw   ry   s   @r"   r  r    s    G Gr$   r  c                   (     e Zd Ze fd       Z xZS )"TestHoltConcentratedInitializationc                     t        t        d      }t        j                  g d|j                        }t
        |   ||d       y )NTr  r  r   -C6?r  r  r  s      r"   r#   z.TestHoltConcentratedInitialization.setup_class  s:    "3d3yy$COO=ClFr$   rw   ry   s   @r"   r  r    s    G Gr$   r  c                   (     e Zd Ze fd       Z xZS )(TestHoltDampedConcentratedInitializationc                     t        t        dd      }t        j                  g d|j                        }t
        |   ||d       y )NTr  )r  r  r  r  r$  r   r,  r  r  r  s      r"   r#   z4TestHoltDampedConcentratedInitialization.setup_class  s=    "3dFyy+3??DClFr$   rw   ry   s   @r"   r  r        G Gr$   r  c                   (     e Zd Ze fd       Z xZS ))TestHoltWintersConcentratedInitializationc                     t        t        dd      }t        j                  g d|j                        }t
        |   ||d       y )NTr   r!  )r  r"  g-C6*?r#  r   g@r%  皙"r   gMbP?r  r&  r  s      r"   r#   z5TestHoltWintersConcentratedInitialization.setup_class  s?    "4ta@yy>//# 	ClFr$   rw   ry   s   @r"   r  r    s    G Gr$   r  c                   (     e Zd Ze fd       Z xZS )/TestHoltWintersDampedConcentratedInitializationc                     t        t        ddd      }t        j                  g d|j                        }t
        |   ||d       y )NTr   r*  r+  r   r,  r  r&  r  s      r"   r#   z;TestHoltWintersDampedConcentratedInitialization.setup_class  sD    "4t$,-/yyE//# 	ClFr$   rw   ry   s   @r"   r  r    s    G Gr$   r  c                   (     e Zd Ze fd       Z xZS )0TestHoltWintersNoTrendConcentratedInitializationc                     t        t        d      }t        j                  g d|j                        }t
        |   ||d       y )Nr   r0  )r   r1  g      @@r   g r  r   r  r  r&  r  s      r"   r#   z<TestHoltWintersNoTrendConcentratedInitialization.setup_class'  s;    "4!4yy-S__FClFr$   rw   ry   s   @r"   r  r  %  r  r$   r  c                   .     e Zd Ze fd       Zd Z xZS )TestMultiIndexc                     t         j                         }d|_        t        |d      }|j	                  t
        d   d   g      }t        |   d|       y )N)oilr   rl   rm   r~   r@   )rq   copyr   r   rr   r3   rs   r#   )r!   oildata_copyrb   r   ru   s       r"   r#   zTestMultiIndex.setup_class0  sP    ||~+"<9ACjj.4W=>?J,r$   c                 ,   | j                   j                  d      }t        d| j                  z     }t        d| j                  z     }t	        |d   |j
                  | j                  d         t	        |d   |j
                  | j                  d         y )Nr>   r?   rA   rB   zlower ('oil', 'data')zupper ('oil', 'data')rC   rE   s       r"   rI   zTestMultiIndex.test_conf_int:  s}    &&T&2
TYY 67
TYY 6756

499:8NO56

499:8NOr$   r   ry   s   @r"   r  r  /  s    - -Pr$   r  c                     t        j                  t        d      5  t        t        d      } d d d        t        j                  t
        d      5  t        t        d      } d d d        t        j                  t        d      5  t        t        d	      } d d d        t        j                  t        d
      5  t        t        d	      } d d d        t        j                  t        d      5  t        t        ddd      } d d d        t        j                  t        d      5  t        t        ddd      } d d d        dD ]=  }d|z  }t        j                  t        |      5  t        t        fi |di} d d d        ? t        j                  t        d      5  t        t        dddd      } d d d        t        j                  t        d      5  t        t              } | j                  t        t               d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   hxY w# 1 sw Y   >xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nz#Cannot have a seasonal period of 1.)matchrW   r0  zXseasonal must be integer_like \(int or np.integer, but not bool or timedelta64\) or NoneTz(Invalid initialization method "invalid".invalidrm   zW`initial_level` argument must be provided when initialization method is set to "known".r   zy`initial_trend` argument must be provided for models with a trend component when initialization method is set to "known".r   )r   rn   r   z`initial_seasonal` argument must be provided for models with a seasonal component when initialization method is set to "known".r   )r   rn   r   )r   r   r   z<Cannot give `%s` argument when initialization is "estimated"znInvalid length of initial seasonal values. Must be one of s or s-1, where s is the number of seasonal periods.)r   rn   r   r   z-ExponentialSmoothing does not support `exog`.)rG  )	pytestraises
ValueErrorr   r   	TypeErrorNotImplementedErrorr   r   )rb   argmsgs      r"   test_invalidr  C  sT   	C
E 5"4!45 
yK
M 8 #4$78
 
H
J J"4yIJ 
z
 H #4wG	H 
z8
: N #G1N	N 
z8
: N #1G1N	N F 9M]]:S1 	9&t8Qx8C	9 	99 
z
   #1G1 	  
*L
N ""4(		$S	!" "_5 58 8
J JH HN NN N	9 	9   " "sk   HHH&;H30I 'I(I I'+I3HH#&H03H= I
II$	'I03I<c                 |   t        j                  t         j                  j                  d            }t	        ||d   d      }|j                  ddi      5  |j                         }d d d        t        j                  j                        j                         sJ |j                  dgk(  sJ y # 1 sw Y   KxY w)Ni  r   r   )r   rn   ro  r   )r1   r   randomstandard_normalr   
fix_paramsr   r2   bseallfixed_params)reset_randomstatexsesr   s       r"   test_parameterless_modelr  z  s    
		"))++D12A
q!5<>C	*C0	1 ggi88CGG  """ 12222 s   B22B;)E__doc__numpyr1   pandasr	  osr  numpy.testingr   r   r   0statsmodels.tsa.statespace.exponential_smoothingr   pathdirnameabspath__file__current_pathjoinresults_pathparams_pathpredict_pathstates_pathread_csvr3   r   rK   r
  period_rangerq   r   r   r   rj   r|   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r(  r.  r3  r:  rK  rP  rU  rd  rj  rv  rx  r  r  r  r  r  r  r  r  r  rh   r$   r"   <module>r     s0  L^   	  @ @ wwrwwx89ww||L)4ggll<)KLww||L*MNggll<)KL[QC8"++lqc:[QC8 "))  "//F
=	? bii ; "//F
=	? ryy 0 "//hW
EG? ?D-1 --1 --3 --3 -(30 3@-!: -&-!: -2."; ..."; ..-(A -<)-)B )-X;J ;J|/!9 //": //(@ //)A ///G //0H /= =06%A 66&B 6=,H =6-I 6@
D$
D	D$	DG$58 58pG(G GG)H GG'GG'G	G'	GG'GP. P(4"n3r$   