
    !gq                         d Z ddlZddlZddlmZ ddlmZmZm	Z	m
Z
mZmZ ddlmZmZmZmZ ej$                  j'                         j(                  Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd ZddZd Z d Z!d Z"d Z#y)zs
Tests for fixing the values of some parameters and estimating others

Author: Chad Fulton
License: Simplified-BSD
    N)datasets)initializationmlemodelsarimax
structuraldynamic_factorvarmax)assert_assert_raisesassert_equalassert_allclosec                     t        j                  g d      } g d| _        | j                  ddi      5  t	        | j
                         t        | j                  ddi       t        | j                  dg       t        | j                  ddg       d d d        t	        | j
                          t        | j                  i        t        | j                  d        t        | j                  d        y # 1 sw Y   bxY w)N   abcr         ?r      
r   MLEModel_param_names
fix_paramsr
   _has_fixed_paramsr   _fixed_params_fixed_params_index_free_params_indexmods    o/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/tsa/statespace/tests/test_fixed_params.pytest_fix_paramsr!      s    


B
"C&C	b		" 5%%&S&&b	2S,,qc2S++aV4	5
 %%%&""B'(($/''.5 5s   AC11C:c                  N   t        j                  g d      } g d| _        | j                  ddd      5  | j                  ddi      5  t	        | j
                         t        | j                  ddd       t        | j                  ddg       t        | j                  dg       d d d        d d d        t	        | j
                          t        | j                  i        t        | j                  d        t        | j                  d        y # 1 sw Y   jxY w# 1 sw Y   nxY w)Nr   r   r   r   )r   r   r   r   r   r   s    r    test_nested_fix_paramsr#   "   s    


B
"C&C	aa(	) 6^^S"I& 	6C))***!",=>001a&9//!5		66 %%%&""B'(($/''.	6 	66 6s$   DAD&DD	DD$c                     t         d   } | j                  d d }| j                  dd  }t        j                  |       }|j	                  ddi      5  |j                  dgd      }dg}|j                  |d	      }d d d        t        j                  |      }|j	                  ddi      5  |j                  dgd      }d d d        j                  |      }	|j                  |d
dj                  d      }
t        |	j                  j                         t        |	j                  |j                         t        |	j                  |j                         t        |
j                  |j                         t        |
j                  |j                         t        |
j                  |j                         y # 1 sw Y   BxY w# 1 sw Y   
xY w)Ninfld   ar.L1      ?r   Fincludes_fixed皙$@dispTr-   start_paramsrefit
fit_kwargs)	macrodatailocr   SARIMAXr   smoothfitappendparamsr   r   r   llf_obs)endogendog1endog2mod_fullres_fullr/   res_full_fitr   res1res2res2_fits              r    test_results_appendrD   1   s   fEZZFZZFu%H			gs^	, >??B4?>v||Lu|=	> //&
!C	#	' 6zz2$uz56
 ;;vD {{6|':':;<{ =H DKK1##X%;%;<DLL("2"23 HOO\%8%89'')C)CDH$$l&:&:;5> >6 6s   +F;+G;GGc                  x   t         d   } | j                  d d }| j                  dd  }t        j                  |       }|j	                  ddi      5  |j                  dgd      }d d d        t        j                  |      }|j	                  ddi      5  |j                  dgd      }d d d        j                  |      }t        |j                  j                         t        |j                  |j                         t        |j                  |j                         y # 1 sw Y   xY w# 1 sw Y   xY w)Nr%   r&   r'   r(   r   Fr)   )r3   r4   r   r5   r   r6   r8   r   r9   r   r   r:   )r;   r<   r=   r>   r?   r   rA   rB   s           r    test_results_extendrF   T   s   fEZZFZZFu%H			gs^	, ???B4?>? //&
!C	#	' 6zz2$uz56
 ;;vD DKK1##X%;%;<DLL("2"23? ?6 6s   D$D0$D-0D9c                     t         d   } t        j                  |       }|j                  ddi      5  |j	                  dgd      }dg}|j                  |d      }d d d        j                  |       }|j                  | d	dj                  d
      }t        |j                  |j                         t        |j                  |j                         t        |j                  |j                         t        |j                  |j                         t        |j                  |j                         t        |j                  |j                         y # 1 sw Y   xY w)Nr%   r'   r(   r   Fr)   r+   r,   Tr.   r0   )r3   r   r5   r   r6   r7   applyr9   r   r   r   r:   )r;   r   resr/   res_fitrB   rC   s          r    test_results_applyrK   k   s   fE
//%
 C	#	' 4jj"ej4v'',U'3	4 99UD yydw~~87y 8H DKK,##S%6%67DLL#++. HOOW^^4'')>)>?H$$goo6)4 4s   +EE!c                      t        j                  g d      } g d| _        d}t        j                  t
        |      5  | j                  ddi      5  	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   z"Invalid parameter name passed: "d")matchd)r   r   r   pytestraises
ValueErrorr   )r   msgs     r    test_mle_validaterS      sq    


B
"C&C
.C	z	- ^^S!H% 		 	 	 s#   A0A$A0$A-	)A00A9c                     t         d   } t        j                  | d      }t        t        |j
                  ddi       t        j                  t              5  |j                  ddi      5  	 d d d        d d d        t        t        |j
                  ddi       |j                  ddd      5  t        |j                         t        |j                  ddd       t        |j                  d	d
g       t        |j                  dg       d d d        |j                  ddddgd      }t        |j                         t        |j                  ddd       t        |j                  d	d
g       t        |j                  dg       |j                  ddd      5  |j                  ddi      5  t        |j                         t        |j                  ddd       t        |j                  d	d
g       t        |j                  dg       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   0xY w# 1 sw Y   9xY w# 1 sw Y   y xY w)Nr%   )r   r   r   orderAR.L1r(   r'   皙?r'   ar.L2r   r   r         @Fr/   r-           rZ   )r3   r   r5   r   rQ   fit_constrainedrO   rP   r   r
   r   r   r   r   r   r;   mod1rI   s      r    test_sarimax_validatera      s   fE??5	2D *d22WcNC 
z	" __gs^, 		 *d22WcNC 
35	6 3&&'T''3)EFT--1v6T,,qc2	3 

s;-0E  ?CC!!"""cC$@A((1a&1''!-	34	5 7__gs^, 	7D**+++sS-IJ11Aq6:001#6		77 7'	 	 3 3	7 	77 7sV   H-+H -H-.AH:I1AII H*	%H--H7:II	IIc                     t         d   } t        j                  | dd      }t        t        |j
                  ddi       t        j                  t              5  |j                  ddi      5  	 d d d        d d d        t        t        |j
                  ddi       |j                  ddd	      5  t        |j                         t        |j                  ddd	       t        |j                  dd
g       t        |j                  ddg       d d d        |j                  ddd	dgd      }t        |j                         t        |j                  ddd	       t        |j                  dd
g       t        |j                  ddg       |j                  ddd	      5  |j                  ddi      5  t        |j                         t        |j                  ddd	       t        |j                  dd
g       t        |j                  ddg       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   2xY w# 1 sw Y   9xY w# 1 sw Y   y xY w)Nr%   rwalkr   )autoregressiverW   r(   r'   rX   rY      r   r   r[   Fr\   r]   rZ   )r3   r   UnobservedComponentsr   rQ   r^   rO   rP   r   r
   r   r   r   r   r   r_   s      r    test_structural_validaterg      s   fE**5'!LD *d22WcNC 
z	" __gs^, 		 *d22WcNC 
35	6 6&&'T''3)EFT--1v6T,,q!f5	6 

s;-0E  ?CC!!"""cC$@A((1a&1''!Q0	34	5 :__gs^, 	:D**+++sS-IJ11Aq6:001a&9		:: :'	 	 6 6	: 	:: :sV   H1,H$.H1/AH> I4AII$H.	)H11H;>II	II c            	         t        j                  t        g d         j                         j                  dd  } | | j                         z
  | j                         z  } t        j                  | ddd      }ddi}|j                  |      5  t        |j                         t        |j                  |       t        |j                  dg       t        |j                  g d       d d d        |j!                  |d	
      }t        |j                         t        |j                  |       t        |j                  dg       t        |j                  g d       |j                  ddi      5  t        |j                         t        |j                  ddi       t        |j                  dg       t        |j                  g d       d d d        t        j                  | ddd      }t#        j$                  t&              5  |j                  ddi      5  	 d d d        d d d        ddd}|j                  |      5  t        |j                         t        |j                  |       t        |j                  ddg       t        |j                  g d       d d d        |j!                  |d	
      }t        |j                         t        |j                  |       t        |j                  ddg       t        |j                  g d       |j                  |      5  |j                  ddi      5  t        |j                         t        |j                  ddd       t        |j                  ddg       t        |j                  g d       d d d        d d d        t        j                  | ddd      }t#        j$                  t&              5  |j                  ddi      5  	 d d d        d d d        t)        g d      }|j                  |      5  t        |j                         t        |j                  |       t        |j                  g d       t        |j                  g d       d d d        |j!                  |d	
      }t        |j                         t        |j                  |       t        |j                  g d       t        |j                  g d       |j                  |      5  |j                  ddd      5  t        |j                         t        |j                  t)        g d             t        |j                  g d       t        |j                  g d       d d d        d d d        t        j                  | dddd	      }|j                  ddi      5  t        |j                         t        |j                  ddi       t        |j                  dg       t        |j                  g d       d d d        t        j                  | dddd	      }	|	j                  ddi      5  t        |	j                         t        |	j                  ddi       t        |	j                  dg       t        |	j                  g d       d d d        dd d!}|j                  |      5  t        |j                         t        |j                  |       t        |j                  d d"g       t        |j                  g d#       d d d        |j!                  |d	
      }t        |j                         t        |j                  |       t        |j                  d d"g       t        |j                  g d#       t        j                  | d$d%g   ddd&      }
d'd'ddd(}|
j                  |      5  t        |
j                         t        |
j                  |       t        |
j                  g d)       t        |
j                  d*d"g       d d d        |
j!                  |d	
      }t        |j                         t        |j                  |       t        |j                  g d)       t        |j                  d*d"g       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   :xY w# 1 sw Y   MxY w# 1 sw Y   Rx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   xY w# 1 sw Y   )xY w# 1 sw Y   xY w# 1 sw Y   7xY w# 1 sw Y   <xY w)+N)cpirealgdprealinvr   diagonal	k_factorsfactor_ordererror_cov_typeloading.f1.cpir(   r   )r   r   re            Fr,   L1.f1.f1rt   )r   r   r   re   rr   rs   r   333333?皙?)ru   zL2.f1.f1   333333ӿ))ru   rv   zL1.f2.f1rw   zL1.f1.f2皙)L1.f2.f2rw   )	   
         )	r   r   r   re   rr   rs   rt   rx      皙)ru   r}   ))ru   ry   rz   r{   )r}   r   )rn   ro   rp   enforce_stationarity333333?)r   r   r   re   rr   rs   rx   r~   )r   r   r   re   rr   rs   rt   rx   r   r   r   r   g?re   )z
sigma2.cpizsigma2.realinvrs   )r   r   r   rr   rt   ri   rj   unstructuredr   )rq   zloading.f1.realgdpzcov.chol[1,1]cov.chol[2,1])r   r   r   re   rr   )nplogr3   diffr4   meanstdr   DynamicFactorr   r
   r   r   r   r   r   r^   rO   rP   rQ   dict)r;   r`   constraintsrA   mod2rB   mod3res3mod4mod5mod6res6s               r    test_dynamic_factor_validater      s   FF9:;<AACHHLEUZZ\!UYY[0E '':GD $S)K		% B&&'T''5T--s3T,,.@A	B
 %8DD""###[1))A3/((*<=
 
*c*	+ B&&'T''*c):;T--s3T,,.@A	B '':GD	z	" __j#./ 		  #4K		% B&&'T''5T--1v6T,,.@A	B %8DD""###[1))Aq62((*<=		% F__j$/0 	FD**+""3$G 11Aq6:002DE	FF '':GD	z	" __j#./ 		  @ AK		% K&&'T''5T--?T,,.IJ	K %8DD""###[1))?;((*EF		% 
O__$DAB 	OD**+"" ? @
 11?C002MN	O
O '':"$D 
*c*	+ E&&'T''*c):;T--s3T,,.CD	E '':"$D 
*c*	+ >&&'T''*c):;T--s3T,,<	>	> "%:K		% ?&&'T''5T--1v6T,,o>	?
 %8DD""###[1))Aq62((/: ''ui !QQ%'D BK 
	% 6&&'T''5T--|<T,,q!f5	6
 %8DD""###[1))<8((1a&1QB BB B	 	 
B B	F 	FF F	 	 K K	O 	O
O 
O"E E> >? ?&6 6s   Ab"/Ab/c	b<c	Ac%c09Ac#c0d
.c=0d
Add1A'd$=d1:Ad>AeAeAe%"b,/b9<c	c		cc #c-	(c00c:=d	d

dd!$d.	)d11d;>eee"%e/c            
         t        j                  t        ddg         j                         j                  dd  } t        j                  t        dg         j                         j                  dd  }t        j                  | d|d      }dd	d
ddddddd	}|j                  |      5  t        |j                         t        |j                  |       t        |j                  g d       t        |j                  g d       d d d        |j                  |d      }t        |j                         t        |j                  |       t        |j                  g d       t        |j                  g d       t        j                  | dg   d|d      }ddi}|j                  |      5  t        |j                         t        |j                  |       t        |j                  dg       t        |j                  g d       d d d        t        j                  | dg   d      }t        j                   t"              5  |j                  ddi      5  	 d d d        d d d        ddd}|j                  |      5  t        |j                         t        |j                  |       t        |j                  ddg       t        |j                  ddg       d d d        |j                  |ddgd      }t        |j                         t        |j                  |       t        |j                  ddg       t        |j                  ddg       |j                  |      5  |j                  dd i      5  t        |j                         t        |j                  d dd       t        |j                  ddg       t        |j                  ddg       d d d        d d d        t        j                  | d      }t        j                   t"              5  |j                  ddi      5  	 d d d        d d d        t%        g d!      }|j                  |      5  t        |j                         t        |j                  |       t        |j                  g d       t        |j                  g d"       d d d        |j                  |d      }	t        |	j                         t        |	j                  |       t        |	j                  g d       t        |	j                  g d"       t        j                  | dg   dd#      }
|
j                  dd$i      5  t        |
j                         t        |
j                  dd$i       t        |
j                  dg       t        |
j                  ddg       d d d        t        j                  | dd#      }|j                  dd$i      5  t        |j                         t        |j                  dd$i       t        |j                  dg       t        |j                  g d%       d d d        y # 1 sw Y   Qx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   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   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)&Nri   rj   r   rk   )r   r   T)rV   exogmeasurement_errorr(   g?rX   rw   g333333?r   gffffff@g?)	zintercept.cpizintercept.realgdpzbeta.realinv.cpizbeta.realinv.realgdpzsqrt.var.cpizsqrt.cov.cpi.realgdpzsqrt.var.realgdpzmeasurement_variance.cpizmeasurement_variance.realgdp)	r   r   rt   rx   r   r~   r   r   r   )r   re   rr   rs   Fr,   
L1.cpi.cpi)r   r   re   rr   )r   r   rU   rv   )r   z
L2.cpi.cpir   r   re   r   r\   ry   ))r   rv   )zL1.realgdp.cpirw   )zL1.cpi.realgdpr|   )zL1.realgdp.realgdprw   )r   r   rt   rx   r   rV   r   r   )r   r   re   rr   rs   rt   rx   r   )r   r   r3   r   r4   r	   VARMAXr   r
   r   r   r   r   r   r^   rO   rP   rQ   r   )r;   r   r`   r   rA   r   r   r   r   res4r   r   s               r    test_varmax_validater   s  s   FF9eY/01668==abAE66)YK()..055ab9D ==f4+/1D %(c'*C#&'*36	8K
 
	% <&&'T''5T--/MNT,,l;	<
 %8DD""###[1))+IJ((,7
 ==wvD+/1D%K		% <&&'T''5T--s3T,,l;	< ==wv6D	z	" __lC01 		 "%C8K		% 6&&'T''5T--1v6T,,q!f5	6 1b'NDD""###[1))Aq62((1a&1		% :__lD12 	:D**+""4s$K 11Aq6:001a&9	:: ==f-D	z	" __lC01 		  5 6K 
	% ?&&'T''5T--|<T,,o>	?
 %8DD""###[1))<8((/: ==wv.35D	,,	- 6&&'T'',)<=T--s3T,,q!f5	6 ==f.35D	,,	- H&&'T'',)<=T--s3T,,.FG	H Ho< <"< <	 	 
6 6	: 	:: :	 	 ? ?6 6H Hs   (AY,AY Y:Y-Y:?AZ%Z!9AZZ!Z;,Z..Z;A[A[-A["Y Y*-Y7	2Y::ZZZ	Z!!Z+.Z8	3Z;;[[["[+c                 T   t        |j                  | j                         t        |j                  | j                         t        |j                  | j                         t        |j                  | j                         t        |j
                  | j
                         t        |j                  | j                         t        |j                  | j                         t        |j                  | j                         t        |j                  | j                         t        |j                  | j                         |rt        |j                  dd      | j                  dd             t        |j                  dd      | j                  dd             t        |j                  dd      | j                  dd             t        |j                  | j                         t        |j                  | j                         t        |j                  | j                         |r|j                  }|j                  }t!        j"                  |j$                        }t        ||   | j$                         t        ||   t         j&                         t!        j"                  |j(                        }t        ||   | j(                         t        ||   t         j&                         t!        j"                  |j*                        }t        ||   | j*                         t        ||   t         j&                         t!        j,                  |j                  |j                        }t!        j,                  |j                  |j                        }t        |j.                  j0                  |   | j.                         t        |j.                  j0                  |   t         j&                         t        |j2                  j0                  |   | j2                         t        |j2                  j0                  |   t         j&                         t        |j4                  j0                  |   | j4                         t        |j4                  j0                  |   t         j&                         t        |j6                  j0                  |   | j6                         t        |j6                  j0                  |   t         j&                         t        |j8                  j0                  |   | j8                         t        |j8                  j0                  |   t         j&                         t        |j:                  j0                  |   | j:                         t        |j:                  j0                  |   t         j&                         t        |j<                  j0                  |   | j<                         t        |j<                  j0                  |   t         j&                         t        |j?                  d      | j?                  d             t        |jA                  d      | jA                  d             |jC                  d      }	| jC                  d      }
t        |	|
       y )Naic	lutkepohlbichqic
jarqueberabreakvarljungbox)"r   nobsnobs_diffusenobs_effectivek_diffuse_statesdf_modeldf_residllfr   r   r   info_criteriar:   fittedvaluesr   r   r   asarraypvaluesnanbsezvaluesix_cov_params_defaultvaluescov_params_approxcov_params_oimcov_params_opgcov_params_robustcov_params_robust_oimcov_params_robust_approxtest_normalitytest_heteroskedasticitytest_serial_correlation)rA   rB   check_lutkepohlcheck_params	mask_free
mask_fixedr   r   r   actualdesireds              r    check_resultsr     s   DIItyy)D%%t'8'89D'')<)<=D))4+@+@ADMM4==1DMM4==1DHHdhh'DHHdhh'DHHdhh'DIItyy)**5+>**5+>	@**5+>**5+>	@**6;?**6;?	A DLL$,,/D%%t'8'89D%%t'8'89++	--
**T\\*	*DLL9
+RVV4jj"I1J0**T\\*	*DLL9
+RVV4 FF422D4K4KL	VVD44d6N6NO
//66yA//	1//66zBBFFK..55i@..	0..55jA266J++229=++	-++22:>G++229=++	-++22:>G..55i@..	0..55jA266J2299)D22	42299*ErvvN55<<YG55	755<<ZH	  D''5''57 D00<00<> ))*5F**:6GFG$    c                  >   t         d   } t        j                  | g dddfd      }t        j                  | dd      }g d}|j                  |d      }|j	                  ddd	|j
                  dd
      }t        |j                  g        t        |j                  ddg       t        j                  |j
                        }t        j                  |d   dd|dd  f   }t        |j
                  |       |j                  ddd	      5  |j                  |j
                        }d d d        t        ||d       |j                  ddd	      5  |j                  |j
                  d      }t        ||d       d d d        y # 1 sw Y   `xY w# 1 sw Y   y xY w)Nr%   )r   r   r   r   r   Fr   )rr   r   r   )r   rX   g@r,   )rZ   ar.L3)r*   r-   rZ   r   r   T)r   r)   )r3   r   r5   r7   r^   r9   r   fixed_paramsr   r   r_r   r   r6   r   filter)	r;   r`   r   r/   rA   rB   r9   r   r   s	            r    test_sarimax_nonconsecutiver   7  s    fE ??5q!(<057D??5	ND #L88Lu8-D!a 8$++/45   BD ""B'""Wg$67 ZZ$FeeF1Iq!VABZ/0GDKK) 
1q1	2 ({{4;;'( $d3 
1q1	2 8{{4;;t{<dD$78 8( (8 8s   F,FFFc                     t         d   } t        j                  | d      }t        j                  | d      }t        j                  |j
                        }d|d<   |j                  dddg       ||j                  _        d|j                  _        d	di}d
dg}|j                  |d      }|j                  ||j                  dd      }t        |j                  g        t        |j                  d	g       t        j                  |j                  df   }t!        |j                  |       |j#                  |      5  |j%                  |j                        }d d d        t'        ||       y # 1 sw Y   xY w)Nr%   llevellltrendapproximate_diffuser   r   known)constantzsigma2.trendg(\
@gGz?Fr,   r/   r*   r-   )r3   r   rf   r   Initializationk_statessetssmloglikelihood_burnr7   r^   r9   r   r   r   r   r   r   r6   r   )	r;   r`   r   initr   r/   rA   rB   r   s	            r    test_structuralr   a  sU    fE **5(;D**5)<D ((7D#DGHHQ1#H&"DHH"#DHH!1%K $<L88Lu8-D$++/45   BD ""B'""^$45 eeDKKN#GDKK) 
	% ({{4;;'( $( (s   >E//E8c                  d   t        j                  t        ddg         j                         j                  dd  } | | j                         z
  | j                         z  } t        j                  | ddd      }t        j                  | ddd      }ddi}g d	}|j                  |d
      }|j                  ||j                  d
d
      }t        |j                  g        t        |j                  dg       t        j                  |j                        }t         j                  |d d |dd dz  |d   f   }t         j                  |d d d|dd  f   }	t!        |j                  |	d       |j#                  |      5  |j%                  |      }d d d        t'        ||d
       y # 1 sw Y   xY w)Nri   rj   r   rl   rm   r   r   r   )g?̔Ҿgh㈵Gz?r   gQFr\   r   r   rr   r(   re   gh㈵>)atol)r   )r   r   r3   r   r4   r   r   r   r   r7   r^   r9   r   r   r   r   r   r   r6   r   )
r;   r`   r   r   r/   rA   rB   
param_valsr9   r   s
             r    "test_dynamic_factor_diag_error_covr     s    FF9eY/01668==abAEUZZ\!UYY[0E '':GD''>KD #A&K DL88E8:D$++/45   BD ""B'""_$56
 DKK(JUU:bq>:a?C#7AFGFeeF2AJ6!":-.GDKKt4 
	% #{{6"#
 $51# #s   =F&&F/c                      t         d   } t        j                  | d      }|j                  ddi      5  |j	                  dg      }d d d        t        j                  d       y # 1 sw Y    xY w)Nr%   )r   r   r   rU   r'   r(   r   )r   )r3   r   r5   r   scorer   shape)r;   r   r   s      r    test_score_shaper     sc     fE
//%y
1C	#	' !		3% ! d#! !s   A&&A/)FT)$__doc__numpyr   rO   statsmodelsr   statsmodels.tsa.statespacer   r   r   r   r   r	   numpy.testingr
   r   r   r   r3   load_pandasdatar!   r#   rD   rF   rK   rS   ra   rg   r   r   r   r   r   r   r    r   r    <module>r      s       K K O O**,11	// <F4.76$7N#:LS2ljHZT%n'8T)X(2V
$r   