U
    _{f`                     @   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st|tddd |  dd | D ttdddkstd S )Nr   P            )ZClinicalZ	ConfirmedZ	DiscardedindexbarT)kindZstackedc                 S   s   g | ]}t | qS  intget_text.0xr   r   h/var/www/html/Darija-Ai-API/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st| j
 \}}|d	j	|dd}|j}||d kst| 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st|j|kst|jd kst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-01d   )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st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stt	|dkstt  |jdd}t	| j
 dkstt	|dkst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 qd S )Nr   r=   ro   rp   rq   )Zexpected_keysr6   r7   ZMaleZFemalezX B C D A G Y N Q O2   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st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st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      .