o
    deI                    @   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                   @   sB  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g d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-d. Zejjd/d0d1ejd2d3d/gd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Zd@dA Z dBdC Z!dDdE Z"dFdG Z#dHdI Z$ejdJd3d/gejdKg dLg dMfdNdO Z%ejdPg dQdRdS Z&dTdU Z'dVdW Z(dXdY Z)dZd[ Z*ejjd\d] Z+d^d_ Z,d`da Z-dbdc Z.e/j0ddde Z1e/j0dfdg Z2dhdi Z3ejdjdke4j5dldm dke4j5dndm gdodp Z6	q	q	q	qddrdsZ7dtdu Z8dvdw Z9dxdy Z:dzd{ Z;ejd|g d}d~d 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&g ddd ZMejjdeNddd ZOdd ZPejjddĄ ZQejd&g dddƄ ZRddȄ ZSddʄ ZTdd̄ ZUdd΄ ZVddЄ ZWdd҄ ZXe/j0ddԄ ZYddք ZZdd؄ Z[ddڄ Z\ejdg dܢ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dg ddd Zhdd Zidd Zjejd&ddd Zkejdd ddddqdddgfgejd&g ddd Zlejdg d	ejd&d
dgdd Zmejdddd ZndqS (  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 d    n1 sjw   Y  ttjddttjd d d}t|jdd}| j|dd t|jg dd t|jg dd t|jddd t|jdddd |jddd}| j|dd d |d d D ]'}| |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g d$d%d&gd'}tjd(d)gd*d+gd'}ttjddd,||d-}t|jd.d# td/tjdi}t|jjdd0}| j|dd1d t|jjdd2d3}| j|dd1d | j \}}|jjd|d4}t|dksJ |j}	|	|d u sJ d S )5NF)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   )r      r(   )yticks)xticks)id   )ylimZxlimZblah)r   r   title)r   r0   r"   r   visibleminor)r0   ))   αr   )r6   r   )   βr   )r7   r"   )   γr   )r8   r+   )   δ   )r9      Zi0i1)names)baru   Δ)r>   u   ΕZc0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axes)
selfdfr`   msgrF   Ztuplesr*   rB   figresult rf   Z/app/.heroku/python/lib/python3.10/site-packages/pandas/tests/plotting/frame/test_frame.py	test_plot)   s   $
zTestDataFramePlots.test_plotc              
   C   s   g d}t g dg d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 )N)Z2008Z2009NZ2011Z2012r   r   r"   r   r+   r;   r+   r"   r   dtypez%Y)formati8T)rl   utcABCDErp   rq   r#   rr   rs   rt   )
r   rP   arraynanobjectpdto_datetimeviewr   rI   )ra   datesrb   rf   rf   rg   test_nullable_int_plot   s    
z)TestDataFramePlots.test_nullable_int_plotc                 C   s   t jg d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 )Nr   r   r"   r   ZUInt32rj   r#   r%   r%   r$   )rx   ru   r   r   rI   rO   r>   histpier   scatterhexbin)ra   Zarrsrb   rf   rf   rg   test_integer_array_plot   s   z*TestDataFramePlots.test_integer_array_plotc                 C   s6   t g dg dd}| }t| dksJ d S )Nr$   r%   zr   r   r"   rp   rq   r   )r   rI   r_   	get_linesra   rb   rF   rf   rf   rg   test_nonnumeric_exclude   s   z*TestDataFramePlots.test_nonnumeric_excludec                 C   s>   t tjddg dd}|jddd}| |j d d S )Nr(   r"   abcrB   r   r   r#   )r   rP   rQ   randnrI   _check_text_labelsrW   rY   r   rf   rf   rg   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 J d S )Nr   r   r   r   NAMEZLABEL)r%   label)r   rP   rQ   r   r*   namerI   ra   rb   rf   rf   rg   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#   rp   rq   r$   r~   r   ZTest)   r@   )r$   r%   r0   figsizerD   )g      0@g       @)r   r   r   )rG   rH   Z_check_datarI   	set_indexrq   rP   aranger_   rB   r   r0   rJ   r   rf   rf   rg   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s#J |j|d}| j||d | |ks8J |j|d}| j|||d	 | |ksNJ | |ksVJ d S )
Nr   r.   r)   logyyaxis)logxrW   loglog)rW   r   )r   rP   r   rI   _check_ax_scalesZ
get_yscaleZ
get_xscale)ra   Z	input_logZexpected_logrb   rF   rf   rf   rg   test_logscales   s   z!TestDataFramePlots.test_logscalesinput_param)r   r   r   c                 C   sh   t dtditdd}d}tjt|d |jdi |di W d    d S 1 s-w   Y  d S )Nr   r.   r)   z9Boolean, None and 'sym' are valid options, 'sm' is given.r&   smrf   )r   rP   r   rL   rM   
ValueErrorrI   )ra   r   rb   rc   rf   rf   rg   test_invalid_logscale   s
   "z(TestDataFramePlots.test_invalid_logscalec                 C   s  t  }|jdd}| }t|d  trJ | j|dd t   dt	j
d< | }| }t|d  tr<J | j|dd t   dt	j
d< | }| }t|d  tr_J tt|d  tslJ t   t	j
dd" | }| }t|d  trJ | j|dd W d    n1 sw   Y  t   | }| }t|d  trJ tt|d  tsJ | j|dd d S )	NT)x_compatr      r    zxaxis.compatFr   )rG   rH   rI   r   
isinstance	get_xdatar   rK   closer   Zplot_paramsZuse)ra   rb   rF   linesrf   rf   rg   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*   rB   r   r~   )r   rP   rQ   rR   r	   r   rI   r^   ZaxhlinerG   r   r   rf   rf   rg   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*   rk   r   r   )rk   r   F)Zcheck_index_typerj   )r   rP   r   Zint64rI   r   Z
get_xydatar   rG   Zassert_series_equalr%   r   rx   Indexfloat64r*   )ra   rb   rF   r   rsrf   rf   rg   test_unsorted_index0  s   **z&TestDataFramePlots.test_unsorted_indexc              	   C   sp  t dg dig dd}| }| \}}| }|t|d  d ks)J |t|d  d ks8J 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smJ |t|d  d ks|J t g dg dd}|jddd}| \}}| }|t|d  d ksJ |t|d  d ksJ d S )Nr%                 ?       @      @)r   r   r   r   r)   r   r   r   r   g      @g      @g      @r   )g     V@g     V@g     @W@g      W@)r%   r   r   r#   )	r   rI   get_xlimr   rP   Znanminget_dataZnanmaxrv   )ra   rb   rF   xminxmaxr   rf   rf   rg   test_unsorted_index_limsB  s*   "z+TestDataFramePlots.test_unsorted_index_limsc                 C   s   t tjddttjd d g dd }d}tjt	|d |j
jdd W d    n1 s1w   Y  tjt	|d |j
jdd	 W d    d S 1 sPw   Y  d S )
Nr:   r   r$   r%   r   fourr   z+Log-y scales are not supported in area plotr&   Tr   r   )r   rP   rQ   rR   rS   rT   rU   rL   rM   r   rI   areara   rb   rc   rf   rf   rg   test_negative_log[  s   "z$TestDataFramePlots.test_negative_logc                 C   sZ   t t|d  d }t||D ]\}}|| d 7 }| d }t|| qd S )Nr   r   )rP   Zzerosr_   r   rZ   rG   assert_numpy_array_equal)ra   Znormal_linesZstacked_linesbasenlslsyrf   rf   rg   _compare_stacked_y_coodg  s   z*TestDataFramePlots._compare_stacked_y_coodkindrO   r   c                 C   s  t jd}t|ddg dd}| }t|d|d|d |d d}t|ddttjd d g 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 d    n1 sw   Y  ||jd }
t	|
j
|d	d	d d S )N*   r:   r   )wr$   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   )rP   rQ   RandomStater   rR   r   rS   rT   rU   r   rI   r   r   rL   rM   r   r   r*   )ra   r   Z	np_randomrb   neg_dfZsep_dfZmixed_dfax1ax2rc   df2rf   rf   rg   test_line_area_stackedn  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	g d	t j
d
}	tt |jd|	 t j	g dt j
d
}	tt |jd|	 t|jt 	g d t|jt 	g d t j	g dt j
d
}
t j	g d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  | q&d S )Nr   r   r"   r   r   r   )kr)   r   r   rj   )r"   r   r   )FFTF)FTFF)r   r   r   r"   )r"   r   r   r   Tr   F)rP   rv   r   rG   ZmakeDateIndexr   rI   r   	get_ydataru   r   r   deletedatamaskr   )ra   Zvalues1Zvalues2rb   tdfdrF   Zmasked1Zmasked2expZ	expected1Z	expected2rf   rf   rg   test_line_area_nan_df  s<   
z(TestDataFramePlots.test_line_area_nan_dfc                 C   sZ  t tjddg dd}| }| \}}| }||d  d d ks)J ||d  d d ks7J |jdd}| \}}| }||d  d d ksUJ ||d  d d kscJ |jddd	}| j|dd
d |D ]6}t	|ds}J t	|drJ | \}}| }||d  d d ksJ ||d  d d ksJ qtd S )Nr:   r"   r   r   r   r   T)secondary_y)r   r   r1   r   Zleft_axright_ax)
r   rP   rQ   rR   rI   r   r   r   rJ   hasattr)ra   rb   rF   r   r   r   r`   rf   rf   rg   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g dd}| }t|jj|d}| \}}| \}}|	 }	||	d 
 d d ks6J ||	d 
 d d ksDJ |dksJJ t|jj|d}| \}}|dks^J d S )Nr:   r   r   r   r   r   r   )r   rP   rQ   rR   r   rI   r   r   get_ylimr   r   )
ra   r   rb   r   rF   r   r   ZyminZymaxr   rf   rf   rg   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
 | |||s3J | |||s>J d S )Nr   r   r$   r%   r   r   T)shareyr   )rF   r   )	r   rP   rQ   rR   r^   r   rI   Z
get_y_axisZjoined)ra   rb   rd   r   r   rf   rf   rg   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J q|jjddd}|jD ]
}| dks3J q)|jjddd}| j|ddd |D ]}|jD ]
}| dksUJ qKqFd S )	Nr+   r   )	linewidthT)r   r   )r   r   )r+   r   r   )	r   rP   rQ   r   rI   r>   patchesZget_linewidthrJ   )ra   rb   rF   rr`   rf   rf   rg   test_bar_linewidth  s   


z%TestDataFramePlots.test_bar_linewidthc                 C   sF  t tjdd}d}|jj|d}|jD ]}| |t|j	 ks$J q|jjd|d}|jD ]
}| |ks:J q0|jj
|d}|jD ]}| |t|j	 ksTJ qE|jj
d|d}|jD ]
}| |ksjJ q`|jj|dd}|D ]}|jD ]
}| |ksJ qzqu|jj
|dd}|D ]}|jD ]
}| |ksJ qqd S )Nr+   g?)widthT)r   r   )r   r   )r   rP   rQ   r   rI   r>   r   	get_widthr_   rB   barh
get_height)ra   rb   r   rF   r   r`   rf   rf   rg   test_bar_barwidth  s2   





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s"J |jjdg d	d}d
d |jd d D }|g d	ks@J |jjdtg dd}dd |jD }|dgd ks^J |jjdg dd}dd |jd d D }|g dks|J |jjddd}|D ]}dd |jD }|dgd ksJ q|jjdtg dd}|D ]}dd |jD }|dgd ksJ qd S )Nr+   Fr   )r   bottomc                 S      g | ]}|  qS rf   Zget_y.0prf   rf   rg   
<listcomp>;      z;TestDataFramePlots.test_bar_bottom_left.<locals>.<listcomp>   T)r   c                 S   r   rf   r   r   rf   rf   rg   r  ?  r  )r   r   r   r   r   )r   leftc                 S   r   rf   get_xr   rf   rf   rg   r  C  r  ri   c                 S   r   rf   r
  r   rf   rf   rg   r  G  r  r   )r   r   c                 S   r   rf   r   r   rf   rf   rg   r  L  r  )r   r	  c                 S   r   rf   r
  r   rf   rf   rg   r  Q  r  )	r   rP   rQ   rR   rI   r>   r   r   ru   )ra   rb   rF   re   r`   rf   rf   rg   test_bar_bottom_left8  s,   z'TestDataFramePlots.test_bar_bottom_leftc                 C   s   t dtjdgg dg dd}|j }g d}dd |jD }||ks'J |jjd	d
}dd |jD }||ks<J dd |jD }g d}||ksNJ d S )Nr(      )r+   r(   r  r   rp   rq   rr   )	r(   r   r  r+   r(   r  r   r   r"   c                 S   r   rf   r   r   rf   rf   rg   r  X  r  z3TestDataFramePlots.test_bar_nan.<locals>.<listcomp>Tr   c                 S   r   rf   r  r   rf   rf   rg   r  \  r  c                 S   r   rf   r   r   rf   rf   rg   r  _  r  )	r   r   r         $@r   g      4@g      .@r  g      D@)r   rP   rv   rI   r>   r   )ra   rb   rF   expectedre   rf   rf   rg   test_bar_nanT  s    
zTestDataFramePlots.test_bar_nanc                 C   s0  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 ]e}|j	 }|j
 }t|tg d | dksOJ |jd  d	ksZJ |jd
  dkseJ |jj	dd}t|tg d | dksJ |jd  d	ksJ |jd
  dksJ q0d S )Nr:   r+   ZABCDEFZabcder   )r   r   r   r"   r   r+   )g      g      @r   g      пr   g@Tr   g      @)r   rP   rQ   r   rx   r   rS   ZCategoricalIndexrI   r>   rW   get_ticklocsrG   r   ru   r   r   r  )ra   Zdf1r   rb   rF   Zticksrf   rf   rg   test_bar_categoricalc  s.   

z'TestDataFramePlots.test_bar_categoricalc                 C   s   t tjddttjd d g dd}t|jj	ddd t|jj	dd	d t
d
}tjt|d |jj	dd W d    n1 sEw   Y  t
d}tjt|d |jj	dd W d    n1 shw   Y  |jddddd}| j|ddd d S )Nr:   r   r   r   r$   r%   r#   r   r   z5scatter() missing 1 required positional argument: 'y'r&   r   z5scatter() missing 1 required positional argument: 'x'r~   r   T)r$   r%   r   r   rD   r   )r   rP   rQ   r   rS   rT   rU   r   rI   r   reescaperL   rM   	TypeErrorrJ   )ra   rb   rc   r`   rf   rf   rg   test_plot_scatter  s"   

z$TestDataFramePlots.test_plot_scatterc                 C   sr   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 d    d S 1 s2w   Y  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   rP   rQ   r   r
   timerL   rM   r  rI   r   rf   rf   rg   &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!  r#   )
r
   r   rP   rQ   normalr_   r   r   rI   r   )ra   r{   r!  rb   rf   rf   rg   test_scatterplot_datetime_data  s
   z1TestDataFramePlots.test_scatterplot_datetime_datac                 C   sx   t g dg dd}t|jjddd t|jjddd t g dg d	d}t|jjddd t|jjddd d S )
Nr  r   r"   r   r   r   r   r#   r   r   r   )r   r   rI   r   r   rf   rf   rg   test_scatterplot_object_data  s   z/TestDataFramePlots.test_scatterplot_object_dataordered
categories)setosa
versicolor	virginica)r)  r*  r(  c                 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g d||d|d< |jjdddd}|j\}|j}tg d}|	 }t
|| tg d}	|j}
t
|
|	 |}dd |j D }tdd t||D snJ d S )Ngffffff@g      @g@r   g      @g	@g@g@lengthr   r   )r(  r(  r*  r*  r)  )r&  r'  Zspeciesr   r   r$   r%   r   )      ?g      ?g      @r   c                 S   r   rf   get_text)r   irf   rf   rg   r    r  zLTestDataFramePlots.test_scatterplot_color_by_categorical.<locals>.<listcomp>c                 s   s    | ]	\}}||kV  qd S Nrf   )r   r0  jrf   rf   rg   	<genexpr>  s    zKTestDataFramePlots.test_scatterplot_color_by_categorical.<locals>.<genexpr>)r   rx   CategoricalrI   r   collectionscolorbarrP   ru   Z	get_ticksrG   r   Z_boundariesrF   Zget_ymajorticklabelsallrZ   )ra   r&  r'  rb   rF   Zcolorbar_collectionr6  Zexpected_ticksZresult_ticksZexpected_boundariesZresult_boundariesZexpected_yticklabelsZresult_yticklabelsrf   rf   rg   %test_scatterplot_color_by_categorical  s*    
 z8TestDataFramePlots.test_scatterplot_color_by_categoricalzx, y)r#   )r%   r$   )r%   r%   c                 C   s2   t g dtg dd}t|jj||d d S )Nr}   )r   r   r   r   r#   )r   rx   r4  r   rI   r   ra   r$   r%   rb   rf   rf   rg   '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 g dd}|jjdd	d
d|jjddddg}|D ]}|j	d j
jdks8J |j	d jj d
ksEJ q+d}|jjdd	d
|d}|j	d j
j|ks]J |jjdd	d
dd}|j	d jd u sqJ |jjdddd}|j	d jd u sJ | j|j	dgd t ddgddgd}g d}g d}t||g}|jjdd|d}t|j	d  | tddg}|jjdd|dd  d S )!Nr   r.   )r:   r   )lowhighsizer:   r   r   r$   r%   r   r,  r   r   ZGreys	cubehelix)r$   r%   r   colormapF)r$   r%   r   r6  redr   Z
facecolorsr"   r   r   )r   r   r   r   )r   r   r   r   rp   rq   r   r   Zspring)r$   r%   r   cmap)r   rP   rQ   r]   rS   rT   rU   rI   r   r5  rB  r   r6  rF   
get_ylabel_check_colorsru   rG   r   Zget_facecolor)	ra   rb   r`   rF   cmZred_rgbaZ
green_rgbaZ
rgba_arrayZfloat_arrayrf   rf   rg   test_plot_scatter_with_c  s2   $z+TestDataFramePlots.test_plot_scatter_with_cc                 C   sP   t tjdd g d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   r   )right)
r   rP   rQ   rI   r   rG   r   valuesr5  Z	get_sizesr   rf   rf   rg   test_plot_scatter_with_s
  s   "z+TestDataFramePlots.test_plot_scatter_with_sc                 C   sZ   dd l }ttjdd g dd}|j }|jjddd|d	}|jd j	|u s+J d S )
Nr   rG  r.   r   r   r   r   r   )r$   r%   r   norm)

matplotlibr   rP   rQ   colorsZLogNormrI   r   r5  rK  )ra   mplrb   rK  rF   rf   rf   rg   test_plot_scatter_with_norm  s
   
z.TestDataFramePlots.test_plot_scatter_with_normc                 C   s   dd l }ttjdd g dd}|jjdddd	}|jd j}|j	 |j
 f}|jj| }|jD ]}||||ks@J q4d S )
Nr   rG  r.   r   r   r   r   r   r,  )rL  r   rP   rQ   rI   r   r5  rK  r   minmaxrM  Z	Normalize)ra   rN  rb   rF   Z	plot_normZcolor_min_maxZdefault_normvaluerf   rf   rg   test_plot_scatter_without_norm  s   
z1TestDataFramePlots.test_plot_scatter_without_normc                 C   s0  t tjddttjd d g d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 )Nr:   r   onetwothreer   r   FlegendTr   r   r(      r   r   r   Z   r    #   )rotfontsizer!   
xlabelsize
ylabelsize)yrot7      )rb  ra  r`  )r   rP   rQ   r   rS   rT   rU   r   rI   r>   r[   rK   r   r   rf   rf   rg   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>J t  |jjdd}| j|ddd	 t  t|jj}tg d
}|jj|d}|  j}dd |D }| | | t|j	
 | t|jdt| ksJ d S )Nheightc                 S      g | ]}t |qS rf   r   r   r   rf   rf   rg   r  K  r  z3TestDataFramePlots.test_boxplot.<locals>.<listcomp>r   r;   (   r]  r   r!   rb  )r   r:   r;   )	positionsc                 S   rg  rf   r   rh  rf   rf   rg   r  ^  r  )_get_numeric_datarB   r   rI   boxr   rX   rG   r   rW   r  rP   r   r_   r   r   rK   ru   )	ra   hist_dfrb   seriesnumeric_colslabelsrF   r`   rl  rf   rf   rg   test_boxplotG  s,   

zTestDataFramePlots.test_boxplotc           	      C   s4  |}|  j}dd |D }|jjdddd}| j|dddd | | | t|jd	t| ks5J t	|jjd
d
dd
d}| j
|ddd | j|dd t||D ]\}}| | |g t|jd	ksjJ qTtg d}|jj|dd}| | | t|j | t|jd	t| ksJ d S )Nc                 S   rg  rf   r   rh  rf   rf   rg   r  f  r  z<TestDataFramePlots.test_boxplot_vertical.<locals>.<listcomp>2   r@   F)r]  r^  vertr   r!   rb  ra  r;   T)r   r   ru  r   r"   )r   r"   r   r   r   )r"   r   r@   )rl  ru  )rm  rB   rI   rn  rK   r   get_yticklabelsr_   r   r   rJ   r   rZ   rP   ru   rG   r   r   r  )	ra   ro  rb   rq  rr  rF   r`   r   rl  rf   rf   rg   test_boxplot_verticalc  s0   
z(TestDataFramePlots.test_boxplot_verticalc                 C   s   t tjddttjd d g dd}d}tjt	|d |j
jdd W d    n1 s0w   Y  |j
jd	d}| |d	 |j
jd
d}| |d
 |j
 }| |d
 |j
jdd}| |d d S )Nr:   r   rT  r   z2return_type must be {None, 'axes', 'dict', 'both'}r&   Z
not_a_type)return_typedictr`   Zboth)r   rP   rQ   r   rS   rT   rU   rL   rM   r   rI   rn  Z_check_box_return_type)ra   rb   rc   re   rf   rf   rg   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   rg  rf   r   rh  rf   rf   rg   r    r  z2TestDataFramePlots.test_kde_df.<locals>.<listcomp>rr  r   r    r  r+   )r   r]  r^  r_  T)r   r   r   r   r   )r   r   r   r   r   )r   rP   rQ   r   r   rI   rB   _check_legend_labelsrK   rJ   r   )ra   rb   rF   r  r`   rf   rf   rg   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   r|  r}  )r   rP   rQ   uniformrv   locr   rI   r   rf   rf   rg   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   rg  rf   r   rh  rf   rf   rg   r    r  z3TestDataFramePlots.test_hist_df.<locals>.<listcomp>r~  T)r   r   r   r   r   r   r   ri  rj  rk  )
cumulativebinsdensityc                       g | ]	}t | r|qS rf   r   r   r$   r  rf   rg   r        r   r   )r  r  c                    r  rf   r  r  r  rf   rg   r    r  r  g      Y@rt  r@   
horizontal)r]  r^  orientationrv  )Zmatplotlib.patchesr  r   rP   rQ   r   r   rI   r   rB   r  rJ   r   rK   rG   r   Zget_childrenassert_almost_equalr   )ra   rb   rp  rF   r  r`   Zrectsrf   r  rg   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   rp   rq   r   r.   r   )r   r  r}  c                 S   r   rf   r  r   patchrf   rf   rg   r    r  z8TestDataFramePlots.test_hist_weights.<locals>.<listcomp>c                 S   s   g | ]}d |   qS )r  r  r  rf   rf   rg   r    s    )rP   rQ   seedr   rz  rZ   r   r   rI   r   rG   r  )ra   r  rb   r   r   Zpatch_height_with_weightsZexpected_patch_heightrf   rf   rg   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 ur4tj||dd |d ur@tj||dd |d urLtj||dd |d urZtj|	|dd d S d S )Nc                 S   r   rf   r   r   rf   rf   rg   r    r  z7TestDataFramePlots._check_box_coord.<locals>.<listcomp>c                 S   r   rf   r  r   rf   rf   rg   r    r  c                 S   r   rf   r
  r   rf   rf   rg   r    r  c                 S   r   rf   )r   r   rf   rf   rg   r    r  F)Zcheck_dtype)rP   ru   rG   r   )
ra   r   
expected_y
expected_h
expected_x
expected_wZresult_yZresult_heightZresult_xZresult_widthrf   rf   rg   _check_box_coord  s   z#TestDataFramePlots._check_box_coordc                 C   s  t ttg dtg dttg dtg dttg dtg ddg dd}t tttjddd	d
dgtg dttdtjdd	d
dgtg dttddd	tjd
dgtg ddg dd}||fD ]}|jjdd}| j|jd d tg dtg dd | j|jdd tg dtg dd | j|jdd  tg dtg dd |jjddd}| j|jd d tg dtg dd | j|jdd tg dtg dd | j|jdd  tg dtg dd |jjdddd}| j|d jtg dtg dd | j|d jtg dtg dd | j|d jtg dtg dd |jjddd}| j|jd d tg dtg dd | j|jdd tg dtg dd | j|jdd  tg dtg dd |jjdddd}| j|jd d tg dtg dd | j|jdd tg dtg dd | j|jdd  tg dtg dd |jjddddd}| j|d jtg dtg dd | j|d jtg dtg dd | j|d jtg dtg dd qd S )Nri   )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   r   r   r   r   )r  r  r(   T)r  r   )      r   rZ     )r  r   r   r   r  )r  r  )r  r  )r  r   r  )r  r   r   r  )	r   rP   repeatru   rv   rI   r   r  r   )ra   Z	normal_dfZnan_dfrb   rF   r`   rf   rf   rg   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   TrX  )r   rP   rQ   r   cumsumr   rI   r   rf   rf   rg   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g d	ddgfD ],}|  |d
 |j	|d}t
| d t| D ]\}}| || ksOJ qAq$d S )Nr   r.   r"   ^+o)r   r   r   r   r   )r  r  r  o   )style)matplotlib.pyplotpyplotgcfr   rP   rQ   r   Zclfadd_subplotrI   	enumerater   r_   Z
get_marker)ra   r^   rd   rb   markersrF   idxrO   rf   rf   rg   test_style_by_column  s   

 z'TestDataFramePlots.test_style_by_columnc                 C   sP   t ddg}| }| d u sJ |jdd}|  d  dks&J d S )Nr   r   TrX  r    )r   rI   
get_legend	get_textsr/  )ra   r   rF   rf   rf   rg   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d	ddi|}|| d  dks&J d S )
Nc                 S   s   i | ]	}|t jd qS r  )rP   rQ   )r   r   rf   rf   rg   
<dictcomp>  r  zHTestDataFramePlots.test_specified_props_kwd_plot_box.<locals>.<dictcomp>ABCcolorZC1ry  rz  r   rf   )r   rI   rn  	get_color)ra   propsr  rb   Zkwdre   rf   rf   rg   !test_specified_props_kwd_plot_box  s   z4TestDataFramePlots.test_specified_props_kwd_plot_boxc                 C   s   t tg dtdddtdddtdddgdgd}| }|jd	  }|d	 |d k s1J |jd	  }t	|tg d
 d S )N)r   r   r     r(   r   r  r@   testr   r   )r   r   r   )
r   rP   ru   r   rI   r   r   r   rG   r   )ra   rb   rF   r-   Zydatarf   rf   rg   test_unordered_ts  s    z$TestDataFramePlots.test_unordered_tsc                 C   sh   t dg d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   r   )r   r   PlotAccessor_common_kindsrI   getattr)ra   rb   r   rf   rf   rg   test_kind_both_ways  s   z&TestDataFramePlots.test_kind_both_waysc              	   C   s\   t td}tjjD ]!}d}tjt|d |j|d W d    n1 s&w   Y  q
d S )Nabcdno numeric data to plotr&   r}  )	r   rS   r   r  r  rL   rM   r  rI   ra   rb   r   rc   rf   rf   rg   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 d    n1 s;w   Y  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 d    d S 1 suw   Y  d S )Nr   r(   r   rj   r   r   r-  r  r&   r}  r   )r   rP   rQ   r   r   rw   rR   r  r   r  r  rL   rM   r  rI   r  rf   rf   rg    test_partially_invalid_plot_data  s   "z3TestDataFramePlots.test_partially_invalid_plot_datac                 C   sV   t tjdd}d}tjt|d |jdd W d    d S 1 s$w   Y  d S )Nr(   r   z*invalid_plot_kind is not a valid plot kindr&   Zinvalid_plot_kindr}  )r   rP   rQ   r   rL   rM   r   rI   r   rf   rf   rg   test_invalid_kind  s
   "z$TestDataFramePlots.test_invalid_kindzx,y,lblrq   rr   rp   r   r   r   c                 C   s`   t ddgddgddgd}tjtdd	 |j|||d
 W d    d S 1 s)w   Y  d S )Nr   r   r"   r   r+   r:   r  x must be a label or positionr&   r$   r%   r   r   rL   rM   r   rI   )ra   r$   r%   lblrb   rf   rf   rg   test_invalid_xy_args  s   	"z'TestDataFramePlots.test_invalid_xy_argsc                 C   sh   t ddgddgddgd}d}tjt|d	 |jd
ddgdd W d    d S 1 s-w   Y  d S )Nr   r   r"   r   r+   r:   r  z.label should be list-like and same length as yr&   rp   rq   rr   Z	bad_labelr  r  r   rf   rf   rg   test_bad_label  s
   "z!TestDataFramePlots.test_bad_labelzx,yr   c                 C   s^   t g dg dgtdd}tjtdd |j||d W d    d S 1 s(w   Y  d S )N)r   r"   r+   )r   r   r:   ZAABr   r  r&   r#   )r   rS   rL   rM   r   rI   r9  rf   rf   rg   test_invalid_xy_args_dup_cols  s   "z0TestDataFramePlots.test_invalid_xy_args_dup_colszx,y,lbl,colorsr@  bluer   r   r   Zbokehcythongreenyellowc                 C   sl   t ddgddgddgd}t|jd||d	 |j||||d
}t|jt|ks+J | j| |d d S )Nr   r   r"   r   r+   r:   r  rp   r  )r$   r%   r   r  Z
linecolors)r   r   rI   r_   r   rD  r   )ra   r$   r%   r  rM  rb   rF   rf   rf   rg   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   rB   r   rI   )ra   r$   r%   Zcolnamesrb   rf   rf   rg   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.J |jjddd	d
}t|d j	j
dksCJ | j|ddd d S )Nr  r  r  rp   rq   r(   )r$   r%   Zgridsizer   T)r$   r%   r   r   r   rD   r   )r   rP   rQ   r  r   rI   r   r_   r5  figurer`   rJ   )ra   rb   rF   r`   rf   rf   rg   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.J |jjdddtj	d	}t|jdksBJ d S )
Nr  r  r  rp   rq   rr   )r$   r%   rr   r   )r$   r%   rr   Zreduce_C_function)
r   rP   rQ   r  r   rI   r   r_   r5  Zstdr   rf   rf   rg   test_hexbin_with_c.  s   z%TestDataFramePlots.test_hexbin_with_czkwargs, expectedZBuGnr?  r>  rB  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dddd|}|jd jj	|ks3J d S )	Nr  r  r  rp   rq   r#   r   rf   )
r   rP   rQ   r  r   rI   r   r5  rB  r   )ra   kwargsr  rb   rF   rf   rf   rg   test_hexbin_cmap=  s   	z#TestDataFramePlots.test_hexbin_cmapc                 C   sl  t tjddg dg dd}d}tjt|d |j  W d    n1 s)w   Y  t	|jjdd	}| 
|j|j t	|jjd
d	}| 
|j|j t	|jjddd}t|t|jksbJ |D ]
}| 
|j|j qdt||jD ]\}}| |ksJ qug d}g d}t	|jjdd||d}t|t|jksJ |D ]}| 
|j| | j|j|d qd S )Nr+   r"   )XYZr   r   r   r   erA   z/pie requires either y column or 'subplots=True'r&   r  r~   r   Tr   ro   )r   gr   r   m)r   r   rr  rM  rA  )r   rP   rQ   rR   rL   rM   r   rI   r   r   r   textsr*   r_   rB   rZ   rC  rD  r   )ra   rb   rc   rF   r`   ylabelrr  Z
color_argsrf   rf   rg   test_pie_dfP  sJ   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r0ddi}td  |jjdd|dd| W d    n1 sMw   Y  g d}t|D ]9\}}t|}	d	|	|< d
d |jD }
|
|	kstJ dd |  D }|d | ||d d   }||ksJ qZd S )Nr   r   )Zncolsz3.3	normalizeT)r   rF   rY  )0123r  c                 S   r   rf   r.  r  rf   rf   rg   r    r  z6TestDataFramePlots.test_pie_df_nan.<locals>.<listcomp>c                 S   r   rf   r.  r  rf   rf   rg   r    r  r   rf   )rL  r   rP   rQ   rR   r[   rv   Zilocr^   r   __version__rG   assert_produces_warningrI   r   r  rS   r  r  r  )ra   rN  rb   r0  rd   r`   r  Zbase_expectedrF   r  re   Zresult_labelsexpected_labelsrf   rf   rg   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
 qt	t
 |jt jdd W d    n1 sw   Y  tdgd dgd d}t	t |j|d W d    d S 1 s	w   Y  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  rd  zzz)rP   r   r   onesr   rI   _check_has_errorbarscopyrG   Zexternal_error_raisedr   rQ   r   r  )ra   r   rb   d_errdf_errrF   r  Zs_dfrf   rf   rg   test_errorbar_plot  s@   $z%TestDataFramePlots.test_errorbar_plot)rO   r>   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   )rP   r   r   r  r   rI   r  )ra   r   r   rb   r  r  rF   r`   rf   rf   rg   "test_errorbar_plot_different_kinds  s.   z5TestDataFramePlots.test_errorbar_plot_different_kindszIterator is consumed)r   rM   c                 C   sz   t  / tdtdddd}t|}t|jtdt	|d}| j
|ddd W d    d S 1 s6w   Y  d S )	Nr  r   r   r#   r  r  r   r  )warningscatch_warningsrP   r   r   r   rI   	itertoolsr  r_   r  )ra   r   rb   rF   rf   rf   rg   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   rP   absrQ   r   r   rI   r  )ra   rb   r  rF   rf   rf   rg   '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	 q"t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(   r"   r   r   r   rO   r>   r   r  1/1/2000M)r  r  T)Zinplacer  r   r#   r  r  )r$   r   r  r   )r   rP   r  rQ   r   r   rI   r  r
   r   r   r  )
ra   rb   r  kindsr   rF   ixr   r  errrf   rf   rg   "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   )rP   r   r  r
   r   r   rI   r  )	ra   r   r   r  r  r   Ztdf_errrF   r`   rf   rf   rg   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 d    n1 sgw   Y  t  d S )Nr   r"   r   r+   rZ  )r  r  r   r   zCAsymmetrical error bars should be provided with the shape (3, 2, 5)r&   r  )rP   rQ   r  rR   r   r   ZreshapeTrI   r5  	get_pathsZverticesru   rG   r  r  r  rL   rM   r   r   )ra   r  rb   rF   Zyerr_0_0Zexpected_0_0rc   rf   rf   rg   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s3J t||j t|jdksCJ W d    d S 1 sNw   Y  d S )Nr(   r"   r)   T)tabler   r   )r   rP   rQ   rR   rS   rT   rU   r   rI   rG   r  r_   Ztablesr   r  r  r   rf   rf   rg   
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g d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|r|| 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   rh  has_errrf   rg   r  i  s    z[TestDataFramePlots.test_errorbar_scatter.<locals>._check_errorbar_color.<locals>.<listcomp>r   c                    s   g | ]	}| j v r|qS rf   )r5  r  rF   rf   rg   r  o  r  r  )
containersr   extendappendrD  rP   ru   r_   )r  r  r  r   ZerrselZ	err_linesrF   ra   r  rg   _check_errorbar_colorg  s   
zGTestDataFramePlots.test_errorbar_scatter.<locals>._check_errorbar_colorr(   r  r   r   r   r   r  r@  )r$   r%   r  r  r   r  Zhas_yerrr  )r$   r%   r  r  )r  )r   rP   r  rQ   r   r[   r   rI   r   r  r  )ra   rb   r  r  rf   r  rg   test_errorbar_scatterU  s2   "z(TestDataFramePlots.test_errorbar_scatterc                 C   s\   t g ddd}tjttfdd |jdddd	d
 W d    d S 1 s'w   Y  d S )Nr   r   r   z'unknown' is not ar&   r   r   unknownr   )r$   r%   r?  r   )r   rL   rM   r   KeyErrorrI   r   rf   rf   rg   test_scatter_unknown_colormap  s   "z0TestDataFramePlots.test_scatter_unknown_colormapc                    st  dd l m} |d t \}}tg dg dg dg dd} fdd}|D ]}|jddd	|d
d q)||  || t  t \}}t	t
 |jd
|d
d}W d    n1 sbw   Y  || t  t \}}|D ]}|jddd	|d qv||  |D ](}t|jdksJ  j| d
d  j| d
d  j|jd
dd
d qt  d S )Nr   r7  r   r   r"   r   r+   r:   r   r   r   r   c                    s   | D ]}t |jdksJ  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   Tr2   r   r   Fr4   r"   )r_   r   rV   rw  rX   r`   rF   ra   rf   rg   _check  s   z5TestDataFramePlots.test_sharex_and_ax.<locals>._checkr   r   r0   T)r$   r%   r0   rF   sharex)r   rF   r'  r$   r%   r0   rF   r   r2   r4   )r  r  r   _generate_4_axes_via_gridspecr   rI   tight_layoutr  rG   r  UserWarningr_   r   rV   rw  rX   ra   r^   gsr`   rb   r&  rF   rf   r%  rg   test_sharex_and_ax  s@   

	

z%TestDataFramePlots.test_sharex_and_axc                    sp  dd l m} t \}}tg dg dg dg dd} fdd}|D ]}|jddd|d	d
 q$||  || t  t \}}t	t
 |jd	|d	d}W d    n1 s]w   Y  ||  || t  t \}}|D ]}|jddd|d qx||  |D ](}t|jdksJ  j| d	d  j| d	d  j|jd	dd	d qd S )Nr   r"  r#  c                    s   | D ]}t |jdksJ  j| dd  j|jdddd q| d | d fD ]} j| dd q*| d | d fD ]} j| dd q>d S )	Nr   Tr2   r4   r   r   r"   F)r_   r   rV   rX   rw  r$  r%  rf   rg   r&    s   z5TestDataFramePlots.test_sharey_and_ax.<locals>._checkr   r   r0   T)r$   r%   r0   rF   r   )r   rF   r   r(  r   r2   r4   )r  r  r)  r   rI   r*  r  rG   r   r  r+  r_   r   rV   rw  rX   r,  rf   r%  rg   test_sharey_and_ax  s@   
	


z%TestDataFramePlots.test_sharey_and_axc              	   C   s   i }t jjD ]H}i }|dv r0ttjjddtjjddtdtjjdd d}ddd}n|dkr;t	 
 }nt	 }t|jdd	|i|||< qt  t  d
}| D ]}tjt|d |j W d   n1 stw   Y  q]dS )z3Check that every plot type gets properly collected.)r   r   r   r  r  r  rp   rq   r#   r   r   z)weakly-referenced object no longer existsr&   Nrf   )r   r  Z
_all_kindsr   rP   rQ   r  r   rG   rH   r  weakrefproxyrI   r   gcZcollectrI  rL   rM   ReferenceErrorr   )ra   resultsr   argsrb   rc   Zresult_valuerf   rf   rg   test_memory_leak  s0    z#TestDataFramePlots.test_memory_leakc           
         sz  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\}}|j|d}t|jdksPJ |j|d}t|jdks_J ||fD ]}| j| dd | j| dd | j|jdddd qct  q=| | fD ]E\}}|jd||gd}t|jdksJ t|jdksJ |D ]}| j| dd | j| dd | j|jdddd qt  q| \}}tt |jd||gddd}W d    n1 sw   Y  t|d jdksJ t|d jdksJ ||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 d    n	1 sww   Y  t|d jdksJ t|d jdksJ | j|d  dd | j|d  dd ||fD ]}| j| dd | j|jdddd qt   fdd}	|	 }t	tjdd|j
tdd	}|jd|d}|D ]*}t|jdksJ | j| dd | j| dd | j|jdddd qt  |	 }tt |jd|ddd}W d    n	1 s8w   Y  |D ]}t|jdksKJ q?|d |d fD ]}| j| dd qU|d |d fD ]}| j| dd qj|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 qt  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-  rd   r   r   r7  r^   rf   rg   _get_vertical_grid  
   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   r9  r;  r<  rf   rg   _get_horizontal_grid%  r>  zJTestDataFramePlots.test_df_gridspec_patterns.<locals>._get_horizontal_gridr  r   Tr2   r4   rE   )r   rF   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   r9  )r-  rd   r   r   Zax3Zax4r<  rf   rg   _get_boxed_gridb  s   zETestDataFramePlots.test_df_gridspec_patterns.<locals>._get_boxed_gridr   ZABCDr"   )rL  r7  r  r  r   rP   rQ   r   r
   r   r*   rS   rI   r_   r   rV   rw  rX   rG   r   r  r+  )
ra   tsrb   r=  r?  r   r   rF   r`   r@  rf   r<  rg   test_df_gridspec_patterns  s   



	z,TestDataFramePlots.test_df_gridspec_patternsc                 C   s0   | j tg dg ddtjjdddd d S )Nr   r$  r   r   r   r#   )kws)Z_check_grid_settingsr   r   r  Z_dataframe_kindsr%  rf   rf   rg   test_df_grid_settings  s
   
z(TestDataFramePlots.test_df_grid_settingsc           	      C   s<  | j  \}}|g d 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 )N)r  r  r  r  r(   r  r@   r   )r   r   r   r   r   r   r   Zhsv)r   rF   r$   r%   r   rB  r   )make_axes_locatablerH  z5%g?)r=  pad)
inset_axesz30%r   r"   )r   rf  r  )r^   r   Zadd_axesr   rP   rQ   rR   rI   r   r   r  Zmpl_toolkits.axes_grid1rE  Zappend_axesZ%mpl_toolkits.axes_grid1.inset_locatorrG  )	ra   rd   rF   rb   rE  dividerZcaxrG  Ziaxrf   rf   rg   test_plain_axes  s$   

z"TestDataFramePlots.test_plain_axesmethod)rO   r   r>   c                 C   st   t tjddtddjdd djdd d	}d
}ddg}||dd}t|j|di |}| j|j	|d d S )NrZ  r   r8  r   c                 S   s
   | j  S r1  )rq   r  rb   rf   rf   rg   <lambda>     
 zBTestDataFramePlots.test_secondary_axis_font_size.<locals>.<lambda>rr   c                 S   s
   | j d S )Ng?rN  rK  rf   rf   rg   rL    rM  )rs   r  rr   rs   T)r   r^  Z
mark_right)r`   ra  rf   )
r   rP   rQ   r   rS   Zassignr  rI   rK   r   )ra   rJ  rb   r^  r   r  rF   rf   rf   rg   test_secondary_axis_font_size  s   z0TestDataFramePlots.test_secondary_axis_font_sizec                 C   s   t g dg dg dd}|jjdd}|dd d	d
 | D }tt|| }|d dks5J |d dks=J |d dksEJ d S )N)r"   r   r"   )r  r      )MondayTuesday	Wednesday)ZsalesZvisitsdayrT  r   r   r"   c                 S   r   rf   r.  r   trf   rf   rg   r    r  zATestDataFramePlots.test_x_string_values_ticks.<locals>.<listcomp>rQ  r   rR  r   rS  r   )r   rI   r   set_xlimrX   rz  rZ   
get_xticks)ra   rb   rF   xticklabelslabels_positionrf   rf   rg   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s=J |d dksEJ |d dksMJ |d dksUJ d S )Nr  i  r   r   r   rp   rq   rA   r   c                 S   r   rf   r.  rU  rf   rf   rg   r    r  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   rP   rQ   r   rI   rW  rX   rz  rZ   rX  )ra   r*   rb   rF   rY  rZ  rf   rf   rg   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 sJ |d dks$J d S )Nr   r   r   r)   r}  r   )r   rI   r   )ra   r   rb   rF   xlimsrf   rf   rg   test_xlim_plot_line  s
   z&TestDataFramePlots.test_xlim_plot_linec                 C   s   | j  \}}g d}tg dg dg dg dd|d}|g d jj|d	d
 |dg j|dd | }|d dk s@J |d dksHJ dd | D }||ksWJ d S )N)Zk1Zk2Zk3Zk4)i  r     r   )i  ix  r   i  )r_  r_  i@  i  )r   r"   r   r"   )s1s2s3r   r)   )r`  ra  rb  F)rF   r   r   T)rF   r   r   r   r"   c                 S   r   rf   r.  rU  rf   rf   rg   r    r  zWTestDataFramePlots.test_xlim_plot_line_correctly_in_mixed_plot_type.<locals>.<listcomp>)r^   r   r   rI   r>   r   rX   )ra   rd   rF   Zindexesrb   r]  rY  rf   rf   rg   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J | }t| dksJ | d }t| dks*J t| dks4J d S )NZfoo)rB   rk   r   r   )r   intemptyrI   r_   r   r   r   )ra   rb   rF   rO   rf   rf   rg   test_plot_no_rows  s   
z$TestDataFramePlots.test_plot_no_rowsc                 C   sH   t g d}tjtdd |  W d    d S 1 sw   Y  d S )Nr   r  r&   )r   rL   rM   r  rI   r   rf   rf   rg   test_plot_no_numeric_data  s   
"z,TestDataFramePlots.test_plot_no_numeric_data)rO   r>   r   r   r|  r  r   r   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s0J dd	gd
dgdgf}t||D ]\}}|dkrN| j||d |dkr]t|jt|ks]J q?d S )Nr(   r   r  )r   r  )r   r   r   r   r"   r   r  r   r   r   r   r~  rO   )rP   r   r   rI   r_   rZ   r  r   )ra   r   r   rb   r`   r  rF   rr  rf   rf   rg   test_group_subplot  s"   z%TestDataFramePlots.test_group_subplotc                 C   sR   t td}d}tjt|d |jdgd W d    d S 1 s"w   Y  d S )Nr   z!An iterable subplots for a Seriesr&   r   rC   )r   r[   rL   rM   NotImplementedErrorrI   )ra   Zserrc   rf   rf   rg   (test_group_subplot_series_notimplemented+  s
   "z;TestDataFramePlots.test_group_subplot_series_notimplementedc                 C   sb   t tdtddgd}d}tjt|d |jdgd W d    d S 1 s*w   Y  d S )Nr   r  )r   r   r   z6An iterable subplots for a DataFrame with a MultiIndexr&   rC   )	r   rP   eyer   r\   rL   rM   rk  rI   r   rf   rf   rg   ,test_group_subplot_multiindex_notimplemented1  s
   "z?TestDataFramePlots.test_group_subplot_multiindex_notimplementedc                 C   s\   t tdddgd}d}tjt|d |jdgd W d    d S 1 s'w   Y  d S )Nr   r   r   z4An iterable subplots for a DataFrame with non-uniquer&   rj  rC   )r   rP   rm  rL   rM   rk  rI   r   rf   rf   rg   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   rq  )rj  rq  c                 C   s^   t dt dd}t|}tjt|d |j|d W d    d S 1 s(w   Y  d S )Nr(   r   r&   rC   rP   r   r   rL   rM   r   rI   )ra   r   Zexpected_msgr   rb   rf   rf   rg   test_group_subplot_bad_input=  s
   "z/TestDataFramePlots.test_group_subplot_bad_inputc                 C   s`   t dt dd}t|}tjtdd |jdgd W d    d S 1 s)w   Y  d S )Nr(   r   z Column label\(s\) \['bad_name'\]r&   )r   Zbad_namerC   rr  ra   r   rb   rf   rf   rg   &test_group_subplot_invalid_column_nameP  s
   "z9TestDataFramePlots.test_group_subplot_invalid_column_namec                 C   sj   t dt dt dd}t|}tjtdd |jddgd W d    d S 1 s.w   Y  d S )Nr(   r   zshould be in only one subplotr&   r   )r   r   rC   rr  rt  rf   rf   rg   $test_group_subplot_duplicated_columnW  s
   "z7TestDataFramePlots.test_group_subplot_duplicated_column)rn  r   r   c                 C   sb   t dt dd}t|}tjtdd |jdg|d W d    d S 1 s*w   Y  d S )Nr(   r   z1When subplots is an iterable, kind must be one ofr&   rh  rr  )ra   r   r   rb   rf   rf   rg   test_group_subplot_invalid_kind^  s   "z2TestDataFramePlots.test_group_subplot_invalid_kindz index_name, old_label, new_label)Nr  new)oldry  rx  )Nr  r  )Nr  r   r  )rO   r   r>   c                 C   s   t ddgddggddgd}||j_|j|d}| |ks J | dks(J |j|||d	}| t|ks:J | t|ksDJ d S )
Nr   r   r+   Type AType Br   r}  r  )r   r  xlabel)r   r*   r   rI   
get_xlabelrC  str)ra   r   Z
index_nameZ	old_labelZ	new_labelrb   rF   rf   rf   rg   (test_xlabel_ylabel_dataframe_single_plotg  s   z;TestDataFramePlots.test_xlabel_ylabel_dataframe_single_plotzxlabel, ylabel))NN)X LabelN)NY Label)r  r  r   r   c                 C   st   d}d}t ddgddgg||gd}|j|||||d}| |d u r%|n|ks*J | |d u r3|n|ks8J d S )Nrz  r{  r   r   r+   r   )r   r$   r%   r|  r  )r   rI   r}  rC  )ra   r   r|  r  ZxcolZycolrb   rF   rf   rf   rg   '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 ]!}|j r2| dks J | dks(J | d dks2J qd S )Nr   r  )r   r.   r   )r   r  r/   r,   )	r   rI   r  r`   r   Zget_visiblerC  r   Z
get_yticks)ra   r   Zax_dfrF   rf   rf   rg   test_secondary_y  s   


z#TestDataFramePlots.test_secondary_y)NNNN)o__name__
__module____qualname__rL   markZxfailZslowrh   r|   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%  r8  r:  rF  rJ  rO  rS  re  rs  rx  r{  tdZskip_if_no_scipyr  r  r  rP   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/  r6  rB  rD  rI  rO  r[  r\  r^  rc  rf  rg  ri  rl  rn  ro  rs  ru  rv  rw  r  r  r  rf   rf   rf   rg   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   r  )r   r   r  rD   )rL  Zmatplotlib.gridspecr  r  r7  r:  Zsubplot)rN  rL  r^   r-  Zax_tlZax_llZax_trZax_lrrf   rf   rg   r)    s   r)  )&__doc__r   r   r2  r  r  rT   r  r0  numpyrP   rL   Zpandas.util._test_decoratorsutilZ_test_decoratorsr  Zpandas.core.dtypes.apir   Zpandasrx   r   r   r   r   r	   r
   r   Zpandas._testingZ_testingrG   Zpandas.tests.plotting.commonr   r   Zpandas.io.formats.printingr   Zskip_if_no_mplr   r)  rf   rf   rf   rg   <module>   sJ    $	                 