U
    md"o                     @   s  d Z ddlmZmZ ddlZddl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 ddlmZ ddlmZ dd	lmZmZmZmZ ddlm  mZ dd
lmZm Z  ej!j"Z#e#dd d Z$e#d Z%d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 Z0dd  Z1d!d" Z2d#d$ Z3G d%d& d&Z4d'd( Z5G d)d* d*Z6G d+d, d,Z7G d-d. d.Z8d/d0 Z9dS )1z/tests for some time series analysis functions

    )assert_frame_equalassert_series_equalN)assert_array_almost_equalassert_array_equalassert_equalassert_raises)
regression)	macrodata)	stattools)savedrvs)mlacfmlccfmlpacfmlywar)vecvechi     @@c                  C   sL   t jtdddd} ttj | d t jtdddd} ttj | d d S )NF   )adjustedZfftZnlags   )	r
   Zacfx100r   r   Zacf100ravelx1000Zacf1000)Zacf_x r   ]/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/tsa/tests/test_tsa_tools.pytest_acf"   s      r   c                  C   s   t jtdd  td d ddd d } ttj d d d d d | d t jtdd  td d ddd d } ttj d d d d d | d d S )N   F)r      r   )	r
   Zccfr   r   r   Zccf100r   r   Zccf1000)Zccf_xr   r   r   test_ccf+   s    ($(r    c                  C   sH   t jtddd} ttj | d t jtddd} ttj | d d S )Nr   mlemethod      )	r
   Zpacf_ywr   r   r   pacf100r   r   pacf1000)Zpacfywr   r   r   test_pacf_yw2   s    r(   c                  C   s@   t td} ttj | d t td} ttj | d d S )Nr   r   )	r
   Zpacf_olsr   r   r   r&   r   r   r'   )Zpacfolsr   r   r   test_pacf_ols:   s    r)   c                   C   sT   t tjdd  tjtdddd  d t tjdd  tjtdddd  d d S )Nr$   
   r!   r"   r   r   r   )r   r   Z	arcoef100r   yule_walkerr   Z
arcoef1000r   r   r   r   r   test_ywcoefB   s    r,   c                  C   s0   t dddddddddddg} t| d d S )Nr$   r   r%   r      )nparrayr   r+   )xr   r   r   test_yule_walker_interO   s     r3   c              	   C   s\   t ddD ]L}ttj||d  d }t|}tt|t	|t
|s
tq
d S )Nr%   r*   r$   )rangetoolsZunvechr0   randomrandnZduplication_matrixarray_equalr   dotr   AssertionError)reset_randomstatekmZDkr   r   r   test_duplication_matrixW   s    
r>   c              	   C   sL   t ddD ]<}tj||}t|}tt|t|t	|s
t
q
d S )Nr%   r*   )r4   r0   r6   r7   r5   Zelimination_matrixr8   r   r9   r   r:   )r;   r<   r=   ZLkr   r   r   test_elimination_matrix^   s    
r?   c                 C   s@   t jdd}tdd}t t|jt |t|s<t	d S )Nr   r/   )
r0   r6   r7   r5   Zcommutation_matrixr8   r   Tr9   r:   )r;   r=   Kr   r   r   test_commutation_matrixe   s    rB   c                  C   s6   t ddgddgg} t t| ddddgs2td S )Nr$   r%   r/   r   )r0   r1   r8   r   r:   Zarrr   r   r   test_veck   s    rD   c               	   C   sF   t dddgdddgddd	gg} t t| dddddd	gsBtd S )
Nr$   r%   r/   r            r   	   )r0   r1   r8   r   r:   rC   r   r   r   	test_vechp   s    "rI   c                  C   s8   t dddddddddg	} t t|  r4td S )	Ng     @g      Yg      $      ?              $@g      Y@r   )r0   r1   isnanr5   Z_ar_transparamsanyr:   rC   r   r   r   test_ar_transparamsu   s    rO   c                   @   s   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1S )2
TestLagmatc                 C   s   t  }|jddddg | _t| jj}|d| _|d| _t	j
d t	j
d| _dd t| jj| jjD }|| j_| jj| _d S )	Nyearquarterrealgdpcpi90  d   c                 S   s,   g | ]$\}}t t|d  t t| qS z-Qstrint.0yrZqur   r   r   
<listcomp>   s   z*TestLagmat.setup_class.<locals>.<listcomp>)r	   load_pandasdatamacro_dflistcolumnsindexrealgdp_loccpi_locr0   r6   seedr7   random_dataziprQ   rR   rT   series)clsr`   colsrd   r   r   r   setup_class}   s    zTestLagmat.setup_classc                 C   sx   | j j}|t}tj|d d df ddd}t|dd d df ||dd df f}t	|| j
d}t|| d S Nr%   r/   Bothtrimr   ra   valuesastypefloatr
   lagmatr0   column_stackr5   add_lagre   r   selfr`   nddatarv   resultslag_datar   r   r   test_add_lag_insert   s    
,zTestLagmat.test_add_lag_insertc                 C   sn   | j j}|t}tj|d d df ddd}t|dd d d f |f}tj	|| j
ddd}t|| d S Nr%   r/   ro   rp   Finsertrr   ry   r   r   r   test_add_lag_noinsert   s    
z TestLagmat.test_add_lag_noinsertc                 C   s   | j j}|t}tj|d d df ddd}t|dd d d f |f}tj	|| j
ddd}t|| tj	|| j
ddd}t|| d S Nr   r/   ro   rp   Fr   T)ra   rs   rt   ru   r
   rv   r0   rw   r5   rx   rf   r   rz   r`   r{   rv   r|   r}   Z	lag_data2r   r   r   test_add_lag_noinsert_atend   s    

z&TestLagmat.test_add_lag_noinsert_atendc                 C   sv   | j j}|t}tj|d d df ddd}t|dd d df ||dd df f}t	|dd}t
|| d S rn   ra   rs   rt   ru   r
   rv   r0   rw   r5   rx   r   ry   r   r   r   test_add_lag_ndarray   s    
,zTestLagmat.test_add_lag_ndarrayc                 C   sl   | j j}|t}tj|d d df ddd}t|dd d d f |f}tj	|dddd}t
|| d S r   r   ry   r   r   r   test_add_lag_noinsert_ndarray   s    
z(TestLagmat.test_add_lag_noinsert_ndarrayc                 C   s   | j j}|t}tj|d d df ddd}t|dd d d f |f}tj	|dddd}t
|| tj	|dddd}t
|| d S r   r   r   r   r   r   "test_add_lag_noinsertatend_ndarray   s    

z-TestLagmat.test_add_lag_noinsertatend_ndarrayc           	      C   s   | j }|jd }tj|dddd\}}t|d df}tdD ]}||||| |f< q@|d d d df }|d d dd f }t|| t|| d S )Nr   r/   noneseprq   originalr   r$   )rh   shaper
   rv   r0   zerosr4   r   )	rz   r`   nrv   ZleadsexpectediZexpected_leadsZexpected_lagsr   r   r   test_sep_return   s    

zTestLagmat.test_sep_returnc                 C   s   | j }tj|ddd}t|dd  |f}tj|ddd}t|| |d d d f }tj|ddd}t|dd  |f}tj|ddd}t|| d S )Nr/   ro   rp   Tlagsr   )rh   r
   rv   r0   rw   r5   rx   r   )rz   r`   rv   r|   r}   r   r   r   test_add_lag1d   s    
zTestLagmat.test_add_lag1dc                 C   sR   | j }tj|ddd}tj|dddd}t|| tj|dddd}t|| d S )Nr/   ro   rp   T)r   dropr   F)rh   r
   rv   r5   rx   r   )rz   r`   rv   r}   r   r   r   test_add_lag1d_drop   s    
zTestLagmat.test_add_lag1d_dropc                 C   s   t jddtfgd}| j}||d< tj|dddd}tj|ddd	d
}t|| tj|dddd
}t|| tj|dd	d
}t|| d S )NrV   variableZdtyper/   ro   inr   r   Tr   F	r0   r   ru   rh   r
   rv   r5   rx   r   rz   r`   r{   rv   r}   r   r   r   test_add_lag1d_struct   s    

z TestLagmat.test_add_lag1d_structc                 C   sP   t jddtfgd}| j}||d< tj|ddd}tj|ddd}t|| d S )	NrV   r   r   r/   ro   rp   T)r   r   r   r   r   r   r   test_add_lag_1d_drop_struct   s    z&TestLagmat.test_add_lag_1d_drop_structc                 C   s|   | j j}|t}tj|d d df ddd}t|dd d df ||dd df f}tj	|| j
ddd}t|| d S )Nr%   r/   ro   rp   r   T)r   rr   ry   r   r   r   test_add_lag_drop_insert   s    
,z#TestLagmat.test_add_lag_drop_insertc              	   C   sx   | j j}|t}tj|d d df ddd}t|dd tdddgf |f}t	j
|| jdddd	}t|| d S )
Nr%   r/   ro   rp   r   r$   FT)r   r   )ra   rs   rt   ru   r
   rv   r0   rw   r1   r5   rx   re   r   ry   r   r   r   test_add_lag_drop_noinsert  s    
&    z%TestLagmat.test_add_lag_drop_noinsertc                 C   s   | j }tj|dddd}tj|jdddd}t|| tj|dddd}tj|jdddd}t|| tj|dddd\}}tj|jdddd\}}t|| t|| d S )	Nr/   bothr   r   r   exforwardr   )ra   r
   rv   rs   r   )rz   r`   r   Zboth_npr   Zlags_npleadZlead_npr   r   r   test_dataframe_without_pandas  s     

   

z(TestLagmat.test_dataframe_without_pandasc                    sl  | j }t|j}|jd }t|d df}|j|d |d df< tddD ]F  fdd|D }|| |j| |  d  d d  f< qL|j	}|d | }t
j|||d}|jdd  }tj| j dd	d
dd}t|| tj| j dd	ddd}	t|	|jd d dd f  tj| j dd	ddd\}	}
t|	|jd d dd f  t|
|jd d d df  d S )Nr   r/      r   r$   c                    s   g | ]}|d  t   qS .L.rY   r\   collagr   r   r^   *  s     z2TestLagmat.test_dataframe_both.<locals>.<listcomp>rc   rd   r   r   Trq   r   
use_pandasr   r   )ra   rb   rc   r   r0   r   rs   r4   extendrd   pd	DataFrameilocr
   rv   r   rz   r`   rc   r   rs   Znew_colsrd   r   r   r   r   r   r   r   test_dataframe_both#  sL    


(    
        
zTestLagmat.test_dataframe_bothc                 C   s.   t ttj| jddd t ttj| jjd d S )Ni,  Tr   r   
ValueErrorr
   rv   ra   rs   rz   r   r   r   test_too_few_observations@  s        z$TestLagmat.test_too_few_observationsc                 C   s4   t ttj| jdddd t ttj| jjddd d S )Nr/   unknownTrq   r   rp   r   r   r   r   r   test_unknown_trimF  s    zTestLagmat.test_unknown_trimc                    s^  | j }t|j}|jd }t|d df}|j|d |d df< tddD ]F  fdd|D }|| |j| |  d  d d  f< qL|j	}|d | }t
j|||d}tj| j dd	d
dd}t|| tj| j dd	ddd}	t|	|jd d dd f  tj| j dd	ddd\}	}
t|	|jd d dd f  t|
|jd d d df  d S )Nr   r/   r   r   r$   c                    s   g | ]}|d  t   qS r   r   r   r   r   r   r^   ^  s     z5TestLagmat.test_dataframe_forward.<locals>.<listcomp>r   r   r   Tr   r   r   )ra   rb   rc   r   r0   r   rs   r4   r   rd   r   r   r
   rv   r   r   r   r   r   r   test_dataframe_forwardW  sJ    


(    
        
z!TestLagmat.test_dataframe_forwardc                 C   sd   t ttj| jdddd t ttj| jdddd t ttj| jdddd t ttj| jdddd d S )Nr/   r   Tr   Zbackward)r   r   r
   rv   ra   rj   r   r   r   r   test_pandas_errorsr  s@    zTestLagmat.test_pandas_errorsc                 C   s  t j| jjddddgd}| j|d< tddD ] }| j||dtt| < q.|d	}t	j
| jd
dddd}t|| t	j
| jd
dddd}t||jd d dd f  t	j
| jd
dddd\}}t||jd d d df  t||jd d dd f  d S )NrT   cpi.L.1cpi.L.2cpi.L.3rd   rc   r$   r   cpi.L.rK   r/   r   r   Tr   r   r   )r   r   rj   rd   r4   shiftrY   rZ   Zfillnar
   rv   r   r   rz   r   r   r   r   r   r   r   r   test_series_forward  sB    


    
        
zTestLagmat.test_series_forwardc                 C   s  t j| jjddddgd}| j|d< tddD ] }| j||dtt| < q.|jd	d  }t	j
| jd	d
ddd}t|| t	j
| jd	d
ddd}t||jd d dd f  t	j
| jd	d
ddd\}}t||jd d d df  t||jd d dd f  d S )NrT   r   r   r   r   r$   r   r   r/   r   r   Tr   r   r   )r   r   rj   rd   r4   r   rY   rZ   r   r
   rv   r   r   r   r   r   test_series_both  sB    

    
        
zTestLagmat.test_series_bothc                 C   s^   t tdd}t d|_tj|ddd}|j	dks@t
t|jddd	d
gksZt
d S )N   r   r%   r%   Tmaxlagr   )rV   r   z0.L.1z1.L.1z0.L.2z1.L.2)r   r   r0   arangereshapeZ
RangeIndexrc   r
   rv   r   r:   rb   )rz   dfresultr   r   r   test_range_index_columns  s
    z#TestLagmat.test_range_index_columnsc              	   C   sN   t tdd}ddg|_tjtdd t	j
|ddd	 W 5 Q R X d S )
Nr   r   r   0zColumns names must bematchr%   Tr   )r   r   r0   r   r   rc   pytestraisesr   r
   rv   rz   r   r   r   r   test_duplicate_column_names  s    
z&TestLagmat.test_duplicate_column_namesN)__name__
__module____qualname__classmethodrm   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   rP   |   s2   

	
"rP   c               
   C   sx   ddl m}  ddddddd	d
ddg
}ddddddddddg
}t||D ],\}}tt|| tt| || qFd S )Nr   )	to_offsetAzAS-MARQZQSzQS-APRWzW-MONBDHr$   r   4   rE   rG      )Zpandas.tseries.frequenciesr   ri   r   r5   Zfreq_to_period)r   Zfreqsr   r   jr   r   r   test_freq_to_period  s    r   c                   @   s@   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dS )TestDetrendc                 C   s$   t d| _t ddd| _d S )Ng      @rL   rE   r%   )r0   r   data_1dr   data_2drk   r   r   r   rm     s    zTestDetrend.setup_classc                 C   sB   | j }ttj|ddt| ttj|dddddddg d S )Nr$   orderr   r-   r   r%   )r   r   r5   detrendr0   
zeros_likerz   r`   r   r   r   test_detrend_1d  s      zTestDetrend.test_detrend_1dc                 C   s   | j }ttj|dddt| ttj|dddddgddgddgddgddgg ttj|ddddd	gdd	gdd	gdd	gdd	gg d S )
Nr$   r   r   Zaxisr   r-   r%   r               ?)r   r   r5   r   r0   r   r   r   r   r   test_detrend_2d  s       zTestDetrend.test_detrend_2dc              	   C   s   t j| jdd}tj|dd}t|jt| t	|t j|jdd tj|dd}t|jt dddddg t	|t j|jdd d S )	None)namer$   r   r   r-   r   r%   )
r   Seriesr   r5   r   r   rs   r0   r   r   )rz   r`   	detrendedr   r   r   test_detrend_series  s     zTestDetrend.test_detrend_seriesc                 C   s
  ddg}dd dD }t j| j||d}tj|ddd	}t|jt| t	|t j|j||d tj|ddd	}t|jd
d
gddgddgddgddgg t	|t j|j||d tj|ddd	}t|jddgddgddgddgddgg t	|t j|j||d d S )Nr   twoc                 S   s   g | ]}|qS r   r   )r\   cr   r   r   r^     s     z6TestDetrend.test_detrend_dataframe.<locals>.<listcomp>Zabcder   r$   r   r   r   r-   r%   r   r   r   )
r   r   r   r5   r   r   rs   r0   r   r   )rz   rc   rd   r`   r   r   r   r   test_detrend_dataframe  s6       z"TestDetrend.test_detrend_dataframec                 C   s   t ttjtd d S )N)r/   r/   r/   )r   NotImplementedErrorr5   r   r0   onesr   r   r   r   test_detrend_dim_too_large%  s    z&TestDetrend.test_detrend_dim_too_largeN)
r   r   r   r   rm   r   r   r   r   r  r   r   r   r   r     s   
	r   c                   @   sP   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd ZdS )TestAddTrendc                 C   sd   d| _ tt| j | _ttt| j d d d f d| _t| j | _td| j d | _	d S )Nr   r%   rJ   r$   )
r   r0   r   ru   arr_1dZtilearr_2dr  r   tr   r   r   r   rm   *  s
    &zTestAddTrend.setup_classc                 C   s   t | j}t|}t |}| j|d< t|| tj|dd}t |}|dd| j t|| t | j}tj|dd}t |}| j|d< | j	|d< t|| d S )NconstTprependr   cttrendr  )
r   r   r  r5   	add_trendr   r   r   r   r  )rz   sappendedr   	prependedr   r   r   test_series2  s    








zTestAddTrend.test_seriesc                 C   s   t | j}t|}| }| j|d< t|| tj|dd}| }|dd| j t|| t | j}tj|dd}| }| j	|d< t|| t | j}tj|dd}| }| j|d< | j	|d< | j	d	 |d
< t|| d S )Nr  Tr  r   r  r  r  cttr%   Ztrend_squared)
r   r   r  r5   r  copyr   r   r   r  )rz   r   r  r   r  r   r   r   test_dataframeE  s*    







zTestAddTrend.test_dataframec                 C   s   t ttj| jddd t ttj| jddd t| j}t ttj|ddd t ttj|ddd tj| jdd}t|| jd d d f  tj| jddd}t	| j| j
fj}t|| tj| jddd}t	| j| jfj}t|| tj| jddd}t	| j| j| j
fj}t|| d S )	Nr   raise)r2   r  has_constantr
  r  skip)r  r  add)r   r   r5   r  r   r   r   r   r0   vstackr  r@   )rz   r   ZskippedZskipped_constr   addedr   r   r   test_duplicate_const_  sX              

z!TestAddTrend.test_duplicate_constc                 C   s6   t j| jddgd}tj|dd tj|ddd d S )Nr  r  )rc   r
  r  Tr  r	  )r   r   r  r5   r  r   r   r   r   test_dataframe_duplicate  s    z%TestAddTrend.test_dataframe_duplicatec                 C   s  t | j| j| j| jd fj}tt| j|d d d df  ttj| jdd|d d ddgf  ttj| jdd|d d d df  ttj| jdd| t 	| jd d d f | jd d d f | jd d d f d | j
f}ttj| j
dd	|d d ddd
gf  ttj| j
ddd|d d ddd
gf  ttj| j
ddd|d d dddd
gf  ttj| j
ddd| d S )Nr%   r  r  r   r
  r/   r  Tr  r   r  r$   )r0   r  r  r   r  r@   r   r5   r  Zhstackr  )rz   baser   r   r   
test_array  s8     "&&  zTestAddTrend.test_arrayc                 C   s   t ttj| jdd d S )Nr   )r2   r  )r   r   r5   r  r  r   r   r   r   test_unknown_trend  s       zTestAddTrend.test_unknown_trendc                 C   s`   t t| jd| j t| jd| jk	s.tt t| jd| j t| jd| jk	s\td S )Nr   )r   r5   r  r  r:   r  r   r   r   r   test_trend_n  s    zTestAddTrend.test_trend_nN)r   r   r   r   rm   r  r  r  r  r  r   r!  r   r   r   r   r  )  s   
(r  c                   @   sF   e Zd Zedd ZedddZdd Zdd	 Zd
d Z	dd Z
dS )TestLagmat2DSc                 C   sh   t  }|jddddg | _tjd tjd| _dd t	| jj
| jjD }|| j_| jj| _d S )	NrQ   rR   rS   rT   rU   rV   c                 S   s,   g | ]$\}}t t|d  t t| qS rW   rX   r[   r   r   r   r^     s   z-TestLagmat2DS.setup_class.<locals>.<listcomp>)r	   r_   r`   ra   r0   r6   rg   r7   rh   ri   rQ   rR   rd   rT   rj   )rk   r`   rd   r   r   r   rm     s    zTestLagmat2DS.setup_classfrontc                 C   s   | j \}}t|| |d | f}t|D ]v}t|d D ]d}||k rx| d d |f ||| | |d | | f< q<| d d |f ||d |d | | f< q<q,|dkr|d |  }|S )Nr$   r#  )r   r0   r   r4   )r`   r   rq   r  r<   r   r   r   r   r   r   _prepare_expected  s    
&,zTestLagmat2DS._prepare_expectedc                 C   s   | j }|j}t|d}| |d}t|| t|d d d df d}| |d d d df d}t|| | jj}t|d}| |d d d f d}t|| d S )Nr%   r/   rE   )ra   rs   r
   	lagmat2dsr$  r   rj   )rz   r`   Znpdatarv   r   r   r   r   test_lagmat2ds_numpy  s    

z"TestLagmat2DS.test_lagmat2ds_numpyc                 C   s   | j }t|d}| |jd}t|| tj|jd d d df ddd}| |jd d d df d}|dd  }t|| | j}t|d}| |jd d d f d}t|| d S )Nr%   r/   r   rp   rE   )ra   r
   r%  r$  rs   r   r   rj   )rz   r`   rv   r   r   r   r   test_lagmat2ds_pandas  s    
"
z#TestLagmat2DS.test_lagmat2ds_pandasc                 C   s  | j }tj|ddd}| |jd}g }|D ]<}tdD ].}|dkrP|| q8||d t|  q8q,tj	||j
|d}t|| tj|jd d d df dddd	}| |jd d d df d}g }|jd d d df D ]>}td
D ]0}|dkr|| q||d t|  qqtj	||j
|d}|jdd  }t|| | j}tj|ddd}| |jd d d f d}g }|j}tdD ]2}|dkr|| n||d t|  qtj	||j
|d}t|| d S )Nr%   Tr   r/   r   r   r   r   )r   rq   r   rE   rF   )ra   r
   r%  r$  rs   r4   appendrY   r   r   rd   r   r   rj   r   )rz   r`   rv   r   rl   r   r   r   r   r   test_lagmat2ds_use_pandas  sL    
   


z'TestLagmat2DS.test_lagmat2ds_use_pandasc              	   C   s\   t d}tt t|d W 5 Q R X t d}tt t|d W 5 Q R X d S )Nr%   rE   )rV   r%   r%   )r0   r1   r   r   r   r
   r%  r   r   r   r   r   test_3d_error   s    

zTestLagmat2DS.test_3d_errorN)r#  )r   r   r   r   rm   staticmethodr$  r&  r'  r)  r*  r   r   r   r   r"    s   
,r"  c               	   C   sb   t jdd} tjtdd tj| ddd}W 5 Q R X |d \}}|\}}}|j|j	k	s^t
d S )NrV   r%   verboser   F)r   r,  r$   )r0   r6   Zrandr   ZwarnsFutureWarningr
   ZgrangercausalitytestsZcentered_tssZuncentered_tssr:   )r`   outr   modelsZres2downZ
res2djointZrconstrr   r   r   test_grangercausality*  s    
r0  ):__doc__Zstatsmodels.compat.pandasr   r   numpyr0   Znumpy.testingr   r   r   r   Zpandasr   r   Zstatsmodelsr   Zstatsmodels.datasetsr	   Zstatsmodels.tsar
   Zstatsmodels.tsa.tests.resultsr   Z)statsmodels.tsa.tests.results.datamlw_tlsr   r   r   r   Zstatsmodels.tsa.tsatoolsZtsaZtsatoolsr5   r   r   ZrvsdataZxar2Zxor   r   r   r    r(   r)   r,   markZsmoker3   r>   r?   rB   rD   rI   rO   rP   r   r   r  r"  r0  r   r   r   r   <module>   sJ   	
  Z
K t