U
    f/e)6                    @   s   d Z ddlmZmZ ddlZddl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 ddl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 ddl m!Z! e	j"j#Z$ej%G dd	 d	eZ&d
d Z'dS )z Test cases for DataFrame.plot     )datedatetimeN)is_list_like)	DataFrame
MultiIndexPeriodIndexSeriesbdate_range
date_range)TestPlotBase_check_plot_workspprint_thingc                   @   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	dd Z
ejdddgdd Zejddddg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d,d- Zejjd.d/d0ejd1d2d.gd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Zd=d> Zd?d@ Z dAdB Z!dCdD Z"dEdF Z#dGdH Z$ejdId2d.gejdJdKdLdMgdLdMdKgfdNdO Z%ejdPdQdRdSgdTdU Z&dVdW Z'dXdY Z(dZd[ Z)d\d] Z*d^d_ Z+d`da Z,e-j.dbdc Z/e-j.ddde Z0dfdg Z1ejdhdie2j3djdk die2j3dldk gdmdn Z4ddpdqZ5drds Z6dtdu Z7dvdw Z8dxdy Z9ejdzd{d|d}d~gdd Z:dd Z;e-j.dd Z<dd Z=dd Z>dd Z?ejdddgddfdgddgddgfgdd Z@dd ZAejdddgdfgdd ZBejdddgdgdgfdddgddgddgfdddgddgddgfgdd ZCejdddddgfddddgfgdd ZDdd ZEdd ZFejdi dfddidfddidfgdd ZGdd ZHdd ZIdd ZJejddddgdd ZKejjdeLdddĄ ZMddƄ ZNddȄ ZOejddddgddʄ ZPdd̄ ZQdd΄ ZRddЄ ZSdd҄ ZTddԄ ZUe-j.ddք ZVdd؄ ZWddڄ ZXdd܄ ZYejddddgdd߄ ZZdd Z[dd Z\ejdddgdd Z]dd Z^dd Z_dd Z`ejddddddodddgfgejddddgdd Zaejdddddgejdddgdd ZbdoS )TestDataFramePlotsc                 C   sd   t | | dd l}|  t | _ttj	j
ddtj	j
ddtdtj	j
dd d| _d S )Nr      sizeABC)r   setup_method
matplotlibZ
rcdefaultstmZmakeTimeDataFrametdfr   nprandomuniformarange	hexbin_df)selfmethodmpl r#   J/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/plotting/frame/test_frame.pyr   )   s    
zTestDataFramePlots.setup_methodc              	   C   s  ddl m} | j}t|jdd t|jddd}| j|ddd	 t|jddd
d}| j|ddd	 t|jdddd}| j|dd | j|ddd	 tddgddgd}| rd}nd}tj	t
|d |jjdd W 5 Q R X ttjddttjd d d}t|jdd}| j|dd t|jdd t|jdddgd t|jdddgd t|jddd t|jddd d! |jdd d"}| j|dd#d	 |d d D ]P}| |j | j| dd$ | j|jdd%dd$ | j|j gdd$ q|d fD ]@}| |j | |  | |j g | j|dd qt|jd d& ttjd d td}ttjddt|d}t|jdd}| j|dd tjd'd(d)d*d+d,d-d.gd/d0gd1}tjd2d3gd4d5gd1}ttjddd6||d7}t|jd8d& td9tjdi}t|jjdd:}| j|dd;d	 t|jjdd<d=}| j|dd;d	 | j \}	}|jjd|d>}t|dkst|j }
|
|d kstd S )?Nr   )mpl_ge_3_1_0F)ZgridTdefault_axessubplots   r)      axes_numlayout)   )r'   r(   r.   r0   r0   )r'   r(   	use_indexxrotr+   r0      xyz''Line2D' object has no property 'blarg'zUnknown property blargmatch)Zblarg
   index)r2   )Zsort_columns   )Zyticks)xticks)id   )ZylimZxlimZblah)r'   r(   title)r(   rA   r5   r+   Zvisibleminor)rA   )   αr   )rF   r+   )   βr0   )rG   r5   )   γr)   )rH   r>   )   δ   )rI      Zi0i1)names)baru   Δ)rN   u   ΕZc0Zc1)   r0   columnsr=   u   Σr7   )r(   r+   r+   )r/   r+   )r(   r.   r(   ax)!"pandas.plotting._matplotlib.compatr%   r   r   plot_check_axes_shape_check_ticks_propsr   pytestraisesAttributeErrorliner   r   randliststringascii_letters_check_visiblexaxisget_xticklabels	get_labelzipranger   from_tuplesrandintrN   pltr(   lenAssertionErroraxes)r    r%   dfrl   msgrT   Ztuplesr=   rQ   figresultr#   r#   r$   	test_plot8   s    $
 zTestDataFramePlots.test_plotc              
   C   s  ddd ddg}t ddddd	gd
ddddgdd	tjddgtj|dddtj|dddddtjd}t|jddd t|ddg jddd t|ddg jddd t|ddg jddd t|ddg jddd t|ddg jddd t|ddg jddd d S )NZ2008Z2009Z2011Z2012r+   r0   r5   r)   r>         ?       @      @      @      @rK   z%Y)formati8T)rw   utc)r   r   r   DEdtyper   r   r6   r   rz   r{   )	r   r   nanpdZto_datetimeviewint64r   rV   )r    datesrm   r#   r#   r$   test_nullable_int_plot   s"    z)TestDataFramePlots.test_nullable_int_plotc                 C   s   t jddddgdd}t|}t|jj t|jj t|jj t|jj t	||d}t|jj t|jj t|jj t|jjdd	 t|jj
d
dd t|jjd
dd d S )Nr+   r0   r5   r)   ZUInt32r|   r6   r8   r8   r7   )r   arrayr   r   rV   r\   rN   histpier   scatterhexbin)r    Zarrsrm   r#   r#   r$   test_integer_array_plot   s    z*TestDataFramePlots.test_integer_array_plotc                 C   s:   t dddgdddgd}| }t| dks6td S )Nr7   r8   zr+   r0   r5   r   r   )r   rV   rj   	get_linesrk   r    rm   rT   r#   r#   r$   test_nonnumeric_exclude   s    z*TestDataFramePlots.test_nonnumeric_excludec                 C   s@   t tjdddddgd}|jddd}| |j d d S )Nr;   r5   abcrQ   r6   )r   r   r   randnrV   _check_text_labelsrb   rd   r   r#   r#   r$   test_implicit_label   s    z&TestDataFramePlots.test_implicit_labelc                 C   sD   t tjddddgd}d|j_|jddd |jjdks@td S )Nr0   r   r   r   NAMEZLABEL)r8   label)r   r   r   r   r=   namerV   rk   r    rm   r#   r#   r$   test_donot_overwrite_index_name   s    z2TestDataFramePlots.test_donot_overwrite_index_namec                 C   sh  | j }| |jddd|dd   | |jdd|d  | |jdd|j  | |jddd|dj  | |jdd|d  | |jdd|j  tdt|jd |_| |jddd|dd   | |jdd|d  | |jdd|d   |jddd	d
d}| 	|j
d	 | j|dddd d S )Nr   r+   r6   r   r   r7   r   r0   ZTest)   rO   )r7   r8   rA   figsizerR   )g      0@g       @)r-   r.   r   )r   Z_check_datarV   	set_indexr   r   r   rj   rQ   r   rA   rW   r   r#   r#   r$   test_plot_xy   s    $"$zTestDataFramePlots.test_plot_xyzinput_log, expected_log)Tlog)symZsymlogc                 C   s   t dtditdd}|j|d}| j||d | |ksFt|j|d}| j||d | |kspt|j|d}| j|||d	 | |kst| |kstd S )
Nr   r@   r<   logyyaxis)logxrb   loglog)rb   r   )r   r   r   rV   _check_ax_scalesZ
get_yscalerk   Z
get_xscale)r    Z	input_logZexpected_logrm   rT   r#   r#   r$   test_logscales   s    z!TestDataFramePlots.test_logscalesinput_paramr   r   r   c              	   C   sN   t dtditdd}d}tjt|d |jf |di W 5 Q R X d S )Nr   r@   r<   z9Boolean, None and 'sym' are valid options, 'sm' is given.r9   sm)r   r   r   rY   rZ   
ValueErrorrV   )r    r   rm   rn   r#   r#   r$   test_invalid_logscale  s    z(TestDataFramePlots.test_invalid_logscalec              	   C   s  | j }|jdd}| }t|d  tr0t| j|dd t	  dt
jd< | }| }t|d  trvt| j|dd t	  dt
jd< | }| }t|d  trttt|d  tstt	  t
jdd< | }| }t|d  trt| j|dd W 5 Q R X t	  | }| }t|d  tr^ttt|d  tszt| j|dd d S )	NT)x_compatr      r3   zxaxis.compatFr   )r   rV   r   
isinstance	get_xdatar   rk   rX   r   closeplottingZplot_paramsZuse)r    rm   rT   linesr#   r#   r$   test_xcompat  s:    

zTestDataFramePlots.test_xcompatc                 C   sT   t tjddttdddtdddddgd}|  | jjd	d
 t	
  d S )N   r0     r+      r   r   r=   rQ   r   r   )r   r   r   r]   r	   r   rV   ri   Zaxhliner   r   r   r#   r#   r$   test_period_compat7  s    z%TestDataFramePlots.test_period_compatc                 C   s   t dtditdddtjd}| }| d }| }t|d d df |d d df tjdd}tj	||j
d	d
 t  tjtdddtjd|_| }| d }| }t|d d df |d d df tjdd}t	||j
 d S )Nr8   r@   c   r/   )r=   r}   r   r+   )r}   r   F)Zcheck_index_typer|   )r   r   r   r   rV   r   Z
get_xydatar   r   Zassert_series_equalr8   r   r   Indexfloat64r=   )r    rm   rT   r   rsr#   r#   r$   test_unsorted_indexD  s"      **z&TestDataFramePlots.test_unsorted_indexc              	   C   s  t dddddgiddddgd}| }| \}}| }|t|d  d ksZt|t|d  d ksxtt dddtj	ddd	d
giddddtj	ddgd}| }| \}}| }|t|d  d kst|t|d  d kstt ddddgddddgd}|jddd}| \}}| }|t|d  d ksbt|t|d  d kstd S )Nr8           rr   rs   rt   r<   r   ru   rv   g      @g     V@g     V@g     @W@g      W@)r8   r   r   r6   )
r   rV   get_xlimr   r   Znanminget_datark   Znanmaxr~   )r    rm   rT   xminxmaxr   r#   r#   r$   test_unsorted_index_limsV  s*       z+TestDataFramePlots.test_unsorted_index_limsc              	   C   s   t tjddttjd d ddddgd }d}tjt	|d	 |j
jd
d W 5 Q R X tjt	|d	 |j
jd
d W 5 Q R X d S )NrJ   r)   r7   r8   r   fourr   z+Log-y scales are not supported in area plotr9   Tr   r   )r   r   r   r]   r^   r_   r`   rY   rZ   r   rV   arear    rm   rn   r#   r#   r$   test_negative_logo  s    
z$TestDataFramePlots.test_negative_logc                 C   sZ   t t|d  d }t||D ]0\}}|| d 7 }| d }t|| q$d S )Nr   r+   )r   zerosrj   r   re   r   assert_numpy_array_equal)r    Znormal_linesZstacked_linesbasenlslsyr#   r#   r$   _compare_stacked_y_cood{  s
    z*TestDataFramePlots._compare_stacked_y_coodc           
      C   s  t d ttjddddddgd}| }ttjdtjdtjd tjd d	}ttjddttj	d d ddddgd
}dD ]}t
|j|dd}t
|j|dd}| |j|j t
|j|dd}t
|j|dd}| |j|j t
|j|dd}t
|j|dd}| |jd d |jd d  | |jdd  |jdd   t
|jdd d}tjt|d |jdd W 5 Q R X ||jd }	t
|	j|ddd qW 5 Q R X d S )N*   rJ   r)   wr7   r8   r   r   )r   r7   r8   r   r   )r\   r   F)kindstackedTr0   r   zWhen stacked is True, each column must be either all positive or all negative. Column 'w' contains both positive and negative valuesr9   r+   )r   r   r   )r   
RNGContextr   r   r   r]   r   r^   r_   r`   r   rV   r   r   rY   rZ   r   r   r=   )
r    rm   neg_dfZsep_dfZmixed_dfr   ax1ax2rn   df2r#   r#   r$   test_line_area_stacked  sB    

	

  z)TestDataFramePlots.test_line_area_stackedc              
   C   s  ddt jdg}dt jddg}t||d}t||dtjddd}||fD ]}t|j}|jd  }|jd  }t j	dddgt j
d	}	tt |jd|	 t j	dddgt j
d	}	tt |jd|	 t|jt 	d
d
dd
g t|jt 	d
dd
d
g t j	ddddgt j
d	}
t j	ddddgt j
d	}t|jdd}t|jd  |
 t|jd  |
|  t|jj}t|jd  |
 t|jd  |
|  t|jjd
d}t|jd  |
 t|jd  | qLd S )Nr+   r0   r5   r   r   r)   )kr<   r   r|   FTr   )r   r~   r   r   ZmakeDateIndexr   rV   r   	get_ydatar   r   r   deletedatamaskr   )r    Zvalues1Zvalues2rm   r   drT   Zmasked1Zmasked2expZ	expected1Z	expected2r#   r#   r$   test_line_area_nan_df  s>    
  z(TestDataFramePlots.test_line_area_nan_dfc                 C   s`  t tjdddddgd}| }| \}}| }||d  d d ksTt||d  d d kspt|jd	d
}| \}}| }||d  d d kst||d  d d kst|jd	d	d}| j	|ddd |D ]p}t
|dstt
|drt| \}}| }||d  d d ks>t||d  d d kstqd S )NrJ   r5   r7   r8   r   r   r   r/   T)secondary_y)r   r(   rB   r,   Zleft_axright_ax)r   r   r   r]   rV   r   r   r   rk   rW   hasattr)r    rm   rT   r   r   r   rl   r#   r#   r$   test_line_lim  s(    z TestDataFramePlots.test_line_limFzX2020-12-01 this has been failing periodically on the ymin==0 assertion for a week or so.)strictreasonr   Tc           
      C   s   t tjddddddgd}| }t|jj|d}| \}}| \}}|	 }	||	d	 
 d	 d	 kspt||	d	 
 d	 d
 kst|d	kstt|jj|d}| \}}|d	kstd S )NrJ   r)   r7   r8   r   r   r   r   r   r/   )r   r   r   r]   r   rV   r   r   Zget_ylimr   r   rk   )
r    r   rm   r   rT   r   r   ZyminZymaxr   r#   r#   r$   test_area_lim  s    z TestDataFramePlots.test_area_limc                 C   sx   t tjddddgd}| jjdddd\}\}}|j|d	d
 |j|d	d
 |j||sbt	|j||stt	d S )Nr)   r0   r7   r8   r   r+   T)shareyr   )rT   r   )
r   r   r   r]   ri   r(   rV   Z_shared_y_axesZjoinedrk   )r    rm   ro   r   r   r#   r#   r$   test_area_sharey_dont_overwrite  s    z2TestDataFramePlots.test_area_sharey_dont_overwritec                 C   s   t tjdd}|jjdd}|jD ]}| dks&tq&|jjddd}|jD ]}| dksRtqR|jjddd}| j	|ddd |D ] }|jD ]}| dkstqqd S )	Nr>   r0   )	linewidthT)r   r   )r   r(   )r>   r+   r,   )
r   r   r   r   rV   rN   patchesZget_linewidthrk   rW   )r    rm   rT   rrl   r#   r#   r$   test_bar_linewidth  s    


z%TestDataFramePlots.test_bar_linewidthc                 C   sL  t tjdd}d}|jj|d}|jD ]}| |t|j	 ks*t
q*|jjd|d}|jD ]}| |ks`t
q`|jj|d}|jD ]}| |t|j	 kst
q|jjd|d}|jD ]}| |kst
q|jj|dd}|D ] }|jD ]}| |kst
qq|jj|dd}|D ]&}|jD ]}| |ks*t
q*q d S )Nr>   g?)widthT)r   r   )r   r(   )r   r   r   r   rV   rN   r   	get_widthrj   rQ   rk   barh
get_height)r    rm   r   rT   r   rl   r#   r#   r$   test_bar_barwidth'  s,    





z$TestDataFramePlots.test_bar_barwidthc              	   C   s  t tjdd}|jjddd}dd |jD }|dgd ksDt|jjdd	d
dddgd}dd |jd d D }|d	d
dddgkst|jjdt	dddddgd}dd |jD }|dgd kst|jjddddddgd}dd |jd d D }|dddddgkst|jjdd	d}|D ]*}dd |jD }|d	gd ks,tq,|jjdt	dddddgd}|D ]*}dd |jD }|dgd ks|tq|d S )Nr>   Fr+   )r   bottomc                 S   s   g | ]}|  qS r#   Zget_y.0pr#   r#   r$   
<listcomp>O  s     z;TestDataFramePlots.test_bar_bottom_left.<locals>.<listcomp>   Tr/   c                 S   s   g | ]}|  qS r#   r   r   r#   r#   r$   r   S  s     )r   leftc                 S   s   g | ]}|  qS r#   get_xr   r#   r#   r$   r   W  s     r0   r5   r)   c                 S   s   g | ]}|  qS r#   r  r   r#   r#   r$   r   [  s     )r(   r   c                 S   s   g | ]}|  qS r#   r   r   r#   r#   r$   r   `  s     )r(   r  c                 S   s   g | ]}|  qS r#   r  r   r#   r#   r$   r   e  s     )
r   r   r   r]   rV   rN   r   rk   r   r   )r    rm   rT   rp   rl   r#   r#   r$   test_bar_bottom_leftL  s*      z'TestDataFramePlots.test_bar_bottom_leftc              	   C   s   t dtjdgdddgdddgd}|j }dddddddddg	}d	d
 |jD }||ks`t|jjdd}dd
 |jD }||kstdd
 |jD }dddddddddg	}||kstd S )Nr;   r   r>   r+   r0   r5   r   r   c                 S   s   g | ]}|  qS r#   r   r   r#   r#   r$   r   l  s     z3TestDataFramePlots.test_bar_nan.<locals>.<listcomp>Tr   c                 S   s   g | ]}|  qS r#   r
  r   r#   r#   r$   r   p  s     c                 S   s   g | ]}|  qS r#   r   r   r#   r#   r$   r   s  s     r   g      $@g      4@g      .@g      D@)r   r   r~   rV   rN   r   rk   )r    rm   rT   expectedrp   r#   r#   r$   test_bar_nanh  s    $
zTestDataFramePlots.test_bar_nanc                 C   sD  t tjddttdttdd}t tjddttdttdd}||fD ]}|j	 }|j
 }t|tdddd	d
dg | dkst|jd  dkst|jd  dkst|jj	dd}t|tdddd	d
dg | dkst|jd  dks(t|jd  dks`tq`d S )NrJ   r>   ZABCDEFZabcder   r   r+   r0   r5   r)   )g      g      @g      пr/   g@Tr   g      @)r   r   r   r   r   r   r^   ZCategoricalIndexrV   rN   rb   get_ticklocsr   r   r   r   rk   r   r  )r    Zdf1r   rm   rT   Zticksr#   r#   r$   test_bar_categoricalw  s,    

z'TestDataFramePlots.test_bar_categoricalc              	   C   s   t tjddttjd d ddddgd}t|jj	ddd t|jj	d	d
d t
d}tjt|d |jj	dd W 5 Q R X t
d}tjt|d |jj	dd W 5 Q R X |jddddd}| j|d	dd d S )NrJ   r)   r7   r8   r   r   r   r6   r+   r0   z5scatter() missing 1 required positional argument: 'y'r9   r   z5scatter() missing 1 required positional argument: 'x'r   r   T)r7   r8   r   r(   rR   r,   )r   r   r   r   r^   r_   r`   r   rV   r   reescaperY   rZ   	TypeErrorrW   )r    rm   rn   rl   r#   r#   r$   test_plot_scatter  s    


z$TestDataFramePlots.test_plot_scatterc              	   C   s\   t tjddgd}tddddj|d< d}tjt|d	 |j	d
ddd W 5 Q R X d S )Nr;   r   r   z
2014-01-01h)startfreqperiodsZdtimez1must be a string or a number, not 'datetime.time'r9   r   )r   r7   r8   )
r   r   r   r   r
   timerY   rZ   r  rV   r   r#   r#   r$   &test_raise_error_on_datetime_time_data  s
    z9TestDataFramePlots.test_raise_error_on_datetime_time_datac                 C   s`   t tdddddd}tjddt|}t||d}t|jj	dd	d
 t|jj	ddd
 d S )Ni  r+      W)r  r  r  r   )r   valsr   r  r6   )
r
   r   r   r   normalrj   r   r   rV   r   )r    r   r  rm   r#   r#   r$   test_scatterplot_datetime_data  s
    z1TestDataFramePlots.test_scatterplot_datetime_datac                 C   s   t dddgdddgd}t|jjdd	d
 t|jjddd
 t dddgdd	dgd}t|jjdd	d
 t|jjddd
 d S )Nr   r   r   r0   r5   r)   r   r   r   r6   r   r+   r   )r   r   rV   r   r   r#   r#   r$   test_scatterplot_object_data  s    z/TestDataFramePlots.test_scatterplot_object_dataordered
categoriessetosa
versicolor	virginicac                 C   s   t ddgddgddgddgddggd	d
gd}tjdddddg||d|d< |jjdddd}|j\}|j}tdddg}|	 }t
|| tddddg}	|j}
t
|
|	 |}dd |j D }tdd t||D std S )Ngffffff@g      @g@rt   g      @g	@g@g@lengthr   r   r!  r#  r"  )r  r   Zspeciesr   r+   r7   r8   r         ?g      ?g      @r   rr   rs   c                 S   s   g | ]}|  qS r#   get_text)r   ir#   r#   r$   r     s     zLTestDataFramePlots.test_scatterplot_color_by_categorical.<locals>.<listcomp>c                 s   s   | ]\}}||kV  qd S Nr#   )r   r)  jr#   r#   r$   	<genexpr>  s     zKTestDataFramePlots.test_scatterplot_color_by_categorical.<locals>.<genexpr>)r   r   CategoricalrV   r   collectionscolorbarr   r   Z	get_ticksr   r   Z_boundariesrT   Zget_ymajorticklabelsallre   rk   )r    r  r   rm   rT   Zcolorbar_collectionr/  Zexpected_ticksZresult_ticksZexpected_boundariesZresult_boundariesZexpected_yticklabelsZresult_yticklabelsr#   r#   r$   %test_scatterplot_color_by_categorical  s*     
z8TestDataFramePlots.test_scatterplot_color_by_categoricalzx, yr6   )r8   r7   )r8   r8   c                 C   s:   t ddddgtddddgd}t|jj||d d S )	Nr+   r0   r5   r)   r   r   r   r6   )r   r   r-  r   rV   r   r    r7   r8   rm   r#   r#   r$   'test_plot_scatter_with_categorical_data  s    $z:TestDataFramePlots.test_plot_scatter_with_categorical_datac                 C   s  ddl m} ttjddttjd d ddddgd	}|j	j
dddd
|j	j
dddd
g}|D ]R}|jd jjdks|t| r|jd jj dkstqb|jd jjdksbtqbd}|j	j
ddd|d}|jd jj|kst|j	j
ddddd}|jd jd kst|j	j
dddd
}|jd jd ks6t| j|jdgd tddgddgd}ddddg}ddddg}t||g}	|j	j
dd|	d
}t|jd  |	 tddg}
|j	j
dd|
dd d S )Nr   )mpl_ge_3_4_0rJ   r)   r7   r8   r   r   r   r%  r+   r0   ZGreys	cubehelix)r7   r8   r   colormapF)r7   r8   r   r/  redr   Z
facecolorsr5   r   rr   r   r   r   Zspring)r7   r8   r   cmap)rU   r4  r   r   r   r   r^   r_   r`   rV   r   r.  r9  r   rk   r/  rT   
get_ylabelZ_label_check_colorsr   r   r   Zget_facecolor)r    requestr4  rm   rl   rT   cmZred_rgbaZ
green_rgbaZ
rgba_arrayZfloat_arrayr#   r#   r$   test_plot_scatter_with_c  s8    
$z+TestDataFramePlots.test_plot_scatter_with_cc                 C   sR   t tjdd dddgd}|jjdddd}tj|d j|jd 	 d	 d S )
N)r;   r5   r@   r   r   r   r   )r7   r8   r   r   )right)
r   r   r   rV   r   r   r   valuesr.  Z	get_sizesr   r#   r#   r$   test_plot_scatter_with_s#  s    z+TestDataFramePlots.test_plot_scatter_with_sc                 C   s4  t tjddttjd d ddddgd}t|jj	 t|jj	dd	 t|jj	d
d
d t|jj	d
d t tjddttjd d t
dd}t|jj	 t ddgddgd}t|jj	}| j|dd |jj	ddd}| j|dddd t|jj}| j|dd |jjddd}| j|dddd d S )NrJ   r)   onetwothreer   r   FlegendTr&   r   r;      r   r+   r   Z   r3   #   )rotfontsizer4   
xlabelsize
ylabelsize)yrot7      )rO  rN  rM  )r   r   r   r   r^   r_   r`   r   rV   rN   rf   rX   r   r   r#   r#   r$   test_plot_bar*  s0    
z TestDataFramePlots.test_plot_barc                 C   s4  | j }|d }| j}dd |D }t|jj}| | | t	|j
 tdt|d  t|j| jt| kstt  |jjdd}| j|ddd t  t|jj}tdd	d
g}|jj|d}| j}dd |D }| | | t	|j
 | t|j| jt| ks0td S )Nheightc                 S   s   g | ]}t |qS r#   r   r   r   r#   r#   r$   r   N  s     z3TestDataFramePlots.test_boxplot.<locals>.<listcomp>r+   (   rJ  r   r4   rO  rJ   rK   )	positionsc                 S   s   g | ]}t |qS r#   r   rT  r#   r#   r$   r   a  s     )hist_df_get_numeric_datarQ   r   rV   boxr   rc   r   r   rb   r  r   r   rj   r   bp_n_objectsrk   r   rX   r   )r    rm   seriesnumeric_colslabelsrT   rl   rX  r#   r#   r$   test_boxplotJ  s.    
 
zTestDataFramePlots.test_boxplotc                 C   s@  | j }| j}dd |D }|jjdddd}| j|dddd | | | t|j	| j
t| ksntt|jjd	d	dd	d
}| j|ddd | j|dd t||D ].\}}| | |g t|j	| j
kstqtdddg}|jj|dd}| | | t|j | t|j	| j
t| ks<td S )Nc                 S   s   g | ]}t |qS r#   r   rT  r#   r#   r$   r   i  s     z<TestDataFramePlots.test_boxplot_vertical.<locals>.<listcomp>2   rO   F)rJ  rK  vertr   r4   rO  rN  T)r'   r(   rb  r   r5   )r+   r5   r,   r   r   r0   )rX  rb  )rY  rZ  rQ   rV   r[  rX   r   get_yticklabelsrj   r   r\  rk   r   rW   r   re   r   r   r   r   r   r  )r    rm   r^  r_  rT   rl   r   rX  r#   r#   r$   test_boxplot_verticalf  s0    
z(TestDataFramePlots.test_boxplot_verticalc              	   C   s   t tjddttjd d ddddgd}d}tjt	|d	 |j
jd
d W 5 Q R X |j
jdd}| |d |j
jdd}| |d |j
 }| |d |j
jdd}| |d d S )NrJ   r)   rB  rC  rD  r   r   z2return_type must be {None, 'axes', 'dict', 'both'}r9   Z
not_a_type)return_typedictrl   Zboth)r   r   r   r   r^   r_   r`   rY   rZ   r   rV   r[  Z_check_box_return_type)r    rm   rn   rp   r#   r#   r$   test_boxplot_return_type  s     

z+TestDataFramePlots.test_boxplot_return_typec                 C   s   t tjdd}t|jdd}dd |jD }| j||d | j|dd	 |jdd
dd}| j|d
ddd t|jdddd}| j	|ddd |jdddd}| j
|dd d S )Nr@   r)   kder   c                 S   s   g | ]}t |qS r#   r   rT  r#   r#   r$   r     s     z2TestDataFramePlots.test_kde_df.<locals>.<listcomp>r_  r   r3   r   r>   )r   rJ  rK  rL  T)r'   r   r(   r*   r,   )r   r   r(   r   r   )r   r   r   r   r   rV   rQ   _check_legend_labelsrX   rW   r   )r    rm   rT   r  rl   r#   r#   r$   test_kde_df  s     zTestDataFramePlots.test_kde_dfc                 C   s0   t tjjdd}tj|jd< t|jdd d S )N)r@   r)   r   r   r   ri  rj  )r   r   r   r   r~   locr   rV   r   r#   r#   r$   test_kde_missing_vals  s    z(TestDataFramePlots.test_kde_missing_valsc                    sV  ddl m  ttjdd}|d }t|jj}dd |j	D }| j
||d t|jjdddd	}| j|dd
d | j|dd |jjdd}| j|ddd t  |jjdddd} fdd| D }t|d  d t  |jjddd} fdd| D }t|d  d t  |jjdddd}| j|dddd d S )Nr   	Rectangler@   r)   c                 S   s   g | ]}t |qS r#   r   rT  r#   r#   r$   r     s     z3TestDataFramePlots.test_hist_df.<locals>.<listcomp>rk  T)r'   r(   r   r*   r,   r   r   rU  rV  rW  )
cumulativebinsZdensityc                    s   g | ]}t | r|qS r#   r   r   r7   rq  r#   r$   r     s     
 r/   rr   )rs  rt  c                    s   g | ]}t | r|qS r#   ru  rv  rq  r#   r$   r     s     
 r  g      Y@ra  rO   
horizontal)rJ  rK  orientationrc  )Zmatplotlib.patchesrr  r   r   r   r   r   rV   r   rQ   rl  rW   r   rX   r   r   Zget_childrenassert_almost_equalr   )r    rm   r]  rT   r  rl   Zrectsr#   rq  r$   test_hist_df  s6    zTestDataFramePlots.test_hist_dfweights皙?r@   )shape)r@   r0   c                 C   sz   t jd tttddgt jdd}t|jd|d}t|jdd}d	d
 |j	D }dd
 |j	D }t
|| d S )Nr   r   r   r0   r@   r   )r   r{  rj  c                 S   s   g | ]}|  qS r#   r
  r   patchr#   r#   r$   r     s     z8TestDataFramePlots.test_hist_weights.<locals>.<listcomp>c                 S   s   g | ]}d |   qS )r|  r
  r  r#   r#   r$   r     s     )r   r   seedr   rg  re   r   r   rV   r   r   ry  )r    r{  rm   r   r   Zpatch_height_with_weightsZexpected_patch_heightr#   r#   r$   test_hist_weights  s     z$TestDataFramePlots.test_hist_weightsNc           
      C   s   t dd |D }t dd |D }t dd |D }t dd |D }	|d k	rhtj||dd |d k	rtj||dd |d k	rtj||dd |d k	rtj|	|dd d S )Nc                 S   s   g | ]}|  qS r#   r   r   r#   r#   r$   r     s     z7TestDataFramePlots._check_box_coord.<locals>.<listcomp>c                 S   s   g | ]}|  qS r#   r
  r   r#   r#   r$   r     s     c                 S   s   g | ]}|  qS r#   r  r   r#   r#   r$   r     s     c                 S   s   g | ]}|  qS r#   )r   r   r#   r#   r$   r     s     F)Zcheck_dtype)r   r   r   r   )
r    r   
expected_y
expected_h
expected_x
expected_wZresult_yZresult_heightZresult_xZresult_widthr#   r#   r$   _check_box_coord  s    z#TestDataFramePlots._check_box_coordc                 C   s  t ttdddddgtdddd	d
gttdddddgtdddddgttdddddgtd
d	dddgddddgd}t tttjdddddgtddddd	d
gttdtjddddgtddddddgttdddtjddgtd
d	ddddgddddgd}||fD ]h}|jjdd}| j|jd d tdddddgtdddd	d
gd | j|jdd tdddddgtdddddgd | j|jdd  tdddddgtd
d	dddgd |jjddd}| j|jd d tdddddgtdddd	d
gd | j|jdd tdddd	d
gtdddddgd | j|jdd  tdddddgtd
d	dddgd |jjdddd}| j|d jtdddddgtdddd	d
gd | j|d jtdddddgtdddddgd | j|d jtdddddgtd
d	dddgd |jjddd}| j|jd d tdddddgtdddd	d
gd | j|jdd tdddddgtdddddgd | j|jdd  tdddddgtd
d	dddgd |jjdddd}| j|jd d tdddddgtdddd	d
gd | j|jdd tdddd	d
gtdddddgd | j|jdd  tdddddgtd
d	dddgd |jjddddd}| j|d jtdddddgtdddd	d
gd | j|d jtdddddgtdddddgd | j|d jtdddddgtd
d	dddgd q>d S ) Nr+   r0   r5   r)   r>   r;   	   rO   rK   rJ   r   r   r   r   r   )rt  r   )r  r  T)rt  r         r   rG     )rt  r   r(   rw  )rt  rx  )r  r  )rt  r   rx  )rt  r   r(   rx  )	r   r   repeatr   r~   rV   r   r  r   )r    Z	normal_dfZnan_dfrm   rT   rl   r#   r#   r$   test_hist_df_coord  s    ***	      z%TestDataFramePlots.test_hist_df_coordc                 C   s(   t tjdd }t|jdd d S )Nr@   r)   TrE  )r   r   r   r   cumsumr   rV   r   r#   r#   r$   test_plot_int_columns  s    z(TestDataFramePlots.test_plot_int_columnsc                 C   s   dd l m} | }ttjdd}ddddddddddgddgfD ]X}|  |d	 |j	|d
}t
| d t| D ]\}}| || kstqqJd S )Nr   r@   r5   ^+o)r   r+   r0   r   r+   o   )style)matplotlib.pyplotpyplotgcfr   r   r   r   Zclfadd_subplotrV   	enumerater   rj   Z
get_markerrk   )r    ri   ro   rm   markersrT   idxr\   r#   r#   r$   test_style_by_column  s    

 z'TestDataFramePlots.test_style_by_columnc                 C   sP   t ddg}| }| d ks$t|jdd}|  d  dksLtd S )Nr+   r0   TrE  r   None)r   rV   
get_legendrk   	get_textsr(  )r    r   rT   r#   r#   r$   test_line_label_none  s
    z'TestDataFramePlots.test_line_label_nonezprops, expected)ZboxpropsZboxes)ZwhiskerpropsZwhiskers)ZcappropsZcaps)ZmedianpropsZmediansc                 C   sP   t dd dD }|ddii}|jjf ddi|}|| d  dksLtd S )	Nc                 S   s   i | ]}|t jd qS r}  )r   r   )r   r   r#   r#   r$   
<dictcomp>  s      zHTestDataFramePlots.test_specified_props_kwd_plot_box.<locals>.<dictcomp>ABCcolorZC1rf  rg  r   )r   rV   r[  Z	get_colorrk   )r    propsr  rm   Zkwdrp   r#   r#   r$   !test_specified_props_kwd_plot_box  s    z4TestDataFramePlots.test_specified_props_kwd_plot_boxc                 C   s   t tdddgtdddtdddtdddgd	gd
}| }|jd  }|d |d k sdt|jd  }t	
|tdddg d S )Nrt   rs   rr     r;   r+   r  rO   testr   r   )r   r   r   r   rV   r   r   rk   r   r   r   )r    rm   rT   r?   Zydatar#   r#   r$   test_unordered_ts  s     z$TestDataFramePlots.test_unordered_tsc                 C   sj   t ddddgi}tjjD ]}|j|d t|j|  qdD ]&}|jdd|d t|j|dd q>d S )Nr7   r+   r0   r5   rj  )r   r   )r   r   PlotAccessor_common_kindsrV   getattr)r    rm   r   r#   r#   r$   test_kind_both_ways  s    z&TestDataFramePlots.test_kind_both_waysc              
   C   sH   t td}tjjD ].}d}tjt|d |j|d W 5 Q R X qd S )NZabcdno numeric data to plotr9   rj  )	r   r^   r   r  r  rY   rZ   r  rV   r    rm   r   rn   r#   r#   r$   test_all_invalid_plot_data  s
    z-TestDataFramePlots.test_all_invalid_plot_datac                 C   s   t dn ttjddtd}d|tj|jd dk< t	j
jD ].}d}tjt|d	 |j|d
 W 5 Q R X qDW 5 Q R X t d\ ttjddtd}d|tj|jd dk< tjtdd	 |jdd
 W 5 Q R X W 5 Q R X d S )Nr   r;   r0   r|   r   r   r&  r  r9   rj  r   )r   r   r   r   r   r   objectr]   r~  r   r  r  rY   rZ   r  rV   r  r#   r#   r$    test_partially_invalid_plot_data  s    "z3TestDataFramePlots.test_partially_invalid_plot_datac              	   C   s@   t tjdd}d}tjt|d |jdd W 5 Q R X d S )Nr;   r0   z*invalid_plot_kind is not a valid plot kindr9   Zinvalid_plot_kindrj  )r   r   r   r   rY   rZ   r   rV   r   r#   r#   r$   test_invalid_kind  s    z$TestDataFramePlots.test_invalid_kindzx,y,lblr   r   r   r   r   r   c              	   C   sJ   t ddgddgddgd}tjtdd	 |j|||d
 W 5 Q R X d S )Nr+   r0   r5   r)   r>   rJ   r   x must be a label or positionr9   r7   r8   r   r   rY   rZ   r   rV   )r    r7   r8   lblrm   r#   r#   r$   test_invalid_xy_args  s    	z'TestDataFramePlots.test_invalid_xy_argsc              	   C   sR   t ddgddgddgd}d}tjt|d	 |jd
ddgdd W 5 Q R X d S )Nr+   r0   r5   r)   r>   rJ   r   z.label should be list-like and same length as yr9   r   r   r   Z	bad_labelr  r  r   r#   r#   r$   test_bad_label  s    z!TestDataFramePlots.test_bad_labelzx,yr   c              	   C   sL   t dddgdddggtdd}tjtd	d
 |j||d W 5 Q R X d S )Nr+   r5   r>   r0   r)   rJ   ZAABr   r  r9   r6   )r   r^   rY   rZ   r   rV   r2  r#   r#   r$   test_invalid_xy_args_dup_cols  s     z0TestDataFramePlots.test_invalid_xy_args_dup_colszx,y,lbl,colorsr7  Zbluer   r+   r0   ZbokehZcythongreenZyellowc                 C   sl   t ddgddgddgd}t|jd||d	 |j||||d
}t|jt|ksVt| j| |d d S )Nr+   r0   r5   r)   r>   rJ   r   r   r  )r7   r8   r   r  Z
linecolors)r   r   rV   rj   r   rk   r;  r   )r    r7   r8   r  colorsrm   rT   r#   r#   r$   test_y_listlike  s
    
z"TestDataFramePlots.test_y_listlikezx,y,colnamesc                 C   s0   t ddgddgd}||_t|j||d d S )Nr+   r0   r5   r)   r   r6   )r   rQ   r   rV   )r    r7   r8   Zcolnamesrm   r#   r#   r$   test_xy_args_integer  s    z'TestDataFramePlots.test_xy_args_integerc                 C   sh   | j }|jjdddd}t|jdks*t|jjdddd}t|d jjd	ksTt| j|dd
d d S )Nr   r   r;   )r7   r8   Zgridsizer+   T)r7   r8   r(   r   r0   rR   r,   )	r   rV   r   rj   r.  rk   figurerl   rW   )r    rm   rT   rl   r#   r#   r$   test_hexbin_basic   s    z$TestDataFramePlots.test_hexbin_basicc                 C   sV   | j }|jjdddd}t|jdks*t|jjdddtjd}t|jdksRtd S )Nr   r   r   )r7   r8   r   r+   )r7   r8   r   Zreduce_C_function)r   rV   r   rj   r.  rk   r   Zstdr   r#   r#   r$   test_hexbin_with_c/  s
    z%TestDataFramePlots.test_hexbin_with_czkwargs, expectedZBuGnr6  r5  r9  ZYlGnc                 C   s8   | j }|jjf ddd|}|jd jj|ks4td S )Nr   r   r6   r   )r   rV   r   r.  r9  r   rk   )r    kwargsr  rm   rT   r#   r#   r$   test_hexbin_cmap8  s    	z#TestDataFramePlots.test_hexbin_cmapc              	   C   sp  t tjdddddgdddd	d
gd}d}tjt|d |j  W 5 Q R X t	|jjdd}| 
|j|j t	|jjdd}| 
|j|j t	|jjddd}t|t|jkst|D ]}| 
|j|j qt||jD ]\}}| |kstqdddddg}dddddg}t	|jjdd||d}t|t|jksBt|D ]$}| 
|j| | j|j|d qFd S )Nr>   r5   XYZr   r   r   r   erP   z/pie requires either y column or 'subplots=True'r9   r   r0   Tr&   r   r   r   rz   r{   r   gm)r'   r(   r_  r  r8  )r   r   r   r]   rY   rZ   r   rV   r   r   r   textsr=   rj   rQ   rk   re   r:  r;  r   )r    rm   rn   rT   rl   ylabelr_  Z
color_argsr#   r#   r$   test_pie_dfE  sF    zTestDataFramePlots.test_pie_dfc              	   C   s  dd l }ttjdd}tdD ]}tj|j||f< q"| jj	dd\}}i }|j
dkr`ddi}td   |jjf d|dd| W 5 Q R X dd	d
dg}t|D ]r\}}t|}	d|	|< dd |jD }
|
|	kstdd |  D }|d | ||d d   }||kstqd S )Nr   r)   )Zncolsz3.3	normalizeT)r(   rT   rF  0123 c                 S   s   g | ]}|  qS r#   r'  rv  r#   r#   r$   r     s     z6TestDataFramePlots.test_pie_df_nan.<locals>.<listcomp>c                 S   s   g | ]}|  qS r#   r'  rv  r#   r#   r$   r     s     r+   )r   r   r   r   r]   rf   r~   Zilocri   r(   __version__r   assert_produces_warningrV   r   r  r^   r  rk   r  r  )r    r"   rm   r)  ro   rl   r  Zbase_expectedrT   r  rp   Zresult_labelsZexpected_labelsr#   r#   r$   test_pie_df_nano  s&    
$z"TestDataFramePlots.test_pie_df_nanc              	   C   s  t dt dddd}t|}t dd t dd d}t|}t|j|dd}| j|dd	d
 t|j|ddd}| j|dd	d
 t|j|dd}| j|dd	d
 t|d j||ddd}| j|d	d	d
 t|d jt dd d}| j|ddd
 t|jt dd d}| j|dd	d
 dD ]`}| }t dd ||< t|j|d}| j|dd	d
 t|jdd|d}| j|ddd
 q*t	t
 |jt jdd W 5 Q R X tdgd dgd d}t	t |j|d W 5 Q R X d S )Nr  r   r/   r6   皙?皙?T)yerrr   r0   xerrr  )r  r   r   )r  r   r+   rN   )r  r  r   r   r8   r  )r0   r  )r  u   誤差r7   )r8   r7   r  rQ  Zzzz)r   r   r   onesr   rV   _check_has_errorbarscopyr   Zexternal_error_raisedr   r   r   r  )r    r   rm   d_errdf_errrT   r  Zs_dfr#   r#   r$   test_errorbar_plot  sD        z%TestDataFramePlots.test_errorbar_plotr   r\   rN   r   c                 C   s$  t dt dddd}t|}t dd t dd d}t|}t|j|d |d}| j|dd	d
 t|j||d}| j|dd	d
 t|j|||d}| j|d	d	d
 t|j|d |d |d}| j|d	d	d
 t|jdd|d}| j|d	d	d
 t|jd||d|d}| j|ddd
 d S )Nr  r   r/   r6   r  r  r7   r  r   r0   r  )r  r  r   )r  r  r   T)r'   r  r  r(   r   r+   )r   r   r   r  r   rV   r  )r    r   r   rm   r  r  rT   rl   r#   r#   r$   "test_errorbar_plot_different_kinds  s.    z5TestDataFramePlots.test_errorbar_plot_different_kindszIterator is consumed)r   rZ   c              	   C   sd   t  R tdtdddd}t|}t|jtdt	|d}| j
|ddd W 5 Q R X d S )	Nr  r   r/   r6   r|  r  r0   r  )warningscatch_warningsr   r   r   r   rV   	itertoolsr  rj   r  )r    r   rm   rT   r#   r#   r$   test_errorbar_plot_iterator  s
    
z.TestDataFramePlots.test_errorbar_plot_iteratorc                 C   sf   t tjdd}t tjdd}t|j|d}| j|ddd t|jddd}| j|ddd d S )Nr;   r0   r  r   r  r+   )r8   r  )r   r   r   r   r   rV   r  )r    rm   r  rT   r#   r#   r$   'test_errorbar_with_integer_column_names  s    z:TestDataFramePlots.test_errorbar_with_integer_column_namesc           
      C   s   t tjdd}t tjddddgd}ddg}|D ]$}t|j||d}| j|ddd	 q8td
ddd}|j|dd |j|dd t|j|dd}| j|ddd	 t	dt	dddd}t |}t
dd t
dd d}t |}||fD ]"}	t|j|	d}| j|ddd	 qd S )Nr;   r5   r0   r   r   r\   rN   r  r  1/1/2000M)r  r  T)Zinplacer  r/   r6   r  r  )r7   r   r  r+   )r   r   r   r   r   rV   r  r
   r   r   r  )
r    rm   r  kindsr   rT   ixr   r  errr#   r#   r$   "test_errorbar_with_partial_columns  s$    z5TestDataFramePlots.test_errorbar_with_partial_columnsc           	      C   s.  t dt dddd}t dd t dd d}tddd	d
}t||d}t||d}t|j||d}| j|ddd t|j||d}| j|ddd t|jd|d |d}| j|ddd t|jdd|d}| j|ddd t|j||d}| j|ddd t|jd||dd}| j|ddd d S )Nr  r   r/   r6   r  r  r  z1/1/2001r  )r  r<   r  r0   r  r8   r7   )r8   r  r   r+   T)r'   r   r  r(   )r   r   r  r
   r   r   rV   r  )	r    r   r   r  r  r   Ztdf_errrT   rl   r#   r#   r$   test_errorbar_timeseries  s.    z+TestDataFramePlots.test_errorbar_timeseriesc              	   C   s   t jd t jddd}tt dddj}|j||d d}|j	d 
 d jd d df }|dd d df t ddg }t|| td	}tjt|d
 |j|jd W 5 Q R X t  d S )Nr   r5   r0   r>   rG  )r  r  r+   r/   zCAsymmetrical error bars should be provided with the shape (3, 2, 5)r9   r  )r   r   r  r]   r   r   ZreshapeTrV   r.  	get_pathsZverticesr   r   ry  r  r  rY   rZ   r   r   )r    r  rm   rT   Zyerr_0_0Zexpected_0_0rn   r#   r#   r$   test_errorbar_asymmetrical&  s      z-TestDataFramePlots.test_errorbar_asymmetricalc              	   C   s   t tjddttjd d d}t|jdd t|j|d t	
d @ | }t|jdksftt||j t|jdkstW 5 Q R X d S )Nr;   r5   r<   T)tabler   r+   )r   r   r   r]   r^   r_   r`   r   rV   r   r  rj   Ztablesrk   r   r  r  r   r#   r#   r$   
test_table;  s    $zTestDataFramePlots.test_tablec                    s  t tjddtdddgd}t tjddd tdddgd}t|jjddd j ddd t|jjdd|d	 j d
dd t|jjdd|d j dd
d t|jjdd||d j d
d
d d fdd	}t tjdddddddgd}|jjdddddd j d
d
d | j	ddd | j	ddd |jjddddd j dd
d | j	ddd d S )Nr>   r0   r7   r8   r   r6   r   r  )r7   r8   r  r+   )r7   r8   r  )r7   r8   r  r  has_xerrc                    sx   g } fddj D d }|D ]"}t|r8|| q || q fdd|D }j|t|gt| d d S )Nc                    s   g | ]}t | d r|jqS )F)r  r   rT  has_errr#   r$   r   Y  s      z[TestDataFramePlots.test_errorbar_scatter.<locals>._check_errorbar_color.<locals>.<listcomp>r   c                    s   g | ]}| j kr|qS r#   )r.  rv  rT   r#   r$   r   _  s     
 r  )
containersr   extendappendr;  r   r   rj   )r  r  r  r   ZerrselZ	err_linesrT   r    r  r$   _check_errorbar_colorW  s     zGTestDataFramePlots.test_errorbar_scatter.<locals>._check_errorbar_colorr;   r   r   r   r   r  r   r7  )r7   r8   r  r  r   r  Zhas_yerrr  )r7   r8   r  r  )r  )
r   r   r   r   rf   r   rV   r   r  r  )r    rm   r  r  r#   r  r$   test_errorbar_scatterG  s.        z(TestDataFramePlots.test_errorbar_scatterc              
      s  dd l m} |d t \}}tddddddgddddddgddddddgddddddgd	} fd
d}|D ]}|jddd|dd qr||  || t  t \}}t	t
 |jd|dd}W 5 Q R X || t  t \}}|D ]}|jddd|d q||  |D ]T}t|jdks:t j| dd  j| dd  j|jdddd q"t  d S )Nr   r0  r+   r0   r5   r)   r>   rJ   r   r   r   r   c                    s   | D ](}t |jdkst j| dd q| d | d fD ],} j| dd  j|jdddd q>| d | d fD ],} j| dd  j|jdddd q|d S )	Nr+   TrC   r   r0   FrD   r5   )rj   r   rk   ra   rd  rc   rl   rT   r    r#   r$   _check  s    z5TestDataFramePlots.test_sharex_and_ax.<locals>._checkr   r   rA   T)r7   r8   rA   rT   sharex)r(   rT   r  r7   r8   rA   rT   rC   rD   )r  r  r   _generate_4_axes_via_gridspecr   rV   tight_layoutr  r   r  UserWarningrj   r   rk   ra   rd  rc   r    ri   gsrl   rm   r  rT   r#   r  r$   test_sharex_and_axo  s>    

	

z%TestDataFramePlots.test_sharex_and_axc              
      s  dd l m} t \}}tddddddgddddddgddddddgddddddgd} fd	d
}|D ]}|jddd|dd qh||  || t  t \}}t	t
 |jd|dd}W 5 Q R X ||  || t  t \}}|D ]}|jddd|d q||  |D ]T}t|jdks>t j| dd  j| dd  j|jdddd q&d S )Nr   r+   r0   r5   r)   r>   rJ   r  c                    s   | D ]>}t |jdkst j| dd  j|jdddd q| d | d fD ]} j| dd qT| d | d fD ]} j| dd q|d S )	Nr+   TrC   rD   r   r0   r5   F)rj   r   rk   ra   rc   rd  r  r  r#   r$   r    s    z5TestDataFramePlots.test_sharey_and_ax.<locals>._checkr   r   rA   T)r7   r8   rA   rT   r   )r(   rT   r   r  rC   rD   )r  r  r  r   rV   r  r  r   r   r  r	  rj   r   rk   ra   rd  rc   r
  r#   r  r$   test_sharey_and_ax  s<    
	


z%TestDataFramePlots.test_sharey_and_axc           	   
   C   s   ddl }ddl}i }tjjD ]Z}i }|dkr>| j}ddd}n|dkrR| j }n| j}||j	f d|i|||< qt
  |  d	}|D ](}tjt|d
 || j W 5 Q R X qdS )z3Check that every plot type gets properly collected.r   N)r   r   r   r   r   r6   r   r   z)weakly-referenced object no longer existsr9   )gcweakrefr   r  Z
_all_kindsr   r   absproxyrV   r   r   ZcollectrY   rZ   ReferenceErrorr   )	r    r  r  resultsr   argsrm   rn   keyr#   r#   r$   test_memory_leak  s$     z#TestDataFramePlots.test_memory_leakc           
   	      sB  dd l m  dd lm ttjdtdddd}t	tjdd|j
tdd} fd	d
} fdd}| | fD ]\}}|j|d}t|jdkst|j|d}t|jdkst||fD ]>}| j| dd | j| dd | j|jdddd qt  qz| | fD ]\}}|jd||gd}t|jdksJtt|jdks^t|D ]@}| j| dd | j| dd | j|jdddd qbt  q| \}}tt |jd||gddd}W 5 Q R X t|d jdkstt|d jdkst||fD ]}| j| dd q| j|d  dd | j|d jdddd | j|d  dd | j|d jdddd t  | \}}tt |jd||gddd}W 5 Q R X t|d jdkstt|d jdkst| j|d  dd | j|d  dd ||fD ].}| j| dd | j|jdddd q:t   fdd}	|	 }t	tjdd|j
tdd}|jd|d}|D ]T}t|jdkst| j| dd | j| dd | j|jdddd qt  |	 }tt |jd|ddd}W 5 Q R X |D ]}t|jdksFtqF|d |d fD ]}| j| dd qr|d |d fD ]}| j| dd q|d |d fD ].}| j| dd | j|jdddd q|d |d fD ].}| j| dd | j|jdddd qt  d S )Nr   r;   r  )r  r<   r0   ABr   c                     sL     dd}  }|| d dd d f }|| dd d f }||fS )Nr5   r+   r0   GridSpecr  r  r  ro   r   r   gridspecri   r#   r$   _get_vertical_grid  s
    zHTestDataFramePlots.test_df_gridspec_patterns.<locals>._get_vertical_gridc                     sL     dd}  }|| d d d df }|| d d df }||fS )Nr+   r5   r0   r  r  r  r#   r$   _get_horizontal_grid  s
    zJTestDataFramePlots.test_df_gridspec_patterns.<locals>._get_horizontal_gridr  r+   TrC   rD   rS   )r(   rT   r  r   Fc                     st     dd}  }|| d dd df }|| d ddf }|| dd df }|| d }||||fS )Nr5   r0   r1   r  )r  ro   r   r   Zax3Zax4r  r#   r$   _get_boxed_gridH  s    zETestDataFramePlots.test_df_gridspec_patterns.<locals>._get_boxed_gridr)   ABCDr5   )matplotlib.gridspecr  r  r  r   r   r   r   r
   r   r=   r^   rV   rj   r   rk   ra   rd  rc   r   r   r  r	  )
r    tsrm   r  r  r   r   rT   rl   r  r#   r  r$   test_df_gridspec_patterns  s    

 
 	z,TestDataFramePlots.test_df_gridspec_patternsc                 C   s4   | j tdddgdddgdtjjdddd	 d S )
Nr+   r0   r5   r)   r   r   r   r6   )kws)Z_check_grid_settingsr   r   r  Z_dataframe_kindsr  r#   r#   r$   test_df_grid_settingsn  s
    z(TestDataFramePlots.test_df_grid_settingsc           	      C   s@  | j  \}}|ddddg ttjdj|d ttj	dtj	dd}| j 
 }|d}|jd|dd	dd
d | j  \}}ddlm} ||}|jdddd}ttjdj|d ttjdj|d | j  \}}ddlm} ||dddd}ttjdj|d ttjdj|d d S )Nr  r;   r  rO   r   )r   r   r+   r+   r   r   r   Zhsv)r   rT   r7   r8   r   r9  r   )make_axes_locatabler?  z5%g?)r   pad)
inset_axesz30%rr   r5   )r   rS  ro  )ri   r(   Zadd_axesr   r   r   r]   rV   r   r   r  Zmpl_toolkits.axes_grid1r&  Zappend_axesZ%mpl_toolkits.axes_grid1.inset_locatorr(  )	r    ro   rT   rm   r&  dividerZcaxr(  Ziaxr#   r#   r$   test_plain_axesv  s$    

z"TestDataFramePlots.test_plain_axesr!   c                 C   sp   t tjddtddjdd djdd d	}d
}ddg}||dd}t|j|f |}| j|j	|d d S )NrG  r0   r  r   c                 S   s
   | j  S r*  )r   r  rm   r#   r#   r$   <lambda>      zBTestDataFramePlots.test_secondary_axis_font_size.<locals>.<lambda>r   c                 S   s
   | j d S )Ng?r.  r+  r#   r#   r$   r,    r-  )rz   r   r   rz   T)r   rK  Z
mark_right)rl   rN  )
r   r   r   r   r^   Zassignr  rV   rX   r   )r    r!   rm   rK  r   r  rT   r#   r#   r$   test_secondary_axis_font_size  s    z0TestDataFramePlots.test_secondary_axis_font_sizec                 C   s   t dddgdddgdddgd	}|jjd
d}|dd dd | D }tt|| }|d dkspt|d dkst|d dkstd S )Nr5   r0   r   r      ZMondayZTuesdayZ	Wednesday)ZsalesZvisitsdayr1  r   r/   c                 S   s   g | ]}|  qS r#   r'  r   tr#   r#   r$   r     s     zATestDataFramePlots.test_x_string_values_ticks.<locals>.<listcomp>r   rr   rs   )	r   rV   r   set_xlimrc   rg  re   
get_xticksrk   )r    rm   rT   xticklabelslabels_positionr#   r#   r$   test_x_string_values_ticks  s    z-TestDataFramePlots.test_x_string_values_ticksc                 C   s   t ddgddgg}ttjddddg|d}| }|d	d d
d | D }t	t
|| }|d dkszt|d dkst|d dkst|d dkstd S )Nr  i  r+   r0   r)   r   r   rP   r/   c                 S   s   g | ]}|  qS r#   r'  r2  r#   r#   r$   r     s     zETestDataFramePlots.test_x_multiindex_values_ticks.<locals>.<listcomp>z	(2012, 1)r   z	(2012, 2)rr   z	(2013, 1)rs   z	(2013, 2)rt   )r   Zfrom_productr   r   r   r   rV   r4  rc   rg  re   r5  rk   )r    r=   rm   rT   r6  r7  r#   r#   r$   test_x_multiindex_values_ticks  s    z1TestDataFramePlots.test_x_multiindex_values_ticksr   c                 C   sL   t ddgddgd}|j|d}| }|d dk s8t|d dksHtd S )Nr0   r)   r+   r<   rj  r   )r   rV   r   rk   )r    r   rm   rT   xlimsr#   r#   r$   test_xlim_plot_line  s
    z&TestDataFramePlots.test_xlim_plot_linec                 C   s   | j  \}}ddddg}tddddgdd	dd
gddddgddddgd|d}|dddg jj|dd |dg j|dd | }|d dk st|d dkstdd | D }||kstd S )NZk1Zk2Zk3Zk4i  r   i  i  ix  i  i@  i  r+   r5   r)   )s1s2s3r   r<   r<  r=  r>  F)rT   r   r   T)rT   r   r   c                 S   s   g | ]}|  qS r#   r'  r2  r#   r#   r$   r     s     zWTestDataFramePlots.test_xlim_plot_line_correctly_in_mixed_plot_type.<locals>.<listcomp>)ri   r(   r   rV   rN   r   rk   rc   )r    ro   rT   Zindexesrm   r:  r6  r#   r#   r$   0test_xlim_plot_line_correctly_in_mixed_plot_type  s"    



	zCTestDataFramePlots.test_xlim_plot_line_correctly_in_mixed_plot_typec                 C   sl   t dgtd}|jst| }t| dks4t| d }t| dksTtt| dkshtd S )NZfoo)rQ   r}   r+   r   )	r   intemptyrk   rV   rj   r   r   r   )r    rm   rT   r\   r#   r#   r$   test_plot_no_rows  s    
z$TestDataFramePlots.test_plot_no_rowsc              	   C   s4   t dddg}tjtdd |  W 5 Q R X d S )Nr   r   r   r  r9   )r   rY   rZ   r  rV   r   r#   r#   r$   test_plot_no_numeric_data  s    z,TestDataFramePlots.test_plot_no_numeric_dataz index_name, old_label, new_label)Nr  new)oldrE  rD  )Nr  r  )Nr  r+   r  c                 C   s   t ddgddggddgd}||j_|j|d}| |ks@t| dksPt|j|||d	}| t|kstt| t|kstd S )
Nr+   r0   r>   Type AType Br   rj  r  )r   r  xlabel)r   r=   r   rV   
get_xlabelrk   r:  str)r    r   Z
index_nameZ	old_labelZ	new_labelrm   rT   r#   r#   r$   (test_xlabel_ylabel_dataframe_single_plot  s    z;TestDataFramePlots.test_xlabel_ylabel_dataframe_single_plotzxlabel, ylabel)NN)X LabelN)NY Label)rL  rM  r   r   c                 C   st   d}d}t ddgddgg||gd}|j|||||d}| |d krJ|n|ksTt| |d krf|n|ksptd S )NrF  rG  r+   r0   r>   r   )r   r7   r8   rH  r  )r   rV   rI  rk   r:  )r    r   rH  r  ZxcolZycolrm   rT   r#   r#   r$   'test_xlabel_ylabel_dataframe_plane_plot  s    z:TestDataFramePlots.test_xlabel_ylabel_dataframe_plane_plot)NNNN)c__name__
__module____qualname__r   rq   r   r   r   r   r   r   rY   markZparametrizer   r   r   r   r   r   r   r   r   r   r   Zxfailr   r   r   r   r	  r  r  r  r  r  r  r1  r3  r>  rA  rR  r`  re  rh  tdZskip_if_no_scipyrm  rp  rz  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r   r  r  r  r#  r%  r*  r/  r8  r9  r;  r?  rB  rC  rK  rN  r#   r#   r#   r$   r   '   sT  l 

&0'%		
6 

' 
    
 	





	$
	


*.

		
!(65
 s

	

	r   c                  C   sr   dd l } dd l}dd lm} | jdd}||d }||d }||d }||d }|||||gfS )Nr   r0   rn  )r+   r   r  rR   )r   r!  r  r  r  r  Zsubplot)r"   r   ri   r  Zax_tlZax_llZax_trZax_lrr#   r#   r$   r  ,  s    r  )(__doc__r   r   r  r  r_   r  Znumpyr   rY   Zpandas.util._test_decoratorsutilZ_test_decoratorsrS  Zpandas.core.dtypes.apir   Zpandasr   r   r   r   r   r	   r
   Zpandas._testingZ_testingr   Zpandas.tests.plotting.commonr   r   Zpandas.io.formats.printingr   Zpandas.plottingr   rR  ZslowZ
pytestmarkZskip_if_no_mplr   r  r#   r#   r#   r$   <module>   sF                    