U
    ¾mœdÊ`  ã                   @   s®   d Z ddlZddlZddlZddlZddlm  mZ	 ddl
mZmZmZmZmZmZ ddlmZ ddlmZmZ ddlmZ e	jG dd„ deƒƒZe	jG dd	„ d	eƒƒZdS )
z  Test cases for .boxplot method é    N)Ú	DataFrameÚ
MultiIndexÚSeriesÚ
date_rangeÚplottingÚtimedelta_range)ÚTestPlotBaseÚ_check_plot_works)Úpprint_thingc                   @   sv  e Z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„ Zdd„ Zdd„ Zdd„ Zej ddddddœdddddœfddiddifddddddœfg¡dd„ ƒZej ddd d d!d dœfd"d#d#d$d#dœfg¡d%d&„ ƒZej d'ddd(œd)fg¡d*d+„ ƒZej d,d-d.d/d0g¡d1d2„ ƒZej d3d4d5g¡d6d7„ ƒZej d3d4d5g¡d8d9„ ƒZej d3d4d5g¡d:d;„ ƒZd<S )=ÚTestDataFramePlotsc              	   C   sØ   dd l m} d}ttj ddddg|¡tj ddddg|¡tj ddddg|¡dœt d|¡d�}|jdd	d
�}dd„ | ¡ D ƒ|j	 
¡ ks�t‚| t ddd¡¡ | ¡  dd„ | ¡ D ƒtt ddd¡ƒksÔt‚d S )Nr   éP   é   é   é   )ZClinicalZ	ConfirmedZ	Discarded©ÚindexÚbarT)ÚkindZstackedc                 S   s   g | ]}t | ¡ ƒ‘qS © ©ÚintÚget_text©Ú.0Úxr   r   úb/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pandas/tests/plotting/test_boxplot_method.pyÚ
<listcomp>,   s     zDTestDataFramePlots.test_stacked_boxplot_set_axis.<locals>.<listcomp>é
   c                 S   s   g | ]}t | ¡ ƒ‘qS r   r   r   r   r   r   r   /   s     )Úmatplotlib.pyplotÚpyplotr   ÚnpÚrandomÚchoiceZarangeÚplotÚget_xticklabelsr   Zto_listÚAssertionErrorZ
set_xticksZdrawÚlist)ÚselfÚpltÚnÚdfÚaxr   r   r   Útest_stacked_boxplot_set_axis   s     ý
ú ÿz0TestDataFramePlots.test_stacked_boxplot_set_axisc              	   C   s\  t tj dd¡ttjd d… ƒddddgd�}dd	gd
 |d< dd	dgd |d< t|jdd� t|jddgdd� t	j
tdd�� t|jddgdd� W 5 Q R X t|jdddgd� t	j
tdd�� t|jdd� W 5 Q R X t	j
tdd�� t|jddgd� W 5 Q R X ttjj|d dd� t|jddd� t	j
tdd�� t|jddd� W 5 Q R X d S )Né   é   ÚoneÚtwoÚthreeÚfour©r   ÚcolumnsÚfoor   r   Zindicr   Zindic2Údict©Úreturn_type©Úcolumnr8   F©Zcheck_stacklevel)r:   Úby©r<   )Údatar8   r   )Únotchr8   )r<   r?   )r   r    r!   Úrandnr&   ÚstringÚascii_lettersr	   ÚboxplotÚtmÚassert_produces_warningÚUserWarningr   Z_core©r'   r*   r   r   r   Útest_boxplot_legacy13   s(    
ýz'TestDataFramePlots.test_boxplot_legacy1c                 C   sz  t tj dd¡ddgd�}tddddddddddg
ƒ|d< tdgd ƒ|d	< tjtd
d�� t|j	dd� W 5 Q R X | j
 ¡ \}}|j	dd|d�}|j}||ks¤t‚| j
 ¡ \}}| d	¡j	|dd�}|j}||d ksÜt‚| j
 ¡ \}}t t¡� |j	ddgd|dd�}W 5 Q R X |d  ¡ |k�s,t‚| j
 ¡ \}}|j	|dd�}ttj | ¡ ¡ƒ}t| ¡ ƒt|ƒk�svt‚d S )Nr   r   ZCol1ZCol2©r4   ÚAÚBÚXÚYFr;   r=   )r<   r+   Úaxes)r+   r8   )r:   r<   r+   r8   r6   )r   r    r!   Úrandr   rD   rE   rF   r	   rC   r(   ÚsubplotsrN   r%   ÚgroupbyZ
get_figurer&   Ú	itertoolsÚchainÚfrom_iterableÚvaluesÚlenÚ	get_lines)r'   r*   Úfigr+   rN   Zax_axesÚdÚlinesr   r   r   Útest_boxplot_legacy2L   s4        ÿz'TestDataFramePlots.test_boxplot_legacy2c                 C   s   |  ¡ }t|| jjƒst‚d S ©N)rC   Ú
isinstancer(   ZAxesr%   )r'   Úhist_dfÚresultr   r   r   Útest_boxplot_return_type_nonen   s    z0TestDataFramePlots.test_boxplot_return_type_nonec              	   C   sú   t tj dd¡ttjd d… ƒddddgd�}d}tjt	|d	�� |j
d
d� W 5 Q R X | 
¡ }|  |d¡ t d¡� |j
dd�}W 5 Q R X |  |d¡ t d¡� |j
dd�}W 5 Q R X |  |d¡ t d¡� |j
dd�}W 5 Q R X |  |d¡ d S )Nr-   r.   r/   r0   r1   r2   r3   z,return_type must be {'axes', 'dict', 'both'}©ÚmatchZ
NOT_A_TYPEr7   rN   Fr6   Úboth)r   r    r!   r@   r&   rA   rB   ÚpytestÚraisesÚ
ValueErrorrC   Ú_check_box_return_typerD   rE   )r'   r*   Úmsgr_   r   r   r   Útest_boxplot_return_type_legacys   s&    
ýz2TestDataFramePlots.test_boxplot_return_type_legacyc           	      C   sú   dd„ }|  ¡ }tj dd|jd ¡|d< |jddgd	d
�\}}||d |ƒ ||d |ƒ |j|ksjt‚|jdddgd	d
�}|d |d |d   }}}|d }||d |ƒ ||d |ƒ ||d |ƒ |j|ksÚt‚|j|ksèt‚|jd ksöt‚d S )Nc                 S   s0   |  ¡ \}}||  ¡ kst‚||  ¡ ks,t‚d S r\   )Zget_ylimÚminr%   Úmax)Úcolr+   Zy_minZy_maxr   r   r   Ú_check_ax_limits�   s    zETestDataFramePlots.test_boxplot_axis_limits.<locals>._check_ax_limitsr   é   r   ZageÚheightÚweightÚcategoryr=   )r   r   )r   r   )r   r   ©r   r   )Úcopyr    r!   ÚrandintÚshaperC   Z_shareyr%   )	r'   r^   rm   r*   Z	height_axZ	weight_axÚpZage_axZdummy_axr   r   r   Útest_boxplot_axis_limitsŽ   s     z+TestDataFramePlots.test_boxplot_axis_limitsc                 C   s8   t tj dd¡ƒ}tj|jd d …df< t|jdd� d S )Nrn   r.   r   rN   r7   )r   r    r!   r@   ÚnanÚlocr	   rC   rG   r   r   r   Útest_boxplot_empty_column¨   s    z,TestDataFramePlots.test_boxplot_empty_columnc                 C   sV   t tj dd¡dddddgd�}|jd	d
d�}|jjjdks@t‚|jjj	dksRt‚d S )Nr   é   rJ   rK   ÚCÚDÚErI   rN   )é   é   )r8   Zfigsizer   r€   )
r   r    r!   rO   rC   ÚfigureZbbox_inchesÚwidthr%   ro   )r'   r*   r_   r   r   r   Útest_figsize­   s     zTestDataFramePlots.test_figsizec                 C   s6   t dddddddgiƒ}| j|jddd	�ddd
� d S )NÚar   r   r   r.   r{   r-   é   )Úfontsize©Z
xlabelsizeZ
ylabelsize©r   Z_check_ticks_propsrC   rG   r   r   r   Útest_fontsize³   s      ÿz TestDataFramePlots.test_fontsizec              
   C   s€   t tddd�tj d¡tj d¡d tddd� t¡tdddd�tddd�dœƒ}|jd	d
�}dd„ | 	¡ D ƒddgks|t
‚d S )Nz
2012-01-01éd   )Úperiodsr   ÚUTC)r‹   Útzz1 days)r„   ÚbÚcrY   ÚeÚfÚbox)r   c                 S   s   g | ]}|  ¡ ‘qS r   ©r   r   r   r   r   r   Æ   s     z@TestDataFramePlots.test_boxplot_numeric_data.<locals>.<listcomp>rŽ   r�   )r   r   r    r!   r@   ÚastypeÚstrr   r#   r$   r%   )r'   r*   r+   r   r   r   Útest_boxplot_numeric_data¹   s    


úÿ
z,TestDataFramePlots.test_boxplot_numeric_datazcolors_kwd, expectedÚrrŽ   Úgr�   )ÚboxesÚwhiskersÚmediansÚcapsr™   c                 C   sN   t tj dd¡ƒ}|j|dd�}| ¡ D ] \}}|| d  ¡ |ks(t‚q(d S )Nr   r   r6   ©Úcolorr8   r   )r   r    r!   rO   rC   ÚitemsÚ	get_colorr%   )r'   Z
colors_kwdÚexpectedr*   r_   ÚkÚvr   r   r   Útest_color_kwdÈ   s    z!TestDataFramePlots.test_color_kwdzscheme,expectedZdark_backgroundz#8dd3c7z#bfbbd9Údefaultz#1f77b4z#2ca02cc                 C   sf   t tj dd¡ƒ}dd lm} |j |¡ |jj	dd�}| 
¡ D ] \}}|| d  ¡ |ks@t‚q@d S )Nr   r   r   r6   r7   )r   r    r!   rO   r   r   ÚstyleZuser#   r’   rŸ   r    r%   )r'   Úschemer¡   r*   r(   r_   r¢   r£   r   r   r   Útest_colors_in_themeÚ   s    z'TestDataFramePlots.test_colors_in_themezdict_colors, msg)r™   Zinvalid_keyzinvalid key 'invalid_key'c              	   C   s>   t tj dd¡ƒ}tjt|d�� |j|dd� W 5 Q R X d S )Nr   r   ra   r6   r�   )r   r    r!   rO   rd   re   rf   rC   )r'   Zdict_colorsrh   r*   r   r   r   Útest_color_kwd_errorsû   s    z(TestDataFramePlots.test_color_kwd_errorszprops, expected)Zboxpropsr™   )Zwhiskerpropsrš   )Zcappropsrœ   )Zmedianpropsr›   c                 C   sN   t dd„ dD ƒƒ}|ddii}|jf ddi|—Ž}|| d  ¡ dksJt‚d S )	Nc                 S   s   i | ]}|t j d ¡“qS )rŠ   )r    r!   )r   r¢   r   r   r   Ú
<dictcomp>  s      z?TestDataFramePlots.test_specified_props_kwd.<locals>.<dictcomp>ÚABCrž   ZC1r8   r6   r   )r   rC   r    r%   )r'   Úpropsr¡   r*   Zkwdr_   r   r   r   Útest_specified_props_kwd  s    z+TestDataFramePlots.test_specified_props_kwdÚvertTFc                 C   sl   t tj d¡tj d¡tj ddgd¡dœƒ}d\}}|jd|||d�}| ¡ |ksXt‚| ¡ |ksht‚d S )NrŠ   Úgroup1Úgroup2©r„   rŽ   Úgroup©r   Úyr’   )r   r®   ÚxlabelÚylabel)	r   r    r!   r@   r"   r#   Ú
get_xlabelr%   Ú
get_ylabel©r'   r®   r*   rµ   r¶   r+   r   r   r   Útest_plot_xlabel_ylabel  s    

ýÿz*TestDataFramePlots.test_plot_xlabel_ylabelc                 C   sj   t tj d¡tj d¡tj ddgd¡dœƒ}d\}}|j|||d�}| ¡ |ksVt‚| ¡ |ksft‚d S )NrŠ   r¯   r°   r±   r³   )r®   rµ   r¶   )	r   r    r!   r@   r"   rC   r·   r%   r¸   r¹   r   r   r   Útest_boxplot_xlabel_ylabel$  s    

ýÿz-TestDataFramePlots.test_boxplot_xlabel_ylabelc                 C   sÈ   t tj d¡tj d¡tj ddgd¡dœƒ}d\}}|jd|||d�}|D ]$}| ¡ |ks`t‚| ¡ |ksLt‚qL| j	 
¡  |jd|d�}|D ]*}|rž| ¡ n| ¡ }|tdgƒksŽt‚qŽ| j	 
¡  d S )	NrŠ   r¯   r°   r±   r³   r²   )r<   r®   rµ   r¶   )r<   r®   )r   r    r!   r@   r"   rC   r·   r%   r¸   r(   Úcloser
   )r'   r®   r*   rµ   r¶   r+   ZsubplotZtarget_labelr   r   r   Ú test_boxplot_group_xlabel_ylabel2  s"    

ýÿ
z3TestDataFramePlots.test_boxplot_group_xlabel_ylabelN)Ú__name__Ú
__module__Ú__qualname__r,   rd   ÚmarkÚslowrH   r[   r`   ri   rw   rz   rƒ   r‰   r–   Úparametrizer¤   r¨   r©   r­   rº   r»   r½   r   r   r   r   r      sx   
"þúþ
üþ
üþöþ

þ
üþ	


r   c                   @   sü   e Zd Zdd„ Zejjdd„ ƒZdd„ Zdd„ Z	ejjd	d
„ ƒZ
ejjdd„ ƒZejjdd„ ƒZdd„ Zej dddddddgfdgdddddgfddddddgfddgddddddddddg
fdddddddddddg
fg¡dd „ ƒZd!d"„ Zd#d$„ ZdS )%ÚTestDataFrameGroupByPlotsc              	   C   sn   |j dd�}tjtdd�� t|jdd�}W 5 Q R X | jt|jƒddd	� t|jddd
�}| j|ddd	� d S )NÚgenderr=   Fr;   rN   r7   r   ©r   r   ©Zaxes_numÚlayout©rP   r8   r   rr   )	rQ   rD   rE   rF   r	   rC   Ú_check_axes_shaper&   rU   )r'   r^   ÚgroupedrN   r   r   r   rH   K  s    z.TestDataFrameGroupByPlots.test_boxplot_legacy1c              	   C   s¢   t tjd d… tdƒƒ}ttj dd¡t 	|¡d�}|j
dd�}tjtdd�� t|jdd	�}W 5 Q R X | jt|jƒdd
d� t|jddd�}| j|ddd� d S )Nr   r   r   r   ©ÚlevelFr;   rN   r7   )r.   r   rÇ   rÉ   rr   )ÚziprA   rB   Úranger   r    r!   rO   r   Úfrom_tuplesrQ   rD   rE   rF   r	   rC   rÊ   r&   rU   ©r'   Útuplesr*   rË   rN   r   r   r   r[   S  s    z.TestDataFrameGroupByPlots.test_boxplot_legacy2c              	   C   s¬   t tjd d… tdƒƒ}ttj dd¡t 	|¡d�}|j
dd�jddd�}tjtdd	�� t|jd
d�}W 5 Q R X | jt|jƒddd� t|jdd
d�}| j|ddd� d S )Nr   r   r   r   rÌ   r   )rÍ   ZaxisFr;   rN   r7   ©r   r   rÇ   rÉ   rr   )rÎ   rA   rB   rÏ   r   r    r!   rO   r   rÐ   ZunstackrQ   rD   rE   rF   r	   rC   rÊ   r&   rU   rÑ   r   r   r   Útest_boxplot_legacy3_  s    z.TestDataFrameGroupByPlots.test_boxplot_legacy3c                 C   sî   d}t tjjdd|d�ƒ}t tjjdd|d�ƒ}tj d¡jddg|d�}t|||d	œƒ}| d
¡}| ¡ }t	| j
 ¡ ƒdks‚t‚t	|ƒdks’t‚t ¡  |jdd�}t	| j
 ¡ ƒdks¼t‚t	|ƒdksÌt‚t ¡  | d
¡ ¡ }t ¡  d S )Nr   é¦   rn   )Úsizeé<   é*   ZmaleZfemale)ro   rp   rÅ   rÅ   r   rN   r7   r   )r   r    r!   ÚnormalZRandomStater"   r   rQ   r#   rV   r(   Zget_fignumsr%   rD   r¼   rC   Úhist)r'   r)   rp   ro   rÅ   r*   ÚgbÚresr   r   r   Útest_grouped_plot_fignumsi  s     
z3TestDataFrameGroupByPlots.test_grouped_plot_fignumsc           	      C   s(  |}|j dd�}t|tjƒs t‚| j|d dddgd� | d¡j dd�}| j|dd	d
gd� d ¡ }ttj	 
dd¡|d�}d ¡ }|d |d< dD ]�}| d¡j |d�}| j||dddgd� |j d|d�}| j||dddgd� | d¡j |d�}| j|||d� |j d|d�}| j|||d� q’d S )NrÅ   r=   ro   rp   rq   )Zexpected_keysr6   r7   ZMaleZFemalezX B C D A G Y N Q Oé2   r   rI   zA B C D E F G H I Jr{   )r6   rN   rc   Ú	classroomrJ   rK   r|   )r<   r8   )rC   r]   r    Zndarrayr%   rg   rQ   Úsplitr   r!   r@   )	r'   r^   r*   r_   Zcolumns2Zdf2Zcategories2ÚtÚreturnedr   r   r   Útest_grouped_box_return_type  s6      ÿ  ÿz6TestDataFrameGroupByPlots.test_grouped_box_return_typec              	   C   s¦  |}d}t jt|d�� |jddg|jdd� W 5 Q R X d}t jt|d�� |jdddgd	d
d� W 5 Q R X d}t jt|d�� |jddg|jdd� W 5 Q R X tjtdd�� t| 	d¡jdd
d�}W 5 Q R X | j
| j ¡ jddd� tjtdd�� t| 	d¡jdd
d�}W 5 Q R X | j
| j ¡ jddd� tjtdd�� t| 	d¡jdd
d�}W 5 Q R X | j
| j ¡ jddd� |jdddgddd�}| j
| j ¡ jddd� |d fD ].}| j| ¡ dd� | j|j ¡ gdd� �q°|d |d fD ]&}|  | ¡ ¡ |  |j ¡ g¡ �qð| 	d¡jdddgd
d�}| j
| j ¡ jddd� tjtdd�� t| 	d¡jddd
d�}W 5 Q R X | j
| j ¡ jddd� tjtdd�� t| 	d¡jddd
d�}W 5 Q R X | j
| j ¡ jddd� |jdddgddd�}| j
| j ¡ jddd� |jdddgddd�}| j
| j ¡ jdd d� | 	d¡jdddgd!d
d�}| j
| j ¡ jdd!d� | 	d¡jdddgd"d
d�}| j
| j ¡ jdd#d� d S )$Nz1Layout of 1x1 must be larger than required size 2ra   rp   ro   rr   )r:   r<   rÈ   z7The 'layout' keyword is not supported when 'by' is Nonerq   )r   r   r6   )r:   rÈ   r8   z1At least one dimension of layout must be positive)éÿÿÿÿrä   Fr;   rÅ   r9   r   rÆ   rÇ   r.   rÓ   rß   r   rN   )r:   r<   r8   )Úvisible)r   r   )r   rä   )r.   r   )rä   r   )r   r   )r   r.   )r   rä   ©r   r   )rd   re   rf   rC   rÅ   rD   rE   rF   r	   rQ   rÊ   r(   ÚgcfrN   Z_check_visibler$   ZxaxisZ	get_label)r'   r^   r*   rh   r’   rN   r+   r   r   r   Útest_grouped_box_layout¢  s¸     ý 
  ÿ
  ÿ
  ÿ  ÿ
 ÿ
ü
ü  ÿ  ÿ
  ÿ
  ÿz1TestDataFrameGroupByPlots.test_grouped_box_layoutc              
   C   s¶  |}t  t¡�F | j dd¡\}}| d¡jdd|d� | j| j ¡ j	ddd� W 5 Q R X | j dd	¡\}}t  t¡�" |jdd
dgdd|d d�}W 5 Q R X t
 t|jƒ¡}| j|d	dd� t  ||d ¡ |d j|ksàt‚t  t¡�& | d¡jdd
dgd|d d�}W 5 Q R X t
 t|jƒ¡}| j|d	dd� t  ||d ¡ |d j|k�sZt‚d}tjt|d��@ | j dd	¡\}}t  t¡� | d¡j|d�}W 5 Q R X W 5 Q R X d S )Nr   rq   ro   rN   )r:   r8   r+   r.   rÓ   rÇ   r   rp   rÅ   r   )r:   r<   r8   r+   ræ   rß   r   z@The number of passed axes must be 3, the same as the output plotra   )r+   )rD   rE   rF   r(   rP   rQ   rC   rÊ   rç   rN   r    Úarrayr&   rU   Zassert_numpy_array_equalr�   r%   rd   re   rf   )r'   r^   r*   rX   rN   râ   rh   r   r   r   Útest_grouped_box_multiple_axes   s@    "ü
  ÿz8TestDataFrameGroupByPlots.test_grouped_box_multiple_axesc                 C   sF   t ddddddgddddddgdœƒ}| j|jd	d
dd�ddd� d S )Nr   r   r   r.   r{   r-   r   )r„   rŽ   r„   rŽ   r…   )r<   r†   r‡   rˆ   rG   r   r   r   r‰   -  s    &  ÿz'TestDataFrameGroupByPlots.test_fontsizezcol, expected_xticklabelr£   z(a, v)z(b, v)z(c, v)z(d, v)z(e, v)Úv1z(a, v1)z(b, v1)z(c, v1)z(d, v1)z(e, v1)Nc                 C   sl   t tj tdƒd¡tj d¡tj d¡dœƒ}| d¡}t|jd|dd�}dd	„ | 	¡ D ƒ}||ksht
‚d S )
NZabcderŠ   )Úcatr£   rë   rì   FrN   )rP   r:   r8   c                 S   s   g | ]}|  ¡ ‘qS r   r“   r   r   r   r   r   h  s     zQTestDataFrameGroupByPlots.test_groupby_boxplot_subplots_false.<locals>.<listcomp>)r   r    r!   r"   r&   rO   rQ   r	   rC   r$   r%   )r'   rl   Úexpected_xticklabelr*   rË   rN   Úresult_xticklabelr   r   r   Ú#test_groupby_boxplot_subplots_false3  s    (

ýÿ
   ÿz=TestDataFrameGroupByPlots.test_groupby_boxplot_subplots_falsec              	   C   sD   |  d¡}| d¡}d}tjt|d�� t|jdd� W 5 Q R X d S )NÚobjectrÅ   z:boxplot method requires numerical columns, nothing to plotra   F)rP   )r”   rQ   rd   re   rf   r	   rC   )r'   r^   r*   rË   rh   r   r   r   Útest_groupby_boxplot_objectk  s
    

z5TestDataFrameGroupByPlots.test_groupby_boxplot_objectc           	   	   C   s¦   ddddddddgddddddddgg}t t|Ž ƒ}tj|ddgd	�}ttj d
d¡dddg|d�}ddg}t|j	|dd�}ddg}dd„ | 
¡ D ƒ}||ks¢t‚d S )Nr   Zbazr5   Zquxr/   r0   ÚfirstÚsecond)Únamesr   r€   rJ   rK   r|   r3   )r   r/   )r   r0   rN   r9   z
(bar, one)z
(bar, two)c                 S   s   g | ]}|  ¡ ‘qS r   r“   r   r   r   r   r   �  s     zLTestDataFrameGroupByPlots.test_boxplot_multiindex_column.<locals>.<listcomp>)r&   rÎ   r   rÐ   r   r    r!   r@   r	   rC   r$   r%   )	r'   ZarraysrÒ   r   r*   rl   rN   rí   rî   r   r   r   Útest_boxplot_multiindex_columns  s    þz8TestDataFrameGroupByPlots.test_boxplot_multiindex_column)r¾   r¿   rÀ   rH   rd   rÁ   rÂ   r[   rÔ   rÝ   rã   rè   rê   r‰   rÃ   rï   rñ   rõ   r   r   r   r   rÄ   I  s`   


"
]
,öþöþíþ&
rÄ   )Ú__doc__rR   rA   Únumpyr    rd   Zpandas.util._test_decoratorsÚutilZ_test_decoratorsÚtdZpandasr   r   r   r   r   r   Zpandas._testingZ_testingrD   Zpandas.tests.plotting.commonr   r	   Zpandas.io.formats.printingr
   Zskip_if_no_mplr   rÄ   r   r   r   r   Ú<module>   s      .