o
    i`                     @   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 ddlmZ ddlmZmZ ddl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timedelta_range)TestPlotBase_check_plot_works)pprint_thingc                   @   sr  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,g d-d.d/ Zejd0d1d2gd3d4 Zejd0d1d2gd5d6 Zejd0d1d2gd7d8 Zd9S ):TestDataFramePlotsc                 C   s   dd l m} d}ttjg d|tjg d|tjg d|dtd|d}|jddd}d	d
 | D |j	
 ksBJ |tddd |  dd
 | D ttdddksdJ d S )Nr   P   )r            )Clinical	Confirmed	DiscardedindexbarT)kindstackedc                 S      g | ]}t | qS  intget_text.0xr   r   d/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/pandas/tests/plotting/test_boxplot_method.py
<listcomp>,       zDTestDataFramePlots.test_stacked_boxplot_set_axis.<locals>.<listcomp>
   c                 S   r   r   r   r   r   r   r   r    /   r!   )matplotlib.pyplotpyplotr   nprandomchoicearangeplotget_xticklabelsr   to_list
set_xticks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 g dd}ddgd |d< g d	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 d    n1 sRw   Y  t|jdddgd t	j
tdd t|jdd W d    n1 szw   Y  t	j
tdd t|jddgd W d    n1 sw   Y  ttjj|d dd t|jddd t	j
tdd t|jddd W d    d S 1 sw   Y  d S )N      onetwothreefourr   columnsfoor   r   indic)r>   r   r>   r   indic2dictreturn_typer8   r9   columnrC   Fcheck_stacklevel)rE   byrH   )datarC   r   )notchrC   )rH   rK   )r   r%   r&   randnr.   stringascii_lettersr   boxplottmassert_produces_warningUserWarningplotting_corer/   r2   r   r   r   test_boxplot_legacy13   s0   "z'TestDataFramePlots.test_boxplot_legacy1c                 C   s  t tjddddgd}tg d|d< tdgd |d	< tjtd
d t|j	dd W d    n1 s7w   Y  | j
 \}}|j	dd|d}|j}||u sTJ | j
 \}}|d	j	|dd}|j}||d u spJ | j
 \}}tt |j	ddgd|dd}W d    n1 sw   Y  |d  |u sJ | j
 \}}|j	|dd}ttj| }t| t|ksJ d S )Nr"   r   Col1Col2r=   )
ArZ   rZ   rZ   rZ   Br[   r[   r[   r[   XrZ   YFrF   rI   )rH   r3   axes)r3   rC   )rE   rH   r3   rC   rA   )r   r%   r&   randr   rP   rQ   rR   r   rO   r0   subplotsr^   groupby
get_figurer.   	itertoolschainfrom_iterablevalueslen	get_lines)r/   r2   figr3   r^   ax_axesdlinesr   r   r   test_boxplot_legacy2L   s2   z'TestDataFramePlots.test_boxplot_legacy2c                 C   s   |  }t|| jjsJ d S N)rO   
isinstancer0   Axes)r/   hist_dfresultr   r   r   test_boxplot_return_type_nonen   s   z0TestDataFramePlots.test_boxplot_return_type_nonec                 C   sF  t tjddttjd d g dd}d}tjt	|d |j
dd W d    n1 s/w   Y  |
 }| |d	 td
 |j
dd}W d    n1 sTw   Y  | |d td
 |j
d	d}W d    n1 suw   Y  | |d	 td
 |j
dd}W d    n1 sw   Y  | |d d S )Nr5   r6   r7   r<   z,return_type must be {'axes', 'dict', 'both'}match
NOT_A_TYPErB   r^   FrA   both)r   r%   r&   rL   r.   rM   rN   pytestraises
ValueErrorrO   _check_box_return_typerP   rQ   )r/   r2   msgrr   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s5J |jg dd	d
}|d |d |d }}}|d }||d | ||d | ||d | |j|kslJ |j|kssJ |jd u szJ d S )Nc                 S   s0   |  \}}||  ksJ ||  ksJ d S rn   )get_ylimminmax)colr3   y_miny_maxr   r   r   _check_ax_limits   s   zETestDataFramePlots.test_boxplot_axis_limits.<locals>._check_ax_limitsr      r   ageheightweightcategoryrI   )r   r   r   )r   r   )r   r   )r   r   r   r   )copyr%   r&   randintshaperO   _sharey)	r/   rq   r   r2   	height_ax	weight_axpage_ax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 )Nr   r6   r   r^   rB   )r   r%   r&   rL   nanlocr   rO   rU   r   r   r   test_boxplot_empty_column   s   z,TestDataFramePlots.test_boxplot_empty_columnc                 C   sP   t tjddg dd}|jddd}|jjjdksJ |jjjd	ks&J d S )
Nr"      )rZ   r[   CDErY   r^   )      )rC   figsizer   r   )	r   r%   r&   r_   rO   figurebbox_incheswidthr   )r/   r2   rr   r   r   r   test_figsize   s   zTestDataFramePlots.test_figsizec                 C   s.   t dg di}| j|jdddddd d S )Nar   r   r   r6   r   r5      )fontsize
xlabelsize
ylabelsizer   _check_ticks_propsrO   rU   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>J d S )Nz
2012-01-01d   )periodsr   UTC)r   tzz1 days)r   bcrk   efbox)r   c                 S      g | ]}|  qS r   r   r   r   r   r   r           z@TestDataFramePlots.test_boxplot_numeric_data.<locals>.<listcomp>r   r   )
r   r   r%   r&   rL   astypestrr   r)   r*   )r/   r2   r3   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$J qd S )Nr"   r   rA   colorrC   r   )r   r%   r&   r_   rO   items	get_color)r/   
colors_kwdexpectedr2   rr   kvr   r   r   test_color_kwd   s
   z!TestDataFramePlots.test_color_kwdzscheme,expected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s0J q d S )Nr"   r   r   rA   rB   )r   r%   r&   r_   r#   r$   styleuser)   r   r   r   )r/   schemer   r2   r0   rr   r   r   r   r   r   test_colors_in_theme   s   z'TestDataFramePlots.test_colors_in_themezdict_colors, msg)r   invalid_keyzinvalid key 'invalid_key'c                 C   sT   t tjdd}tjt|d |j|dd W d    d S 1 s#w   Y  d S )Nr"   r   rt   rA   r   )r   r%   r&   r_   rx   ry   rz   rO   )r/   dict_colorsr|   r2   r   r   r   test_color_kwd_errors   s   "z(TestDataFramePlots.test_color_kwd_errorszprops, expected))boxpropsr   )whiskerpropsr   )cappropsr   )medianpropsr   c                 C   sN   t dd dD }|ddii}|jd	ddi|}|| d  dks%J 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   C1rC   rA   r   r   )r   rO   r   )r/   propsr   r2   kwdrr   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s,J | |ks4J d S )Nr   group1group2r   r   groupr   yr   )r   r   xlabelylabel)r   r%   r&   rL   r'   r)   
get_xlabel
get_ylabelr/   r   r2   r   r   r3   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s+J | |ks3J d S )Nr   r   r   r   r   )r   r   r   )r   r%   r&   rL   r'   rO   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s0J | |ks8J q&| j	  |jd|d}|D ]}|rO| n| }|t
dgks\J qG| j	  d S )	Nr   r   r   r   r   r   )rH   r   r   r   )rH   r   )r   r%   r&   rL   r'   rO   r   r   r0   closer	   )r/   r   r2   r   r   r3   subplottarget_labelr   r   r    test_boxplot_group_xlabel_ylabel2  s"   


z3TestDataFramePlots.test_boxplot_group_xlabel_ylabelN)__name__
__module____qualname__r4   rx   markslowrV   rm   rs   r}   r   r   r   r   r   parametrizer   r   r   r   r   r   r   r   r   r   r   r
      sr    
"





	

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g dfdgg dfdg dfddgg dfdg dfgdd Zdd Zdd ZdS )TestDataFrameGroupByPlotsc                 C   s   |j dd}tjtdd t|jdd}W d    n1 sw   Y  | jt|jddd	 t|jddd
}| j|ddd	 d S )NgenderrI   FrF   r^   rB   r   r   r   axes_numlayoutr`   rC   r   r   )	ra   rP   rQ   rR   r   rO   _check_axes_shaper.   rf   )r/   rq   groupedr^   r   r   r   rV   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 d    n1 s9w   Y  | jt|jdd
d t|jddd}| j|ddd d S )Nr"   r   r   r   levelFrF   r^   rB   )r6   r   r   r   r   )ziprM   rN   ranger   r%   r&   r_   r   from_tuplesra   rP   rQ   rR   r   rO   r   r.   rf   r/   tuplesr2   r   r^   r   r   r   rm   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 d    n1 s>w   Y  | jt|jddd t|jdd
d}| j|ddd d S )Nr"   r   r   r   r   r   )r   axisFrF   r^   rB   r   r   r   r   r   )r  rM   rN   r  r   r%   r&   r_   r   r  unstackra   rP   rQ   rR   r   rO   r   r.   rf   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d tjjddg|d}W d    n1 s2w   Y  t|||d	}|d
}|	 }t
| j dksSJ t
|dks[J t  |jdd}t
| j dkspJ t
|dksxJ t  |d
 }t  d S )Nr"      r   )size<   *   malefemale)r   r   r   r   r   r^   rB   r   )r   r%   r&   normalrP   
RNGContextr'   r   ra   r)   rg   r0   get_fignumsr   rO   hist)r/   r1   r   r   r   r2   gbresr   r   r   test_grouped_plot_fignumsi  s$   
z3TestDataFrameGroupByPlots.test_grouped_plot_fignumsc           	      C   s"  |}|j dd}t|tjsJ | j|d g dd |dj dd}| j|dddgd d	 }ttj	d
d|d}d }|d |d< dD ]F}|dj |d}| j||g dd |j d|d}| j||g dd |dj |d}| j|||d |j d|d}| j|||d qHd S )Nr   rI   r   r   r   )expected_keysrA   rB   MaleFemalezX B C D A G Y N Q O2   r"   rY   zA B C D E F G H I Jr   r   )rA   r^   rw   	classroomrZ   r[   r   )rH   rC   )
rO   ro   r%   ndarrayr{   ra   splitr   r&   rL   )	r/   rq   r2   rr   columns2df2categories2treturnedr   r   r   test_grouped_box_return_type  s0   

z6TestDataFrameGroupByPlots.test_grouped_box_return_typec                 C   s<  |}d}t jt|d |jddg|jdd W d    n1 s!w   Y  d}t jt|d |jg dd	d
d W d    n1 sDw   Y  d}t jt|d |jddg|jdd W d    n1 shw   Y  tjtdd t|	djdd
d}W d    n1 sw   Y  | j
| j jddd tjtdd t|	djdd
d}W d    n1 sw   Y  | j
| j jddd tjtdd t|	djdd
d}W d    n1 sw   Y  | j
| j jddd |jg d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 q2|	djg dd
d}| j
| j jddd tjtdd t|	djddd
d}W d    n	1 s}w   Y  | j
| j jddd tjtdd t|	djddd
d}W d    n	1 sw   Y  | j
| j jddd |jg dddd}| j
| j jddd |jg ddd d}| j
| j jdd!d |	djg dd"d
d}| j
| j jdd"d |	djg dd#d
d}| j
| j jdd$d d S )%Nz1Layout of 1x1 must be larger than required size 2rt   r   r   r   )rE   rH   r   z7The 'layout' keyword is not supported when 'by' is Noner  )r   r   rA   )rE   r   rC   z1At least one dimension of layout must be positive)r&  FrF   r   rD   r   r   r   r   r6   r  r  r   r^   )rE   rH   rC   )visible)r   r   )r   r&  )r6   r   )r&  r   )r   r   )r   r6   )r   r&  r   r   )rx   ry   rz   rO   r   rP   rQ   rR   r   ra   r   r0   gcfr^   _check_visibler*   xaxis	get_label)r/   rq   r2   r|   r   r^   r3   r   r   r   test_grouped_box_layout  s   









z1TestDataFrameGroupByPlots.test_grouped_box_layoutc              	   C   s(  |}t t( | jdd\}}|djdd|d | j| j j	ddd W d    n1 s2w   Y  | jdd	\}}t t |jg d
dd|d d}W d    n1 s]w   Y  t
t|j}| j|d	dd t ||d  |d j|u sJ t t |djg d
d|d d}W d    n1 sw   Y  t
t|j}| j|d	dd t ||d  |d j|u sJ d}tjt|d8 | jdd	\}}t t |dj|d}W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   r   r   r^   )rE   rC   r3   r6   r  r   r   r  r   r   )rE   rH   rC   r3   r(  r  r   z@The number of passed axes must be 3, the same as the output plotrt   )r3   )rP   rQ   rR   r0   r`   ra   rO   r   r)  r^   r%   arrayr.   rf   assert_numpy_array_equalr   rx   ry   rz   )r/   rq   r2   ri   r^   r$  r|   r   r   r   test_grouped_box_multiple_axes  sJ   
$z8TestDataFrameGroupByPlots.test_grouped_box_multiple_axesc                 C   s6   t g dg dd}| j|jddddddd d S )	Nr   )r   r   r   r   r   r   )r   r   r   r   r   )rH   r   r   r   rU   r   r   r   r   .  s   
z'TestDataFrameGroupByPlots.test_fontsizezcol, expected_xticklabelr   )(a, v)(b, v)(c, v)(d, v)(e, v)v1)(a, v1)(b, v1)(c, v1)(d, v1)(e, v1))
r1  r7  r2  r8  r3  r9  r4  r:  r5  r;  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s4J d S )
Nabcder   )catr   r6  r=  Fr^   )r`   rE   rC   c                 S   r   r   r   r   r   r   r   r    i  r   zQTestDataFrameGroupByPlots.test_groupby_boxplot_subplots_false.<locals>.<listcomp>)
r   r%   r&   r'   r.   r_   ra   r   rO   r*   )r/   r   expected_xticklabelr2   r   r^   result_xticklabelr   r   r   #test_groupby_boxplot_subplots_false4  s   (



z=TestDataFrameGroupByPlots.test_groupby_boxplot_subplots_falsec                 C   sZ   | d}|d}d}tjt|d t|jdd W d    d S 1 s&w   Y  d S )Nobjectr   z:boxplot method requires numerical columns, nothing to plotrt   F)r`   )r   ra   rx   ry   rz   r   rO   )r/   rq   r2   r   r|   r   r   r   test_groupby_boxplot_objectl  s   

"z5TestDataFrameGroupByPlots.test_groupby_boxplot_objectc           	      C   s   g dg dg}t t| }tj|ddgd}ttjddg d|d	}d
dg}t|j	|dd}ddg}dd |
 D }||ksDJ d S )N)r   r   bazrC  r>   r>   quxrD  )r8   r9   r8   r9   r8   r9   r8   r9   firstsecond)namesr   r   r  r<   )r   r8   )r   r9   r^   rD   z
(bar, one)z
(bar, two)c                 S   r   r   r   r   r   r   r   r      r   zLTestDataFrameGroupByPlots.test_boxplot_multiindex_column.<locals>.<listcomp>)r.   r  r   r  r   r%   r&   rL   r   rO   r*   )	r/   arraysr  r   r2   r   r^   r>  r?  r   r   r   test_boxplot_multiindex_columnt  s   z8TestDataFrameGroupByPlots.test_boxplot_multiindex_column)r   r   r   rV   rx   r   r   rm   r	  r  r%  r-  r0  r   r   r@  rB  rI  r   r   r   r   r   I  s:    


"
]
,


&r   )__doc__rc   rM   numpyr%   rx   pandas.util._test_decoratorsutil_test_decoratorstdpandasr   r   r   r   r   pandas._testing_testingrP   pandas.tests.plotting.commonr   r   pandas.io.formats.printingr	   pandas.plottingrS   skip_if_no_mplr
   r   r   r   r   r   <module>   s"      .