
    Vfde                     
   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	j        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
j-        j.        d!             Z/e
j-        0                    d"d#dg          d$             Z1d% Z2d& Z3d' Z4d( Z5d) Z6d* Z7d+ Z8d, Z9d- Z:d. Z;d/ Z<d0 Z=d1 Z>dS )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           	      Z   t          t          |           }|d         D ]}|                                }|                    |d                    ||d<   t                                          }|                    dd           }|.t          j        dt          t                    |          |_	        d|v rDt          j        |d                   }|d         d	k    r|j                                        }||d<   t          |d
         fi |}|j         |                    |                    |j                            }	t%          |j        |	           |                    |d                   }
||d         n|j	        j        d         }d|v r	|d         }n)|dk    rd}n |dk    rd}n|dk    rd}ndt          j        f}t-          |j        dt          j        z  |d         z  dt          j        z  |d         z  f           |                    dd          }|                    dd          }|rG|
j                                        |
j        dz  t          j        dt          j        z            z  z   }n&|
j        |
j        d                                          }t%          ||d         ||           	 dd lm} 	 ddl m!}  |             n# tD          $ r Y nw xY w|#                                }|
$                    |           n# tD          $ r Y nw xY wtK          j&        d          5  i }d |v r|d          |d <    |j'        d&|                    d!d           d"d#|}|rG|j                                        |j        dz  t          j        dt          j        z            z  z   }n&|j        |
j        d                                          }||d         k    rt%          ||d         d$%           |(                                 d d d            n# 1 swxY w Y   d S )'Nmodelskwargsuse_exact_diffuser   r   )r   periodsr   exogrealgdpnumpyunempparamsr   cycle_period_boundsA)g      ?   Q)g      @0   M)g      2@         rtolHz>atol      ?llf)r#   r%   )register_matplotlib_converters)figTrecordmaxiterstart_params)r-   dispg-C6?)r#    ))getattrr
   copyupdatedtapoppd
date_rangelenindexnplogvaluessqueezer	   r-   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_truerA   r   r#   r%   res_llfpltr(   r)   
fit_kwargsress                        Plib/python3.11/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyrun_ucmr_      s   %t,,Dh o od8n%%%&7"# zz&$''=|SXX.24 4 4FL V6&+,,D f~(({**,,!F6N #6'?==f== 	((""3#3446 6	()444 ::d8n-- "-$q''6<3G3J F**"()>"?^^"+^^"/^^"1 $%bf+ 	S.g 3A 66g 3A 668	9 	9 	9
 xx%%xx"" 	K
  '++--!.4rva"%i7H7HHIGG &x'B'C'CDHHJJGe4dCCCC
	++++++JJJJJJ..0000   **,,C$$$---- 	 	 	D	 $D111 	 	JD  (,Y
9%#' 1txx'E'E!1 1%/1 1C ! J;??,, -3bfQY6G6GGH +h&A&B&BCGGII$u+%%e4@@@@ KKMMM)	 	 	 	 	 	 	 	 	 	 	 	 	 	 	wo osI   =LKL
K"L!K""-L
LL5CPP"	%P"	c                 F    t          d           t          dd           d S )N	irregularTr   r_   close_figuress    r^   test_irregularrf      s)    KK4000000    c                     i t           _        t          }d}t          j        ||          5  t          d           t          dd           d d d            d S # 1 swxY w Y   d S )Nz Specified model does not containmatchfixed_interceptTrb   r   __warningregistry__r   pytestwarnsr_   re   warningrj   s      r^   test_fixed_interceptrr      s    %'J""G.E	gU	+	+	+ ; ;!"""!T::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;   !AA!Ac                 F    t          d           t          dd           d S )Ndeterministic_constantTrb   rc   rd   s    r^   test_deterministic_constantrv      +    $%%%$======rg   c                 F    t          d           t          dd           d S )Nrandom_walkTrb   rc   rd   s    r^   test_random_walkrz      )    MMT222222rg   c                 F    t          d           t          dd           d S )Nlocal_levelTrb   rc   rd   s    r^   test_local_levelr~      r{   rg   c                     t           }d}t          j        ||          5  t          d           t          dd           d d d            d S # 1 swxY w Y   d S Nirregular component addedri   fixed_slopeTrb   )r   rn   ro   r_   rp   s      r^   test_fixed_sloper      s    "G'E	gU	+	+	+ 7 766667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   !AAAc                     i t           _        t          }d}t          j        ||          5  t          d           t          dd           d d d            d S # 1 swxY w Y   d S r   rl   rp   s      r^   test_fixed_slope_warnr      s    %'J""G'E	gU	+	+	+ 7 766667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7rs   c                 F    t          d           t          dd           d S )Ndeterministic_trendTrb   rc   rd   s    r^   test_deterministic_trendr      s+    !"""!T::::::rg   c                 F    t          d           t          dd           d S )Nrandom_walk_with_driftTrb   rc   rd   s    r^   test_random_walk_with_driftr      rw   rg   c                 F    t          d           t          dd           d S )N local_linear_deterministic_trendTrb   rc   rd   s    r^   %test_local_linear_deterministic_trendr      s+    .///.$GGGGGGrg   c                 F    t          d           t          dd           d S )Nlocal_linear_trendTrb   rc   rd   s    r^   test_local_linear_trendr      s+     !!! D999999rg   c                 F    t          d           t          dd           d S )Nsmooth_trendTrb   rc   rd   s    r^   test_smooth_trendr      )    NNd333333rg   c                 F    t          d           t          dd           d S )Nrandom_trendTrb   rc   rd   s    r^   test_random_trendr      r   rg   c                 F    t          d           t          dd           d S )Ncycle_approx_diffusecycleTrb   rc   rd   s    r^   
test_cycler      s*    "###Gt,,,,,,rg   c                 F    t          d           t          dd           d S )Nseasonal_approx_diffuseseasonalTrb   rc   rd   s    r^   test_seasonalr      s*    %&&&J$//////rg   c                 F    t          d           t          dd           d S )Nfreq_seasonal_approx_diffusefreq_seasonalTrb   rc   rd   s    r^   test_freq_seasonalr      s*    *+++Ot444444rg   c                 F    t          d           t          dd           d S )Nreg_approx_diffuseregTrb   rc   rd   s    r^   test_regr      s*     !!!ET******rg   c                 F    t          d           t          dd           d S )N
rtrend_ar1Trb   rc   rd   s    r^   test_rtrend_ar1r      s)    LLD111111rg   c                 F    t          d           t          dd           d S )N-lltrend_cycle_seasonal_reg_ar1_approx_diffuselltrend_cycle_seasonal_reg_ar1Trb   rc   rd   s    r^   #test_lltrend_cycle_seasonal_reg_ar1r      s+    ;<<<,EEEEEErg   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| 	          }|                    d
          }t	          |d|d| 	          }|                    d
          }d d d            n# 1 swxY w Y   t          |j        j        d         dd           t          |j	        d         dd           | r@t          |j                   t          |j        d           t          |j        d           d S t          |j        d           t          |j        d           d S )Nd         ?r!   g{Gz?r"   Tr*   F)ra   r   mle_regressionr   r.   r/   )r   r.   r&   gh㈵>r%   r   )r:   arangerP   rQ   r	   rR   r   regression_coefficientsfilteredr   printpredicted_diffuse_state_covr   rH   rI   )r   endogr   mod1res1mod2res2s          r^   test_mle_regr      s   IcNN3E7D	##A#JJJ$JJJ	!$Q$KKK4KKK		 	-	-	- 	! 	!#ET)-e6GI I I xxRx  #ET)-d6GI I I xxRx  	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! D09%@    DKNCd3333  1d.///T&***T&*****T,a000T,a00000s   AB99B= B=c                  D   i t           _        ddg} t          }d}t          j        ||          5  t          |           }t          |j        d           d d d            n# 1 swxY w Y   t          j        t                    5  t          | d           d d d            n# 1 swxY w Y   t          }d}t          j        ||          5  t          | dd	          }t          |j        d
           d d d            n# 1 swxY w Y   g d}|D ]K}|di}t          }d}t          j        ||          5  t          | d
fi | d d d            n# 1 swxY w Y   Lt          j        t                    5  t          | d           d d d            d S # 1 swxY w Y   d S )Nr"   r!   r   ri   ra   zinvalid specz!Trend component specified withoutT)trendra   deterministic trend)ra   r   stochastic_levelstochastic_trendz may be overridden when the trend)r   )
r   rm   r   rn   ro   r	   r   trend_specificationraises
ValueError)r   rq   rj   rW   trend_attributes	attributer   s          r^   test_specificationsr     s$   %'J"FE #G'E	gU	+	+	+ ; ;"5))S,k:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
 
z	"	" 4 4UN3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4
 #G/E	gU	+	+	+ E E"5EEES,.CDDDE E E E E E E E E E E E E E E, , ,% I I	T"&2\'/// 	I 	I (=HHHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 
z	"	" 0 0UQ////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0sY   %A!!A%(A%B""B&)B&(D  DD6EE	E	6FFFc                     t          d          } t          j        d         }t          j        d         }t          j                            d           t          j        t          j        |           t          j        |           dz  f         }t          j                            |           }t          j	        | dz             }t          d|           D ]7}|d	         ||         z  |d         ||dz
           z  z   ||         z   ||dz   <   8|dd          }|t          j        ||          z  }t          ||d
          }t          |j        g dd           d S )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   r-   )nobsbetaphir   epsr   trW   s           r^   test_start_paramsr   J  s>   
 s88D5=D
%/C INN45	$ 334D
)



%
%CHT!VE1d^^ F FVeAh&Q%!*)<<s1vEac

!""IE	RVD$E
 u4
B
B
BCC$&<&<&<4HHHHHHrg   c                  |   t          j        d          dz   } t          j        d          }t          | |dd          }|                    g d          }|                    dt          j        dd          d d t           j        f                   }t          j        dd          dz   }t          ||           d S )	N2   r   	dconstant   )r   levelr   )gV瞯<r   r"   <   r   )r:   r   r	   smoothforecastnewaxisr   )r   r   rW   r]   actualdesireds         r^   test_forecastr   d  s    IbMMBE9R==D
u4{Q
O
O
OC
**]]]
#
#C\\"29R#4#4QQQ
]#C\DDFiB"$GFG$$$$$rg   c            
         d} d}t           j                            d           t           j                            | |f          }t           j        |d ddf<   t           j                            | df          }t           j                            | df          }t          j        dd	| 
          }t          j        ||          }t          j        |	                                |          }t          j        ||          }t          |d|          t          |d|          t          |d|          t          |d|          t          |d|          t          |d|          g}	|	D ]}
|
j         |
                    d          }|                                 |                                 |                    d           |                                 t           j                            d|
j        f          }|                    d|           |                    d|           t           j                            d|
j        f          }t'          j        t*                    5  |                    d|           d d d            n# 1 swxY w Y   t           j                            d|
j        dz   f          }t'          j        t*                    5  |                    d|           d d d            n# 1 swxY w Y   t'          j        t*                    5  t          |dt          j        d                     d d d            d S # 1 swxY w Y   d S )N   r"   i  r   r   r   r!   z
1970-01-01r   )r   r   )r9   llevelr   Fr   T)dynamic)stepsr   )r   r   )r:   r   r   r   nanr6   r7   	DataFrameSeriesr=   r	   r-   rR   rS   predictget_predictionk_exogr   get_forecastrn   r   r   r   )r   k_endogr   exog1exog2r9   endog_pdexog1_pdexog2_pdr   rW   r]   oos_exogs                r^   test_misc_exogr  p  s   DGINN4I4/22E6E"1"a%LI4),,EI4),,EM,T4@@@E|E///Hy666H|E///H 	UH5999UH5999UH5999Xxh???Xxh???Xxh???F  1 1gg5g!!D!!!9##!SZ#9918,,,qx000 9##!SZ#99]:&& 	1 	1LLqxL000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 9##!SZ!^)<#==]:&& 	1 	1LLqxL000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 
z	"	" F FUH28G3D3DEEEEF F F F F F F F F F F F F F F F F Fs6   9JJ!	$J!	+LL	L	5%M''M+.M+c                     t           j                            d           t          j        t           j                            d                    } t          j        | d          }|                    |j	                  }|
                    dddg          }t          |j                            t          j        dg                    d           d S )	Ni r   r   r   r"   a)r   r   r9   T)r:   r   r   r6   r   r   r   r	   r   r-   r   r   r9   equalsIndex)r   rW   r]   outs       r^   test_predict_custom_indexr	    s    INN6L))r)2233E

)%
:
:C
**S%
&
&C
++A1SE+
2
2C!!"(C5//22D99999rg   c                  
   t                                           } 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}|                    |           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                             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          j        d	          |dd	dd	f<   t          j        d          |d	dd	df<   t          j        d	          |d!d d!d f<   t          |j        j        d d d d df         |           t%          t          j        |dd                   t          j        d          |d         z  t          j        d	          |d         z  g          }t          |j        j        d d d d df         |           d S )"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   )r.   r   r   r   )r   r   r.   r   )r   r   r   r.   g      "@g      @gr$   r   )r  r  r   )r4   r2   r	   r:   rD   r3   r   k_statesk_state_covrI   r   ssmk_posdefk_paramsr8   r   reshapedesign__direct_sumarraycossin
transitionr   eye	selectiondiag	state_cov)r<   rV   r   expected_designexpected_transitionexpected_selectionexpected_state_covs          r^   (test_matrices_somewhat_complicated_modelr,    sA   XXZZF '0191;<10M0M0O'+67W.2;?-26	# 	# 	#E 25b	F 
LL ///"M222)=999EI&666V--- eQF(LL...F# $ %,GArNN  EI$QQQ1W-???&
1a&a& 	 	
,,,-- .. .." 	# 	# 	26!BE'!)B,''"%	")=)=q!QJF1RU719R<((("&252*>*>1aKa"&252..qwqy|0D0DaKa"&252...qwqy|0D0DaKaAqwrz 2 2BF1RU72:4F4FGaAqwrz 2 22BF1RU72:4F4FGI 	J 	J 	2bfQruWS[)))2bfQruWS[.A.A+ABbfQruWS[)))2bfQruWS[.A.A+ABD 	E 	E(    	QQQ1W%':G G G G
 ,//#%6!99qsAaCx #%6!99qsAaCx #%6!99rssBCCx EI'111a02DEEE%
qs
q		&)
q		&)'  
 EI'111a02DEEEEErg   c                     t          j        d | D             d          }t          j        |          }d}| D ]*}|j        \  }}||k    sJ |||||z   |||z   f<   ||z  }+|S )zLCompute the matrix direct sum of an iterable of square numpy 2-d arrays
    c                     g | ]	}|j         
S r0   )shape).0ms     r^   
<listcomp>z __direct_sum.<locals>.<listcomp>  s    999A999rg   r   )axis)r:   rG   r   r/  )square_matrices	new_shape	new_arrayoffsetr1  rowscolss          r^   r  r    s     99999BBBI##IF  W
dt||||@A	&$&v}(<<=$rg   c            	         d} t          j        |           dz  }t          j        |           }t          |d|          }|                    ddg          }d}t          j        d          }t          j        d          }t	          |                    d|          d           t	          |                    d|          d           t	          |                    d|          d           d}t          j        |          }t          j        |df          }t	          |                    ||          d           t	          |                    ||          d           t          t          |j        |d           t          t          |j        |dd	g           t          t          |j        |t          j        |d	f                     d S )
Nr          @ra   r   r   r"   )r"   r"   r   r!   )r:   r   r	   r   r   r   r   r   )	r   r   r   rW   r]   exog_fcast_scalarexog_fcast_1dimexog_fcast_2dimhs	            r^   test_forecast_exogr@    s   DGDMMCE74==D
uk
=
=
=C
**c3Z
 
 C gajjOgfooOCLL):L;;R@@@CLLL992>>>CLLL992>>> 	AgajjOgq!fooOCLLL992>>>CLLL992>>> *clAB7777*clAQF;;;;*clABGQFOODDDDDDrg   c                 V   g d}g d}|D ].}t          t          ||          t          | |                     /|D ]8}t          t          |j        |          t          | j        |                     9t          |                                |                                            d S )N)r   r   seasonal_periodsr   freq_seasonal_periodsfreq_seasonal_harmonicsr   r   ar_orderr   ra   r   r   stochastic_seasonalr  r  r  r   r   
trend_mask
regressionrC   )r   r   r  r  obs_interceptr  obs_covstate_interceptr#  r%  r'  )r   r1   r  _get_init_kwds)rW   r   attrs	ssm_attrsattrs        r^   check_equivalent_modelsrP  "  s    ! ! !EN N NI  > >WT4(('#t*<*<==== F FWTXt,,gcgt.D.DEEEE$$&&(:(:(<(<=====rg   c            	         d} t          j        |           dz  }t          j        |           }g d}|D ]}t          ||dd|          }t          |fd|i|                                }t	          ||           t          |||d	          }t          |fd|i|                                }t	          ||           t          |||ddd
          }t          |fd|i|                                }t	          ||           d S )Nr   r;  )ra   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   rF  r   r   r"   )r   r   r   )r   r   r   r  r  )r:   r   r	   rL  rP  )r   r   r   levelsr   rW   r   s          r^   test_recreate_modelrZ  9  sc   DGDMMCE74==DG G GF  + +
 #57;$H H H#EMMM8J8J8L8LMMT*** #5D235 5 5#EMMM8J8J8L8LMMT*** #5D)-046 6 6 $EMMM8J8J8L8LMMT****++ +rg   c            	      P   t          j        d          } t          j        |           }g d}t          | d|          }|                    |          }t          | d d         d|d d                   }|                    |          }|                    | dd          |dd                    }t          |j        |j                   t          |j	        |j	                   dD ].}t          t          ||          t          ||                     /dD ].}t          t          ||          t          ||                     /t          |                    dt          j        d                    |                    dt          j        d                               d S )	Nr   r   r   r   r   r   r   r   r   r'   rF   rI   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_defaultr1   r   r   	r   r   r   r   r   r   r   res3rO  s	            r^   test_append_resultsrx  ^  s   IcNNE<DFxd;;;D;;vDcrc
H49EEED;;vD;;uRSSzRSS	;22D#T%7888D+T-DEEE@ ? ?WT4(('$*=*=>>>>. ? ? 	WT4(('$*=*=>>>>DMM"272;;M77MM"272;;M779 9 9 9 9rg   c            	         t          j        d          } t          j        |           }g d}t          | d|          }|                    |          }t          | d d         d|d d                   }|                    |          }|                    | dd          |dd                    }t          |j        |j        dd                     dD ]>}t          ||          }	|	|	ddd f         }	t          t          ||          |	           ?t          |
                    dt          j        d                    |
                    dt          j        d                               d S )	Nr   r\  r   r   r   r^  .r   )r:   r   rr  r	   r   extendr   rF   r1   r   r   r   )
r   r   r   r   r   r   r   rw  rO  r   s
             r^   test_extend_resultsr{    sm   IcNNE<DFxd;;;D;;vDcrc
H49EEED;;vD;;uRSSzRSS	;22DDL$,rss"3444. 3 3 $%%c233h'GWT4(('2222DMM"272;;M77MM"272;;M779 9 9 9 9rg   c            	      p   t          j        d          } t          j        |           }g d}t          | d d         d|d d                   }|                    |          }t          | dd          d|dd                    }|                    |          }|                    | d d         |d d                   }t          |j        |j                   t          |j	        |j	                   dD ].}t          t          ||          t          ||                     /dD ].}t          t          ||          t          ||                     /t          |                    dt          j        d                    |                    dt          j        d                               d S )	Nr   r\  r   r   r   r]  r^  r   )r:   r   rr  r	   r   applyr   rt  r   ru  r1   r   r   rv  s	            r^   test_apply_resultsr~    s   IcNNE<DFcrc
H49EEED;;vDbcc
H49EEED;;vD::eCRCjtCRCy:11D#T%7888D+T-DEEE@ ? ?WT4(('$*=*=>>>>. ? ? 	WT4(('$*=*=>>>>DMM"272;;M77MM"272;;M779 9 9 9 9rg   )F)?__doc__rP   r   r:   numpy.testingr   r   r   pandasr6   rn   statsmodels.datasetsr   statsmodels.tools.sm_exceptionsr   statsmodels.tsa.statespacer   %statsmodels.tsa.statespace.structuralr	   (statsmodels.tsa.statespace.tests.resultsr
   load_pandasdatar4   r7   r9   r_   rf   rr   rv   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   markslowr   parametrizer   r   r   r   r  r	  r,  r  r@  rP  rZ  rx  r{  r~  r0   rg   r^   <module>r     sE         F F F F F F F F F F      * * * * * * @ @ @ @ @ @ 1 1 1 1 1 1 F F F F F F G G G G G Gi"BM,TJJJ	r r r rj1 1 1
; ; ;> > >
3 3 3
3 3 3
7 7 77 7 7; ; ;
> > >
H H H
: : :
4 4 4
4 4 4
- - -
0 0 0
5 5 5
+ + +
2 2 2
 F F F
 ,tUm<<1 1 =<1D(0 (0 (0VI I I4	% 	% 	%0F 0F 0Ff: : :EF EF EFP  E E E@> > >."+ "+ "+J"9 "9 "9J"9 "9 "9J#9 #9 #9 #9 #9rg   