U
    -eZ}                  &   @   s  d dl m Z  d dlZd dlZd dlmZ d dlmZ d dlZ	d dlm
Z
mZmZ d dlmZ d dlmZ ee ddde ddd	d
dZeejeeeZe
eeeeedZejdd Zdd Zdd Zdd Zdd Zdd Zdd Z dd Z!ej"#ddgddggd d! Z$d"d# Z%ej"#d$d%d&d'gd(d) Z&d*d+ Z'd,d- Z(d.d/ Z)d0d1 Z*ej"#d2dd3gd4d5 Z+d6d7 Z,ej"j#d8d9d: d;d: gd<d=gd>d?d@ Z-dAdB Z.dCdD Z/dEdF Z0dGdH Z1dIdJ Z2ej"#d8dKgdLdMgddNidOdPdQgdRdS Z3dTdU Z4dVdW Z5dXdY Z6dZd[ Z7ej"#d\d]d^d_d`dadbdcddgdedf Z8dgdh Z9ej"#didjdkdld dmdndodpdqdrdsdtg	dudvdd drdwdxgdydzf
d{d|d}dgd~ dldvdddnddnddnddnddng
dd	f
djdkdld dmdndodpdqdrdsdtg	dudvdd drdwddtgddf
djdkdld dmdndodpdqdrdsdtg	dudddmdqddgddzf
gdd Z:ej"#ddNdddgifdNddgdgdfdNej;dgdgdfdOdddgifddOej;dfdKdddgifdKddgdgdfdKej;dgdgdfdMdddgifdMddgdgdfdMej;dgdgdfddddgifdddgdgdfdej;dgdgdfddddgifdddgdgdfdej;dgdgdfdLdddgifddLej;dfdPdddgifddPej;dfddddgifddej;dfddddgifddej;dfddddgifddej;dfg!dd Z<ej"#dddNddgfdNej;dgfdddOej;dfddKddgfdKej;dgfddMddgfdMej;dgfddddgfdej;dgfddddgfdej;dgfgdd Z=ej"#ddddddddddddddgddÄ Z>ddń Z?dS )    )datetimeN)lib)UnsupportedFunctionCall)	DataFrameNamedAggSeries)
date_range     
   ZMin)startendfreq)ABCc                   C   s   t  S N)_test_framecopy r   r   h/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/pandas/tests/resample/test_resample_api.py
test_frame   s    r   c                  C   s<   t d} dt| kstt jddd} dt| ks8td S )NHziDatetimeIndexResampler [freq=<Hour>, axis=0, closed=left, label=left, convention=start, origin=start_day]
2000-01-01)originzsDatetimeIndexResampler [freq=<Hour>, axis=0, closed=left, label=left, convention=start, origin=2000-01-01 00:00:00])test_seriesresamplestrAssertionError)rr   r   r   test_str   s    
r    c                  C   sh   t d} |  }t|ts tt|dks0tt  d} |  }t|tsTtt|dksdtd S )Nr      )	r   r   mean
isinstancer   r   lento_framer   )r   resultr   r   r   test_api+   s    
r'   c                  C   s   t tddddddddgddd	d
gdd} tdd
d tdd
d  }tjjdgd
 dgd
  |gddgd}t ddgd	 dg d	gd	  d
g i|d}| ddd dg }t	
|| d S )N
2016-01-01   W)r   periodsr   r
                  )dategroupvalr1   z
2016-01-03r+   z
2016-01-17r2   namesr3   indexc                 S   s   |  d S )N1D)r   ffillxr   r   r   <lambda>J       z+test_groupby_resample_api.<locals>.<lambda>)r   r   	set_indextolistpd
MultiIndexfrom_arraysgroupbyapplytmassert_frame_equal)dfir8   expectedr&   r   r   r   test_groupby_resample_api7   s     


(,rK   c                  C   sj   t ddgd tdddtjdd} | dd	d
 }| d	jd
dd }t	
|| d S )Nr   r   r-   r(   r   r4   )keydatesvaluesrM   rL   Don)r   r   nprandomrandnr?   rD   r   r"   rF   rG   rH   rJ   r&   r   r   r   test_groupby_resample_on_apiN   s    


rV   c                  C   s   t dddtdddd} |  }| jdd	d
}|dd }t|| | d}|dd }t|| tj	t
ddgd|jg|_| jddd
}|dd }t|| d S )Nr
   r,   r   r   2000r   r4   r7   Z5DFZ
group_keysc                 S   s   | S r   r   r;   r   r   r   r=   e   r>   z*test_resample_group_keys.<locals>.<lambda>c                 S   s   | S r   r   r;   r   r   r   r=   j   r>   r   z
2000-01-06r-   Tc                 S   s   | S r   r   r;   r   r   r   r=   r   r>   )r   r   r   r   rE   rF   rG   rA   rB   rC   to_datetimerepeatr8   )rH   rJ   gr&   r   r   r   test_resample_group_keys_   s    
r]   c                 C   sl   t d}| |  }|dd }t|| | d}| |  }|dd }t|| d S )Nr   c                 S   s   |   |   S r   maxr"   r;   r   r   r   r=   |   r>   ztest_pipe.<locals>.<lambda>c                 S   s   |   |   S r   r^   r;   r   r   r   r=      r>   )r   r   r_   r"   piperF   assert_series_equalrG   )r   r   rJ   r&   r   r   r   	test_pipev   s    

rb   c                 C   s   |  d}t|jj| j |  dd }|jj| jd ks@t|  dd }t|jj| jddg  |  dd }t|jj| jddg  d S )Nr   r   r
   rW   r   )r   rF   Zassert_index_equalZ_selected_objcolumnsnamer   r   r   r   r   r   test_getitem   s    
rf   rL   rO   r   c              	   C   s4   | d}d}tjt|d ||   W 5 Q R X d S )Nr   z^\"Columns not found: 'D'\"$match)r   pytestraisesKeyError)rL   r   r\   msgr   r   r   test_select_bad_cols   s    
rm   c                 C   s(   |  d}t|j |d   d S )Nr   r   )r   rF   ra   r   sumre   r   r   r   test_attribute_access   s    
ro   attrgroupsZngroupsindicesc                 C   sN   t dddd}ttt||d}|d}t||  |  t||  d S )N1/1/2012d   Sr+   r   r7   Z30s)r   r   rR   aranger$   r   getattrr"   )rp   rngtsrsr   r   r   test_api_compat_before_use   s    

r|   c              	   C   s   | }d|d< | d}|ddg  }tj|j |j gdd}t|| |dddg  }tj	t
d	d
 |  W 5 Q R X |jdd}t|| d S )NfoorO   r   r   r   r
   Zaxisr   Could not convertrg   Tnumeric_only)r   r"   rA   concatr   r   rF   rG   ri   rj   	TypeError)r   rH   r   r&   rJ   r   r   r   tests_raises_on_nuisance   s    
r   c                  C   sf   t dddd} ttjt| dd| d}|d }td	d
dddgt ddddd}t|| d S )Nrs   rt   ru   rv   int64dtyper7   Z20sr      (   <   P   2012-01-01 00:00:00r-   r   r+   )	r   r   rR   rw   r$   r   asfreqrF   ra   )ry   rz   r&   rJ   r   r   r   'test_downsample_but_actually_upsampling   s    r   c                  C   s   t dddd} ttt| | d}|jdddd	d
ddddddg }|d  }tddddddddddddddddgt	j
dddddd d!d"d#d$d%d&d'd(d)d*gd+d,d-d}t|| d S ).Nrs   rt   ru   rv   r7   r   r
   r,      r-   r/                  Z2sg      ?g      @g      @g      @g      &@g      .@g      0@g      9@g      >@r   z2012-01-01 00:00:02z2012-01-01 00:00:04z2012-01-01 00:00:06z2012-01-01 00:00:08z2012-01-01 00:00:10z2012-01-01 00:00:12z2012-01-01 00:00:14z2012-01-01 00:00:16z2012-01-01 00:00:18z2012-01-01 00:00:20z2012-01-01 00:00:22z2012-01-01 00:00:24z2012-01-01 00:00:26z2012-01-01 00:00:28z2012-01-01 00:00:30zdatetime64[ns]2S)r   r   )r   r   rR   rw   r$   Zilocr   r"   r:   rA   ZDatetimeIndexrF   ra   )ry   rz   Zts2r&   rJ   r   r   r   *test_combined_up_downsampling_of_irregular   sZ     *r   c                  C   s<   t d} t tjddd}| d}t|| d S )N20minr   r"   )r   r   rD   rA   Grouper	transformrF   ra   )r   rJ   r&   r   r   r   test_transform_series  s    

r   rQ   r1   c                 C   s   t tdddtddddd}d|_ttjddtd|d	}|t	j
d
dd}| dkrt|jdd}| }|jd
| d}|d}t|| d S )Nr	   r
   r   rO   r   r1   r,   ABrc   r8   r   r"   T)ZdroprP   )r   r   rd   r   rR   rS   randlistrD   rA   r   r   reset_indexr   rF   rG   )rQ   r8   rH   rJ   r   r&   r   r   r   test_transform_frame  s    
r   c               	   C   s   t dddd} ttjt| dd| d}|d}| }|jd	d
}t	|| |
 }|jdd
}t	|| d}tjt|d |d W 5 Q R X d S )Nrs   r   r   rv   r   r   r7   sr:   )methodbfillzTInvalid fill method\. Expecting pad \(ffill\), backfill \(bfill\) or nearest\. Got 0rg   r   )r   r   rR   rw   r$   r   r:   ZfillnarF   ra   r   ri   rj   
ValueError)ry   rz   r   rJ   r&   rl   r   r   r   test_fillna  s    
r   funcc                 C   s   | j dddS )Nr   FrY   )r   r;   r   r   r   r=   7  r>   r=   c                 C   s   | j tjddddS )Nr   r   FrY   )rD   rA   r   r;   r   r   r   r=   8  r>   r   rD   )Zidsc                 C   s&   | t }|dd }t|t  d S )Nc                 S   s   | S r   r   r;   r   r   r   r=   ?  r>   z0test_apply_without_aggregation.<locals>.<lambda>)r   rE   rF   ra   )r   tr&   r   r   r   test_apply_without_aggregation4  s    
r   c                  C   s>   t jddjddd} | d dd }t|t d d S )Nr}   )rd   r   FrY   c                 S   s   | S r   r   r;   r   r   r   r=   E  r>   z1test_apply_without_aggregation2.<locals>.<lambda>)r   r%   r   rE   rF   ra   rename)groupedr&   r   r   r   test_apply_without_aggregation2C  s    r   c               	   C   sd   t tjddtdddddddgd	} | d
}d}tjt|d |	ddd W 5 Q R X d S )N  r   rs   ru   r   r   r   r   r8   rc   3Tz'Column\(s\) \['r1', 'r2'\] do not existrg   r"   rn   r1r2
r   rR   rS   rT   r   r   ri   rj   rk   aggrH   r   rl   r   r   r   test_agg_consistencyI  s    
r   c               	   C   sb   t tjddtddddddgd} | d	}d
}tjt|d |	ddd W 5 Q R X d S )Nr   r,   rs   ru   r   r
   ar   r   z#Column\(s\) \[2, 'b'\] do not existrg   r"   rn   )r,   br   r   r   r   r   'test_agg_consistency_int_str_column_mixY  s    
r   c               
   C   s\  t jd ttdddtddddd} d| _tt jddtd	| d
}|	 }|
 }tjjtd|jgddgd|_|d}||jddd|jddd|tjddg}|d  }|d  }|d  }|d  }	|d  }
|d  }tj|||	|
gdd}tjddgddgg|_|D ]}||d kr|d  }|d  }tj|||gdd}tjdddgddgg|_|t jt jg}t|| n|t jt jg}t|| q0tj||
gdd}|D ]}|t jt jd}tj||dd |jdt jfdt jfd}tj||dd |jtdt jtdt jd}tj||dd qtj||gdd}tjddg|_|D ]$}|dddgi}t|| qtj||gdd}ddg|_|D ]B}|d ddg}t|| |d jddd}t|| qd}|D ]8}tjtj j!|d |ddddi W 5 Q R X q tj|||	|gdd}tjdddd g|_|D ]@}tjtj j!|d" |dddddd!d W 5 Q R X qtj|||	|
gdd}tjddd"d#g|_|D ].}|ddgddgd}tj||dd qtj|||	|gdd}tjd$d%d&d'g|_d S )(N  r	   r
   r   rO   r   r1   r,   r   r   r8   r5   2DrP   levelr   r   r~   r"   stdrW   TZ
check_like)r   r"   r   r   rn   )r"   rn   nested renamer is not supportedrg   r   rn   )r   mean2)r   sum2)r   r   r   r"   r   r   )r   r   r"   )r   r   rn   )r   r   r"   )r   r   rn   )"rR   rS   seedr   r   rd   r   r   r   r   r   rA   rB   rC   ranger8   r   rD   r   r"   r   rn   r   Zfrom_productrc   	aggregaterF   rG   r   from_tuplesri   rj   errorsSpecificationError)r8   rH   df_coldf_multr   casesZa_meanZa_stdZa_sumZb_meanZb_stdZb_sumrJ   r   Z	date_meanZdate_stdexpr&   rl   r   r   r   test_aggl  s     

"

r   c               
   C   s   t jd ttdddtddddd} d| _tt jddtd	| d
}|	 }|
 }tjjtd|jgddgd|_|d}||jddd|jddd|tjddg}|D ]}|t jdd d}|d dd }tj|d  |gdd}	tj||	dd |jdt jfddd fd}tj||	dd |jtdt jtddd d}tj||	dd qtj|d  |d  |d  |d  gdd}	tjddddg|	_d}
|D ]}tjt|
d " |ddg t jt jd! W 5 Q R X tjt|
d ( |ddg jd"t jfd#t jfd W 5 Q R X tjt|
d , |ddg jtd"t jtd#t jd W 5 Q R X qtj|d  |d   |d  |d   gdd}	tjd$d%d&d'g|	_|D ].}|d(d)gd*d)gd}tj||	dd q|D ]6}|ddg d(d)gd*d)gd}tj||	dd qd+}
|D ]t}tjtj!j"|
d  |d dd(d)gi W 5 Q R X tjtj!j"|
d " |d d(d)gd*d)gd W 5 Q R X q>d,}
|D ]>}tjt|
d $ |dg d(d)gd*d)gd W 5 Q R X qd S )-Nr   r	   r
   r   rO   r   r1   r,   r   r   r8   r5   r   rP   r   c                 S   s   t j| ddS Nr
   )ZddofrR   r   r;   r   r   r   r=     r>   ztest_agg_misc.<locals>.<lambda>rW   r   c                 S   s   t j| ddS r   r   r;   r   r   r   r=     r>   r   r~   Tr   c                 S   s   t j| ddS r   r   r;   r   r   r   r=     r>   c                 S   s   t j| ddS r   r   r;   r   r   r   r=     r>   )result1r   )r   r   )result2r   )r   r   z1Column\(s\) \['result1', 'result2'\] do not existrg   )r   r   r   r   r   r   r   r   rn   r   r"   r   z Column\(s\) \['B'\] do not exist)#rR   rS   r   r   r   rd   r   r   r   r   r   rA   rB   rC   r   r8   r   rD   r   r   rn   rE   r   rF   rG   r   r"   r   rc   ri   rj   rk   r   r   r   )r8   rH   r   r   r   r   r   r&   ZrcustomrJ   rl   r   r   r   test_agg_misc  s     

 * 
&,
 
* 
  *r   minr"   r_   rn   prodmedianrW   c              	   C   s   t jd ttdddtddddd}d|_tt jddtd	|d
j	}|j
ddd}tjtdd ||  W 5 Q R X d S )Nr   r	   r
   r   rO   r   r1   r,   r   r   Mr~   z"axis other than 0 is not supportedrg   )rR   rS   r   r   r   rd   r   r   r   Tr   ri   rj   NotImplementedErrorr   )r   r8   rH   resr   r   r   test_multi_agg_axis_1_raises2  s    r   c               
   C   s  t jd ttdddtddddd} d| _tt jddtd	| d
}|	 }|
 }tjjtd|jgddgd|_|d}||jddd|jddd|tjddg}d}|D ]B}tjtjj|d& |dddgidddgid W 5 Q R X q|D ]}tjtjj|d. |ddg dddgidddgid W 5 Q R X tjtjj|d& |dddgidddgid W 5 Q R X qd S )Nr   r	   r
   r   rO   r   r1   r,   r   r   r8   r5   r   rP   r   r   rg   r   r"   rn   r   r   rar   rbrW   )rR   rS   r   r   r   rd   r   r   r   r   r   rA   rB   rC   r   r8   r   rD   r   ri   rj   r   r   r   r   )r8   rH   r   r   r   r   rl   r   r   r   r   test_agg_nested_dicts@  s6     
,r   c               	   C   s   t dddddddt dddddddt ddddd	d
dg} t| d}d}tjt|d$ |ddgdgdgd W 5 Q R X d S )Ni  r.   r
   r   g      ?g       @)dtr<   yr,   g      @g      ?r   z Column\(s\) \['z'\] do not existrg   Z30Tr"   r   rn   )r<   r   z)r   r   r?   ri   rj   rk   r   r   )datarH   rl   r   r   r   &test_try_aggregate_non_existing_columna  s    r   c               	   C   s   t ddddgitddddd} dd
d}ddd}d}tjt|d" | dj||gdddd W 5 Q R X | dj||gddd}t ddgddgddggtddddtj	ddgd}t
|| d S )Nr<   r
   r,   r   
2020-01-01rO   rv   r7   r   c                 S   s   | | | S r   r   )r<   r   cr   r   r   foo1v  s    z/test_agg_list_like_func_with_args.<locals>.foo1c                 S   s   | | | S r   r   )r<   r   r   r   r   r   foo2y  s    z/test_agg_list_like_func_with_args.<locals>.foo2z/foo1\(\) got an unexpected keyword argument 'b'rg   r)   )r   r   )r   r0   	   r   )r<   r   )r<   r   r   )r
   r   )r,   r   )r   r   ri   rj   r   r   r   rA   rB   r   rF   rG   )rH   r   r   rl   r&   rJ   r   r   r   !test_agg_list_like_func_with_argsp  s      

&r   c               	   C   s  t tdddtddddd} tjt| tjd}t| |dtjj	|| gdd	gd
d}td|i| d}d}t
jt|d |jddd W 5 Q R X d}t
jt|d |jddd	d W 5 Q R X d}t
jt|d |jdddgd W 5 Q R X d}t
jt|d |jdddgd W 5 Q R X d}t
jt|d |jdd	d  W 5 Q R X t
jt|d |jddd  W 5 Q R X |d }d|j_|jddd }t|| d	|j_t
jtdd |jdd	d  W 5 Q R X |jdd	djdd}t|| d S )Nr	   r
   r   rO   r   r   )r1   r   vdr5   r7   r   z\Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Index'rg   r   r   z2The Grouper cannot specify both a key and a level!r1   )rQ   r   zunhashable type: 'list'rP   z#\"Level \['a', 'date'\] not found\"z|Upsampling from level= or on= selection is not supported, use \.set_index\(\.\.\.\) to explicitly set index to datetime-likez$datetime64 type does not support sumTr   )r   r   rR   rw   r$   r   r   rA   rB   rC   ri   rj   r   r   r   rk   r   rn   r8   rd   rF   rG   )r8   ry   rH   Zdf_exprl   r   r&   r   r   r   test_selection_api_validation  sF    r   col_namet2Zt2xZt2qZT_2MZt2pZt2mZt2m1ZT2Mc                 C   s   t ttdtddddd| gd}|ddg}t d	d
dgtdddddtj| gdggdgdggdd}t	|| d S )N   z
2017-01-01Z15minzEurope/Berlin)r   r   r+   tzr   Z1dr"   g     G@g     a@g     ph@rO   r   r   )Zlevelscodes)
r   r   r   r   r   r   rA   rB   rF   rG   )r   rH   r&   rJ   r   r   r   *test_agg_with_datetime_index_list_agg_func  s"    	
   r   c                  C   s   t dddd} t| }|jdd t|| d}|d}ttd	td	g| d d d
 d}|d}t	
|| |d}t	
|| |d}t	
|| |d}t	
|| d S )Nr   z
2020-01-02Z1hr   F)writer7   r9   r      lastfirstr_   r   )r   rR   Z
zeros_likeZsetflagsr   r   rA   	Timestampr   rF   ra   )r8   ZarrZserr{   rJ   r&   r   r   r   test_resample_agg_readonly  s    

&



r   zLstart,end,freq,data,resample_freq,origin,closed,exp_data,exp_end,exp_periodsz2000-10-01 23:30:00z2000-10-02 00:26:00Z7minr   r.   r      r         r   Z17minr      ?   z20001002 00:26:00r)   z20200101 8:26:35z20200101 9:31:58Z77s3   rightr-   z2020-01-01 09:30:45left'   z20001002 00:43:00Zend_day-   z2000-10-02 00:29:00c
                 C   sT   t | ||d}
t||
d}|j|||d }t|t |||	dd}t|| d S )Nr   r7   )r   closed)r   r   r+   )r   r   r   rn   rF   ra   )r   r   r   r   Zresample_freqr   r  Zexp_dataZexp_endZexp_periodsry   rz   r   rJ   r   r   r   test_end_and_end_day_origin  s    Ar  z#method, numeric_only, expected_dataTnumr   FZ
cat_1cat_2catr	  rt   )r   Fcan't multiply sequencer  cat_1r   cat_2r   r   g      )@)r"   Fr   r   )r   Fcould not convertr  r   gH6%@)r   F!could not convert string to floatr  varg      \@)r  Fr  semg      @)r  Fr  c              	   C   s   t dddd}t dddd}tdd	gd
dgd|d}|d}|tjkrPi }nd|i}t|| }t|tr| dkrxtnt	}	t
j|	|d |f |}
W 5 Q R X n"|f |}t||d}t|| d S )N
2018-01-01r,   rO   rv   
2018-12-31r
   Yr  r  r-   r   r
  r7   r   )r  r"   r   r   rg   )r   r   r   r   
no_defaultrx   r#   r   r   r   ri   rj   rF   rG   )r   r   expected_datar8   expected_indexrH   	resampledkwargsr   klass_r&   rJ   r   r   r   test_frame_downsample_method<  s    *




r  )rn   Tr   )r   Tr   )r   Fr   r   )r   Tr   )r_   Tr   )r   Tr   )r   Tr   c              	   C   s   t dddd}t dddd}tdd	g|d
}|d}|tjkrDi nd|i}t|| }|r|tjk	rd|  }	tjt|	d |f | W 5 Q R X nP| dkrtjtdd |f | W 5 Q R X n"|f |}
t||d
}t	
|
| d S )Nr  r,   rO   rv   r  r
   r  r  r  r7   r   z1Cannot use numeric_only=True with SeriesGroupBy\.rg   r   z"can't multiply sequence by non-int)r   r   r   r   r  rx   ri   rj   r   rF   ra   )r   r   r  r8   r  rH   r  r  r   rl   r&   rJ   r   r   r   test_series_downsample_methodz  s     



r  zmethod, raises)rn   T)r   T)r   T)r_   T)r   F)r   F)r   F)r"   T)r   T)r  T)r  F)ZohlcF)ZnuniqueFc           
   
   C   s   t dddd}tdddg|d}|d	}d
}t|| }d}d}d|  }	|rtjt|	d, tjt	|d ||d  W 5 Q R X W 5 Q R X n@tjt|	d, tjt
|d ||d  W 5 Q R X W 5 Q R X d S )NZ20180101r   hrv   r,   r)   r.   r7   Z30minr   z-numpy operations are not valid with resample.ztoo many arguments passed inz2Passing additional args to DatetimeIndexResampler.rg   r
   )r
   r,   r   )r
   r,   r   )r   r   r   rx   rF   Zassert_produces_warningFutureWarningri   rj   r   r   )
r   rj   r8   rH   r  argsr   	error_msgZerror_msg_typeZwarn_msgr   r   r   test_args_kwargs_depr  s    


"r#  c                  C   sL   t tdddgd} t tddddgd}| d }t|| d S )Nz2018-01-01 00:00:00z2018-01-01 12:00:00z2018-01-02 00:00:00r7   z2018-01-01 08:00:00z2018-01-01 16:00:00Z8H)r   rA   rZ   r   r"   rF   rG   rU   r   r   r   test_resample_empty  s     
r$  )@r   numpyrR   ri   Zpandas._libsr   Zpandas.errorsr   ZpandasrA   r   r   r   Zpandas._testingZ_testingrF   Zpandas.core.indexes.datetimesr   ZdtirS   r   r$   r   rw   r   Zfixturer   r    r'   rK   rV   r]   rb   rf   markZparametrizerm   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   r   r   <module>   sz  

	
7

k[ 
!5 


5






'








