U
    +ifU                     @   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 ejj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_worksc                   @   s  e Z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
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-d.gd/d0 Zd1S )2TestDataFramePlotsc              	   C   sL  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	
t t|jddgdd W 5 Q R X t|jdddgd t	
t t|jdd W 5 Q R X t	
t t|jddgd W 5 Q R X ttjj|d dd t|jddd t	
t t|jddd W 5 Q R X d S )N      onetwothreefourindexcolumnsfoobar   Zindic   Zindic2dictreturn_typecolumnr   )r   byr   )datar      )notchr   )r   r    )r   nprandomrandnliststringascii_lettersr   boxplottmassert_produces_warningUserWarningplottingZ_coreselfdf r/   \/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/plotting/test_boxplot_method.pytest_boxplot_legacy1   s(    
z'TestDataFramePlots.test_boxplot_legacy1c                 C   sv  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t 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srtd S )N
   r   ZCol1ZCol2r   ABXYr   )r   axaxes)r8   r   )r   r   r8   r   r   )r   r!   r"   randr   r(   r)   r*   r   r'   pltsubplotsr9   AssertionErrorgroupbyZ
get_figurer$   	itertoolschainfrom_iterablevalueslen	get_lines)r-   r.   figr8   r9   Zax_axesdlinesr/   r/   r0   test_boxplot_legacy27   s4        z'TestDataFramePlots.test_boxplot_legacy2c                 C   s    | j  }t|| jjstd S N)hist_dfr'   
isinstancer;   ZAxesr=   )r-   resultr/   r/   r0   test_boxplot_return_type_noneY   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   r   r   r   r   z,return_type must be {'axes', 'dict', 'both'}matchZ
NOT_A_TYPEr   r9   Fr   both)r   r!   r"   r#   r$   r%   r&   pytestraises
ValueErrorr'   _check_box_return_typer(   r)   )r-   r.   msgrL   r/   r/   r0   test_boxplot_return_type_legacy^   s&    
z2TestDataFramePlots.test_boxplot_return_type_legacyc                 C   s   dd }| j  }tjdd|jd |d< |jddgd	d
\}}||d | ||d | |j|kslt|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 rI   )Zget_ylimminr=   max)colr8   Zy_minZy_maxr/   r/   r0   _check_ax_limitsz   s    zETestDataFramePlots.test_boxplot_axis_limits.<locals>._check_ax_limitsr      r   Zageheightweightcategoryr   )r   r   )r   r   )r   r   r   r   )	rJ   copyr!   r"   randintshaper'   Z_shareyr=   )r-   rZ   r.   Z	height_axZ	weight_axpZage_axZdummy_axr/   r/   r0   test_boxplot_axis_limitsy   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[   r   r   r9   r   )r   r!   r"   r#   nanlocr   r'   r,   r/   r/   r0   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 )Nr2      r4   r5   CDEr3   r9   )      )r   Zfigsizerl   rm   )
r   r!   r"   r:   r'   figureZbbox_incheswidthr=   r\   )r-   r.   rL   r/   r/   r0   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   rh   r
      )fontsizeZ
xlabelsizeZ
ylabelsizer   Z_check_ticks_propsr'   r,   r/   r/   r0   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)rx   tzz1 days)rq   bcrF   efbox)kindc                 S   s   g | ]}|  qS r/   Zget_text.0xr/   r/   r0   
<listcomp>   s     z@TestDataFramePlots.test_boxplot_numeric_data.<locals>.<listcomp>r{   r|   )r   r   r!   r"   r#   astypestrr   plotget_xticklabelsr=   )r-   r.   r8   r/   r/   r0   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 )Nr2   r   r   colorr   r   )r   r!   r"   r:   r'   items	get_colorr=   )r-   Z
colors_kwdexpectedr.   rL   kvr/   r/   r0   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 )Nr2   r   r   r   r   )r   r!   r"   r:   Zmatplotlib.pyplotZpyplotstyleZuser   r   r   r   r=   )r-   schemer   r.   r;   rL   r   r   r/   r/   r0   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 )Nr2   r   rN   r   r   )r   r!   r"   r:   rQ   rR   rS   r'   )r-   Zdict_colorsrU   r.   r/   r/   r0   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 )rw   )r!   r"   )r   r   r/   r/   r0   
<dictcomp>   s      z?TestDataFramePlots.test_specified_props_kwd.<locals>.<dictcomp>ABCr   ZC1r   r   r   )r   r'   r   r=   )r-   propsr   r.   ZkwdrL   r/   r/   r0   test_specified_props_kwd   s    z+TestDataFramePlots.test_specified_props_kwdN)__name__
__module____qualname__r1   rH   rM   rV   rd   rg   rp   rv   r   rQ   markparametrizer   r   r   r   r/   r/   r/   r0   r	      sh   "




	r	   c                   @   s   e Z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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   sl   | j jdd}tt 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   r9   r   r   r   r   Zaxes_numlayoutFr<   r   r   r_   )
rJ   r>   r(   r)   r*   r   r'   _check_axes_shaper$   rB   )r-   groupedr9   r/   r/   r0   r1     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t 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 )Nr2   r   r   r   levelr9   r   )r   r   r   Fr   r_   )zipr%   r&   ranger   r!   r"   r:   r   from_tuplesr>   r(   r)   r*   r   r'   r   r$   rB   r-   tuplesr.   r   r9   r/   r/   r0   rH     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t 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 )Nr2   r   r   r   r   r   )r   Zaxisr9   r   r   r   r   Fr   r_   )r   r%   r&   r   r   r!   r"   r:   r   r   Zunstackr>   r(   r)   r*   r   r'   r   r$   rB   r   r/   r/   r0   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 5 Q R X 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 )Nr2      r[   )size<   *   ZmaleZfemale)r\   r]   r   r   r   r9   r   r   )r   r!   r"   normalr(   Z
RNGContextchoicer   r>   r   rC   r;   Zget_fignumsr=   closer'   hist)r-   nr]   r\   r   r.   gbresr/   r/   r0   test_grouped_plot_fignums!  s"    
z3TestDataFrameGroupByPlots.test_grouped_plot_fignumsc                 C   s*  | j }|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   r\   r]   r^   )Zexpected_keysr   r   ZMaleZFemalezX B C D A G Y N Q O2   r2   r3   zA B C D E F G H I Jrh   )r   r9   rP   	classroomr4   r5   ri   )r   r   )rJ   r'   rK   r!   Zndarrayr=   rT   r>   splitr   r"   r#   )r-   r.   rL   Zcolumns2Zdf2Zcategories2treturnedr/   r/   r0   test_grouped_box_return_type8  s6        z6TestDataFrameGroupByPlots.test_grouped_box_return_typec              	   C   s  | j }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t t	|
djdd
d}W 5 Q R X | j| j jddd tt t	|
djdd
d}W 5 Q R X | j| j jddd tt 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t t	|
djddd
d}W 5 Q R X | j| j jddd tt 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 2rN   r]   r\   r_   )r   r   r   z7The 'layout' keyword is not supported when 'by' is Noner^   )r   r   r   )r   r   r   z1At least one dimension of layout must be positive)r   r   r   r   r   r   r   r   r   r   r9   )r   r   r   F)visible)r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   r   r   )rJ   rQ   rR   rS   r'   r   r(   r)   r*   r   r>   r   r;   gcfr9   Z_check_visibler   ZxaxisZ	get_label)r-   r.   rU   r   r9   r8   r/   r/   r0   test_grouped_box_layoutZ  s      
  
  
    
 

    
  
  z1TestDataFrameGroupByPlots.test_grouped_box_layoutc              
   C   s  | j }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s\t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   r^   r\   r9   )r   r   r8   r   r   r   r   r]   r   r   )r   r   r   r8   r   r   r   z@The number of passed axes must be 3, the same as the output plotrN   )r8   )rJ   r(   r)   r*   r;   r<   r>   r'   r   r   r9   r!   arrayr$   rB   Zassert_numpy_array_equalrn   r=   rQ   rR   rS   )r-   r.   rE   r9   r   rU   r/   r/   r0   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   rh   r
   r   )rq   r{   rq   r{   rr   )r   rs   rt   ru   r,   r/   r/   r0   rv     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abcderw   )catr   r   r   Fr9   )r<   r   r   c                 S   s   g | ]}|  qS r/   r   r   r/   r/   r0   r     s     zQTestDataFrameGroupByPlots.test_groupby_boxplot_subplots_false.<locals>.<listcomp>)r   r!   r"   r   r$   r:   r>   r   r'   r   r=   )r-   rY   expected_xticklabelr.   r   r9   result_xticklabelr/   r/   r0   #test_groupby_boxplot_subplots_false  s    (


   z=TestDataFrameGroupByPlots.test_groupby_boxplot_subplots_falsec              	   C   sF   | j 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 plotrN   F)r<   )rJ   r   r>   rQ   rR   rS   r   r'   )r-   r.   r   rU   r/   r/   r0   test_groupby_boxplot_object!  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bazr   Zquxr   r   firstsecond)namesr   rm   r4   r5   ri   r   )r   r   )r   r   r9   r   z
(bar, one)z
(bar, two)c                 S   s   g | ]}|  qS r/   r   r   r/   r/   r0   r   7  s     zLTestDataFrameGroupByPlots.test_boxplot_multiindex_column.<locals>.<listcomp>)r$   r   r   r   r   r!   r"   r#   r   r'   r   r=   )	r-   Zarraysr   r   r.   rY   r9   r   r   r/   r/   r0   test_boxplot_multiindex_column)  s    z8TestDataFrameGroupByPlots.test_boxplot_multiindex_column)r   r   r   r1   rH   r   r   r   r   r   rv   rQ   r   r   r   r   r   r/   r/   r/   r0   r     sX   
"],&
r   )__doc__r?   r%   numpyr!   rQ   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr   r   r   r   r   Zpandas._testingZ_testingr(   Zpandas.tests.plotting.commonr   r   Zpandas.plottingr+   r   ZslowZ
pytestmarkZskip_if_no_mplr	   r   r/   r/   r/   r0   <module>   s    e