U
    f/em                     @   s   d 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 ddlmZ ddlmZmZ ejjZejG dd deZejG dd deZejG d	d
 d
eZdS )z Test cases for .hist method     N)	DataFrameIndexSeriesto_datetime)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
ejdddddgdd Zejdddgdd Zejdddgd d! Zd"d# Zejd$d% Zejd&d' ZdS )(TestSeriesPlotsc                 C   s2   t | | dd l}|  t | _d| j_d S )Nr   ts)r   setup_methodZ
matplotlibZ
rcdefaultstmZmakeTimeSeriesr	   name)selfmethodZmpl r   J/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/plotting/test_hist_method.pyr
      s
    
zTestSeriesPlots.setup_methodc              	   C   sL  t | jj t | jjdd t | jjdd tt t | jj| jjjd W 5 Q R X tt t | jj| jjjdd W 5 Q R X | j	dd\}}t | jj|d	d
 t | jj||d	d t | jj|d	d t
  | j	dd\}\}}t | jj||d	d t | jj||d	d d}tjt|d | jj| jj|d W 5 Q R X d S )NFZgrid   
   figsizeby   )r   bins   T)axdefault_axes)r   figurer   )r   r      )r   r   r   z`Cannot pass 'figure' when using the 'by' argument, since a new 'Figure' instance will be createdmatch)r   r   )r   r	   histr   assert_produces_warningUserWarningindexmonthpltsubplotsclosepytestraises
ValueError)r   figr   ax1ax2msgr   r   r   test_hist_legacy#   s&     "z TestSeriesPlots.test_hist_legacyc                 C   s<   t tjdd}|jddd d }t|jdks8td S )Nr   r   r   r   )r   nprandomrandnr"   lenpatchesAssertionError)r   dfr   r   r   r   test_hist_bins_legacy>   s    z%TestSeriesPlots.test_hist_bins_legacyc              	   C   sb   | j }d}tjt|d |jjdd W 5 Q R X tjt|d |jjddgd W 5 Q R X d S )Nz7The 'layout' keyword is not supported when 'by' is Noner    r   r   layoutr   )hist_dfr*   r+   r,   heightr"   )r   r9   r0   r   r   r   test_hist_layoutC   s    z TestSeriesPlots.test_hist_layoutc              	   C   s  | j }tt t|jj|jdd}W 5 Q R X | j|ddd tt t|jj|jdd}W 5 Q R X | j|ddd tt t|jj|j	dd}W 5 Q R X | j|ddd tt t|jj|j	d	d}W 5 Q R X | j|dd
d tt t|jj|j	dd}W 5 Q R X | j|ddd tt t|jj|j	dd}W 5 Q R X | j|ddd tt t|jj|j
d
d}W 5 Q R X | j|dd
d |jj|j	ddd}| j|dddd d S )Nr   r   r   r=   r   axes_numr=   )   )rE   r      r   rH   r   rF   r   r   )rE   r   rF   rH   r   rH   rE   rH   r   )      )r   r=   r   rD   r=   r   )r>   r   r#   r$   r   r?   r"   gender_check_axes_shapecategory	classroomr   r9   axesr   r   r   test_hist_layout_with_byL   s0    z(TestSeriesPlots.test_hist_layout_with_byc                 C   sp   ddl m}m} ttjd}ttjd}|d |  |d |  | }|j}t	|dkslt
d S )Nr   )gcfsubplotr   y   z   )Zmatplotlib.pyplotrX   rY   r   r3   r4   r5   r"   rV   r6   r8   )r   rX   rY   xyr-   rV   r   r   r   test_hist_no_overlapq   s    z$TestSeriesPlots.test_hist_no_overlapc                 C   s0   | j }|jj|jd}t| j dks,td S )Nr   r   )r>   r?   r"   rQ   r6   r'   get_fignumsr8   rU   r   r   r   test_hist_by_no_extra_plots   s    z+TestSeriesPlots.test_hist_by_no_extra_plotsc              	   C   sT   ddl m} | }| }|d}d}tjt|d | jj||d W 5 Q R X d S )Nr   )r   o   z&passed axis not bound to passed figurer    )r   r   )Zpylabr   Zadd_subplotr*   r+   r8   r	   r"   )r   r   Zfig1Zfig2r.   r0   r   r   r   +test_plot_fails_when_ax_differs_from_figure   s    
z;TestSeriesPlots.test_plot_fails_when_ax_differs_from_figurehisttype, expectedbarTZ
barstackedTstepFZ
stepfilledTc                 C   s0   t tjdd}|j|d}| j||d d S )Nr   r   histtypeZfilled)r   r3   r4   randintr"   _check_patches_all_filled)r   rk   expectedserr   r   r   r   test_histtype_argument   s    z&TestSeriesPlots.test_histtype_argumentz&by, expected_axes_num, expected_layout)Nr   r;   )br   )r   r   c                 C   sd   ddg ddg  }t tjd|dd}d|j_t|jdd|d	}| j|||d
 | 	|d d S )N   12   ar%   r   rr   T)r   legendr   rC   )
r   r3   r4   r5   r%   r   r   r"   rR   _check_legend_labels)r   r   expected_axes_numexpected_layoutr%   srV   r   r   r   test_hist_with_legend   s    z%TestSeriesPlots.test_hist_with_legendr   Nrr   c              	   C   s`   ddg ddg  }t tjd|dd}d|j_tjtdd	 |j	d
|dd W 5 Q R X d S )Nrs   rt   ru   rv   rw   rx   rr    Cannot use both legend and labelr    Tc)ry   r   label)
r   r3   r4   r5   r%   r   r*   r+   r,   r"   )r   r   r%   r}   r   r   r   test_hist_with_legend_raises   s
    z,TestSeriesPlots.test_hist_with_legend_raisesc                 C   s   | j  \}}| jjjd|d}t|jdks2t| |j	
 d t  | j  \}}| jjjd|d}| |j
 d t  | j  \}}| jjjdd|d}t  d S )	Nr   r   r   Z	FrequencyZ
horizontal)Zorientationr   leftT)ZalignZstackedr   )r'   r(   r	   plotr"   r6   r7   r8   _check_text_labelsyaxisZ	get_labelr   r)   Zxaxis)r   _r   r   r   r   test_hist_kwargs   s    z TestSeriesPlots.test_hist_kwargsc                 C   s   | j  \}}| jjjd|d}| j|dd | }| |dgt|  |	 }| |dgt|  t
| jjj t
| jjj | j  \}}| jjjd|d}| j|dd | }| |dgt|  |	 }| |dgt|  d S )NT)logyr   logr    )r'   r(   r	   r   r"   _check_ax_scalesZget_xticklabelsr   r6   Zget_yticklabelsr   kdedensity)r   r   r   ZxlabelsZylabelsr   r   r   test_hist_kde   s     zTestSeriesPlots.test_hist_kdec                 C   s   | j  \}}| jjjddd|d}| j|dd t|jdksDt| j	|jdgd d | j  \}}| jjj
dd|d	}| j|dd | }t|d
kst| 	|dg d S )NTr   rr   )r   r   colorr   r   r   )Z
facecolorsr)r   r   r   r   )r'   r(   r	   r   r"   r   r6   r7   r8   Z_check_colorsr   	get_lines)r   r   r   linesr   r   r   test_hist_kde_color   s    z#TestSeriesPlots.test_hist_kde_color)__name__
__module____qualname__r
   r1   r:   r@   rW   r^   r`   rb   r*   markparametrizerq   r~   r   r   tdZskip_if_no_scipyr   r   r   r   r   r   r      s:   		%
	
 

	
r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	
dddddgfdddgdddgfgdd Zej	
dddddgdd Zej	
dddgej	
dddgdd Zej	
dddgej	
dddgdd  Zd!d" Zd#d$ Zd%d& ZdS )'TestDataFramePlotsc           
   	      s  ddl m  tt t| jj W 5 Q R X tt	j
dd}tt	j
j| j| jdt	jd|d< tt t|jdd}W 5 Q R X | j|dd	d
 |d  rtt|dg j tt	j
dd}t|j tt	j
dd}tt	j
j| j| jdt	jd|d< tt t|jdd}W 5 Q R X | j|ddd
 tt t|jddd W 5 Q R X tt t|jdd W 5 Q R X tt t|jdd W 5 Q R X |d }d\}}d\}}|j||||d}| j|||||d d\}}d\}}|j||||d}| j|||||d t  |jdddd} fdd| D }	t|	d  d t  |jdd}| j|d d! t  tt |jd"d# W 5 Q R X d S )$Nr   	Rectangled   r   sizedtypeFr   rE   rJ   rC   r;   r   r   rM   r<      T)sharexshareyr   r   r2         rv   (   
xlabelsizexrot
ylabelsizeyrotrH   )
cumulativer   r   c                    s   g | ]}t | r|qS r   
isinstance.0r\   r   r   r   
<listcomp>6  s     
 z:TestDataFramePlots.test_hist_df_legacy.<locals>.<listcomp>rF         ?)r   r   r   re   )foo)matplotlib.patchesr   r   r#   r$   r   r>   r"   r   r3   r4   r5   r   rm   start_date_to_int64end_date_to_int64int64rR   get_visibler8   _check_ticks_propsr)   get_childrenassert_almost_equal
get_heightr   external_error_raisedAttributeError)
r   r9   rV   rp   xfyfr   r   r   rectsr   r   r   test_hist_df_legacy   s    
        z&TestDataFramePlots.test_hist_df_legacyc                 C   s   t tjdtjdddttjjdddtjdttjjdddtjdddd}|t}d	}t	j
t|d
 |  W 5 Q R X d S )Nr   r   l     p/ l    @spc/ )r   T)utc)rw   rr   r   dzDhist method requires numerical or datetime columns, nothing to plot.r    )r   r3   r4   Zrandrm   r   r   Zastypeobjectr*   r+   r,   r"   )r   r9   Zdf_or0   r   r   r   *test_hist_non_numerical_or_datetime_raisesD  s4    
      
z=TestDataFramePlots.test_hist_non_numerical_or_datetime_raisesc                 C   s:  t tjdd}ttjj| j| jdtjd|d< d ddddddddddddddd	ddd
ddddddddf	}|D ],}|j	|d d}|d }| j
|d|d qd}tjt|d |j	dd W 5 Q R X td}tjt|d |j	dd W 5 Q R X d}tjt|d |j	dd W 5 Q R X d S )Nr   r   r   rJ   )r=   expected_sizerG   rL   )rE   rE   rK   )rH   rF   )rF   r   rI   r=   r<   r   rE   rC   z1Layout of 1x1 must be larger than required size 3r    r;   z)Layout must be a tuple of (rows, columns))r   1At least one dimension of layout must be positiverF   rF   )r   r3   r4   r5   r   rm   r   r   r   r"   rR   r*   r+   r,   reescape)r   r9   Zlayout_to_expected_sizeZlayout_testrV   ro   r0   r   r   r   r@   ]  s@    

z#TestDataFramePlots.test_hist_layoutc                 C   sX   t tjdd}ttjj| j| jdtjd|d< t	|j
dd | j  t  d S )Nr   r   r   T)r   )r   r3   r4   r5   r   rm   r   r   r   r   r"   r'   Ztight_layoutr   r)   )r   r9   r   r   r   test_tight_layout  s    	
z$TestDataFramePlots.test_tight_layoutc              	   C   sL   t dddddgdddddgd}t|jd	d
ddddd}| j|dd d S )N      ?      ?333333??rE   pigrabbit)lengthanimalTalwaysr   r   r   r   )r   filterwarningscolumnr   r   r   r   )r   r   r"   r   rU   r   r   r   test_hist_subplot_xrot  s    	z)TestDataFramePlots.test_hist_subplot_xrotzcolumn, expectedNwidthr   r?   c                    st   t dddddgddddd	gd	dd
ddgddddddgd}t|jd|dd  fddtd	D }||ksptd S )Ngffffff?g?g333333?g?r   r   r   r   rE   g333333@r   r   )r   r   r?   r   r   ZduckZchickenZhorse)r%   Tr   rE   )r   r   r=   c                    s   g | ]} d |f   qS )r   )Z	get_title)r   irV   r   r   r     s     zGTestDataFramePlots.test_hist_column_order_unchanged.<locals>.<listcomp>)r   r   r"   ranger8   )r   r   ro   r9   resultr   r   r    test_hist_column_order_unchanged  s    

z3TestDataFramePlots.test_hist_column_order_unchangedrc   rd   rf   rg   ri   c                 C   s<   t tjjddddddgd}|j|d}| j||d	 d S )
Nr   r   r   r   r   rw   rr   columnsrj   rl   r   r3   r4   rm   r"   rn   r   rk   ro   r9   r   r   r   r   rq     s    z)TestDataFramePlots.test_histtype_argumentr   r   r   rr   c                 C   s   |d kr|d k	rdnd}d|f}|p*ddg}|d k	r>|gd }t ddg ddg  dd	}ttjd
d|ddgd}t|jdd||d}| j|||d |d kr|d kr|d }t||D ]\}	}
| 	|
|	 qd S )Nr   r   rw   rr   rs   rt   ru   r   r   rv   r%   r   T)r   ry   r   r   rC   r   )
r   r   r3   r4   r5   r   r"   rR   ziprz   )r   r   r   r{   r|   Zexpected_labelsr%   r9   rV   Zexpected_labelr   r   r   r   r~     s&    
z(TestDataFramePlots.test_hist_with_legendc              	   C   sh   t ddg ddg  dd}ttjdd|dd	gd
}tjtdd |jd||dd W 5 Q R X d S )Nrs   rt   ru   r   r   rv   r   rw   rr   r   r   r    Tr   )ry   r   r   r   )	r   r   r3   r4   r5   r*   r+   r,   r"   )r   r   r   r%   r9   r   r   r   r     s    z/TestDataFramePlots.test_hist_with_legend_raisesc                 C   sF   t tjdd}| j \}}|jjd|d}t|j	dksBt
d S )Nr   r   r   r   )r   r3   r4   r5   r'   r(   r   r"   r6   r7   r8   r   r9   r   r   r   r   r   test_hist_df_kwargs  s    z&TestDataFramePlots.test_hist_df_kwargsc              	   C   s   t d$ ttjddddddgd}W 5 Q R X d	d
gd |d< | j \}}|jj	d|d}t
|jdkstt| j \}}|jj	|d}t
|jdkstd S )Nr   r   rH   ABCDr   r\   r]   r   Er   r   )r   r   )r   
RNGContextr   r3   r4   r5   r'   r(   r   r"   r6   r7   r8   r   r   r   r   test_hist_df_with_nonnumerics  s    (z0TestDataFramePlots.test_hist_df_with_nonnumericsc                 C   s  t tjddtdd}| j \}}|d jjd|d}|d jj|ddd	 | j	|dd
gd |
  stt|j
  stt  | j \}}|d jjdd|d}|d jj|ddd	 | j	|jdd
gd |j
  rt|
  stt  | j \}}|d jjdd|d}|d jj|dd | j	|jddgd |j
  sft|
  sxtt  d S )Nrv   rH   Zabcdr   rw   T)ry   r   rr   )r   ry   secondary_yz	b (right))labels)ry   r   r   z	a (right))r   ry   )r   r3   r4   r5   listr'   r(   r   r"   rz   Z	get_yaxisr   r8   Zright_axr   r)   Zleft_axr   r   r   r   test_hist_secondary_legend  s,    z-TestDataFramePlots.test_hist_secondary_legend)r   r   r   r   r   r@   r   r   r*   r   r   r   rq   r~   r   r   r   r   r   r   r   r   r      s<   U*
	
r   c                   @   sb   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	e
jdddddgdd ZdS )TestDataFrameGroupByPlotsc                    s  ddl m  ddlm} ttjdddgd}ttjj	| j
| jdtjd|d	< tj	dd
d|d< dgd |d< ||j|jd}| j|d
dd t  |j|jd}| j|d
dd t  |jddd}| j|ddd | j|dd t  d\}}d\}}||j|jdd
||||dd	}| D ]4} fdd| D }	|	d  }
t|
d q,| j|||||d t  ||j|jdd}| j|dd  t  tt ||j|jd!d" W 5 Q R X d#}tjt|d$ |jdd%d& W 5 Q R X d S )'Nr   r   )_grouped_histi  r   r   r   r   r   rH   r   Xr   r   rJ   rC   rv   )r   Zrotr;   r   r   r   T)r   r   r   r   r   r   r   r   c                    s   g | ]}t | r|qS r   r   r   r   r   r   r   i  s     
 zFTestDataFrameGroupByPlots.test_grouped_hist_legacy.<locals>.<listcomp>rF   r   r   )r   r   r   r   re   )r   r   z$Specify figure size by tuple insteadr    default)r   r   )r   r   Z pandas.plotting._matplotlib.histr   r   r3   r4   r5   r   rm   r   r   r   r   r   rR   r   r)   r"   r   Zravelr   r   r   r   r   r   r*   r+   r,   )r   r   r9   rV   r   r   r   r   r   r   r?   r0   r   r   r   test_grouped_hist_legacy9  sp        z2TestDataFrameGroupByPlots.test_grouped_hist_legacyc              	   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
|dkstt
| j dkstt  d S )Nr      r   r   <   *   r   r   )r?   weightrQ   rQ   r   )r   r3   r4   normalr   r   choicer   groupbyr"   r6   r8   r'   r_   r)   )r   nr  r?   Z
gender_intZdf_intgbrV   r   r   r   test_grouped_hist_legacy2~  s    
z3TestDataFrameGroupByPlots.test_grouped_hist_legacy2c              	   C   s,  | j }d}tjt|d |jd|jdd W 5 Q R X d}tjt|d |jd|jdd W 5 Q R X d	}tjt|d |jd|jd
d W 5 Q R X tt	 t
|jd|jdd}W 5 Q R X | j|ddd tt	 t
|jd|jdd}W 5 Q R X | j|ddd |jd|jdd}| j|ddd |jd|jdd}| j|ddd |jd|jddd}| j|dddd t  tt	 t
|jdddd}W 5 Q R X | j|ddd tt	 t
|jdd}W 5 Q R X | j|ddd |jddd}| j|ddd |jdddgd}| j|ddd d S )Nz1Layout of 1x1 must be larger than required size 2r    r  r;   )r   r   r=   z1Layout of 1x3 must be larger than required size 4r?   r   r   r   rA   r   rC   rI   rG   rH   )rF   r   rM   )rN   r   )r   r   r=   r   rP   rT   rJ   rE   r   rQ   )rE   r   rB   rS   )r   )r>   r*   r+   r,   r"   rQ   rS   r   r#   r$   r   rR   r)   )r   r9   r0   rV   r   r   r   test_grouped_hist_layout  s`             z2TestDataFrameGroupByPlots.test_grouped_hist_layoutc              	   C   s   | j }| jdd\}}|jdddg|d d}| j|ddd	 t||d  |d j|ksbt|jd
|d d}| j|ddd	 t||d  |d j|kst| jdd\}}d}t	j
t|d |jd|d}W 5 Q R X d S )Nr   rE   r?   r  rS   r   )r   r   r   rC   rT   r   )r   r   z@The number of passed axes must be 1, the same as the output plotr    )r>   r'   r(   r"   rR   r   Zassert_numpy_array_equalr   r8   r*   r+   r,   )r   r9   r-   rV   Zreturnedr0   r   r   r   test_grouped_hist_multiple_axes  s    z9TestDataFrameGroupByPlots.test_grouped_hist_multiple_axesc                 C   sh   | j }|jd|jdd\}}|j||s.t|j||s@t|j||rRt|j||rdtd S )Nr?   T)r   r   r   r>   r"   rQ   _shared_x_axesjoinedr8   _shared_y_axesr   r9   r.   r/   r   r   r   test_axis_share_x  s    z+TestDataFrameGroupByPlots.test_axis_share_xc                 C   sh   | j }|jd|jdd\}}|j||s.t|j||s@t|j||rRt|j||rdtd S )Nr?   T)r   r   r   )r>   r"   rQ   r  r  r8   r  r  r   r   r   test_axis_share_y  s    z+TestDataFrameGroupByPlots.test_axis_share_yc                 C   sj   | j }|jd|jddd\}}|j||s0t|j||sBt|j||sTt|j||sftd S )Nr?   T)r   r   r   r   r  r  r   r   r   test_axis_share_xy  s    z,TestDataFrameGroupByPlots.test_axis_share_xyrc   rd   rf   rg   ri   c                 C   s>   t tjjddddddgd}|jd|d}| j||d	 d S )
Nr   r   r   r   rw   rr   r   )r   rk   rl   r   r   r   r   r   rq     s    z0TestDataFrameGroupByPlots.test_histtype_argumentN)r   r   r   r   r
  r  r  r  r  r  r*   r   r   rq   r   r   r   r   r   7  s    E6	r   )__doc__r   Znumpyr3   r*   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasr   r   r   r   Zpandas._testingZ_testingr   Zpandas.tests.plotting.commonr   r   r   ZslowZ
pytestmarkZskip_if_no_mplr   r   r   r   r   r   r   <module>   s"    U  K