U
    Kvfǹ                     @   s  d Z ddlmZ ddlZddlZddlZddlZddlm	Z	m
Z
mZmZm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 ddlmZmZ ddlmZmZ ejej e!Z"d	d	ggd	ggd	ggd	ggd
dZ#dUddZ$dd Z%dd Z&dd Z'dd Z(ej)j*dd Z+dd Z,dd Z-dd Z.d d! Z/d"d# Z0d$d% Z1d&d' Z2dVd(d)Z3d*d+ Z4d,d- Z5d.d/ Z6dWd1d2Z7d3d4 Z8d5d6 Z9d7d8 Z:d9d: Z;d;d< Z<d=d> Z=d?d@ Z>ej)j*dAdB Z?dCdD Z@dEdF ZAdGdH ZBdIdJ ZCdKdL ZDdMdN ZEdOdP ZFdQdR ZGdSdT ZHdS )XzM
Tests for the generic MLEModel

Author: Chad Fulton
License: Simplified-BSD
    )	MONTH_ENDN)assert_assert_allcloseassert_almost_equalassert_equalassert_raises)nile)kalman_filterkalman_smoothersarimaxvarmax)MLEModelMLEResultsWrapper)results_sarimaxresults_var_misc   approximate_diffuse)k_statesdesign
transition	selection	state_covinitializationTFc              	   C   s   t dd }d| }|rFtjdddd}tj||d}tj||d}tj||dd	d
d	d}| rt  t	d |j
dd}W 5 Q R X nd }||fS )Nd         ?   
1960-01-01MSperiodsfreqindex)r   r   r   TF)exogorderZtime_varying_regressionZmle_regressionZuse_exact_diffuseignore)disp)nparangepd
date_rangeSeriesr   SARIMAXwarningscatch_warningssimplefilterfit)r1   pandasendogr#   r"   modres r6   R/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/tsa/statespace/tests/test_mlemodel.pyget_dummy_mod/   s(       

r8   c                  C   sJ  d} d}d}t d}t | d }t t | | d | |f}t t | d d | | f}t |d }t t |d d ||f}t t || d ||f}	t t |d d ||f}
t|||||||||	|
d
}t|d | t|d | t|d	 | t|d
 | t|d | t|d |	 t|d |
 d S )Nr      r   
   r   r   	r   k_posdefobs_interceptr   obs_covstate_interceptr   r   r   r>   r   r?   r@   r   r   r   )r(   zerosr)   reshaper   r   )k_endogr   r=   r3   r>   r   r?   r@   r   r   r   r4   r6   r6   r7   !test_init_matrices_time_invariantI   sB    
     rD   c                  C   s  d} d}d}d}t d}t t ||  d || f}t t || |  d ||| f}t t |d |  d ||| f}t t ||  d || f}t t |d |  d ||| f}	t t || |  d ||| f}
t t |d |  d ||| f}t||||||||	|
|d
}t|d | t|d	 | t|d
 | t|d | t|d |	 t|d |
 t|d | d S )Nr;   r   r9   r   r:   r   r<   r>   r   r?   r@   r   r   r   )r(   rA   rB   r)   r   r   )nobsrC   r   r=   r3   r>   r   r?   r@   r   r   r   r4   r6   r6   r7   test_init_matrices_time_varyingj   s`    
        rF   c                  C   s  t dd\} }t| d dtd  d| dddd d f< t| jdddd d f d t| jd jd	 d
gg| d< t| jd d
 t| jd jd t| jd d| _t| jjd t| j| jj d| _t| jjd t| jd d| _t| jjd tt	| j
td |   | d t| j
jd t| j
jd | dgdgg t| j
jd t| j
jdg t| j
jdgg |   t| j
jd t| jjtj t| jjtj t| jjtj t| jjtj | j  | jj}t|jtj t|jtj t|jtj |  d | !d | "d | #d t| jjd t| jjd t| jjd t| jjd t|jtj t|jtj t|jtj |  d | j  | jj}t|jd t|jd t|jd d S )NFr1   r   r   r          @r   r   r   r   )r   r   r         @r   r   r   grh|?g    _Bg   mBTg     j@r   g      @(   ZknownZ
stationarye   f   g   )$r8   r   r(   r)   ssmshapeloglikelihood_burnZ	toleranceinitial_variance
isinstancer   objectZinitialize_defaultZinitialize_approximate_diffuseZinitialization_typeZapproximate_diffuse_varianceZinitialize_knownZconstantZstationary_covZinitialize_stationaryZfilter_methodr	   ZFILTER_CONVENTIONALZstability_methodZSTABILITY_FORCE_SYMMETRYZconserve_memoryZMEMORY_STORE_ALLZsmoother_outputr
   ZSMOOTHER_ALLZ_initialize_filterZ_kalman_filterZset_filter_methodZset_stability_methodZset_conserve_memoryZset_smoother_output)r4   _Zkfr6   r6   r7   test_wrapping   sr    







rW   c               	   C   s   t j} t| d dd  }tj|ddd}t 4 td |j	ddd	d
d}|j	dddd
d}W 5 Q R X t
|j|jdd td
d\}}t  td |j	ddd}W 5 Q R X t|ddgd d S )Ndatar   r   r   r   c)r$   trendr%   Zncgr   opgF)methodr'   Zoptim_hessianZoptim_complex_stepoim{Gz?)ZrtolrG   r&   T)r'   Zreturn_params   )r   Zwpi1_stationaryr(   diffr   r-   r.   r/   r0   r1   r   llfr8   r   )truer3   r4   res1res2rV   Z
res_paramsr6   r6   r7   test_fit_misc   s"    





rf   c                  C   s   t  \} }| |j d S N)r8   scoreparamsr4   r5   r6   r6   r7   test_score_misc  s    
rk   c                   C   s   t tdd  d S )Nc                   S   s   t dddS )Nr   r   r9   )r   Zfrom_formular6   r6   r6   r7   <lambda>       z#test_from_formula.<locals>.<lambda>)r   NotImplementedErrorr6   r6   r6   r7   test_from_formula  s    ro   c               	   C   s  t jddgdd} dd }dd }tjd	 }tj||d
 |d ||d
 |d f }| j|ddd}t|| | j|ddd}t||dd | j|dddd}t||dd | j|dddd}t|| | j|dddd}	t|	|dd | j|ddddd}
t|
|dd dd }dd }| |}tttj||d
 ||d f tj||d
 |d ||d
 |d f }| j|ddd}t|| | j|ddd}t||dd | j|dddd}t||dd | j|dddd}t|| | j|dddd}	t|	|dd | j|ddddd}
t|
|dd tjd }dd }||d
 |d }t	
 @ t	d t| |d |dd t| |d |dd W 5 Q R X d S )Nr         ?r   r   r   r$   c                 S   s,   d| d d|  |  d  |d| d    S )N      r   r   r6   phisigma2r6   r6   r7   partial_phi)  s    z,test_score_analytic_ar1.<locals>.partial_phic                 S   s   dd| |  d  |d  S )Nrs   r         ?r6   rt   r6   r6   r7   partial_sigma2,  s    z/test_score_analytic_ar1.<locals>.partial_sigma2)        r   r   T)transformedapprox_complex_stepFh㈵>Zatol)r{   r|   approx_centeredZharvey)r{   r]   r|   )r{   r]   r|   r   c                 S   s   dd| d  d  S )Ng      r   r   g      ?r6   )ru   r6   r6   r7   partial_transform_phiU  s    z6test_score_analytic_ar1.<locals>.partial_transform_phic                 S   s   d|  S )NrI   r6   )rv   r6   r6   r7   partial_transform_sigma2X  s    z9test_score_analytic_ar1.<locals>.partial_transform_sigma2)rp   r   c                 S   sd   t d}| d  d | d d d  |d< dd|d    |d< |d< ||  d |d	  |d
< |S )N)r   r   r   r   r   r   r&   r   r   )r   r   rx   r9   rK   )r(   rA   )ru   rv   hessianr6   r6   r7   r   ~  s
    
"z(test_score_analytic_ar1.<locals>.hessianr%   r   皙?)r   r-   r(   r_rh   r   untransform_paramsdotZdiagr.   r/   r0   Z_hessian_complex_stepZ_hessian_finite_difference)r4   rw   ry   ri   Zanalytic_scoreZ	approx_csZ	approx_fdZapprox_fd_centeredZ	harvey_csZ	harvey_fdZharvey_fd_centeredr   r   Zuparamsr   Zanalytic_hessianr6   r6   r7   test_score_analytic_ar1#  s    


















  r   c               
   C   s  t  \} }t n td | j|jddd}t|jd d | j|jddd}t|jd t|jd d | j|jdd	d}t|jd	 t|jd d
 | j|jddd}t|jd t|jd d | j|jddd}t|jd t|jd d | j|jddd}t|jd t|jd d | j|jddd}t|jd t|jd d t	
t | j|jddd W 5 Q R X W 5 Q R X d S )Nr%   r&   none)r'   cov_typedescriptionz!Covariance matrix not calculated.approxzLCovariance matrix calculated using numerical (complex-step) differentiation.r^   zmCovariance matrix calculated using the observed information matrix (complex-step) described in Harvey (1989).r\   zQCovariance matrix calculated using the outer product of gradients (complex-step).ZrobustzQuasi-maximum likelihood covariance matrix used for robustness to some misspecifications; calculated using the observed information matrix (complex-step) described in Harvey (1989).Z
robust_oimZrobust_approxzQuasi-maximum likelihood covariance matrix used for robustness to some misspecifications; calculated using numerical (complex-step) differentiation.Zinvalid_cov_type)r8   r.   r/   r0   r1   ri   r   cov_kwdsr   pytestraisesrn   rj   r6   r6   r7   test_cov_params  s\    

r   c                  C   s   t ddgft} t| ddgddg t| ddgddg | jg dd | jg dd | jg dd | jg dd t	dd\} }t| ddgddg t| ddgddg | jddgd	d}t|j
ddg | jddgdd}t|j
ddg d S )
Nr   r   r9   F)r{   rG      	   T)r   kwargsr   Ztransform_paramsr   filterupdateloglikeZ
loglikeobsr8   ri   )r4   rV   r5   r6   r6   r7   test_transform  s    r   c                  C   s   t ddg} t| ft}|jg dd}tt|tjd |g }tt|t	d t|j
d |jg dd}tt|t	d t|j
d d S )Nr   rI   T)Z
return_ssmr\   r^   )r   )r(   arrayr   r   r   r   rT   r	   ZFilterResultsr   r   )r3   r4   r5   r6   r6   r7   test_filter  s    
r   c                      s^   t ddgft tt fdd t jg  dg _dg _t jdg t jdg d S )Nr   r   c                      s    j S rg   )start_paramsr6   r4   r6   r7   rl     rm   ztest_params.<locals>.<lambda>a)	r   r   r   rn   r   Zparam_namesZ_start_paramsZ_param_namesr   r6   r6   r   r7   test_params  s    r   c                 C   s`   t | d\}}t|jdd  |jdd    t|jdd  t|jd  t	|j
d d S )Nr2   r   r   )r8   r   Zfittedvaluesr3   ZsqueezeZresidr(   rA   rE   r   rR   )r2   r4   r5   r6   r6   r7   check_results  s    " r   c                 C   s   t dd t dd d S )NFr   T)r   r   r6   r6   r7   test_results  s    
r   c                  C   s   t jdddd} t jddg| d}t|ft}|g }| }t|j|j	f t
| j| t
|jdd|  tddgft}|g }tt|jd	d d S )
N
1980-01-01
1981-01-01YSstartendr    r   r   r!   )dynamicstring)r*   r+   r,   r   r   r   predictr   rQ   rE   r   get_predictionpredicted_meanr   KeyError)datesr3   r4   r5   r   r6   r6   r7   test_predict  s    

r   c                  C   s   t ddgft} | g }|jdd}t|tdd  t|jddj| t	j
dddd}t t	jddg|d	ft} | g }t|jddtdd  t|jd
dtdd  t|jddjtdd  d S )Nr   r   r;   )Zsteps)r;   r   r   r   r!   z
1960-12-01)r   r   r   forecastr   r(   ZonesZget_forecastr   r*   r+   r,   )r4   r5   r   r"   r6   r6   r7   test_forecast7  s    

r   c               	   C   s   t jdddd} t jddddd	g| d
}t|ft}|g }t| }tt	
d|d k	d tt	
d|d k	d tt	
d|d k	d t J td tj|jjd d < |  d|j_|  d|j_|  W 5 Q R X d S )Nr   z
1984-01-01r   r   r   r   r9   r   r`   r!   zSample:\s+01-01-1980Tz\s+- 01-01-1984zModel:\s+MLEModelr%   r   )r*   r+   r,   r   r   r   strsummaryr   researchr.   r/   r0   r(   nanfilter_results_standardized_forecasts_error)r   r3   r4   r5   txtr6   r6   r7   test_summaryI  s     


r   r   c                 K   s   t | f|}t|jjd t|jjd d t|jj||f t|jjjd t|jjjd d t|jjj||f t|jjj|jkd |S )Nr   C_CONTIGUOUSTF_CONTIGUOUS)r   r   r3   ndimflagsrQ   rP   base)r3   rE   rC   r   r4   r6   r6   r7   check_endogd  s    r   c                  C   s(  t ttddd t ttddd t ttddd tdgft} | g }t|jjdgg tdgft} | g }t|jjdgg tdgft} | g }t|jjdgg tdgft} t t| jg  ddg}t|ft} | g  dgdgg}t|ft} | g  d}t|ft} | g  d S )Nr   )r3   r   r   Tr   rI   )r   rI   )	r   
ValueErrorr   r   r   r   r   r3   r   )r4   r5   r3   r6   r6   r7   test_basic_endogx  s.    




r   c                  C   s  t ddg} t| ft}t|jj|jjk	d t|jj| k	d t|jjj| k	d d| d< t|jt j	d 
dd t|jj|  t d} ttt| ft t ddg} t| jd t| jd d t| jd	 d t| jd
 t| ft}|g  t ddg
dd} t| jd t| jd d t| jd t| ft}|g  t ddg
dd} t| jd t| jd d t| jd ttt| ft t ddg
dd } t| jd t| jd	 d t| jd t| ft}|g  t ddg
dd } t| jd t| jd	 d t| jd ttt| ft t ddg
ddd} ttt| ft ddgdggddgddggdggdggdggdd}t ddgddgg} t| fddi|}|g  d S )Nr   rI   Tr   r   r   r   r   r   r   )r   )r   r   rz   r   r   r   r?   r   r   r   r   rJ         @rC   )r(   r   r   r   r   r3   r   rX   
orig_endogr   rB   r   	TypeErrorr   r   r   rQ   r   r   Z	transpose)r3   r4   kwargs2r6   r6   r7   test_numpy_endog  sh    



 
   r   c                  C   s  t ddg} td t jdddd}t jddg|d} t| ft}|g  t jd	d
g|d} tt	t| ft t jddg|d} t| ft}|g  t j
d	ddgi|d} t| ft}|g  t j
ddgddgd|d} tt	t| ft t j
d	ddgi|d} t| ft}t|jj|jjk	d t|jj| k	d t|jjjj| k	d d| jd< t|jtjd dd t|jj|  ddgdggddgddggdggdggdggdd}t j
ddgddgd|d} t| fddi|}|g  d S )Nr   rI   alwaysr   r   r   r   r!   r   brJ   r   )r   r   Tr   r   r   r   rz   r   r   r   rC   )r*   r,   r.   r0   r+   r   r   r   r   r   	DataFramer   r3   r   rX   r   valuesilocr(   r   rB   r   )r3   r   r4   r   r6   r6   r7   test_pandas_endog  sF    




 
   r   c               	   C   s$  t  \} }|jjj}tjj|d|j_|jd d}|jdd}t|| t	t
|jdd |jd d}|jdd}t|| tt |jd dd W 5 Q R X tt
 |jdd W 5 Q R X |jd d}|jdd}t|| tt
 |jdd W 5 Q R X |jd dd	d
 |jdd d S )N)sizer]   
jarqueberainvalidbreakvar)r]   alternativeljungboxdF)r]   r   Zuse_fZ	boxpierce)r8   r   r   rQ   r(   randomnormaltest_normalityr   r   rn   test_heteroskedasticityr   r   r   test_serial_correlation)r4   r5   rQ   actualZdesiredr6   r6   r7   test_diagnostics:  s,    




r   c                  C   s~   ddl m}  tj j}tjdddd|_| |d dd	|jjd
}|	 }|j
dddddd d df }t|ddgdd d S )Nr   )r-   
1871-01-01
1970-01-01r   r    volumerY   n)r3   r$   r[   r    r   r;   T)r]   lagsZ	df_adjustr&   gZd;,@g<,?MbP?r~   )Z"statsmodels.tsa.statespace.sarimaxr-   r   rX   load_pandasr*   r+   r"   r    r1   r   r   )r-   niledatar4   r5   r   r6   r6   r7   )test_small_sample_serial_correlation_test_  s(        r   c                  C   s   t j j} tjdddd| _t| d ddddd	}d|jd
< t	d|jd< d|jd< d|jd< t	d|jd< |
g }|jddddd d df }t|ddgdd |jdddd df }t|ddgdd d S ) Nr   r   r   r   r   r   r     4&kCr   r   rS   rR   rH   gN@a3#@r?   r   r   r   r   r   r   r   r   gke@r   r   r   r   r;   r]   r   r   r&   gCl;*@g-?r   r~   r   r   r   gfW?gW?r}   )r   rX   r   r*   r+   r"   r   rP   r(   expr   r   r   r   )r   r4   r5   r   r6   r6   r7   test_diagnostics_nile_eviewst  s&      



r   c                  C   s   t j j} tjdddd| _t| d ddddd	}d|jd
< d|jd< d|jd< d|jd< d|jd< |g }|j	dddd }t
|dgdd |jddd }|d |d |d g}t
|dddgdd |jd dd! }t
|d"gdd d S )#Nr   r   r   r   r   r   r   r   r   rH   g    }@r   r   r   gfffff@r   r   r   r   )r   r   r&   gGz!@r_   r~   r   r   r   r   r9   g?gQgQ@r   r   gQ?)r   rX   r   r*   r+   r"   r   rP   r   r   r   r   r   )r   r4   r5   r   Znormr6   r6   r7   #test_diagnostics_nile_durbinkoopman  s,      





r   c                  C   s   t  \} }| }|  d S rg   )r8   r   Zsummary_frame)r4   r5   r   r6   r6   r7   test_prediction_results  s    
r   c                  C   s  t jtjdddgt jddddd} t| d  | d	< t| d  | d
< t| d  | d< | jddd	d
dgf }tj	}t
j|d	 dddd}||d }t|j|d  |jdddd|j  }|jddddt|j |j  }|jddddtt|j |j  }t||d  t||d  t||d  tj}|jd }|jt|j }t||d  t||d  |dd }|dt|j }t||d  t||d  tj}tj|ddddd }||d }t|j|d  |jdddd!|j  }|jdddd"t|j |j  }|jdddd!tt|j |j  }t||d  t||d  t||d  tj}|jd! }|jd"t|j  }t||d  t||d  |dd! }|dd"t|j  }t||d  t||d  d S )#NinvincZconsumpr   z
1982-10-01ZQSr   )columnsr"   Zdln_invZdln_incZdln_consumpz
1960-04-01z
1978-10-01rq   rZ   r   )r$   r[   rR   ri   r   aicZ	lutkepohlr   r   bicr   hqicZ	estat_aicZ	estat_bicr   r   Zunstructured)r$   r[   Zerror_cov_typerR         )r*   r   r   Zlutkepohl_datar+   r(   logra   locZlutkepohl_ar1_lustatsr   r-   r   r   rb   Zinfo_criteriaZnobs_effectiveZlutkepohl_ar1r   r   Zlutkepohl_var1_lustatsr   ZVARMAXZlutkepohl_var1)Zdtar3   rc   r4   r5   r   r   r   r6   r6   r7   #test_lutkepohl_information_criteria  s     


 
r   c               	   C   sv  t j jd } tjdddd| _| jd d }| jdd }tj|dd	d
}|	dg}t
t|j|ddid t
t|j|ddid t
t|j|ddid t
t|j|di id t
t|j|di id t
t|j|di id | jdd }tj| jd t|dd|_d}tjt|d || W 5 Q R X tjt|d || W 5 Q R X d}tjt|d |j||d W 5 Q R X d}tjt|d |j||d W 5 Q R X | jdd }d}tjt|d || W 5 Q R X tjt|d || W 5 Q R X d}tjt|d |j||d W 5 Q R X d}tjt|d |j||d W 5 Q R X t| jd d j}t| jd d jdd  }	tj|d|d	d}
|
	ddg}t| d d jdd  }d}tjt|d || W 5 Q R X tjt|d || W 5 Q R X d}tjt|d |j|	|d W 5 Q R X d}tjt|d |j|	|d W 5 Q R X d S )Nr   r   r   r   r      rL   rq   T)r$   concentrate_scalerp   r   r   )Z
fit_kwargsr   r   r   r   r   r    zeGiven `endog` does not have an index that extends the index of the model. Expected index frequency is)matchzdGiven `exog` does not have an index that extends the index of the model. Expected index frequency is)r#   z.The indices for endog and exog are not aligned   )   zJGiven `endog` does not have an index that extends the index of the model.$zIGiven `exog` does not have an index that extends the index of the model.$r$   r#   r   g?)r   rX   r   r*   r+   r"   r   r   r-   smoothr   r   appendextendapplylenr   r   r,   r   )r   Zendog1Zendog2r4   rd   Z
wrong_freqmessageZnot_ctsZendog3Zendog4Zmod2re   r6   r6   r7    test_append_extend_apply_invalid  s    


  
r  c                  C   sT   t jdddgddddgdd} | ddg}|jddddd	gd
}t|jtj d S )Nr   rq   r   Tr  r   r`   r9   r   )r   r   r#   )r   r-   r   r   r   Zdtyper(   Zfloat64)r4   r5   pr6   r6   r7   test_integer_paramsp  s    r  c                 C   s  t j||g }t j||g }t j||g }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| t| jj| t| jj| d S rg   )r*   Z
MultiIndexZfrom_productZ	swaplevelr   Z	predictedr"   equalsr   Zpredicted_covfilteredZfiltered_covZsmoothedZsmoothed_cov)statesixpredicted_ixcolsZpredicted_cov_ixZfiltered_cov_ixZsmoothed_cov_ixr6   r6   r7   check_states_indexy  s"    r  c                  C   s   d} t jd| dd}t jt| |d}tj|dd}|dd	d
g}t j|d | d dd}t ddg}t	|j
||| d S )Nr;   2000Mr  r!   r   r   r   rr   rp   r   r   r   r   state.0state.1)r*   Zperiod_ranger,   r(   rA   r   r-   r  Indexr  r  rE   r  r3   r4   r5   r  r  r6   r6   r7   test_states_index_periodindex  s    r  c                  C   s   d} t jd| td}t jt| |d}tj|dd}|ddd	g}t j|d
 | d td}t 	ddg}t
|j||| d S )Nr;   r  r  r!   r  rr   rp   r   r   r   r   r  r  )r*   r+   r   r,   r(   rA   r   r-   r  r  r  r  r  r6   r6   r7   test_states_index_dateindex  s    r  c                  C   sx   d} t td}t jt| |d}tj|dd}|dddg}t td}t d	d
g}t	|j
||| d S )Nr;   r!   r  rr   rp   r   r      r  r  )r*   r  r(   r)   r,   rA   r   r-   r  r  r  r  r6   r6   r7   test_states_index_int64index  s    r   c                  C   s   d} t d}t jt| |d}tj|dd}|dddg}t d}t d	d
g}t	|j
||| t ddd}t jt| |d}tj|dd}|dddg}t ddd}t d	d
g}t	|j
||| d S )Nr;   r!   r  rr   rp   r   r   r  r  r  r       r9   #   )r*   Z
RangeIndexr,   r(   rA   r   r-   r  r  r  r  r  r6   r6   r7   test_states_index_rangeindex  s    

r#  c               	   C   s<   dddg} t |  tt t j| dd W 5 Q R X d S )Nr   r   T)Zinvalid_kwarg)r   r-   r   ZwarnsFutureWarning)r3   r6   r6   r7   test_invalid_kwargs  s    

r%  )TF)F)r   r   )I__doc__Zstatsmodels.compat.pandasr   osr   r.   Znumpyr(   Znumpy.testingr   r   r   r   r   r2   r*   r   Zstatsmodels.datasetsr   Zstatsmodels.tsa.statespacer	   r
   r   r   Z#statsmodels.tsa.statespace.mlemodelr   r   Z(statsmodels.tsa.statespace.tests.resultsr   r   pathdirnameabspath__file__current_pathr   r8   rD   rF   rW   rf   markZsmokerk   ro   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#  r%  r6   r6   r6   r7   <module>   sr      
!(k
l<

(]=%$
	]R	