U
    sVc`                     @   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                   @   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   M/tmp/pip-unpacked-wheel-xj8nt62q/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columnr7   FZcheck_stacklevel)r9   byr;   )datar7   r   )notchr7   )r;   r>   )r   r   r    randnr%   stringascii_lettersr   boxplottmassert_produces_warningUserWarningplottingZ_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r3   ABXYFr:   r<   )r;   r*   axes)r*   r7   )r9   r;   r*   r7   r5   )r   r   r    randr   rC   rD   rE   r   rB   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)rB   
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.   r/   r0   r1   r2   z,return_type must be {'axes', 'dict', 'both'}matchZ
NOT_A_TYPEr6   rN   Fr5   both)r   r   r    r?   r%   r@   rA   pytestraises
ValueErrorrB   _check_box_return_typerC   rD   )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shaperB   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   r6   )r   r   r    r?   nanlocr   rB   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   )      )r7   Zfigsizer   r   )
r   r   r    rO   rB   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_propsrB   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   r5   colorr7   r   )r   r   r    rO   rB   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   r5   r6   )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   r5   r   )r   r   r    rO   rd   re   rf   rB   )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C1r7   r5   r   )r   rB   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!   rB   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!   rB   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   r6   r   r   r   Zaxes_numlayoutrP   r7   r   rr   )	rQ   rC   rD   rE   r   rB   _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   r6   )r-   r   r   r   rr   )zipr@   rA   ranger   r   r    rO   r   from_tuplesrQ   rC   rD   rE   r   rB   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   r6   r   r   r   r   rr   )r   r@   rA   r   r   r   r    rO   r   r   ZunstackrQ   rC   rD   rE   r   rB   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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 )Nr      rn   )size<   *   ZmaleZfemale)ro   rp   r   r   r   rN   r6   r   )r   r   r    normalrC   Z
RNGContextr!   r   rQ   r"   rV   r'   Zget_fignumsr$   r   rB   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_keysr5   r6   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{   )r5   rN   rc   	classroomrJ   rK   r|   )r;   r7   )rB   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   )r9   r;   r   z7The 'layout' keyword is not supported when 'by' is Nonerq   )r   r   r5   )r9   r   r7   z1At least one dimension of layout must be positive)r   Fr:   r   r8   r   r   r   r-   r   r   r   rN   )r9   r;   r7   )Zvisible)r   r   )r   r   )r-   r   )r   r   )r   r   )r   r-   )r   r   r   r   )rd   re   rf   rB   r   rC   rD   rE   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   )r9   r7   r*   r-   r   r   r   rp   r   r   )r9   r;   r7   r*   r   r   r   z@The number of passed axes must be 3, the same as the output plotra   )r*   )rC   rD   rE   r'   rP   rQ   rB   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   r9   r7   c                 S   s   g | ]}|  qS r   r   r   r   r   r   r   i  s     zQTestDataFrameGroupByPlots.test_groupby_boxplot_subplots_false.<locals>.<listcomp>)r   r   r    r!   r%   rO   rQ   r   rB   r#   r$   )r&   rl   expected_xticklabelr)   r   rN   result_xticklabelr   r   r   #test_groupby_boxplot_subplots_false4  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   rB   )r&   r^   r)   r   rh   r   r   r   test_groupby_boxplot_objectl  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bazr4   Zquxr.   r/   firstsecond)namesr   r   rJ   rK   r|   r2   )r   r.   )r   r/   rN   r8   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   rB   r#   r$   )	r&   Zarraysr   r   r)   rl   rN   r   r   r   r   r   test_boxplot_multiindex_columnt  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   r@   Znumpyr   rd   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr   r   r   r   r   Zpandas._testingZ_testingrC   Zpandas.tests.plotting.commonr   r   Zpandas.io.formats.printingr	   Zpandas.plottingrF   Zskip_if_no_mplr
   r   r   r   r   r   <module>   s      .