U
    NZfeI                    @   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	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mZ ddlmZ ddlmZm Z  ddl!m"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plotting)TestPlotBase_check_plot_workspprint_thingc                   @   sp  e Zd Zejjddejjdd Zdd Zejj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ejd(d)d*gd+d, Zd-d. Zd/d0 Zejjd1d2d3ejd4d5d1gd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Zd@dA ZdBdC Z dDdE Z!dFdG Z"dHdI Z#dJdK Z$ejdLd5d1gejdMdNdOdPgdOdPdNgfdQdR Z%ejdSdTdUdVgdWdX Z&dYdZ Z'd[d\ Z(d]d^ Z)d_d` Z*ejjdadb Z+dcdd Z,dedf Z-dgdh Z.e/j0didj Z1e/j0dkdl Z2dmdn Z3ejdodpe4j5dqdr dpe4j5dsdr gdtdu Z6ddwdxZ7dydz Z8d{d| Z9d}d~ Z:dd Z;ejdddddgdd Z<dd Z=e/j0dd Z>dd Z?dd Z@dd ZAejdddgddfdgddgddgfgdd ZBdd ZCejdddgdfgdd ZDejdddgdgdgfdddgddgddgfdddgddgddgfgdd ZEejdddddgfddddgfgdd ZFdd ZGdd ZHejdi dfddidfddidfgdd ZIdd ZJdd ZKejjdd ZLejjejd(d)ddgddń ZMejjdeNdǍddɄ ZOdd˄ ZPejjdd̈́ ZQejd(d)ddgddτ ZRddф ZSddӄ ZTddՄ ZUddׄ ZVddل ZWddۄ ZXe/j0dd݄ ZYdd߄ ZZdd Z[dd Z\ejdd)ddgdd Z]dd Z^dd Z_ejd(d)d*gdd Z`dd Zadd Zbdd Zce/j0ejd(ddd Zddd Zedd Zfdd Zgejddddd gdd Zhdd Zidd Zjejd(ddd	 Zkejd
dddddvdddgfgejd(d)d*dgdd Zlejdddddgejd(ddgdd Zmejdddd ZndvS (   TestDataFramePlotszApi changed in 3.6.0)reasonc           
   	   C   s|  t  }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}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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,d-gd.}tjd/d0gd1d2gd.}ttjddd3||d4}t|jd5d# td6tjdi}t|jjdd7}| j|dd8d t|jjdd9d:}| j|dd8d | j \}}|jjd|d;}t|dks`t|j}	|	|d ksxtd S )<NF)ZgridTdefault_axessubplots   r      axes_numlayout)   )r   r   r   r   r   )r   r   	use_indexr   xrotr   r      xyz''Line2D' object has no property 'blarg'match)Zblarg
   index)r      )yticks)xticks)id   )ylimZxlimZblah)r   r   title)r   r/   r!   r   Zvisibleminor)r/   )   αr   )r4   r   )   βr   )r5   r!   )   γr   )r6   r*   )   δ   )r7      Zi0i1)names)baru   Δ)r<   u   ΕZc0Zc1)   r   columnsr)   u   Σr#   r   r   r   )r   r   )r   r   r   ax) tmmakeTimeDataFramer   plot_check_axes_shape_check_ticks_propsr   pytestraisesAttributeErrorlinenprandomrandliststringascii_letters_check_visiblexaxisget_xticklabels	get_labelzipranger   from_tuplesrandintr<   pltr   lenAssertionErroraxes)
selfdfr^   msgrC   Ztuplesr)   r?   figresult rd   J/tmp/pip-unpacked-wheel-nbcvw55c/pandas/tests/plotting/frame/test_frame.py	test_plot)   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tjd
d	tjddgtdtj|dddtj|dddd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   r   r!   r   r*   r9   dtypez%Y)formati8T)ri   utc)ABCDErl   rm   r"   rn   ro   rp   )
r   rM   arraynanobjectpdZto_datetimeviewr   rF   )r_   datesr`   rd   rd   re   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   r   r!   r   ZUInt32rg   r"   r$   r$   r#   )rt   rq   r   r   rF   rL   r<   histpier   scatterhexbin)r_   Zarrsr`   rd   rd   re   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 )Nr#   r$   zr   r   r!   rl   rm   )r   rF   r\   	get_linesr]   r_   r`   rC   rd   rd   re   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'   r!   abcr?   r"   )r   rM   rN   randnrF   _check_text_labelsrT   rV   r   rd   rd   re   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 )Nr   r   r   r   NAMEZLABEL)r$   label)r   rM   rN   r   r)   namerF   r]   r_   r`   rd   rd   re   test_donot_overwrite_index_name   s    z2TestDataFramePlots.test_donot_overwrite_index_namec                 C   sj  t  }| |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   r"   rl   rm   r#   rx   r   ZTest)   r=   )r#   r$   r/   figsizerA   )g      0@g       @)r   r   r   )rD   rE   Z_check_datarF   	set_indexrm   rM   aranger\   r?   r   r/   rG   r   rd   rd   re   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rT   loglog)rT   r   )r   rM   r   rF   _check_ax_scalesZ
get_yscaler]   Z
get_xscale)r_   Z	input_logZexpected_logr`   rC   rd   rd   re   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.r%   sm)r   rM   r   rI   rJ   
ValueErrorrF   )r_   r   r`   ra   rd   rd   re   test_invalid_logscale   s    z(TestDataFramePlots.test_invalid_logscalec              	   C   s  t  }|jdd}| }t|d  tr2t| j|dd t 	  dt
jd< | }| }t|d  trxt| 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s|t| j|dd d S )	NT)x_compatr      r   zxaxis.compatFr   )rD   rE   rF   r   
isinstance	get_xdatar   r]   rH   closer   Zplot_paramsZuse)r_   r`   rC   linesrd   rd   re   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   r     r      r   r   r)   r?   r   rx   )r   rM   rN   rO   r	   r   rF   r[   ZaxhlinerD   r   r   rd   rd   re   test_period_compat#  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 )Nr$   r-   c   r   )r)   rh   r   r   )rh   r   F)Zcheck_index_typerg   )r   rM   r   Zint64rF   r   Z
get_xydatar   rD   Zassert_series_equalr$   r   rt   Indexfloat64r)   )r_   r`   rC   r   rsrd   rd   re   test_unsorted_index0  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 )Nr$                 ?       @      @r(   r   g      @g      @g      @g     V@g     V@g     @W@g      W@)r$   r   r   r"   )
r   rF   get_xlimr   rM   Znanminget_datar]   Znanmaxrr   )r_   r`   rC   xminxmaxr   rd   rd   re   test_unsorted_index_limsB  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 )Nr8   r   r#   r$   r   fourr   z+Log-y scales are not supported in area plotr%   Tr   r   )r   rM   rN   rO   rP   rQ   rR   rI   rJ   r   rF   arear_   r`   ra   rd   rd   re   test_negative_log[  s    
z$TestDataFramePlots.test_negative_logc                 C   sZ   t t|d  d }t||D ]0\}}|| d 7 }| d }t|| q$d S )Nr   r   )rM   zerosr\   r   rW   rD   assert_numpy_array_equal)r_   Znormal_linesZstacked_linesbasenlslsyrd   rd   re   _compare_stacked_y_coodg  s
    z*TestDataFramePlots._compare_stacked_y_coodkindrL   r   c              	   C   s  t jd}t|ddddddgd}| }t|d|d|d |d d	}t|ddttjd d ddddg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 d S )N*   r8   r   wr#   r$   r   r   )r   r#   r$   r   r   F)r   stackedTr   r   zWhen stacked is True, each column must be either all positive or all negative. Column 'w' contains both positive and negative valuesr%   r   )r   r   r   )rM   rN   RandomStater   rO   r   rP   rQ   rR   r   rF   r   r   rI   rJ   r   r   r)   )r_   r   Z	np_randomr`   neg_dfZsep_dfZmixed_dfax1ax2ra   df2rd   rd   re   test_line_area_stackedn  s@    

	

  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   r   r!   r   r   r   )kr(   r   rg   FTr   )rM   rr   r   rD   ZmakeDateIndexr   rF   r   	get_ydatarq   r   r   deletedatamaskr   )r_   Zvalues1Zvalues2r`   tdfdrC   Zmasked1Zmasked2expZ	expected1Z	expected2rd   rd   re   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 )Nr8   r!   r#   r$   r   r   r   r   T)secondary_y)r   r   r0   r   Zleft_axright_ax)r   rM   rN   rO   rF   r   r   r   r]   rG   hasattr)r_   r`   rC   r   r   r   r^   rd   rd   re   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.)strictr   r   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 )Nr8   r   r#   r$   r   r   r   r   r   r   )r   rM   rN   rO   r   rF   r   r   get_ylimr   r   r]   )
r_   r   r`   r   rC   r   r   ZyminZymaxr   rd   rd   re   test_area_lim  s    z TestDataFramePlots.test_area_limc                 C   s   t tjddddgd}| jjdddd\}\}}|j|d	d
 |j|d	d
 | |||sft	| |||s|t	d S )Nr   r   r#   r$   r   r   T)shareyr   )rC   r   )
r   rM   rN   rO   r[   r   rF   Z
get_y_axisZjoinedr]   )r_   r`   rb   r   r   rd   rd   re   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*   r   )	linewidthT)r   r   )r   r   )r*   r   r   )
r   rM   rN   r   rF   r<   patchesZget_linewidthr]   rG   )r_   r`   rC   rr^   rd   rd   re   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   rM   rN   r   rF   r<   r   	get_widthr\   r?   r]   barh
get_height)r_   r`   r   rC   r   r^   rd   rd   re   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 rd   Zget_y.0prd   rd   re   
<listcomp>;  s     z;TestDataFramePlots.test_bar_bottom_left.<locals>.<listcomp>   Tr   c                 S   s   g | ]}|  qS rd   r   r   rd   rd   re   r   ?  s     )r   leftc                 S   s   g | ]}|  qS rd   get_xr   rd   rd   re   r   C  s     r   r!   r   c                 S   s   g | ]}|  qS rd   r   r   rd   rd   re   r   G  s     )r   r   c                 S   s   g | ]}|  qS rd   r   r   rd   rd   re   r   L  s     )r   r   c                 S   s   g | ]}|  qS rd   r   r   rd   rd   re   r   Q  s     )
r   rM   rN   rO   rF   r<   r   r]   r   rq   )r_   r`   rC   rc   r^   rd   rd   re   test_bar_bottom_left8  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   r!   rl   rm   rn   r   c                 S   s   g | ]}|  qS rd   r   r   rd   rd   re   r   X  s     z3TestDataFramePlots.test_bar_nan.<locals>.<listcomp>Tr   c                 S   s   g | ]}|  qS rd   r  r   rd   rd   re   r   \  s     c                 S   s   g | ]}|  qS rd   r   r   rd   rd   re   r   _  s     r   g      $@g      4@g      .@g      D@)r   rM   rr   rF   r<   r   r]   )r_   r`   rC   expectedrc   rd   rd   re   test_bar_nanT  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 )Nr8   r*   ZABCDEFZabcder   r   r   r   r!   r   )g      g      @g      пr   g@Tr   g      @)r   rM   rN   r   rt   r   rP   ZCategoricalIndexrF   r<   rT   get_ticklocsrD   r   rq   r   r]   r   r   )r_   Zdf1r   r`   rC   Zticksrd   rd   re   test_bar_categoricalc  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 )Nr8   r   r#   r$   r   r   r   r"   r   r   z5scatter() missing 1 required positional argument: 'y'r%   r   z5scatter() missing 1 required positional argument: 'x'rx   r{   T)r#   r$   r   r   rA   r   )r   rM   rN   r   rP   rQ   rR   r   rF   r{   reescaperI   rJ   	TypeErrorrG   )r_   r`   ra   r^   rd   rd   re   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dtimez9must be a string or a (real )?number, not 'datetime.time'r%   r{   )r   r#   r$   )
r   rM   rN   r   r
   timerI   rJ   r
  rF   r   rd   rd   re   &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   )rv   valsrv   r  r"   )
r
   r   rM   rN   normalr\   r   r   rF   r{   )r_   rv   r  r`   rd   rd   re   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 )Nrl   rm   rn   r   r!   r   r   r   r   r"   r   r   r   )r   r   rF   r{   r   rd   rd   re   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@r   g      @g	@g@g@lengthr   r   r  r  r  )r  r  Zspeciesr   r   r#   r$   r         ?g      ?g      @r   r   r   c                 S   s   g | ]}|  qS rd   get_text)r   ird   rd   re   r     s     zLTestDataFramePlots.test_scatterplot_color_by_categorical.<locals>.<listcomp>c                 s   s   | ]\}}||kV  qd S Nrd   )r   r"  jrd   rd   re   	<genexpr>  s     zKTestDataFramePlots.test_scatterplot_color_by_categorical.<locals>.<genexpr>)r   rt   CategoricalrF   r{   collectionscolorbarrM   rq   Z	get_ticksrD   r   Z_boundariesrC   Zget_ymajorticklabelsallrW   r]   )r_   r  r  r`   rC   Zcolorbar_collectionr(  Zexpected_ticksZresult_ticksZexpected_boundariesZresult_boundariesZexpected_yticklabelsZresult_yticklabelsrd   rd   re   %test_scatterplot_color_by_categorical  s*     
z8TestDataFramePlots.test_scatterplot_color_by_categoricalzx, yr"   )r$   r#   )r$   r$   c                 C   s:   t ddddgtddddgd}t|jj||d d S )	Nr   r   r!   r   r   r   r   r"   )r   rt   r&  r   rF   r{   r_   r#   r$   r`   rd   rd   re   'test_plot_scatter_with_categorical_data  s    $z:TestDataFramePlots.test_plot_scatter_with_categorical_datac           	      C   s  t tjjdd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 ]4}|j	d j
jdkstt|j	d jj dksZtqZd}|jjddd|d}|j	d j
j|kst|jjddddd}|j	d jd kst|jjdddd}|j	d jd kst| 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   r-   )r8   r   )lowhighsizer8   r#   r$   r   r   r   r  r   r   ZGreys	cubehelix)r#   r$   r   colormapF)r#   r$   r   r(  redr   Z
facecolorsr!   r   r   r   r   rl   rm   Zspring)r#   r$   r   cmap)r   rM   rN   rZ   rP   rQ   rR   rF   r{   r'  r4  r   r]   r(  rC   
get_ylabel_check_colorsrq   rD   r   Zget_facecolor)	r_   r`   r^   rC   cmZred_rgbaZ
green_rgbaZ
rgba_arrayZfloat_arrayrd   rd   re   test_plot_scatter_with_c  s2    
$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'   r!   r-   r   r   r   r   )r#   r$   r}   r   )right)
r   rM   rN   rF   r{   rD   r   valuesr'  Z	get_sizesr   rd   rd   re   test_plot_scatter_with_s
  s    z+TestDataFramePlots.test_plot_scatter_with_sc                 C   s\   dd l }ttjdd dddgd}|j }|jjddd|d}|jd j	|ksXt
d S )	Nr   r9  r-   r   r   r   r   )r#   r$   r   norm)
matplotlibr   rM   rN   colorsZLogNormrF   r{   r'  r=  r]   )r_   mplr`   r=  rC   rd   rd   re   test_plot_scatter_with_norm  s
    
z.TestDataFramePlots.test_plot_scatter_with_normc                 C   s   dd l }ttjdd dddgd}|jjdddd}|jd j}|j	 |j
 f}|jj| }|jD ]}||||ksjtqjd S )	Nr   r9  r-   r   r   r   r   r  )r>  r   rM   rN   rF   r{   r'  r=  r   minmaxr?  Z	Normalizer]   )r_   r@  r`   rC   Z	plot_normZcolor_min_maxZdefault_normvaluerd   rd   re   test_plot_scatter_without_norm  s    
z1TestDataFramePlots.test_plot_scatter_without_normc                 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 )Nr8   r   onetwothreer   r   FlegendTr   r   r'      r   r   r   Z   r   #   )rotfontsizer    
xlabelsize
ylabelsize)yrot7      )rS  rR  rQ  )r   rM   rN   r   rP   rQ   rR   r   rF   r<   rX   rH   r   r   rd   rd   re   test_plot_bar&  s0    
z TestDataFramePlots.test_plot_barc           	      C   s.  |}|d }|  j}dd |D }t|jj}| | | t|j	
 tdt|d  t|jdt| ks|t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dt| ks*td S )Nheightc                 S   s   g | ]}t |qS rd   r   r   r   rd   rd   re   r   K  s     z3TestDataFramePlots.test_boxplot.<locals>.<listcomp>r   r9   (   rN  r   r    rS  r8   )	positionsc                 S   s   g | ]}t |qS rd   r   rX  rd   rd   re   r   ^  s     )_get_numeric_datar?   r   rF   boxr   rU   rD   r   rT   r  rM   r   r\   r   r]   r   rH   rq   )	r_   hist_dfr`   seriesnumeric_colslabelsrC   r^   r\  rd   rd   re   test_boxplotG  s.    
 
zTestDataFramePlots.test_boxplotc           	      C   s8  |}|  j}dd |D }|jjdddd}| j|dddd | | | t|jd	t| ksjt	t
|jjd
d
dd
d}| j|ddd | j|dd t||D ],\}}| | |g t|jd	kst	qtdddg}|jj|dd}| | | t|j | t|jd	t| ks4t	d S )Nc                 S   s   g | ]}t |qS rd   r   rX  rd   rd   re   r   f  s     z<TestDataFramePlots.test_boxplot_vertical.<locals>.<listcomp>2   r=   F)rN  rO  vertr   r    rS  rR  r9   T)r   r   re  r   r!   )r   r!   r   r   r   r   )r\  re  )r]  r?   rF   r^  rH   r   get_yticklabelsr\   r   r]   r   rG   r   rW   rM   rq   rD   r   r   r  )	r_   r_  r`   ra  rb  rC   r^   r   r\  rd   rd   re   test_boxplot_verticalc  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 )Nr8   r   rF  rG  rH  r   r   z2return_type must be {None, 'axes', 'dict', 'both'}r%   Z
not_a_type)return_typedictr^   Zboth)r   rM   rN   r   rP   rQ   rR   rI   rJ   r   rF   r^  Z_check_box_return_type)r_   r`   ra   rc   rd   rd   re   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 rd   r   rX  rd   rd   re   r     s     z2TestDataFramePlots.test_kde_df.<locals>.<listcomp>rb  r   r   r  r*   )r   rN  rO  rP  T)r   r   r   r   r   )r   r   r   r   r   )r   rM   rN   r   r   rF   r?   _check_legend_labelsrH   rG   r   )r_   r`   rC   r  r^   rd   rd   re   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   rl  rm  )r   rM   rN   uniformrr   locr   rF   r   rd   rd   re   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 rd   r   rX  rd   rd   re   r     s     z3TestDataFramePlots.test_hist_df.<locals>.<listcomp>rn  T)r   r   r   r   r   r   r   rY  rZ  r[  )
cumulativebinsdensityc                    s   g | ]}t | r|qS rd   r   r   r#   rv  rd   re   r     s     
 r   r   )rx  ry  c                    s   g | ]}t | r|qS rd   r{  r|  rv  rd   re   r     s     
 r   g      Y@rd  r=   
horizontal)rN  rO  orientationrf  )Zmatplotlib.patchesrw  r   rM   rN   r   r   rF   ry   r?   ro  rG   r   rH   rD   r   Zget_childrenassert_almost_equalr   )r_   r`   r`  rC   r  r^   Zrectsrd   rv  re   test_hist_df  s6    zTestDataFramePlots.test_hist_dfweights皙?r-   )shape)r-   r   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   rl   rm   r   r-   ry   )r   r  rm  c                 S   s   g | ]}|  qS rd   r  r   patchrd   rd   re   r     s     z8TestDataFramePlots.test_hist_weights.<locals>.<listcomp>c                 S   s   g | ]}d |   qS )r  r  r  rd   rd   re   r     s     )rM   rN   seedr   rj  rW   r   r   rF   r   rD   r  )r_   r  r`   r   r   Zpatch_height_with_weightsZexpected_patch_heightrd   rd   re   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 rd   r   r   rd   rd   re   r     s     z7TestDataFramePlots._check_box_coord.<locals>.<listcomp>c                 S   s   g | ]}|  qS rd   r  r   rd   rd   re   r     s     c                 S   s   g | ]}|  qS rd   r   r   rd   rd   re   r     s     c                 S   s   g | ]}|  qS rd   )r   r   rd   rd   re   r     s     F)Zcheck_dtype)rM   rq   rD   r   )
r_   r   
expected_y
expected_h
expected_x
expected_wZresult_yZresult_heightZresult_xZresult_widthrd   rd   re   _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   r   r!   r   r*   r'   	   r=   r9   r8   r  rl   rm   rn   r   )ry  r   )r  r  T)ry  r         r   rK     )ry  r   r   r}  )ry  r~  )r  r  )ry  r   r~  )ry  r   r   r~  )	r   rM   repeatrq   rr   rF   ry   r  r   )r_   Z	normal_dfZnan_dfr`   rC   r^   rd   rd   re   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   TrI  )r   rM   rN   r   cumsumr   rF   r   rd   rd   re   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-   r!   ^+o)r   r   r   r   r   o   )style)matplotlib.pyplotpyplotgcfr   rM   rN   r   Zclfadd_subplotrF   	enumerater   r\   Z
get_markerr]   )r_   r[   rb   r`   markersrC   idxrL   rd   rd   re   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   r   TrI  r    )r   rF   
get_legendr]   	get_textsr!  )r_   r}   rC   rd   rd   re   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  )rM   rN   )r   r   rd   rd   re   
<dictcomp>  s      zHTestDataFramePlots.test_specified_props_kwd_plot_box.<locals>.<dictcomp>ABCcolorZC1ri  rj  r   )r   rF   r^  Z	get_colorr]   )r_   propsr  r`   Zkwdrc   rd   rd   re   !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 )Nr   r   r     r'   r   r  r=   testr   r   )r   rM   rq   r   rF   r   r   r]   r   rD   r   )r_   r`   rC   r,   Zydatard   rd   re   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 )Nr#   r   r   r!   rm  )r{   r|   )r   r   PlotAccessor_common_kindsrF   getattr)r_   r`   r   rd   rd   re   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 plotr%   rm  )	r   rP   r   r  r  rI   rJ   r
  rF   r_   r`   r   ra   rd   rd   re   test_all_invalid_plot_data  s
    z-TestDataFramePlots.test_all_invalid_plot_datac              
   C   s   t tjd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 q>t tjdddtd}d|tj|jd dk< tjtdd	 |jdd
 W 5 Q R X d S )Nr   r'   r   rg   r   r   r  r  r%   rm  r   )r   rM   rN   r   r   rs   rO   r  r   r  r  rI   rJ   r
  rF   r  rd   rd   re    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'   r   z*invalid_plot_kind is not a valid plot kindr%   Zinvalid_plot_kindrm  )r   rM   rN   r   rI   rJ   r   rF   r   rd   rd   re   test_invalid_kind  s    z$TestDataFramePlots.test_invalid_kindzx,y,lblrm   rn   rl   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   r   r!   r   r*   r8   r  x must be a label or positionr%   r#   r$   r   r   rI   rJ   r   rF   )r_   r#   r$   lblr`   rd   rd   re   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   r   r!   r   r*   r8   r  z.label should be list-like and same length as yr%   rl   rm   rn   Z	bad_labelr  r  r   rd   rd   re   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   r!   r*   r   r   r8   ZAABr   r  r%   r"   )r   rP   rI   rJ   r   rF   r+  rd   rd   re   test_invalid_xy_args_dup_cols  s     z0TestDataFramePlots.test_invalid_xy_args_dup_colszx,y,lbl,colorsr2  Zbluer   r   r   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   r   r!   r   r*   r8   r  rl   r  )r#   r$   r   r  Z
linecolors)r   r   rF   r\   r   r]   r6  r   )r_   r#   r$   r  r?  r`   rC   rd   rd   re   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   r   r!   r   r   r"   )r   r?   r   rF   )r_   r#   r$   Zcolnamesr`   rd   rd   re   test_xy_args_integer  s    z'TestDataFramePlots.test_xy_args_integerc                 C   s   t tjjddtjjddtdtjjdd d}|jjdddd}t|jdks\t	|jjddd	d
}t|d j
jdkst	| j|ddd d S )Nr  rq  r  rl   rm   r'   )r#   r$   Zgridsizer   T)r#   r$   r   r   r   rA   r   )r   rM   rN   rs  r   rF   r|   r\   r'  r]   figurer^   rG   )r_   r`   rC   r^   rd   rd   re   test_hexbin_basic  s    z$TestDataFramePlots.test_hexbin_basicc                 C   s   t tjjddtjjddtdtjjdd d}|jjdddd}t|jdks\t	|jjdddtj
d	}t|jdkst	d S )
Nr  rq  r  rl   rm   rn   )r#   r$   rn   r   )r#   r$   rn   Zreduce_C_function)r   rM   rN   rs  r   rF   r|   r\   r'  r]   Zstdr   rd   rd   re   test_hexbin_with_c.  s    z%TestDataFramePlots.test_hexbin_with_czkwargs, expectedZBuGnr1  r0  r4  ZYlGnc                 C   sj   t tjjddtjjddtdtjjdd d}|jjf ddd|}|jd jj	|ksft
d S )Nr  rq  r  rl   rm   r"   r   )r   rM   rN   rs  r   rF   r|   r'  r4  r   r]   )r_   kwargsr  r`   rC   rd   rd   re   test_hexbin_cmap=  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*   r!   XYZr   r   r   r   er>   z/pie requires either y column or 'subplots=True'r%   rx   r   Tr   rl   rm   rn   ro   rp   r   gm)r   r   rb  r?  r3  )r   rM   rN   rO   rI   rJ   r   rF   rz   r   r   textsr)   r\   r?   r]   rW   r5  r6  r   )r_   r`   ra   rC   r^   ylabelrb  Z
color_argsrd   rd   re   test_pie_dfP  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   rC   rJ  0123r  c                 S   s   g | ]}|  qS rd   r   r|  rd   rd   re   r     s     z6TestDataFramePlots.test_pie_df_nan.<locals>.<listcomp>c                 S   s   g | ]}|  qS rd   r   r|  rd   rd   re   r     s     r   )r>  r   rM   rN   rO   rX   rr   Zilocr[   r   __version__rD   assert_produces_warningrF   rz   r  rP   r  r]   r  r  )r_   r@  r`   r"  rb   r^   r  Zbase_expectedrC   r  rc   Zresult_labelsexpected_labelsrd   rd   re   test_pie_df_nanz  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   r"   皙?皙?T)yerrr   r   xerrr  )r  r   r   )r  r   r   r<   )r  r  r   r   r$   r  )r   r  )r  u   誤差r#   )r$   r#   r  rU  Zzzz)rM   r   r   onesr   rF   _check_has_errorbarscopyrD   Zexternal_error_raisedr   rN   r   r
  )r_   r   r`   d_errdf_errrC   r  Zs_dfrd   rd   re   test_errorbar_plot  sD        z%TestDataFramePlots.test_errorbar_plotr<   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   r"   r  r  r#   r  r   r   r  )r  r  r   )r  r  r   T)r   r  r  r   r   r   )rM   r   r   r  r   rF   r  )r_   r   r   r`   r  r  rC   r^   rd   rd   re   "test_errorbar_plot_different_kinds  s.    z5TestDataFramePlots.test_errorbar_plot_different_kindszIterator is consumed)r   rJ   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   r"   r  r  r   r  )warningscatch_warningsrM   r   r   r   rF   	itertoolsr  r\   r  )r_   r   r`   rC   rd   rd   re   test_errorbar_plot_iterator  s
    
z.TestDataFramePlots.test_errorbar_plot_iteratorc                 C   sr   t ttjdd}t ttjdd}t|j|d}| j|ddd t|jddd}| j|ddd d S )Nr'   r   r  r   r  r   )r$   r  )r   rM   absrN   r   r   rF   r  )r_   r`   r  rC   rd   rd   re   'test_errorbar_with_integer_column_names  s    z:TestDataFramePlots.test_errorbar_with_integer_column_namesc           
      C   s.  t ttjdd}t ttjddddgd}ddg}|D ]$}t|j||d}| j|ddd	 qDt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	 qd S )Nr'   r!   r   r   r   rL   r<   r  r  1/1/2000M)r  r  T)Zinplacer  r   r"   r  r  )r#   r   r  r   )r   rM   r  rN   r   r   rF   r  r
   r   r   r  )
r_   r`   r  kindsr   rC   ixr   r  errrd   rd   re   "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   r"   r  r  r  z1/1/2001r  )r  r(   r  r   r  r$   r#   )r$   r  r   r   T)r   r   r  r   )rM   r   r  r
   r   r   rF   r  )	r_   r   r   r  r  r   Ztdf_errrC   r^   rd   rd   re   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   r!   r   r*   rK  )r  r  r   r   zCAsymmetrical error bars should be provided with the shape (3, 2, 5)r%   r  )rM   rN   r  rO   r   r   ZreshapeTrF   r'  	get_pathsZverticesrq   rD   r  r  r	  rI   rJ   r   r   )r_   r  r`   rC   Zyerr_0_0Zexpected_0_0ra   rd   rd   re   test_errorbar_asymmetrical4  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'   r!   r(   T)tabler   r   )r   rM   rN   rO   rP   rQ   rR   r   rF   rD   r  r\   Ztablesr]   r   r  r  r   rd   rd   re   
test_tableI  s    $zTestDataFramePlots.test_tablec                    s  t ttjddtdddgd}t 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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*   r   r#   r$   r   r"   r   r  )r#   r$   r  r   )r#   r$   r  )r#   r$   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   rX  has_errrd   re   r   i  s      z[TestDataFramePlots.test_errorbar_scatter.<locals>._check_errorbar_color.<locals>.<listcomp>r   c                    s   g | ]}| j kr|qS rd   )r'  r|  rC   rd   re   r   o  s     
 r  )
containersr   extendappendr6  rM   rq   r\   )r  r  r  r   ZerrselZ	err_linesrC   r_   r  re   _check_errorbar_colorg  s     zGTestDataFramePlots.test_errorbar_scatter.<locals>._check_errorbar_colorr'   r   r   r   r   r  r   r2  )r#   r$   r  r  r   r  Zhas_yerrr  )r#   r$   r  r  )r  )r   rM   r  rN   r   rX   r   rF   r{   r  r  )r_   r`   r  r  rd   r  re   test_errorbar_scatterU  s<         z(TestDataFramePlots.test_errorbar_scatterc              	   C   sH   t dddgdd}tjttfdd |jdd	d
dd W 5 Q R X d S )Nr   r   r!   r   r   z'unknown' is not ar%   r   r   unknownr{   )r#   r$   r1  r   )r   rI   rJ   r   KeyErrorrF   r   rd   rd   re   test_scatter_unknown_colormap  s    z0TestDataFramePlots.test_scatter_unknown_colormapc              
      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   r)  r   r   r!   r   r*   r8   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   Tr1   r   r   Fr2   r!   )r\   r   r]   rS   rg  rU   r^   rC   r_   rd   re   _check  s    z5TestDataFramePlots.test_sharex_and_ax.<locals>._checkr   r   r/   T)r#   r$   r/   rC   sharex)r   rC   r  r#   r$   r/   rC   r1   r2   )r  r  r   _generate_4_axes_via_gridspecr   rF   tight_layoutr  rD   r  UserWarningr\   r   r]   rS   rg  rU   r_   r[   gsr^   r`   r  rC   rd   r  re   test_sharex_and_ax  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   r   r!   r   r*   r8   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   Tr1   r2   r   r   r!   F)r\   r   r]   rS   rU   rg  r
  r  rd   re   r    s    z5TestDataFramePlots.test_sharey_and_ax.<locals>._checkr   r   r/   T)r#   r$   r/   rC   r   )r   rC   r   r  r1   r2   )r  r  r  r   rF   r  r  rD   r   r  r  r\   r   r]   rS   rg  rU   r  rd   r  re   test_sharey_and_ax  s<    
	


z%TestDataFramePlots.test_sharey_and_axc              
   C   s   i }t jjD ]}i }|dkr`ttjjddtjjddtdtjjdd d}ddd}n|dkrvt	 
 }nt	 }t|jf d	|i|||< qt  t  d
}| D ]$}tjt|d |j W 5 Q R X qdS )z3Check that every plot type gets properly collected.)r|   r{   rz   r  rq  r  rl   rm   r"   r   r   z)weakly-referenced object no longer existsr%   N)r   r  Z
_all_kindsr   rM   rN   rs  r   rD   rE   r  weakrefproxyrF   r   gcZcollectr;  rI   rJ   ReferenceErrorr   )r_   resultsr   argsr`   ra   Zresult_valuerd   rd   re   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   )gridspecr'   r  )r  r(   r   ABr   c                     sL     dd}  }|| d dd d f }|| dd d f }||fS )Nr!   r   r   GridSpecr  r  r  rb   r   r   r  r[   rd   re   _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   r!   r   r  r!  r"  rd   re   _get_horizontal_grid%  s
    zJTestDataFramePlots.test_df_gridspec_patterns.<locals>._get_horizontal_gridr  r   Tr1   r2   rB   )r   rC   r  r   Fc                     st     dd}  }|| d dd df }|| d ddf }|| dd df }|| d }||||fS )Nr!   r   r   r  )r  rb   r   r   Zax3Zax4r"  rd   re   _get_boxed_gridb  s    zETestDataFramePlots.test_df_gridspec_patterns.<locals>._get_boxed_gridr   ABCDr!   )r>  r  r  r  r   rM   rN   r   r
   r   r)   rP   rF   r\   r   r]   rS   rg  rU   rD   r   r  r  )
r_   tsr`   r#  r$  r   r   rC   r^   r%  rd   r"  re   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   r   r!   r   r   r   r   r"   )kws)Z_check_grid_settingsr   r   r  Z_dataframe_kindsr  rd   rd   re   test_df_grid_settings  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  r=   r   )r   r   r   r   r{   r   r   Zhsv)r   rC   r#   r$   r   r4  r   )make_axes_locatabler:  z5%g?)r/  pad)
inset_axesz30%r   r!   )r   rW  rt  )r[   r   Zadd_axesr   rM   rN   rO   rF   r   r   r  Zmpl_toolkits.axes_grid1r+  Zappend_axesZ%mpl_toolkits.axes_grid1.inset_locatorr-  )	r_   rb   rC   r`   r+  dividerZcaxr-  Ziaxrd   rd   re   test_plain_axes  s$    

z"TestDataFramePlots.test_plain_axesmethodc                 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 )NrK  r   r  r   c                 S   s
   | j  S r#  )rm   r  r`   rd   rd   re   <lambda>      zBTestDataFramePlots.test_secondary_axis_font_size.<locals>.<lambda>rn   c                 S   s
   | j d S )Ng?r4  r1  rd   rd   re   r2    r3  )ro   r  rn   ro   T)r   rO  Z
mark_right)r^   rR  )
r   rM   rN   r   rP   Zassignr  rF   rH   r   )r_   r0  r`   rO  r   r  rC   rd   rd   re   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 )Nr!   r   r  r      ZMondayZTuesdayZ	Wednesday)ZsalesZvisitsdayr7  r   r   c                 S   s   g | ]}|  qS rd   r   r   trd   rd   re   r     s     zATestDataFramePlots.test_x_string_values_ticks.<locals>.<listcomp>r   r   r   )	r   rF   r   set_xlimrU   rj  rW   
get_xticksr]   )r_   r`   rC   xticklabelslabels_positionrd   rd   re   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   r   r   rl   rm   r>   r   c                 S   s   g | ]}|  qS rd   r   r8  rd   rd   re   r     s     zETestDataFramePlots.test_x_multiindex_values_ticks.<locals>.<listcomp>z	(2012, 1)r   z	(2012, 2)r   z	(2013, 1)r   z	(2013, 2)r   )r   Zfrom_productr   rM   rN   r   rF   r:  rU   rj  rW   r;  r]   )r_   r)   r`   rC   r<  r=  rd   rd   re   test_x_multiindex_values_ticks  s    z1TestDataFramePlots.test_x_multiindex_values_ticksc                 C   sL   t ddgddgd}|j|d}| }|d dk s8t|d dksHtd S )Nr   r   r   r(   rm  r   )r   rF   r   r]   )r_   r   r`   rC   xlimsrd   rd   re   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   r!   r   )s1s2s3r   r(   rB  rC  rD  F)rC   r   r   T)rC   r   r   c                 S   s   g | ]}|  qS rd   r   r8  rd   rd   re   r     s     zWTestDataFramePlots.test_xlim_plot_line_correctly_in_mixed_plot_type.<locals>.<listcomp>)r[   r   r   rF   r<   r   r]   rU   )r_   rb   rC   Zindexesr`   r@  r<  rd   rd   re   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)r?   rh   r   r   )	r   intemptyr]   rF   r\   r   r   r   )r_   r`   rC   rL   rd   rd   re   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  r%   )r   rI   rJ   r
  rF   r   rd   rd   re   test_plot_no_numeric_data  s    z,TestDataFramePlots.test_plot_no_numeric_data)rL   r<   r   ry   rl  rz  r   rz   c                 C   s   t dt dd t dd t dt dd}t|}|jddg|d}t|dks`tdd	gd
dgdgf}t||D ]<\}}|dkr| j||d |dkr~t|jt|ks~tq~d S )Nr'   r   )r   r   r   r   r  )r   r  )r   r   r   r   r!   r   r  r   r   r   rz   rn  rL   )	rM   r   r   rF   r\   r]   rW   ro  r   )r_   r   r   r`   r^   r  rC   rb  rd   rd   re   test_group_subplot  s    z%TestDataFramePlots.test_group_subplotc              	   C   s<   t td}d}tjt|d |jdgd W 5 Q R X d S )Nr   z!An iterable subplots for a Seriesr%   r   r@   )r   rX   rI   rJ   NotImplementedErrorrF   )r_   Zserra   rd   rd   re   (test_group_subplot_series_notimplemented+  s    z;TestDataFramePlots.test_group_subplot_series_notimplementedc              	   C   sL   t tdtddgd}d}tjt|d |jdgd W 5 Q R X d S )Nr   r  )r   r   r   z6An iterable subplots for a DataFrame with a MultiIndexr%   r@   )	r   rM   eyer   rY   rI   rJ   rM  rF   r   rd   rd   re   ,test_group_subplot_multiindex_notimplemented1  s    z?TestDataFramePlots.test_group_subplot_multiindex_notimplementedc              	   C   sF   t tdddgd}d}tjt|d |jdgd W 5 Q R X d S )Nr   r   r   z4An iterable subplots for a DataFrame with non-uniquer%   rL  r@   )r   rM   rO  rI   rJ   rM  rF   r   rd   rd   re   0test_group_subplot_nonunique_cols_notimplemented7  s    zCTestDataFramePlots.test_group_subplot_nonunique_cols_notimplementedzsubplots, expected_msg){   z(subplots should be a bool or an iterable)r   !each entry should be a list/tuple))r   rS  )rL  rS  c              	   C   sH   t dt dd}t|}tjt|d |j|d W 5 Q R X d S )Nr'   r   r%   r@   rM   r   r   rI   rJ   r   rF   )r_   r   Zexpected_msgr   r`   rd   rd   re   test_group_subplot_bad_input=  s    z/TestDataFramePlots.test_group_subplot_bad_inputc              	   C   sJ   t dt dd}t|}tjtdd |jdgd W 5 Q R X d S )Nr'   r   z Column label\(s\) \['bad_name'\]r%   )r   Zbad_namer@   rT  r_   r   r`   rd   rd   re   &test_group_subplot_invalid_column_nameP  s    z9TestDataFramePlots.test_group_subplot_invalid_column_namec              	   C   sT   t dt dt dd}t|}tjtdd |jddgd W 5 Q R X d S )Nr'   )r   r   r   zshould be in only one subplotr%   r   )r   r   r@   rT  rV  rd   rd   re   $test_group_subplot_duplicated_columnW  s    z7TestDataFramePlots.test_group_subplot_duplicated_column)r^  r{   r|   c              	   C   sL   t dt dd}t|}tjtdd |jdg|d W 5 Q R X d S )Nr'   r   z1When subplots is an iterable, kind must be one ofr%   rJ  rT  )r_   r   r   r`   rd   rd   re   test_group_subplot_invalid_kind^  s     z2TestDataFramePlots.test_group_subplot_invalid_kindz index_name, old_label, new_label)Nr  new)oldr[  rZ  )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   r   r*   Type AType Br   rm  r  )r   r  xlabel)r   r)   r   rF   
get_xlabelr]   r5  str)r_   r   Z
index_nameZ	old_labelZ	new_labelr`   rC   rd   rd   re   (test_xlabel_ylabel_dataframe_single_plotg  s    z;TestDataFramePlots.test_xlabel_ylabel_dataframe_single_plotzxlabel, ylabel)NN)X LabelN)NY Label)rb  rc  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 )Nr\  r]  r   r   r*   r   )r   r#   r$   r^  r  )r   rF   r_  r]   r5  )r_   r   r^  r  ZxcolZycolr`   rC   rd   rd   re   'test_xlabel_ylabel_dataframe_plane_plot  s    z:TestDataFramePlots.test_xlabel_ylabel_dataframe_plane_plotr   )FTc                 C   sj   t dgj|dddgd}|jjD ]B}|j r"| dks@t| dksPt|	 d dks"tq"d S )Nr   r  )r   r-   r   )r   r  r.   r+   )
r   rF   r  r^   r   Zget_visibler5  r]   r   Z
get_yticks)r_   r   Zax_dfrC   rd   rd   re   test_secondary_y  s    
   
z#TestDataFramePlots.test_secondary_y)NNNN)o__name__
__module____qualname__rI   markZxfailZslowrf   rw   r~   r   r   r   r   Zparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r*  r,  r8  r<  rA  rE  rV  rc  rh  rk  tdZskip_if_no_scipyrp  ru  r  rM   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/  r5  r>  r?  rA  rE  rH  rI  rK  rN  rP  rQ  rU  rW  rX  rY  ra  rd  re  rd   rd   rd   re   r   '   s  f
 

%
/'%		
1	
 

' 
   
 	

	


	$



*
.
		

!,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   r   rr  )r   r   r  rA   )r>  Zmatplotlib.gridspecr  r  r  r   Zsubplot)r@  r>  r[   r  Zax_tlZax_llZax_trZax_lrrd   rd   re   r    s    r  )&__doc__r   r   r  r  r  rQ   r  r  ZnumpyrM   rI   Zpandas.util._test_decoratorsutilZ_test_decoratorsrj  Zpandas.core.dtypes.apir   Zpandasrt   r   r   r   r   r	   r
   r   Zpandas._testingZ_testingrD   Zpandas.tests.plotting.commonr   r   Zpandas.io.formats.printingr   Zskip_if_no_mplr   r  rd   rd   rd   re   <module>   sH   $	                 