
p7]c           @   s  d  Z  d d l m Z d d l Z d d l Z d d l Z d d l Z d d l	 Z	 d d l
 m Z m Z d d l m Z d d l m Z m Z m Z m Z m Z e j j e j j e   \ Z Z e j e j j e d d   Z e j d	  Z e j d
  Z d d e  f Z! d d e  f Z" d d  Z# d e$ f d     YZ% e	 j& j' d d e  f e  d f d d f f  d    Z( e	 j& j' d e!  d    Z) e	 j& j' d d d f  d    Z* d   Z+ d   Z, e	 j& j' d e"  e	 j& j' d e!  d     Z- d   Z. d   Z/ d   Z0 d   Z1 e	 j& j2 e	 j& j' d e"  e	 j& j' d e!  d      Z3 e	 j& j' d e"  e	 j& j' d e!  d     Z4 d    Z5 d!   Z6 d S("   s4   
Author: Terence L van Zyl
Modified: Kevin Sheppard
i(   t   PLATFORM_OSXN(   t   assert_almost_equalt   assert_allclose(   t   EstimationWarning(   t   ExponentialSmoothingt   SimpleExpSmoothingt   Holtt	   SMOOTHERSt   PY_SMOOTHERSt   resultss   housing-data.csvt   DATEt   MSt   addt   muli    c         C   s  |  j  d } t j |  } t j |  } t j |  }	 t j |  }
 | | d <| | d <| | |	 d <| |  d d | | | | d <| | d | d | | | d <x{ t d |  D]j } | |  | d | | | d | | d | | <| | | | | d d | | | d | | <q W| d d !| d d !|	 d )| d t j d | d  | d |
 (|  |	 } | | |
 | |	 f S(   sQ   
    Simple, slow, direct implementation of double exp smoothing for testing
    i    i   i(   t   shapet   npt   zerost   ranget   arange(   t   xt   alphat   betat   l0t   b0t	   nforecastt   nt   lvalst   bt   xhatt   ft   tt   err(    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   _simple_dbl_exp_smoother   s"    

""26'
t   TestHoltWintersc           B   s   e  Z e d     Z d   Z d   Z e j j d d  d    Z	 d   Z
 d   Z e j j d    Z d	   Z d
   Z e j j d d  d    Z RS(   c         C   s(  d d d d d d d d d	 d
 d d g } d d d d d d d d d d d d g } t  j | |  } t  j | j d t  j | j  | _ | |  _ d d d d d d d  d! d" d# d$ d% d& d' d( g } d) d* d+ d, d- d. d d d d d d d d d g } t  j | |  } t  j | j d t  j | j  | _ | |  _ d/ d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH dI dJ dK dL dM g } dN dO dP dQ dR dS dT dU dV dW dX dY dZ d[ d\ d] d^ d_ d` da d) d* d+ d, d- d. d d d d d g } t  j | |  } t  j | j d t  j | j  | _ | |  _ db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy g } dz d{ d| d} d~ d d d d d d d d d d d d d d d d d d d g } t  j | |  } t  j | j d t  j | j  | _ | |  _ d  S(   Ng4	({@g'֩g|@gz|@g2nzz@g[W|@g8h{@g4 Rz@gK/{#dR~@gFEŠ@g#WUv@gF&@g2U`~@s   1996-12-31 00:00:00s   1997-12-31 00:00:00s   1998-12-31 00:00:00s   1999-12-31 00:00:00s   2000-12-31 00:00:00s   2001-12-31 00:00:00s   2002-12-31 00:00:00s   2003-12-31 00:00:00s   2004-12-31 00:00:00s   2005-12-31 00:00:00s   2006-12-31 00:00:00s   2007-12-31 00:00:00t   freqg=U1@g#J{/5@g477@g=,Ԛ:@g~jt:@ga<@g9>@gjt>@g	/>@g}8g?@gzI@@g`@@g*ÂC@g^vD@g.[D@s   1990-12-31 00:00:00s   1991-12-31 00:00:00s   1992-12-31 00:00:00s   1993-12-31 00:00:00s   1994-12-31 00:00:00s   1995-12-31 00:00:00g	pz~p@gʩap@gLQԙJp@gj;p@gn@Xq@gG?Xq@gX$r@gB]PGr@gʅJr@g%Ts@g;5Ls@gu7Ot@g;$.u@g!3u@gL0t@g9s@g($Zs@gX֞t@gt@giƢ)u@gv@g"u@g/z@gDL$z@gkz@guy@g$)&y@g}8'x@gy@g@Sy@g@y@s   1970-12-31 00:00:00s   1971-12-31 00:00:00s   1972-12-31 00:00:00s   1973-12-31 00:00:00s   1974-12-31 00:00:00s   1975-12-31 00:00:00s   1976-12-31 00:00:00s   1977-12-31 00:00:00s   1978-12-31 00:00:00s   1979-12-31 00:00:00s   1980-12-31 00:00:00s   1981-12-31 00:00:00s   1982-12-31 00:00:00s   1983-12-31 00:00:00s   1984-12-31 00:00:00s   1985-12-31 00:00:00s   1986-12-31 00:00:00s   1987-12-31 00:00:00s   1988-12-31 00:00:00s   1989-12-31 00:00:00gVW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@s   2005-03-01 00:00:00s   2005-06-01 00:00:00s   2005-09-01 00:00:00s   2005-12-01 00:00:00s   2006-03-01 00:00:00s   2006-06-01 00:00:00s   2006-09-01 00:00:00s   2006-12-01 00:00:00s   2007-03-01 00:00:00s   2007-06-01 00:00:00s   2007-09-01 00:00:00s   2007-12-01 00:00:00s   2008-03-01 00:00:00s   2008-06-01 00:00:00s   2008-09-01 00:00:00s   2008-12-01 00:00:00s   2009-03-01 00:00:00s   2009-06-01 00:00:00s   2009-09-01 00:00:00s   2009-12-01 00:00:00s   2010-03-01 00:00:00s   2010-06-01 00:00:00s   2010-09-01 00:00:00s   2010-12-01 00:00:00(	   t   pdt   Seriest   DatetimeIndext   indext
   infer_freqt   oildata_oilt
   air_ausairt   livestock2_livestockt   aust(   t   clst   dataR&   R(   R)   R*   R+   (    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   setup_class7   s    																																																			c         C   s   t  |  j d d d d d d j   } t  |  j d d d d d d j   } t | j d d  d	 d
 d d g d  t | j d d  d	 d
 d d g d  d  S(   Nt   seasonal_periodsi   t   trendR   t   seasonalR   s   2011-03-01 00:00:00s   2011-12-01 00:00:00g_vN@g9vB@gq{G@gڊeI@i   t   end(   R   R+   t   fitR   t   predict(   t   selft   fit1t   fit2(    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_predict   s    c         C   sS   t  |  j j d d d d d d j   } t | j d  d d d	 d
 g d  d  S(   NR/   i   R0   R   R1   R   g_vN@g9vB@gq{G@gڊeI@i   (   R   R+   t   valuesR3   R   t   forecast(   R5   R6   (    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_ndarray   s    t   reasons   Optimizer does not convergec         C   sS   t  |  j d d d d d d j   } t | j d d  d d d	 d
 g d  d  S(   NR/   i   R0   R   R1   t   stepsg9#zN@g/lB@gaG@gHI@i   (   R   R+   R3   R   R:   (   R5   R6   (    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_forecast   s    c         C   s  t  |  j  j d d t } t  |  j  j d d t } t  |  j  j   } t | j d  d g d  t | j d d d	 d
 d d d d d d d d g d  t | j d  d g d  t | j d  d g d  t | j d d d  t | j d d d  d  S(   Ng?t	   optimizedg333333?i   gbL~@i   g4	({@gO~|@g>V|@gAV{@g=0{@g{@g9D{@g2\=$|@gV|@gsY}@g@{`4'~@gsL~@gj=f]@gBX@t   smoothing_levelgc??t   initial_levelg{@i   (   R   R(   R3   t   FalseR   R:   t   levelt   params(   R5   R6   R7   t   fit3(    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_simple_exp_smoothing   s    				c         C   sz  t  |  j  j d d d d d t  } t  |  j d t j d d d d d t  } t  |  j d t j d d d d  } t | j d  d	 d
 d d d g d  t | j d d d d d d d d d d d d d d d g d  t | j d d  d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. g d  t | j d  d/ d0 d1 d2 d3 g d  t | j d  d4 d5 d6 d7 d8 g d  d  S(9   NR@   g?t   smoothing_slopeg?R?   t   exponentialt   dampedi   gzGE@gQF@gףp=
G@g(\H@ǧI@i   gH@gTHt@g#nЬ
@g)r)	@g涷:@g(j@g{{@gi}Z?gi@[?gx?g3`|?g3&A?gu++l?g @g`Nb?i   g#J{/5@goDI6@gm|9@ghTc;@g~I>@gRB>@gKH{ʔ?@g]S L@@gA@@gh4?"@@gk@@g6@@gG3ywcA@gD@gYOE@gSWE@gLF@gQG@gQI@gzGJ@g33333L@glE@gHzE@gGzTF@gGzF@gHzG@(	   R   R)   R3   RB   t   TrueR   R:   t   slopet   fittedfcast(   R5   R6   R7   RE   (    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt	   test_holt   s*    		(		c         C   s  t  |  j  j   } t |  j d t } | j d d  } t |  j d t d t } | j   } t | j d d d  t | j d t j d  t | j d t j d  t | j d	 d
 d  t | j d t j d  t | j	 d d  t | j d d d  t | j d d d  t | j d d d  t | j d	 d d  t | j d d d  t | j	 d d  t | j d d d  t | j d d d  t | j d d d  t | j d	 d d  t | j d d d  t | j	 d d  d  S(   NRI   t   damping_slopeg\(\?RH   R@   g      ?i   RG   RA   gQ~p@t   initial_slopegYi@g        g(\p@g(\@g(\@g
ףp=
?g33333/p@gp=
ף?g     ·@(
   R   R*   R3   R   RJ   R   RD   R   t   NaNt   sse(   R5   R6   t   mod4t   fit4t   mod5t   fit5(    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_holt_damp_fit   s.    c          C   sv  t  |  j d t } i d d 6d d 6d d 6d d	 6d
 d 6} | j d t |  } x, | j   D] } t | j | | |  q` Wt | j | j	 d d d d d d d d d d d d d d d d d d d d  d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. d/ g  } t t
 j | j d	 | j f |  d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH dI dJ dK dL dM dN dO g  } t t
 j | j d | j f | d d dP dQ dR dS dT dU dV dW dX dY dZ d[ d\ d] d^ d_ d` da db dc dd de df dg dh di dj dk dl dm dn g } t | j | d d do dp dq dr ds dt du dv dw dx g
 } t | j dy  | d dz d  S({   NRI   gl9+?R@   gG:?RG   g\(\?RN   g<΍o@RA   g"&R@RO   R?   gXnh@t   atolgMbP?gOύo@g!0|p@gkp@g-2Pp@gpnp@g
MGUVq@g05q@g%v$r@gjOIr@gd?r@gM&fcSs@gs@g۰t@g{U,u@gu%5u@g	hB4t@g yKs@gg#Us@gR}t@g7t@g|a&#u@gv@gnau@gW$y@ge:z@gEz@gZy@gWJ]	y@gxw? x@gAy@gV'dy@g-?y@gկR@g%l@gHGr|@gI0n@gRv@g.[Pn@g"t@gN1@gaq|@gis@g&צ@gLh@g4x`(@gȌW<@gg\Lq@g$"aDc@g@gmȈ@gvi~2.@gDkA@g1P?m@gM@g)H>ı@g<P]@g?đ@gv*"@gbt<7V@gq쳒@g.\@gs@g\' @g&A@gNe5p@gݽ+p@g+R-q@gw3)Yp@g]%{[q@gB'q@gq]r@gHr@gC&0r@gXEz&s@g'ѫs@gZ1x:t@guhՅt@gHu@gzru@gVt@g1s@g1V;s@g`t@gZBt@gN_u@gAHrJv@g|Dv@g!8Bz@gPUz@g7^z@g7Wz@gYEy@g(xx@g;Sy@gKry@gmz@gBuR{Uz@gLz@g'؅z@gA9z@g+O4-{@g2tGw`{@gFXi{@gGP{@g(/{@i
   g-C6?(   R   R*   RJ   R3   RB   t   keysR   RD   RQ   t   nobsR   t   r_RC   RK   t   fittedvaluesR:   (   R5   t   modRD   R3   t   keyt   desired(    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_holt_damp_R   sj    
										$										#															c      
   C   s  t  |  j d d d d d d j d t  } t  |  j d d d d d d j d t  } t | j d	  d
 d d d d d d d g d  t | j d	  d d d d d d d d g d  t  |  j d d d d d d j d d  } t  |  j d d d d d d j d d  } d  S(   NR/   i   R0   t   additiveR1   t
   use_boxcoxR   R   i   gQN@gQB@gQkG@gzGI@gGzP@gp=
C@gRH@g33333J@i   g\(|N@gQ~B@g{GZG@g=
ףpI@g=
ףpP@g(\C@gQH@g)\(K@t   logt   multiplicative(   R   R+   R3   RJ   R   R:   (   R5   R6   R7   RU   t   fit6(    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_hw_seasonalF  s$    	c      
   C   s   t  |  j d d d d j d t  } t | j d  d d d	 d
 d d d	 d
 g d  t  |  j d d d d j d t  } t | j d  d d d d d d d d g d  d  S(   NR/   i   R1   R   Ra   i   gGzM@g{GA@gRQF@g(\G@i   R   g{GZN@gA@gq=
ףPF@gfffffG@(   R   R+   R3   RJ   R   R:   (   R5   RE   RS   (    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_hw_seasonal_buggy]  s    (   t   __name__t
   __module__t   classmethodR.   R8   R;   t   pytestt   markt   xfailR>   RF   RM   t   smokeRV   R_   Re   Rf   (    (    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyR!   6   s   X					W	t   trend_seasonalc         C   sR   |  \ } } t  j d  } t j t  ! t | d | d | d d Wd  QXd  S(   Nid   R0   R1   R/   i
   (   R   t   onesRj   t   raisest
   ValueErrorR   (   Rn   R0   R1   t   y(    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_negative_multipliativek  s    R1   c         C   sL   t  j d  } t j t  ' t t d t d |  d t d d Wd  QXd  S(   Nid   R0   R1   RI   R/   i
   (	   R   Ro   Rj   Rp   Rq   R   t   housing_dataRB   RJ   (   R1   Rr   (    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_dampen_no_trends  s    c      
   C   sd   t  j t j d  d t  j d d d d d } t j t   t | d |  d d	 Wd  QXd  S(
   Nid   R&   s   2000-1-1t   periodsR"   R   R1   R/   i   (	   R#   R$   R   Ro   t
   date_rangeRj   Rp   Rq   R   (   R1   Rr   (    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_invalid_seasonal{  s    4c           C   s<   t  j t  ' t t j t t g d   j   Wd  QXd  S(   Ni   (   Rj   Rp   Rq   R   R#   t   concatRt   R3   (    (    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_2d_data  s    c       
   C   s   t  j   }  t |  j  |  _ t j d t  S } t |  d d d d } t |  d k sc t	  d t
 | d  k s t	  Wd  QX| j d k s t	  d  S(	   Nt   recordR0   R   R1   i   t   ValueWarningi    i   (   Rt   t   copyt   listR&   t   warningst   catch_warningsRJ   R   t   lent   AssertionErrort   strR/   (   t   hd2t   wR\   (    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_infer_freq  s    "R0   c         C   sX   t  t d d d d } | j   } | j d | j j  } | j | j k sT t  d  S(   NR0   R   R1   t   start_params(   R   Rt   R3   t   mle_retvalsR   RQ   R   (   R0   R1   R\   t   rest   res2(    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_start_params  s    c       
   C   sC   t  t  }  t j t  " |  j d d d t j d  Wd  QXd  S(   NR@   g      ?RA   i    (   R   Rt   Rj   t   warnsR   R3   t   iloc(   R\   (    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_no_params_to_optimize  s    c          C   sB   t  t  }  t j t  ! |  j d t j d g   Wd  QXd  S(   NR   g      ?(   R   Rt   Rj   Rp   Rq   R3   R   t   array(   R\   (    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_invalid_start_param_length  s    c         C   sb   t  t d d } | j   } | j d t  } t r< d n d } | j | j | k s^ t  d  S(   NR0   R   t   use_basinhoppinggư>g        (   R   Rt   R3   RJ   R    RQ   R   (   t   reset_randomstateR\   R   R   t   tol(    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_basin_hopping  s
    c          C   sU   t  t d d }  |  j   } |  j d t  } t j | j | j k  sQ t  d  S(   NR0   R   t   remove_bias(   R   Rt   R3   RJ   R   t   anyR[   R   (   R\   R   R   (    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_debiased  s    c         C   s<   t  t d |  d | j d d  } t | j d d  d  S(   NR0   R1   Ra   g      ?(   R   Rt   R3   R   RD   (   R0   R1   R   (    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_float_boxcox  s    $c         C   s  t  t d |  d | } | j   } | j   | j } t j d } t j t j t   } | rh d n d } t j	 |  } t j	 |  }	 t j	 | | d  }
 t j	 d |  } t j
 t j  j } | d } | d } | d	 } | d
 } t j |  rd n | } | d } | d } | | | | | | f | d *| rU| d | d )n  t j |  j t j  } t | |  f } t | |  f } | j   } | | | | | | |	 |
 | | | 
 } | | | | | | |	 |
 | | | 
 } t | |  d  S(   NR0   R1   i    i   i   i   R@   RG   t   smoothing_seasonalRN   g      ?RA   RO   t   initial_seasons(   R   Rt   R3   t   summaryRD   R   R   t   squeezet   asarrayR   t   finfot   doublet   maxt   isnant	   ones_liket   astypet   uint8R   R   R}   R   (   R0   R1   R\   R   RD   RY   Rr   t   mR   R   t   st   pt   max_seenR   R   t   gammat   phiR   R   t   xit   py_funct   cy_funct   p_copyt   sse_cyt   sse_py(    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_equivalence_cython_python  s:    
	





''c    
      C   s  t  t  }  |  j   } t j t j |  j   } | j d } t | | d d d | j d d d d d \ } } } } } t	 | | j
  t	 | | j
 j d	 t j d   t	 | | j d   t t d
 d }  |  j   } t j t j |  j   } | j d } | j d }	 t | | d |	 d | j d d | j d d d \ } } } } } t	 | | j  t	 | | | j
 | j  t	 | | j
  t	 | | j  t	 | | j
 j d	 | j j d	 t j d d d d d g   t	 | | j d   d  S(   NR@   R   g        R   RA   R   R   i   iR0   R   RG   RO   i   i   i   i   (   R   Rt   R3   R   R   R   t   endogRD   R    R   RC   R   Ro   R:   R   R[   RK   R   (
   R\   R   R   R   t   lR   R   R   R   R   (    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_direct_holt_add  s0    $%Ac         C   s   t  j j d  } d | j d  } t  j | d  d   d f  } | | d  d   d f } | j t  j  } t | d d j   } | j	 d	 d
 k s t
  d  S(   Ni90  i
   i  i   i    i   R0   R   R@   g        (   i  i   (   R   t   randomt   RandomStatet   standard_normalt   cumsumR   t   longR   R3   RD   R   (   R   t   rst   et   y_starRr   R   (    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   test_integer_array  s    (7   t   __doc__t   statsmodels.compat.platformR    t   osR   t   numpyR   t   pandasR#   Rj   t   numpy.testingR   R   t   statsmodels.tools.sm_exceptionsR   t   statsmodels.tsa.holtwintersR   R   R   R   R   t   patht   splitt   abspatht   __file__t   baset   _t   read_csvt   joinRt   t	   set_indext   asfreqt   Nonet	   SEASONALSt   TRENDSR    t   objectR!   Rk   t   parametrizeRs   Ru   Rx   Rz   R   R   R   R   R   R   Rm   R   R   R   R   (    (    (    sE   lib/python2.7/site-packages/statsmodels/tsa/tests/test_holtwinters.pyt   <module>   sH   ($! 69$		
!						$!!	