o
    dZ}                     @   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$g d%d&d' Z&d(d) Z'd*d+ Z(d,d- Z)d.d/ Z*ej"#d0dd1gd2d3 Z+d4d5 Z,ej"j#d6d7d8 d9d8 gd:d;gd<d=d> Z-d?d@ Z.dAdB Z/dCdD Z0dEdF Z1dGdH Z2ej"#d6dIgdJdKgddLidMdNdOgdPdQ Z3dRdS Z4dTdU Z5dVdW Z6dXdY Z7ej"#dZg d[d\d] Z8d^d_ Z9ej"#d`dadbdcg dddedfdg dgdhdif
djdkdldgdm dcdfdng dodpd	f
dadbdcg dddedfdqg drdsdtf
dadbdcg dddedudg dvdwdif
gdxdy Z:ej"#dzg dLd{d|d}gifdLd~dgd}gdfdLej;dgd}gdfdMd{d|dgifddMej;dfdId{d|dtgifdId~dgdtgdfdIej;dgdtgdfdKd{d|dgifdKd~dgdgdfdKej;dgdgdfdd{d|dtgifdd~dgdtgdfdej;dgdtgdfdd{d|dgifdd~dgdgdfdej;dgdgdfdJd{d|dgifddJej;dfdNd{d|dgifddNej;dfdd{d|dgifddej;dfdd{d|dgifddej;dfdd{d|dgifddej;dfdd Z<ej"#dzddLd~dgfdLej;dgfdddMej;dfddId~dgfdIej;dgfddKd~dgfdKej;dgfddd~dgfdej;dgfddd~dgfdej;dgfgdd Z=ej"#dg ddd Z>dd Z?dS )    )datetimeN)lib)UnsupportedFunctionCall)	DataFrameNamedAggSeries)
date_range     
   Min)startendfreqABCc                   C   s   t  S N)_test_framecopy r   r   l/var/www/html/visualizacion-main/env/lib/python3.10/site-packages/pandas/tests/resample/test_resample_api.py
test_frame   s   r   c                  C   s<   t d} dt| v sJ t jddd} dt| v sJ 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)rr   r   r   test_str   s   

r!   c                  C   sh   t d} |  }t|tsJ t|dksJ t  d} |  }t|ts*J t|dks2J d S )Nr      )r   r   mean
isinstancer   lento_framer   )r    resultr   r   r   test_api+   s   
r(   c                  C   s   t tddddg dg d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
   r
      r-   )            )dategroupvalr2   z
2016-01-03r1   r,   z
2016-01-17r
   r-   r3   namesr4   r.   r0   r/   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ir9   expectedr'   r   r   r   test_groupby_resample_api7   s    
(,rL   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   r5   )keydatesvaluesrN   rM   Don)r   r   nprandomrandnr@   rE   r   r#   rG   rH   rI   rK   r'   r   r   r   test_groupby_resample_on_apiN   s   


rW   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   r5   r8   5DF
group_keysc                 S      | S r   r   r<   r   r   r   r>   e       z*test_resample_group_keys.<locals>.<lambda>c                 S   r]   r   r   r<   r   r   r   r>   j   r^   r   z
2000-01-06r.   Tc                 S   r]   r   r   r<   r   r   r   r>   r   r^   )r   r   r   r   rF   rG   rH   rB   rC   rD   to_datetimerepeatr9   )rI   rK   gr'   r   r   r   test_resample_group_keys_   s   
rb   c                 C   sl   t d}| |  }|dd }t|| | d}| |  }|dd }t|| d S )Nr   c                 S      |   |   S r   maxr#   r<   r   r   r   r>   |       ztest_pipe.<locals>.<lambda>c                 S   rc   r   rd   r<   r   r   r   r>      rf   )r   r   re   r#   piperG   assert_series_equalrH   )r   r    rK   r'   r   r   r   	test_pipev   s   

ri   c                 C   s   |  d}t|jj| j |  dd }|jj| jd ks J |  dd }t|jj| jddg  |  dd }t|jj| jddg  d S )Nr   r   r
   rX   r   )r   rG   assert_index_equal_selected_objcolumnsnamer   r    r   r   r   test_getitem   s   
ro   rM   rP   r   c                 C   sJ   | d}d}tjt|d ||   W d    d S 1 sw   Y  d S )Nr   z^\"Columns not found: 'D'\"$match)r   pytestraisesKeyError)rM   r   ra   msgr   r   r   test_select_bad_cols   s
   

"rv   c                 C   s(   |  d}t|j |d   d S )Nr   r   )r   rG   rh   r   sumrn   r   r   r   test_attribute_access   s   
rx   attr)groups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   r8   30s)r   r   rS   aranger%   r   getattrr#   )ry   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|| |g d  }tj	t
d	d
 |  W d    n1 sFw   Y  |jdd}t|| d S )NfoorP   r   r   r   r
   axisr   Could not convertrp   Tnumeric_only)r   r#   rB   concatr   r   rG   rH   rr   rs   	TypeError)r   rI   r    r'   rK   r   r   r   tests_raises_on_nuisance   s   

r   c                  C   s`   t dddd} ttjt| dd| d}|d }tg d	t d
dddd}t|| d S )Nr}   r~   r   r   int64dtyper8   20s)r      (   <   P   2012-01-01 00:00:00r.   r   r,   )	r   r   rS   r   r%   r   asfreqrG   rh   )r   r   r'   rK   r   r   r   'test_downsample_but_actually_upsampling   s   r   c                  C   st   t dddd} ttt| | d}|jg d }|d  }tg dt	j
g d	d
ddd}t|| d S )Nr}   r~   r   r   r8   )r   r
   r-      r.   r0                  2s)g      ?g      @g      @      @r         &@r   g      .@      0@r   r   r         9@r   r   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   rS   r   r%   ilocr   r#   r;   rB   DatetimeIndexrG   rh   )r   r   ts2r'   rK   r   r   r   *test_combined_up_downsampling_of_irregular   s   *r   c                  C   s<   t d} t tjddd}| d}t|| d S )N20minr   r#   )r   r   rE   rB   Grouper	transformrG   rh   )r    rK   r'   r   r   r   test_transform_series  s   

r   rR   r2   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r:|jdd}| }|jd
| d}|d}t|| d S )Nr	   r
   r   rP   r   r2   r-   ABrl   r9   r   r#   T)droprQ   )r   r   rm   r   rS   rT   randlistrE   rB   r   r   reset_indexr   rG   rH   )rR   r9   rI   rK   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 d    d S 1 sSw   Y  d S )Nr}   r   r   r   r   r   r8   sr;   )methodbfillzTInvalid fill method\. Expecting pad \(ffill\), backfill \(bfill\) or nearest\. Got 0rp   r   )r   r   rS   r   r%   r   r;   fillnarG   rh   r   rr   rs   
ValueError)r   r   r    rK   r'   ru   r   r   r   test_fillna  s   
"r   funcc                 C   s   | j dddS )Nr   Fr[   )r   r<   r   r   r   r>   7  r?   r>   c                 C   s   | j tjddddS )Nr   r   Fr[   )rE   rB   r   r<   r   r   r   r>   8  s    r   rE   )idsc                 C   s&   | t }|dd }t|t  d S )Nc                 S   r]   r   r   r<   r   r   r   r>   ?  r^   z0test_apply_without_aggregation.<locals>.<lambda>)r   rF   rG   rh   )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   )rm   r   Fr[   c                 S   r]   r   r   r<   r   r   r   r>   E  r^   z1test_apply_without_aggregation2.<locals>.<lambda>)r   r&   r   rF   rG   rh   rename)groupedr'   r   r   r   test_apply_without_aggregation2C  s   r   c                  C   sx   t tjddtddddg dd} | d}d	}tjt|d
 |	ddd W d    d S 1 s5w   Y  d S )N  r   r}   r   r   r   r9   rl   3Tz'Column\(s\) \['r1', 'r2'\] do not existrp   r#   rw   r1r2
r   rS   rT   rU   r   r   rr   rs   rt   aggrI   r    ru   r   r   r   test_agg_consistencyI  s   
"r   c                  C   sx   t tjddtddddddgd} | d	}d
}tjt|d |	ddd W d    d S 1 s5w   Y  d S )Nr   r-   r}   r   r   r
   ar   r   z#Column\(s\) \[2, 'b'\] do not existrp   r#   rw   )r-   br   r   r   r   r   'test_agg_consistency_int_str_column_mixY  s   
"r   c               	   C   st  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 ]J}||d kr|d  }|d  }tj|||gdd}tjg dddgg|_|t jt jg}t|| q|t jt jg}t|| qt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|| qCtj||gdd}ddg|_|D ]!}|d ddg}t|| |d jddd}t|| qfd}|D ]'}tjtj j!|d |ddddi W d    n	1 sw   Y  qtj|||	|gdd}tjg d|_|D ]+}tjtj j!|d |dddddd d W d    n	1 sw   Y  qtj|||	|
gdd}tjg d!|_|D ]}|ddgddgd}tj||dd qtj|||	|gdd}tjg d"|_d S )#N  r	   r
   r   rP   r   r2   r-   r   r   r9   r6   2DrQ   levelr   r   r   r#   std)r2   r   r   rX   T
check_liker   r#   r   r   rw   )r#   rw   nested renamer is not supportedrp   )r   r   rw   )r   mean2)r   sum2)r   r   )r   r   r   r#   r   r   ))r   r   r#   )r   r   rw   )r   r   r#   )r   r   rw   )"rS   rT   seedr   r   rm   r   r   r   r   r   rB   rC   rD   ranger9   r   rE   r   r#   r   rw   r   from_productrl   	aggregaterG   rH   r   from_tuplesrr   rs   errorsSpecificationError)r9   rI   df_coldf_multr    casesa_meana_stda_sumb_meanb_stdb_sumrK   r   	date_meandate_stdexpr'   ru   r   r   r   test_aggl  s   


r   c               	   C   sz  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 ]Y}|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 q\tj|d  |d  |d  |d  gdd}	tjg d|	_d}
|D ]|}tjt|
d |ddg t jt jd W d    n	1 sw   Y  tjt|
d |ddg jdt jfd t jfd W d    n	1 s*w   Y  tjt|
d |ddg jtdt jtd t jd W d    n	1 sUw   Y  qtj|d  |d   |d  |d   gdd}	tjg d!|	_|D ]}|d"d#gd$d#gd}tj||	dd q|D ]}|ddg d"d#gd$d#gd}tj||	dd qd%}
|D ]P}tjtj!j"|
d |d dd"d#gi W d    n	1 sw   Y  tjtj!j"|
d |d d"d#gd$d#gd W d    n	1 sw   Y  qd&}
|D ]*}tjt|
d |dg d"d#gd$d#gd W d    n	1 s4w   Y  qd S )'Nr   r	   r
   r   rP   r   r2   r-   r   r   r9   r6   r   rQ   r   c                 S      t j| ddS Nr
   )ddofrS   r   r<   r   r   r   r>     r?   ztest_agg_misc.<locals>.<lambda>rX   r   c                 S   r   r   r   r<   r   r   r   r>     r?   r   r   Tr   c                 S   r   r   r   r<   r   r   r   r>     r?   c                 S   r   r   r   r<   r   r   r   r>     r?   ))result1r   )r   r   )result2r   )r   r   z1Column\(s\) \['result1', 'result2'\] do not existrp   )r   r   r   r   )r   r   r   r   rw   r   r#   r   z Column\(s\) \['B'\] do not exist)#rS   rT   r   r   r   rm   r   r   r   r   r   rB   rC   rD   r   r9   r   rE   r   r   rw   rF   r   rG   rH   r   r#   r   rl   rr   rs   rt   r   r   r   )r9   rI   r   r   r    r   r   r'   rcustomrK   ru   r   r   r   test_agg_misc  s   
,$,  r   minr#   re   rw   prodmedianrX   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 d    d S 1 sFw   Y  d S )Nr   r	   r
   r   rP   r   r2   r-   r   r   Mr   z"axis other than 0 is not supportedrp   )rS   rT   r   r   r   rm   r   r   r   Tr   rr   rs   NotImplementedErrorr   )r   r9   rI   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 ]+}tjtjj|d |dddgidddgid W d    n1 sw   Y  q^|D ]X}tjtjj|d |ddg dddgidddgid W d    n1 sw   Y  tjtjj|d |dddgidddgid W d    n1 sw   Y  qd S )Nr   r	   r
   r   rP   r   r2   r-   r   r   r9   r6   r   rQ   r   r   rp   r   r#   rw   r   r   rar   rbrX   )rS   rT   r   r   r   rm   r   r   r   r   r   rB   rC   rD   r   r9   r   rE   r   rr   rs   r   r   r   r   )r9   rI   r   r   r    r   ru   r   r   r   r   test_agg_nested_dicts@  s@   
""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 d    d S 1 sKw   Y  d S )Ni  r/   r
   r   g      ?g       @)dtr=   yr-   g      @g      ?r	  z Column\(s\) \['z'\] do not existrp   30Tr#   r   rw   )r=   r
  z)r   r   r@   rr   rs   rt   r   r   )datarI   ru   r   r   r   &test_try_aggregate_non_existing_columna  s    "r  c                  C   s   t dg d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 d    n1 s;w   Y  | 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-01r   rP   r   r8   r
   r   c                 S      | | | S r   r   )r=   r   cr   r   r   foo1v     z/test_agg_list_like_func_with_args.<locals>.foo1r-   c                 S   r  r   r   )r=   r   r  r   r   r   foo2y  r  z/test_agg_list_like_func_with_args.<locals>.foo2z/foo1\(\) got an unexpected keyword argument 'b'rp   r*   )r   r  )r  r1   	   r   )r=   r  )r=   r  r   )r
   r   )r-   r   )r   r   rr   rs   r   r   r   rB   rC   r   rG   rH   )rI   r  r  ru   r'   rK   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 d    n1 sOw   Y  d}t
jt|d |jddd	d W d    n1 spw   Y  d}t
jt|d |jdddgd W d    n1 sw   Y  d}t
jt|d |jdddgd W d    n1 sw   Y  d}t
jt|d |jdd	d  W d    n1 sw   Y  t
jt|d |jddd  W d    n1 sw   Y  |d }d|j_|jddd }t|| d	|j_t
jtdd |jdd	d  W d    n	1 s5w   Y  |jdd	djdd}t|| d S )Nr	   r
   r   rP   r   r   )r2   r   vdr6   r8   r   z\Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Index'rp   r   r   z2The Grouper cannot specify both a key and a level!r2   )rR   r   zunhashable type: 'list'rQ   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   rS   r   r%   r   r   rB   rC   rD   rr   rs   r   r   r   rt   r   rw   r9   rm   rG   rH   )r9   r   rI   df_expru   r   r'   r   r   r   test_selection_api_validation  sT   r  col_name)t2t2xt2qT_2Mt2pt2mt2m1T2Mc                 C   s~   t ttdtddddd| gd}|ddg}t g d	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-0115minzEurope/Berlin)r   r   r,   tzr   1dr#   )g     G@g     a@g     ph@rP   r   r   )levelscodes)
r   r   r   r   r   r   rB   rC   rG   rH   )r  rI   r'   rK   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-021hr   F)writer8   r:   r      lastfirstre   r   )r   rS   
zeros_likesetflagsr   r   rB   	Timestampr   rG   rh   )r9   arrserr   rK   r'   r   r   r   test_resample_agg_readonly  s   

&



r5  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:007min)	r   r   r/   r     r         r-  17minr   )r   r8     ?   z20001002 00:26:00r*   z20200101 8:26:35z20200101 9:31:5877s3   right)
r
   r/   r.   r/   r.   r/   r.   r/   r.   r/   z2020-01-01 09:30:45left)r   r8  r;  '   r-  z20001002 00:43:00r.   end_day)r   r   -   rC  z2000-10-02 00:29:00c
                 C   sT   t | ||d}
t||
d}|j|||d }t|t |||	dd}t|| d S )Nr   r8   )r   closed)r   r   r,   )r   r   r   rw   rG   rh   )r   r   r   r  resample_freqr   rD  exp_dataexp_endexp_periodsr   r   r  rK   r   r   r   test_end_and_end_day_origin  s   ArI  z#method, numeric_only, expected_dataTnumr   F
cat_1cat_2catrJ  r~   )r   Fcan't multiply sequencerN  cat_1r   cat_2r/  r.  g      )@)r#   Fr   r   )r   Fcould not convertrQ  r   gH6%@)r   F!could not convert string to floatrR  varg      \@)rS  FrR  semg      @)rT  FrR  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u r(i }nd|i}t|| }t|tr_| dv r<tnt	}	t
j|	|d |di |}
W d    d S 1 sXw   Y  d S |di |}t||d}t|| d S )N
2018-01-01r-   rP   r   
2018-12-31r
   YrO  rP  r.   r   rL  r8   r   )rS  r#   r   r   rp   r   )r   r   r   r   
no_defaultr   r$   r   r   r   rr   rs   rG   rH   )r   r   expected_datar9   expected_indexrI   	resampledkwargsr   klass_r'   rK   r   r   r   test_frame_downsample_method<  s    *



"r_  )rw   Tr   )r   Tr   )r   Fr   r   )r   Tr   )re   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u r"i nd|i}t|| }|rX|tjurXd|  }	tjt|	d |di | W d    d S 1 sQw   Y  d S | dkr}tjtdd |di | W d    d S 1 svw   Y  d S |di |}
t||d
}t	
|
| d S )NrU  r-   rP   r   rV  r
   rW  rO  rP  r8   r   z1Cannot use numeric_only=True with SeriesGroupBy\.rp   r   z"can't multiply sequence by non-intr   )r   r   r   r   rX  r   rr   rs   r   rG   rh   )r   r   rY  r9   rZ  rI   r[  r\  r   ru   r'   rK   r   r   r   test_series_downsample_methodz  s$   


""r`  zmethod, raises))rw   T)r   T)r   T)re   T)r/  F)r.  F)r   F)r#   T)r   T)rS  T)rT  F)ohlcF)nuniqueFc           
   	   C   sd  t dddd}tg d|d}|d}d}t|| }d	}d
}d|  }	|rltjt|	d5 tjt	|d |g |dddR   W d    n1 sMw   Y  W d    d S W d    d S 1 sew   Y  d S tjt|	d5 tjt
|d |g |dddR   W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )N20180101r   hr   )r-   r*   r/   r8   30minr   z-numpy operations are not valid with resample.ztoo many arguments passed inz2Passing additional args to DatetimeIndexResampler.rp   r
   r-   )r   r   r   r   rG   assert_produces_warningFutureWarningrr   rs   r   r   )
r   rs   r9   rI   r[  argsr   	error_msgerror_msg_typewarn_msgr   r   r   test_args_kwargs_depr  s.   


""rl  c                  C   sF   t tg dd} t tg dd}| d }t|| d S )N)2018-01-01 00:00:00z2018-01-01 12:00:002018-01-02 00:00:00r8   )rm  z2018-01-01 08:00:00z2018-01-01 16:00:00rn  8H)r   rB   r_   r   r#   rG   rH   rV   r   r   r   test_resample_empty  s   
rp  )@r   numpyrS   rr   pandas._libsr   pandas.errorsr   pandasrB   r   r   r   pandas._testing_testingrG   pandas.core.indexes.datetimesr   dtirT   r   r%   r   r   r   fixturer   r!   r(   rL   rW   rb   ri   ro   markparametrizerv   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r*  r5  rI  rX  r_  r`  rl  rp  r   r   r   r   <module>   s   

	
7

k[
!5

5
	




 
!
'







