
    ge                     $   d Z ddlZddlZddlmZmZmZ ddlZ	ddl
Z
ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ  ej*                         j,                  Z e	j0                  d	d
d      e_        d2dZd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d  Z,e
jZ                  j\                  d!        Z/e
jZ                  ja                  d"d#dg      d$        Z1d% Z2d& Z3d' Z4d( Z5d) Z6d* Z7d+ Z8d, Z9d- Z:d. Z;d/ Z<d0 Z=d1 Z>y)3zV
Tests for structural time series models

Author: Chad Fulton
License: Simplified-BSD
    N)assert_equalassert_allcloseassert_raises)	macrodata)SpecificationWarning)
structural)UnobservedComponents)results_structural
1959-01-01z
2009-07-01QS)startendfreqFc           	         t        t        |       }|d   D ]  }|j                         }|j                  |d          ||d<   t        j                         }|j                  dd       }|*t        j                  dt        t              |      |_	        d|v r?t        j                  |d         }|d   d	k(  r|j                  j                         }||d<   t        |d
   fi |}|j                   |j!                  |j#                  |j                              }	t%        |j                  |	       |j'                  |d         }
||d   n|j                  j(                  d   }d|v r|d   }n'|dv rd}n |dv rd}n|dv rd}ndt        j*                  f}t-        |j.                  dt        j0                  z  |d   z  dt        j0                  z  |d   z  f       |j3                  dd      }|j3                  dd      }|rR|
j4                  j7                         |
j8                  dz  t        j                  dt        j0                  z        z  z   }n'|
j4                  |
j:                  d  j7                         }t%        ||d   ||       	 dd lm} 	 ddl m!}  |        |jG                         }|
jI                  |       tK        jL                  d      5  i }d |v r|d    |d <    |jN                  d&|j3                  d!d       d"d#|}|rR|j4                  j7                         |j8                  dz  t        j                  dt        j0                  z        z  z   }n'|j4                  |
j:                  d  j7                         }||d   k  rt%        ||d   d$%       |jQ                          d d d         y # tD        $ r Y (w xY w# tD        $ r Y w xY w# 1 sw Y   xY w)'Nmodelskwargsuse_exact_diffuser   r   )r   periodsr   exogrealgdpnumpyunempparamsr   cycle_period_bounds)AASYYS)g      ?   )Qr   )g      @0   )MMS)g      2@         rtolHz>atol      ?llf)r'   r)   )register_matplotlib_converters)figTrecordmaxiterstart_params)r1   dispg-C6?)r'    ))getattrr
   copyupdatedtapoppd
date_rangelenindexnplogvaluessqueezer	   r1   transform_paramsuntransform_paramsr   filterfreqstrinfr   cycle_frequency_boundpigetllf_obssumnobs_diffuseloglikelihood_burnmatplotlib.pyplotpyplotpandas.plottingr,   ImportErrorfigureplot_componentswarningscatch_warningsfitsummary)namer   truemodelr   r@   r   r   mod	roundtripres_truerE   r   r'   r)   res_llfpltr,   r-   
fit_kwargsress                        c/var/www/html/venv/lib/python3.12/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyrun_ucmrc      s   %t,Dh od8n%&7"# zz&$'==|SX.24FL V66&+,D f~({{**,!F6N #6'?=f= 	((""3#3#346	(()4 ::d8n- "-$q'6<<3G3G3J F*"()>"?.."+#"/#"1 $%bff+ 	S..g 3A 66g 3A 668	9
 xx%xx"
  ''++-!..4rvva"%%i7HHIG &&x'B'B'CDHHJGe4dC
	+J.0 **,C$$$-
 $$D1 	JD (,Y
9%#'' 1txx'E!1%/1C !;;??, --3bffQY6GGH ++h&A&A&BCGGI$u+%e4@ KKM)	 	wof    			 	sC   OO $"OCO  	O	OOO	OO O*	c                 4    t        d       t        dd       y )N	irregularTr   rc   close_figuress    rb   test_irregularrj      s    KK40    c                     i t         _        t        }d}t        j                  ||      5  t        d       t        dd       d d d        y # 1 sw Y   y xY w)Nz Specified model does not containmatchfixed_interceptTrf   r   __warningregistry__r   pytestwarnsrc   ri   warningrn   s      rb   test_fixed_interceptrv      sK    %'J""G.E	gU	+ ;!"!T:; ; ;   AAc                 4    t        d       t        dd       y )Ndeterministic_constantTrf   rg   rh   s    rb   test_deterministic_constantrz          $%$=rk   c                 4    t        d       t        dd       y )Nrandom_walkTrf   rg   rh   s    rb   test_random_walkr~          MMT2rk   c                 4    t        d       t        dd       y )Nlocal_levelTrf   rg   rh   s    rb   test_local_levelr      r   rk   c                     t         }d}t        j                  ||      5  t        d       t        dd       d d d        y # 1 sw Y   y xY wNirregular component addedrm   fixed_slopeTrf   )r   rr   rs   rc   rt   s      rb   test_fixed_sloper      sA    "G'E	gU	+ 767 7 7s   AAc                     i t         _        t        }d}t        j                  ||      5  t        d       t        dd       d d d        y # 1 sw Y   y xY wr   rp   rt   s      rb   test_fixed_slope_warnr      sI    %'J""G'E	gU	+ 767 7 7rw   c                 4    t        d       t        dd       y )Ndeterministic_trendTrf   rg   rh   s    rb   test_deterministic_trendr      s    !"!T:rk   c                 4    t        d       t        dd       y )Nrandom_walk_with_driftTrf   rg   rh   s    rb   test_random_walk_with_driftr      r{   rk   c                 4    t        d       t        dd       y )N local_linear_deterministic_trendTrf   rg   rh   s    rb   %test_local_linear_deterministic_trendr      s    ./.$Grk   c                 4    t        d       t        dd       y )Nlocal_linear_trendTrf   rg   rh   s    rb   test_local_linear_trendr      s     ! D9rk   c                 4    t        d       t        dd       y )Nsmooth_trendTrf   rg   rh   s    rb   test_smooth_trendr          NNd3rk   c                 4    t        d       t        dd       y )Nrandom_trendTrf   rg   rh   s    rb   test_random_trendr      r   rk   c                 4    t        d       t        dd       y )Ncycle_approx_diffusecycleTrf   rg   rh   s    rb   
test_cycler      s    "#Gt,rk   c                 4    t        d       t        dd       y )Nseasonal_approx_diffuseseasonalTrf   rg   rh   s    rb   test_seasonalr      s    %&J$/rk   c                 4    t        d       t        dd       y )Nfreq_seasonal_approx_diffusefreq_seasonalTrf   rg   rh   s    rb   test_freq_seasonalr      s    *+Ot4rk   c                 4    t        d       t        dd       y )Nreg_approx_diffuseregTrf   rg   rh   s    rb   test_regr      s     !ET*rk   c                 4    t        d       t        dd       y )N
rtrend_ar1Trf   rg   rh   s    rb   test_rtrend_ar1r      s    LLD1rk   c                 4    t        d       t        dd       y )N-lltrend_cycle_seasonal_reg_ar1_approx_diffuselltrend_cycle_seasonal_reg_ar1Trf   rg   rh   s    rb   #test_lltrend_cycle_seasonal_reg_ar1r      s    ;<,Erk   r   Tc                    t        j                  d      dz  }|dz  }|d d dxx   dz  cc<   |dd dxx   dz  cc<   t        j                  d      5  t	        |d|d| 	      }|j                  d
      }t	        |d|d| 	      }|j                  d
      }d d d        t        j                  j                  d   dd       t        j                  d   dd       | rBt        |j                         t        |j                  d       t        |j                  d       y t        |j                  d       t        |j                  d       y # 1 sw Y   xY w)Nd         ?r%   g{Gz?r&   Tr.   F)re   r   mle_regressionr   r2   r3   )r   r2   r*   gh㈵>r)   r   )r>   arangerT   rU   r	   rV   r   regression_coefficientsfilteredr   printpredicted_diffuse_state_covr   rL   rM   )r   endogr   mod1res1mod2res2s          rb   test_mle_regr      sD   IIcN3E7D	#A#J$J	!$Q$K4K		 	 	- 	!#ET)-e6GI xxRx #ET)-d6GI xxRx 	! D0099%@ DKKNCd3 d../T&&*T&&*T,,a0T,,a01	! 	!s   AEEc                     i t         _        ddg} t        }d}t        j                  ||      5  t        |       }t        |j                  d       d d d        t        j                  t              5  t        | d       d d d        t        }d}t        j                  ||      5  t        | dd	      }t        |j                  d
       d d d        g d}|D ];  }|di}t        }d}t        j                  ||      5  t        | d
fi | d d d        = t        j                  t              5  t        | d       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   xY w# 1 sw Y   y xY w)Nr&   r%   r   rm   re   zinvalid specz!Trend component specified withoutT)trendre   deterministic trend)re   r   stochastic_levelstochastic_trendz may be overridden when the trend)r   )
r   rq   r   rr   rs   r	   r   trend_specificationraises
ValueError)r   ru   rn   r[   trend_attributes	attributer   s          rb   test_specificationsr     sw   %'J"FE #G'E	gU	+ ;"5)S,,k:;
 
z	" 4UN34
 #G/E	gU	+ E"5ES,,.CDE,% I	T"&2\\'/ 	I (=HH	I 	II 
z	" 0UQ/0 0;; ;
4 4E E	I 	I0 0s;   "E2E&%E?E+0E7EEE(+E4	7F c                     t        d      } t        j                  d   }t        j                  d   }t        j                  j	                  d       t        j
                  t        j                  |       t        j                  |       dz  f   }t        j                  j                  |       }t        j                  | dz         }t        d|       D ](  }|d	   ||   z  |d   ||dz
     z  z   ||   z   ||dz   <   * |dd  }|t        j                  ||      z  }t        ||d
      }t        |j                  g dd       y )Ng     @)
   )r*   皙?i  r   sizer%   r&   r   )r   autoregressive)r   r*   r   r   r   r   r   )intr>   r_randomseedc_onesr   normalzerosrangedotr	   r   r1   )nobsbetaphir   epsr   tr[   s           rb   test_start_paramsr   J  s   
 s8D55=D
%%/C IINN455		$ 334D
))



%CHHT!VE1d^ FVeAh&Q%!*)<<s1vEac
F!"IE	RVVD$E
 u4
BCC$$&<4Hrk   c                  d   t        j                  d      dz   } t        j                  d      }t        | |dd      }|j                  g d      }|j	                  dt        j                  dd      d d t         j
                  f         }t        j                  dd      dz   }t        ||       y )	N2   r   	dconstant   )r   levelr   )gV瞯<r   r&   <   r   )r>   r   r	   smoothforecastnewaxisr   )r   r   r[   ra   actualdesireds         rb   test_forecastr   d  s    IIbMBE99R=D
u4{Q
OC
**]
#C\\"299R#4Q

]#C\DFiiB"$GFG$rk   c            
         d} d}t         j                  j                  d       t         j                  j                  | |f      }t         j                  |d ddf<   t         j                  j                  | df      }t         j                  j                  | df      }t        j                  dd	| 
      }t        j                  ||      }t        j                  |j                         |      }t        j                  ||      }t        |d|      t        |d|      t        |d|      t        |d|      t        |d|      t        |d|      g}	|	D ]z  }
|
j                   |
j                  d      }|j                          |j                          |j                  d       |j                          t         j                  j                  d|
j                   f      }|j#                  d|       |j%                  d|       t         j                  j                  d|
j                   f      }t'        j(                  t*              5  |j#                  d|       d d d        t         j                  j                  d|
j                   dz   f      }t'        j(                  t*              5  |j#                  d|       d d d        } t'        j(                  t*              5  t        |dt        j,                  d             d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)N   r&   i  r   r   r   r%   z
1970-01-01r   )r   r   )r=   llevelr   Fr   T)dynamic)stepsr   )r   r   )r>   r   r   r   nanr:   r;   	DataFrameSeriesrA   r	   r1   rV   rW   predictget_predictionk_exogr   get_forecastrr   r   r   r   )r   k_endogr   exog1exog2r=   endog_pdexog1_pdexog2_pdr   r[   ra   oos_exogs                rb   test_misc_exogr  p  s   DGIINN4II4/2E66E"1"a%LII4),EII4),EMM,T4@E||E/Hyy6H||E/H 	UH59UH59UH59Xxh?Xxh?Xxh?F  1gg5g!D!99##!SZZ#918,qx0 99##!SZZ#9]]:& 	1LLqxL0	1 99##!SZZ!^)<#=]]:& 	1LLqxL0	1 	1'1. 
z	" FUH288G3DEF F	1 	1	1 	1F Fs$   L =L,5"L9 L)	,L6	9Mc                     t         j                  j                  d       t        j                  t         j                  j                  d            } t        j                  | d      }|j                  |j                        }|j                  dddg      }t        |j                  j                  t        j                  dg            d       y )	Ni r   r   r   r&   a)r   r   r=   T)r>   r   r   r:   r   r   r   r	   r   r1   r   r   r=   equalsIndex)r   r[   ra   outs       rb   test_predict_custom_indexr    s    IINN6LL))r)23E

)
)%
:C
**S%%
&C
++A1SE+
2C!!"((C5/2D9rk   c                  p   t         j                         } t        | d   dddidddgdd	d
gdddgd      }dddddd	t        j                  z  dz  dg}|j                  |       t        |j                  d       t        |j                  d       t        |j                  d       t        |j                  j                  d       t        |j                  t        |             t        j                  ddgg dg dddgf   j!                  dd      }t        |j                  j"                  d d d d df   |       t%        t        j&                  ddgddgg      t        j&                  g dg dg dg dg      t        j&                  t        j(                  d	t        j                  z  dz  dz        t        j*                  d	t        j                  z  dz  dz        ddddgt        j*                  d	t        j                  z  dz  dz         t        j(                  d	t        j                  z  dz  dz        ddddgddt        j(                  d	t        j                  z  d	z  dz        t        j*                  d	t        j                  z  d	z  dz        ddgddt        j*                  d	t        j                  z  d	z  dz         t        j(                  d	t        j                  z  d	z  dz        ddgddddt        j(                  d	t        j                  z  dz        t        j*                  d	t        j                  z  dz        gddddt        j*                  d	t        j                  z  dz         t        j(                  d	t        j                  z  dz        gg      t        j&                  dt        j(                  d	t        j                  z  dz        z  dt        j*                  d	t        j                  z  dz        z  gdt        j*                  d	t        j                  z  dz        z  dt        j(                  d	t        j                  z  dz        z  gg      g      }t        |j                  j,                  d d d d df   |d       t        j.                  d       }t        j0                  d	      |dd	dd	f<   t        j0                  d      |d	dd	df<   t        j0                  d	      |d!d d!d f<   t        |j                  j2                  d d d d df   |       t%        t        j4                  |dd       t        j0                  d      |d   z  t        j0                  d	      |d   z  g      }t        |j                  j6                  d d d d df   |       y )"Nr   lltrendperiodr   	      )r  	harmonicsTr%      F)r   r   r   r   damped_cyclestochastic_freq_seasonalstochastic_cycler&         g      >@g?      r   )r&   r   r&   r   )r&   r   r&   r   r&   r   )r   r&   r   r   )r2   r   r   r   )r   r   r2   r   )r   r   r   r2   g      "@g      @gr(   r   )r  r  r   )r8   r6   r	   r>   rH   r7   r   k_statesk_state_covrM   r   ssmk_posdefk_paramsr<   r   reshapedesign__direct_sumarraycossin
transitionr   eye	selectiondiag	state_cov)r@   rZ   r   expected_designexpected_transitionexpected_selectionexpected_state_covs          rb   (test_matrices_somewhat_complicated_modelr0    s   XXZF '0191;<10M0O'+67W.2;?-26	#E 255b	F 
LL /""M2))=9EII&&6V- eeQF(.F# $ %,GArN  EII$$Q1W-?&
1a&a& 	
,  " 	# 	266!BEE'!)B,'"%%	")=q!QJFF1RUU719R<(("&&2552*>1aKa"&&2552.qwqy|0DaKa"&&2552..qwqy|0DaKaAqwrz 2BFF1RUU72:4FGaAqwrz 22BFF1RUU72:4FGI 	J 	2bffQruuWS[))2bffQruuWS[.A+ABbffQruuWS[))2bffQruuWS[.A+ABD 	E(   		Q1W%':G
 ,/#%66!9qsAaCx #%66!9qsAaCx #%66!9rsBCx EII''1a02DE%
q
q	&)
q	&)' 
 EII''1a02DErk   c                    t        j                  | D cg c]  }|j                   c}d      }t        j                  |      }d}| D ].  }|j                  \  }}||k(  sJ |||||z   |||z   f<   ||z  }0 |S c c}w )zLCompute the matrix direct sum of an iterable of square numpy 2-d arrays
    r   )axis)r>   rK   shaper   )square_matricesm	new_shape	new_arrayoffsetrowscolss          rb   r#  r#    s     9A9BI#IF WW
dt||@A	&$&v}(<<=$	
  :s   A<c            	      V   d} t        j                  |       dz  }t        j                  |       }t        |d|      }|j                  ddg      }d}t        j                  d      }t        j                  d      }t	        |j                  d|      d       t	        |j                  d|      d       t	        |j                  d|      d       d}t        j                  |      }t        j                  |df      }t	        |j                  ||      d       t	        |j                  ||      d       t        t        |j
                  |d       t        t        |j
                  |dd	g       t        t        |j
                  |t        j                  |d	f             y )
Nr          @re   r   r   r&   )r&   r&   r   r%   )r>   r   r	   r   r   r   r   r   )	r   r   r   r[   ra   exog_fcast_scalarexog_fcast_1dimexog_fcast_2dimhs	            rb   test_forecast_exogrA    sI   DGGDMCE774=D
uk
=C
**c3Z
 C ggajOggfoOCLL):L;R@CLLL92>CLLL92> 	AggajOggq!foOCLLL92>CLLL92> *cllAB7*cllAQF;*cllABGGQFODrk   c                 (   g d}g d}|D ]"  }t        t        ||      t        | |             $ |D ]6  }t        t        |j                  |      t        | j                  |             8 t        |j                         | j                                y )N)r   r   seasonal_periodsr   freq_seasonal_periodsfreq_seasonal_harmonicsr   r   ar_orderr   re   r   r   stochastic_seasonalr  r  r  r   r   
trend_mask
regressionrG   )r   r   r  r  obs_interceptr"  obs_covstate_interceptr'  r)  r+  )r   r5   r  _get_init_kwds)r[   r   attrs	ssm_attrsattrs        rb   check_equivalent_modelsrQ  "  s    !ENI  >WT4('#t*<=>  FWTXXt,gcggt.DEF $$&(:(:(<=rk   c            	         d} t        j                  |       dz  }t        j                  |       }g d}|D ]  }t        ||dd|      }t        |fd|i|j                         }t	        ||       t        |||d	      }t        |fd|i|j                         }t	        ||       t        |||ddd
      }t        |fd|i|j                         }t	        ||        y )Nr   r<  )re   ntrendzfixed interceptzdeterministic constantr   zlocal levelr   zrandom walkrwalkzfixed sloper   dtrendz local linear deterministic trendlldtrendzrandom walk with driftrwdriftzlocal linear trendr  zsmooth trendstrendzrandom trendrtrendr%   T)r   r   rG  r   r   r&   )r   r   r   )r   r   r   r  r  )r>   r   r	   rM  rQ  )r   r   r   levelsr   r[   r   s          rb   test_recreate_modelr[  9  s    DGGDMCE774=DGF  +
 #57;$H#EMM8J8J8LMT* #5D235#EMM8J8J8LMT* #5D)-046 $EMM8J8J8LMT*++rk   c            	         t        j                  d      } t        j                  |       }g d}t        | d|      }|j	                  |      }t        | d d d|d d       }|j	                  |      }|j                  | dd  |dd        }t        |j                  |j                         t        |j                  |j                         dD ]"  }t        t        ||      t        ||             $ dD ]"  }t        t        ||      t        ||             $ t        |j                  dt        j                  d            |j                  dt        j                  d                   y )	Nr   r   r   r   r   r   r   r   r   r+   rJ   rM   filtered_statefiltered_state_covpredicted_statepredicted_state_cov	forecastsforecasts_errorforecasts_error_covstandardized_forecasts_errorforecasts_error_diffuse_covr   scaled_smoothed_estimatorscaled_smoothed_estimator_covsmoothing_errorsmoothed_statesmoothed_state_covsmoothed_state_autocov smoothed_measurement_disturbancesmoothed_state_disturbance$smoothed_measurement_disturbance_covsmoothed_state_disturbance_covr   )r>   r   	ones_liker	   r   appendr   specificationr   cov_params_defaultr5   r   r   	r   r   r   r   r   r   r   res3rP  s	            rb   test_append_resultsry  ^  s;   IIcNE<<DFxd;D;;vDcr
H49ED;;vD;;uRSzRS	;2D##T%7%78D++T-D-DE@ ?WT4('$*=>?. ? 	WT4('$*=>? DMM"2772;M7MM"2772;M79rk   c            	      p   t        j                  d      } t        j                  |       }g d}t        | d|      }|j	                  |      }t        | d d d|d d       }|j	                  |      }|j                  | dd  |dd        }t        |j                  |j                  dd         dD ]/  }t        ||      }	|		|	ddd f   }	t        t        ||      |	       1 t        |j                  dt        j                  d            |j                  dt        j                  d                   y )	Nr   r]  r   r   r   r_  .r   )r>   r   rs  r	   r   extendr   rJ   r5   r   r   r   )
r   r   r   r   r   r   r   rx  rP  r   s
             rb   test_extend_resultsr|    s   IIcNE<<DFxd;D;;vDcr
H49ED;;vD;;uRSzRS	;2DDLL$,,rs"34. 3 $%c23h'GWT4('2!3$ DMM"2772;M7MM"2772;M79rk   c            	         t        j                  d      } t        j                  |       }g d}t        | d d d|d d       }|j	                  |      }t        | dd  d|dd        }|j	                  |      }|j                  | d d |d d       }t        |j                  |j                         t        |j                  |j                         dD ]"  }t        t        ||      t        ||             $ dD ]"  }t        t        ||      t        ||             $ t        |j                  dt        j                  d            |j                  dt        j                  d                   y )	Nr   r]  r   r   r   r^  r_  r   )r>   r   rs  r	   r   applyr   ru  r   rv  r5   r   r   rw  s	            rb   test_apply_resultsr    sG   IIcNE<<DFcr
H49ED;;vDbc
H49ED;;vD::eCRjtCRy:1D##T%7%78D++T-D-DE@ ?WT4('$*=>?. ? 	WT4('$*=>? DMM"2772;M7MM"2772;M79rk   )F)?__doc__rT   r   r>   numpy.testingr   r   r   pandasr:   rr   statsmodels.datasetsr   statsmodels.tools.sm_exceptionsr   statsmodels.tsa.statespacer   %statsmodels.tsa.statespace.structuralr	   (statsmodels.tsa.statespace.tests.resultsr
   load_pandasdatar8   r;   r=   rc   rj   rv   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   markslowr   parametrizer   r   r   r   r  r  r0  r#  rA  rQ  r[  ry  r|  r  r4   rk   rb   <module>r     sS     F F   * @ 1 F Gi""BMM,TJ	rj1
;>
3
3
77;
>
H
:
4
4
-
0
5
+
2
 F F
 ,tUm<1 =1D(0VI4	%0Ff:EFPE@>."+J"9J"9J#9rk   