o
    ҷhp                    @   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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mZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& ddl'm(Z( e
)dZ*e
)d	Z+G d
d d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)_check_ax_scales_check_axes_shape_check_box_return_type_check_colors_check_data_check_grid_settings_check_has_errorbars_check_legend_labels_check_plot_works_check_text_labels_check_ticks_props_check_visible
get_y_axispprint_thing
matplotlibzmatplotlib.pyplotc                   @   sp  e Zd Zejjdd Zejjdd Zejjdd Zejjdd Z	ejj
d	d
ejjdd Zejjdd Zejjejddg didg didddddddgdd Zejjdd Zejjdd Zejjdd Zejjd d! Zejjejd"d#d$gd%d& Zejjd'd( Zejd)ed*d+d,gd+d,gd+d,gd-d+gd-d+gd+d-gd+d-gd,d-gd,d-gd+d.gd+d.gd+d/gd+d/ggd0d1 Zejjejd2g d3d4d5 Zejjejd6d7i gd8i gd9i gd:d;d;igd<d=d;d>gd?d=d;d>ggd@dA ZdBdC ZdDdE ZdFdG ZdHdI ZdJdK ZdLdM ZejdNdOdPgdQdR ZejdSg dTdUdV Z dWdX Z!dYdZ Z"d[d\ Z#d]d^ Z$d_d` Z%dadb Z&ejdce'j(e'j)gddde Z*ejdfe+d;g dgig dhdie+d;djdke'j,dldmdndogidkdjdldpe'j,dldpgdigdqdr Z-dsdt Z.dudv Z/dwdx Z0ejdyd7dzgejd{d|d}gd~d Z1ejdyd7dzgdd Z2dd Z3ejdyd7dzgdd Z4ejde5de6dd.ddgdd Z7ejde5de6dd.ddgdd Z8ejde5de6dd.ddgejdi ddigdd Z9ejdi ddigdd Z:dd Z;ejj
dddejdddgdd Z<dd Z=ejdddgdd Z>dd Z?ejdddgejdddgdd Z@ejdddgdd ZAdd ZBdd ZCdd ZDdd ZEdd ZFejdeGjHeGjIgdd ZJejdd>dgdd ZKdd ZLdd ZMdd ZNejdddgdd ZOejdddgejdg dĢg dŢgddǄ ZPejdddgejdg dʢg dˢfdd̈́ ZQejdg d΢ddЄ ZRejdddgddՄ ZSddׄ ZTddل ZUddۄ ZVdd݄ ZWdd߄ ZXejjejdi ddidddddigdd ZYejjdd ZZejjdd Z[ejjdd Z\dd Z]dd Z^dd Z_dd Z`ejaddd Zbdd Zcdd Zdejdg ddd Zedd Zfdd  Zgdd Zhdd Zidd Zjdd Zkd	d
 Zldd Zmdd Zndd Zoejdde'jpdd de'jpdd gdd Zq	#	#	#	#dddZrejde'se'tg de'tg de'se'tg de'tg de'se'tg de'tg dde'se'te'j,d|d d!dd"ge'tg d#e'se'td|e'j,d d!dd"ge'tg d$e'se'td|d d!e'j,dd"ge'tg d%dgd&d' Zud(d) Zvejd*d+d,d-dӜd+d,dg d.d+d,ggd/d0 Zwd1d2 Zxejd3g d4d5d6 Zyd7d8 Zzejdye{j|j}d9d: Z~ejdyd<d?gd;d< Zejdye{j|j}d=d> Zejdyee{j|j}dzg d?d@ ZdAdB ZejdCd,d-gd+dDfd+gd,d-gdEdFgfgdGdH ZdIdJ ZejdKdLd+gd,fgdMdN ZejdOd+d,gdEgdPgfd+d,d-gdEdFgdPdQgfdRd|d gdSdTgdUdVgfgdWdX ZejdYdRd|d+d,gfd|dRdRd|gfgdZd[ Zd\d] Zd^d_ Zejd`d#e'jgdadb Zejdci ddfdedfidffdgdhidhfgdidj Zdkdl Zejd;dmd gdndo Zdpdq Zdrds Zdtdu Zejjejddvdidddwdxdigdydz Zejjd{d| Zejjd}d~ Zejjejdddgdd Zejjdd Zejjdd Zejjejdyg dejdee'pdd d=de+e'pdd e'pdd d>gdd Zejjejdyg dejde+e'pdd e'pdd d>e+e'pdd e'pdd d>fee'pdd d=dee'pdd d=dfdgdd Zejjejdyg ddd Zejj
deddd Zdd Zejjejdyd7d8gdd Zejjdd Zejjejddd e+gdd Zejdyg ddd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zejdye{j|jdd Zdd Zdd Zdd Zdd ZddÄ ZdĐdń ZdƐdǄ Zejdg dɢdʐd˄ Zd̐d̈́ Zdΐdτ Zejdyd7dzgdАdф ZdҐdӄ ZdԐdՄ Zd֐dׄ Zejdydءdِdڄ Zdېd܄ Zdݐdބ Zdߐd Zejdg ddd Zdd Zdd Zejdyddd Zejdddddd#dd|d gfgejdyg ddd Zejdg dejdyd<d?gdd Zejdddd Zejjdd Zd#S (  TestDataFramePlotsc                 C   s   t  }t|jdd d S )NF)grid)tmmakeTimeDataFramer   plotselfdf r$   Y/var/www/html/venv/lib/python3.10/site-packages/pandas/tests/plotting/frame/test_frame.py	test_plot3   s   zTestDataFramePlots.test_plotc                 C   s*   t  }t|jddd}t|ddd d S )NTdefault_axessubplots   r*      axes_numlayoutr   r   r   r    r   r"   r#   axesr$   r$   r%   test_plot_subplots8   s   z%TestDataFramePlots.test_plot_subplotsc                 C   s,   t  }t|jdddd}t|ddd d S )NT)   )r(   r)   r/   r*   r5   r5   r-   r0   r1   r$   r$   r%   "test_plot_subplots_negative_layout?   s   z5TestDataFramePlots.test_plot_subplots_negative_layoutc                 C   s8   t  }t|jdddd}t|dd t|ddd d S )	NTF)r(   r)   	use_indexr   xrotr*   r+   r-   )r   r   r   r    r   r   r1   r$   r$   r%   test_plot_subplots_use_indexJ   s   z/TestDataFramePlots.test_plot_subplots_use_indexzApi changed in 3.6.0)reasonc                 C   s\   t ddgddgd}d}tjt|d |jjdd	 W d    d S 1 s'w   Y  d S )
Nr,   r5      r*   xyz''Line2D' object has no property 'blarg'matchT)blarg)r   pytestraisesAttributeErrorr    liner"   r#   msgr$   r$   r%   test_plot_invalid_argV   s
   "z(TestDataFramePlots.test_plot_invalid_argc                 C   sF   t tjddttjd d d}t|jdd}t	|dd d S )	Nr5   
   r=   rL   indexTr8   r   r9   )
r   nprandomdefault_rngliststringascii_lettersr   r    r   r"   r#   axr$   r$   r%   test_plot_tick_props^   s   z'TestDataFramePlots.test_plot_tick_propskwargsyticks)r,      rL   xticks)id   )ylimxlimTblah)r(   r)   titlec                 C   s>   t tjddttjd d d}t|jfi | d S )Nr5   rK   rL   rM   	r   rP   rQ   rR   rS   rT   rU   r   r    r"   rY   r#   r$   r$   r%   test_plot_other_argsh   s
   z'TestDataFramePlots.test_plot_other_argsc                 C   s   t tjddttjd d d}|jddd}t|dd	d
 |d d D ]#}t	|j
 t	| dd t	|jdddd t	|j
 gdd q(|d fD ]}t	|j
 t	|  t	|j
 g t|dd qQd S )Nr5   rK   rL   rM   Tr`   )r)   ra   r=   r=   r,   r-   Fvisibleminorr   r9   )r   rP   rQ   rR   rS   rT   rU   r    r   r   xaxisget_xticklabels	get_labelr   )r"   r#   r2   rW   r$   r$   r%   test_plot_visible_axy   s"   	

z'TestDataFramePlots.test_plot_visible_axc                 C   s:   t tjddttjd d d}t|jdd d S )Nr5   rK   rL   rM   r`   ra   rb   r!   r$   r$   r%   test_plot_title   s
   z"TestDataFramePlots.test_plot_titlec                 C   sV   t tjd d td}ttjddt	|d}t
|jdd}t|dd d S )	NrL   r5   rK   rM   TrO   r   r9   )ziprT   rU   ranger   rP   rQ   rR   r   from_tuplesr   r    r   )r"   tuplesr#   rW   r$   r$   r%   test_plot_multiindex   s   z'TestDataFramePlots.test_plot_multiindexc                 C   s^   t jg dddgd}t jddgddgd}ttjd	d
dd||d}t|jdd d S )N))   αr   )ru   r,   )   βr5   )rv   r=   )   γr*   )rw   r[   )   δ   )rx      i0i1)names)baru   Δ)r~   u   Εc0c1r5   r   rL   )   r5   columnsrN   u   Σrn   )	r   rr   r   rP   rQ   rR   integersr   r    )r"   rN   r   r#   r$   r$   r%   test_plot_multiindex_unicode   s   
z/TestDataFramePlots.test_plot_multiindex_unicoder/   N)r4   r,   c                 C   s>   t dtjddi}t|jjd|d}t|ddd d S )	Nr?   r5   rL   T)r)   r/   r,   r,   r,   r-   )r   rP   rQ   rR   r   r    r~   r   )r"   r/   r#   r2   r$   r$   r%   test_plot_single_column_bar   s   z.TestDataFramePlots.test_plot_single_column_barc                 C   sb   t dtjddi}tj \}}|jjd|d}t	|dks$J |j
}||d u s/J d S )Nr?   r5   rL   Tr)   rW   r,   r   )r   rP   rQ   rR   mplpyplotr)   r    r~   lenr2   )r"   r#   _rW   r2   resultr$   r$   r%   test_plot_passed_ax   s   z&TestDataFramePlots.test_plot_passed_axz
cols, x, yABCDEABCDEc              
   C   st   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 S )N)20082009N20112012r,   r5   r=   r*   r[   rz   r[   r=   r5   dtypez%Y)formati8T)r   utcr   r   r   r   r   r>   )
r   rP   arraynanobjectpdto_datetimeviewr   r    )r"   colsr?   r@   datesr#   r$   r$   r%   test_nullable_int_plot   s   
z)TestDataFramePlots.test_nullable_int_plotr    )rG   r~   histpiec                 C   s.   t jg ddd}t|}tt|j| d S )Nr,   r5   r=   r*   UInt32r   )r   r   r   r   getattrr    )r"   r    arrsr$   r$   r%   test_integer_array_plot_series   s   z1TestDataFramePlots.test_integer_array_plot_serieszplot, kwargsrG   r~   r   r   r@   scatterr?   r>   hexbinc                 C   s<   t jg ddd}t||d}tt|j|fi | d S )Nr   r   r   r>   )r   r   r   r   r   r    )r"   r    rY   r   r#   r$   r$   r%   test_integer_array_plot_df   s   z-TestDataFramePlots.test_integer_array_plot_dfc                 C   s6   t g dg dd}| }t| dksJ d S )Nr?   r@   zr,   r5   r=   r   r   r,   )r   r    r   	get_linesrV   r$   r$   r%   test_nonnumeric_exclude  s   z*TestDataFramePlots.test_nonnumeric_excludec                 C   s@   t tjddg dd}|jddd}t|j d d S )Nr5   rK   abcr   r   r   r>   )	r   rP   rQ   rR   standard_normalr    r   rj   rl   rV   r$   r$   r%   test_implicit_label  s
   z&TestDataFramePlots.test_implicit_labelc                 C   sH   t tjddddgd}d|j_|jddd |jjdks"J d S )	Nr5   r6   r   r   r   NAMELABEL)r@   label)r   rP   rQ   rR   r   rN   namer    r!   r$   r$   r%   test_donot_overwrite_index_name  s   z2TestDataFramePlots.test_donot_overwrite_index_namec                 C   s   t d}t|jddd|dd   t|jdd|d  t|jdd|j  t|jddd|dj  t|jdd|d  t|jdd|j  d S )	Nr[   r   r,   r>   r   r   r?   r@   )r   r   r   r    	set_indexr   r!   r$   r$   r%   test_plot_xy  s   
" zTestDataFramePlots.test_plot_xyc                 C   s~   t d}tdt|jd |_t|jddd|dd   t|jdd|d  t|jdd|d   d S )Nr[   r,   r5   r>   r   r   )	r   r   rP   aranger   r   r   r    r   r!   r$   r$   r%   test_plot_xy_int_cols&  s
   
"z(TestDataFramePlots.test_plot_xy_int_colsc                 C   s<   t d}|jddddd}t|jd t|dddd	 d S )
Nr[   r,   r5   Test)   r   )r?   r@   ra   figsizer   )g      0@g       @)r.   r/   r   )r   r   r    r   ra   r   rV   r$   r$   r%   test_plot_xy_figsize_and_title.  s   
z1TestDataFramePlots.test_plot_xy_figsize_and_titlezinput_log, expected_log)Tlog)symsymlogc                 C   s   t dtditdd}|j|d}t||d | |ks"J |j|d}t||d | |ks6J |j|d}t|||d	 | |ksKJ | |ksSJ d S )
Nr   r]   rM   logyyaxis)logxrj   loglog)rj   r   )r   rP   r   r    r   
get_yscale
get_xscale)r"   	input_logexpected_logr#   rW   r$   r$   r%   test_logscales8  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]   rM   z9Boolean, None and 'sym' are valid options, 'sm' is given.rA   smr$   )r   rP   r   rD   rE   
ValueErrorr    )r"   r   r#   rI   r$   r$   r%   test_invalid_logscaleK  s
   "z(TestDataFramePlots.test_invalid_logscalec                 C   sB   t  }|jdd}| }t|d  trJ t|dd d S )NT)x_compatr      r9   )r   r   r    r   
isinstance	get_xdatar   r   r"   r#   rW   linesr$   r$   r%   test_xcompatT  s
   zTestDataFramePlots.test_xcompatc                 C   sH   t  }dtjd< | }| }t|d  trJ t	|dd d S )NTzxaxis.compatr   r   r9   )
r   r   r   plot_paramsr    r   r   r   r   r   r   r$   r$   r%   test_xcompat_plot_params[  s   
z+TestDataFramePlots.test_xcompat_plot_paramsc                 C   s   t  }dtjd< | }| }t|d  trJ d}t j	t
|d tt|d  ts3J W d    d S 1 s>w   Y  d S )NFr   r   zPeriodDtype\[B\] is deprecatedrA   )r   r   r   r   r    r   r   r   r   assert_produces_warningFutureWarningr"   r#   rW   r   rI   r$   r$   r%   !test_xcompat_plot_params_x_compatc  s   
"z4TestDataFramePlots.test_xcompat_plot_params_x_compatc                 C   sn   t  }tjdd" | }| }t|d  t	rJ t
|dd W d    d S 1 s0w   Y  d S )Nr   Tr   r   r9   )r   r   r   r   user    r   r   r   r   r   r   r$   r$   r%   (test_xcompat_plot_params_context_managern  s   "z;TestDataFramePlots.test_xcompat_plot_params_context_managerc                 C   s   t  }| }| }t|d  trJ d}t jt|d tt|d  ts.J W d    n1 s8w   Y  t	|dd d S )Nr   zPeriodDtype\[B\] is deprecated rA   r9   )
r   r   r    r   r   r   r   r   r   r   r   r$   r$   r%   test_xcompat_plot_periodw  s   z+TestDataFramePlots.test_xcompat_plot_periodc                 C   sP   t tjddttdddtdddddgd}|  tjj	d	d
 d S )Nr5   )   r5     r,      r   r   rN   r   r   r   )
r   rP   rQ   rR   r	   r   r    r   r   axhliner!   r$   r$   r%   test_period_compat  s   z%TestDataFramePlots.test_period_compatindex_dtypec                 C   s   t dtditjtd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 d S )Nr@   r]   c   r4   r   )rN   r   r   r,   )r   r   F)check_index_type)r   rP   r   r   Indexint64r    r   
get_xydatar   r   assert_series_equalr@   )r"   r   r#   rW   r   rsr$   r$   r%   test_unsorted_index  s   *z&TestDataFramePlots.test_unsorted_indexr#                 ?       @      @)r  r  r  r  rM   r  r  r  g      @g      @g      @r  c                 C   s\   |  }| \}}| }|t|d  d ksJ |t|d  d ks,J d S )Nr   )r    get_xlimr   rP   nanminget_datananmaxr"   r#   rW   xminxmaxr   r$   r$   r%   test_unsorted_index_lims  s
   "z+TestDataFramePlots.test_unsorted_index_limsc                 C   sx   t g dg dd}|jddd}| \}}| }|t|d  d ks+J |t|d  d ks:J d S )Nr  )g     V@g     V@g     @W@g      W@)r@   r   r   r@   r>   r   )r   r    r  r   rP   r	  r
  r  r  r$   r$   r%   test_unsorted_index_lims_x_y  s   "z/TestDataFramePlots.test_unsorted_index_lims_x_yc                 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 s3w   Y  tjt	|d |j
jdd
 W d    d S 1 sRw   Y  d S )Nr5   ry   r*   ry   r?   r@   r   fourr   z+Log-y scales are not supported in area plotrA   Tr   r   )r   rP   rQ   rR   rS   rT   rU   rD   rE   r   r    arearH   r$   r$   r%   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   zerosr   r
  rp   r   assert_numpy_array_equal)r"   normal_linesstacked_linesbasenlslsyr$   r$   r%   _compare_stacked_y_cood  s   z*TestDataFramePlots._compare_stacked_y_coodkindr  multr,   r4   c                 C   sV   |t tjddg dd }t|j|dd}t|j|dd}| |j|j d S )Nr5   r  wr?   r@   r   r   Fr  stackedTr   rP   rQ   rR   r   r    r  r   )r"   r  r   r#   ax1ax2r$   r$   r%   test_line_area_stacked  s   z)TestDataFramePlots.test_line_area_stackedc                 C   s   t tjddtjddtjdd tjdd d}t|j|dd}t|j|dd}| |jd d |jd d  | |jdd  |jdd   d S )Nr5   ry   r!  Fr#  Tr%  )r"   r  sep_dfr&  r'  r$   r$   r%   test_line_area_stacked_sep_df  s    $z0TestDataFramePlots.test_line_area_stacked_sep_dfc                 C   s   t tjddttjd d g dd}t|j	dd d}t
jt|d	 |j	d
d W d    d S 1 s9w   Y  d S )Nr5   r  ry   r!  r   Fr$  zWhen stacked is True, each column must be either all positive or all negative. Column 'w' contains both positive and negative valuesrA   T)r   rP   rQ   rR   r   rS   rT   rU   r   r    rD   rE   r   )r"   mixed_dfrI   r$   r$   r%   test_line_area_stacked_mixed  s   "z/TestDataFramePlots.test_line_area_stacked_mixedc                 C   sD   t tjddg dd}||jd }t|j|ddd d S )Nr5   r  r!  r   r,   T)r  r   r$  )r   rP   rQ   rR   r   rN   r   r    )r"   r  r#   df2r$   r$   r%   #test_line_area_stacked_positive_idx  s
   z6TestDataFramePlots.test_line_area_stacked_positive_idxidxr*   z	2023-01-1)freqperiodsc           	      C   s   ddt jdg}dt jddg}t||d|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 d S )Nr,   r5   r=   r   r   rM   r   r   r   )r=   r5   r,   )FFTF)FTFF)rP   r   r   r   r    r   	get_ydatar   float64r   r  deletedatamask)	r"   r0  values1values2r#   rW   masked1masked2expr$   r$   r%   test_line_area_nan_df  s   
z(TestDataFramePlots.test_line_area_nan_dfc                 C   s   ddt jdg}dt jddg}t||d|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 
 ||  d S )Nr,   r5   r=   r3  rM   r,   r5   r   r=   r   r=   r   r5   r,   Tr+  r   )rP   r   r   r   r5  r   r    r   r  r   r4  )r"   r0  r9  r:  r#   	expected1	expected2rW   r$   r$   r%   test_line_area_nan_df_stacked  s   z0TestDataFramePlots.test_line_area_nan_df_stackedr$  Fc           	      C   s   ddt jdg}dt jddg}t||d|d}t jg dt jd}t jg dt jd}t|jjfi |}t	|j
d	  | |rNt	|j
d  | nt	|j
d  ||  t|jjd
d}t	|j
d	  | t	|j
d  | d S )Nr,   r5   r=   r3  rM   r?  r   r@  r   Fr+  )rP   r   r   r   r5  r   r    r  r   r  r   r4  )	r"   r0  rY   r9  r:  r#   rA  rB  rW   r$   r$   r%   "test_line_area_nan_df_stacked_area  s   z5TestDataFramePlots.test_line_area_nan_df_stacked_areasecondary_yc                 C   s~   t tjddg dd}|jdi |}| \}}| }||d  d d ks/J ||d  d d ks=J d S )Nr5   ry   r=   r   r   r   r4   r$   )r   rP   rQ   rR   r    r  r   r
  )r"   rY   r#   rW   r  r  r   r$   r$   r%   test_line_lim6  s    z TestDataFramePlots.test_line_limc                 C   s   t tjddg dd}|jddd}t|ddd	 |D ]6}t|d
s(J t|dr/J | \}}| }||d 	 d d ksGJ ||d 	 d d ksUJ qd S )Nr5   rF  r   r   T)rE  r)   r=   re   r-   left_axright_axr   r4   )
r   rP   rQ   rR   r    r   hasattrr  r   r
  )r"   r#   r2   rW   r  r  r   r$   r$   r%   test_line_lim_subplots?  s   z)TestDataFramePlots.test_line_lim_subplotszX2020-12-01 this has been failing periodically on the ymin==0 assertion for a week or so.)strictr<   c           
      C   s   t tjddg dd}| }t|jj|d}| \}}| \}}|	 }	||	d 
 d d ks8J ||	d 
 d d ksFJ |dksLJ t|jj|d}| \}}|dks`J d S )Nr5   r  r  r   r+  r   r4   )r   rP   rQ   rR   r   r    r  r  get_ylimr   r
  )
r"   r$  r#   neg_dfrW   r  r  yminymaxr   r$   r$   r%   test_area_limK  s   z TestDataFramePlots.test_area_limc                 C   s   t tjddddgd}tjjdddd\}\}}|j|d	d
 |j|d	d
 t|	||s4J t|	||s>J d S )Nr5   r*   r5   r?   r@   r   r,   T)shareyr  )rW   r  )
r   rP   rQ   rR   r   r   r)   r    r   joined)r"   r#   figr&  r'  r$   r$   r%   test_area_sharey_dont_overwrited  s   z2TestDataFramePlots.test_area_sharey_dont_overwritec                 C   sF   t tjdd}|jj|dd}|jD ]
}| dks J qd S )Nr5   r[   r[   )r$  	linewidth)	r   rP   rQ   rR   r   r    r~   patchesget_linewidth)r"   r$  r#   rW   rr$   r$   r%   test_bar_linewidtho  s
   
z%TestDataFramePlots.test_bar_linewidthc                 C   s^   t tjdd}|jjddd}t|ddd |D ]}|jD ]
}|	 dks+J q!qd S )Nr5   rW  T)rX  r)   r[   )r[   r,   r-   )
r   rP   rQ   rR   r   r    r~   r   rY  rZ  )r"   r#   r2   rW   r[  r$   r$   r%   test_bar_linewidth_subplotsw  s   
z.TestDataFramePlots.test_bar_linewidth_subplotsz	meth, dim)r~   	get_width)barh
get_heightc                 C   sv   t tjdd}d}t|j|||d}|jD ]}|s.t|| |t|j	 ks-J qt|| |ks8J qd S )Nr5   rW  ?)r$  width)
r   rP   rQ   rR   r   r   r    rY  r   r   )r"   methdimr$  r#   rb  rW   r[  r$   r$   r%   test_bar_barwidth  s   
 z$TestDataFramePlots.test_bar_barwidthc                 C   s\   t tjdd}d}t|j||dd}|D ]}|jD ]}t|| |ks*J qqd S )Nr5   rW  ra  T)rb  r)   )r   rP   rQ   rR   r   r   r    rY  )r"   rc  rd  r#   rb  r2   rW   r[  r$   r$   r%   test_barh_barwidth_subplots  s   
z.TestDataFramePlots.test_barh_barwidth_subplotsc                 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sBJ d S )Nr5   rW  Fr,   )r$  bottomc                 S      g | ]}|  qS r$   get_y.0pr$   r$   r%   
<listcomp>      zBTestDataFramePlots.test_bar_bottom_left_bottom.<locals>.<listcomp>   T)r4   c                 S   rh  r$   ri  rk  r$   r$   r%   rn    ro  r[   )r   rP   rQ   rR   r    r~   rY  r"   r#   rW   r   r$   r$   r%   test_bar_bottom_left_bottom  s   z.TestDataFramePlots.test_bar_bottom_left_bottomc                 C   s   t tjdd}|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sGJ d S )Nr5   rW  Fr,   r,   r,   r,   r,   )r$  leftc                 S   rh  r$   get_xrk  r$   r$   r%   rn    ro  z@TestDataFramePlots.test_bar_bottom_left_left.<locals>.<listcomp>r,   rp  Tr   c                 S   rh  r$   ry  rk  r$   r$   r%   rn    ro  r[   )r   rP   rQ   rR   r    r_  r   rY  ru  r$   r$   r%   test_bar_bottom_left_left  s   z,TestDataFramePlots.test_bar_bottom_left_leftc                 C   s   t tjdd}|jjddd}|D ]}dd |jD }|dgd ks(J q|jjdtg d	d
}|D ]}dd |jD }|dgd ksKJ q8d S )Nr5   rW  Tr4   )r)   rg  c                 S   rh  r$   ri  rk  r$   r$   r%   rn    ro  zDTestDataFramePlots.test_bar_bottom_left_subplots.<locals>.<listcomp>r[   rw  )r)   rx  c                 S   rh  r$   ry  rk  r$   r$   r%   rn    ro  r,   )	r   rP   rQ   rR   r    r~   rY  r_  r   )r"   r#   r2   rW   r   r$   r$   r%   test_bar_bottom_left_subplots  s   z0TestDataFramePlots.test_bar_bottom_left_subplotsc                 C   sR   t dtjdgg dg dd}|j }g d}dd |jD }||ks'J d S )	NrL      r[   rL   r}  r   r   r   r   	rL   r   r}  r[   rL   r}  r,   r5   r=   c                 S   rh  r$   r`  rk  r$   r$   r%   rn    ro  z3TestDataFramePlots.test_bar_nan.<locals>.<listcomp>r   rP   r   r    r~   rY  r"   r#   rW   expectedr   r$   r$   r%   test_bar_nan  s
    
zTestDataFramePlots.test_bar_nanc                 C   sz   t dtjdgg dg dd}|jjdd}g d}d	d
 |jD }||ks)J dd
 |jD }g d}||ks;J d S )NrL   r}  r~  r   r  Tr+  r  c                 S   rh  r$   r  rk  r$   r$   r%   rn    ro  z;TestDataFramePlots.test_bar_nan_stacked.<locals>.<listcomp>c                 S   rh  r$   ri  rk  r$   r$   r%   rn    ro  )	r  r  r        $@r  g      4@g      .@r  g      D@r  r  r$   r$   r%   test_bar_nan_stacked  s    z'TestDataFramePlots.test_bar_nan_stackedc                 C   s   t tjdd|td|tdd}|j }|j	 }t
|tg d | dks3J |jd  d	ks>J |jd
  dksIJ |jjdd}t
|tg d | dkscJ |jd  d	ksnJ |jd
  dksyJ d S )Nr5   )ry   r[   ABCDEFabcder   )r   r,   r5   r=   r*   r[   )g      g      @r   g      пr4   g@Tr+  g      @)r   rP   rQ   rR   r   rS   r    r~   rj   get_ticklocsr   r  r   r  rY  rz  )r"   r0  r#   rW   ticksr$   r$   r%   test_bar_categorical  s    



z'TestDataFramePlots.test_bar_categoricalzx, yr,   r5   c                 C   sD   t tjddttjd d g dd}t|j	j
||d d S )Nr5   r  ry   r  r   r>   )r   rP   rQ   rR   r   rS   rT   rU   r   r    r   r"   r?   r@   r#   r$   r$   r%   test_plot_scatter  s   z$TestDataFramePlots.test_plot_scatterc                 C   s   t tjddttjd d g dd}t	d}t
jt|d |jjdd	 W d    n1 s5w   Y  t	d
}t
jt|d |jjdd W d    d S 1 sYw   Y  d S )Nr5   r  ry   r  r   z5scatter() missing 1 required positional argument: 'y'rA   r?   r   z5scatter() missing 1 required positional argument: 'x'r@   r   )r   rP   rQ   rR   r   rS   rT   rU   reescaperD   rE   	TypeErrorr    r   rH   r$   r$   r%   test_plot_scatter_error  s   

"z*TestDataFramePlots.test_plot_scatter_errorc                 C   sR   t tjddttjd d g dd}|jdddd	d
}t	|ddd d S )Nr5   r  ry   r  r   r?   r@   r   T)r?   r@   r  r)   r,   r   r-   )
r   rP   rQ   rR   r   rS   rT   rU   r    r   r1   r$   r$   r%   test_plot_scatter_shape  s   z*TestDataFramePlots.test_plot_scatter_shapec                 C   sx   t tjd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 s5w   Y  d S )Nr5   rL   r   r   z
2014-01-01h)startr1  r2  dtimez9must be a string or a (real )?number, not 'datetime.time'rA   r   )r  r?   r@   )r   rP   rQ   rR   r   r
   timerD   rE   r  r    rH   r$   r$   r%   &test_raise_error_on_datetime_time_data  s   "z9TestDataFramePlots.test_raise_error_on_datetime_time_datar   valsr   r,   c                 C   sT   t tdddddd}tjdddt|}t||d}t|j	j
||d	 d S )
Ni  r,      W)r  r2  r1  r5   r   r  r>   )r
   r   rP   rQ   rR   normalr   r   r   r    r   )r"   r?   r@   r   r  r#   r$   r$   r%   test_scatterplot_datetime_data  s   z1TestDataFramePlots.test_scatterplot_datetime_datar3  b_colr5   r=   r*   r   c                 C   s(   t g d|d}t|jj||d d S )Nr  r3  r>   )r   r   r    r   )r"   r  r?   r@   r#   r$   r$   r%   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@lengthrb  r   )r  r  r  r  r  )r  r  speciesr   r,   r?   r@   r   )      ?g      ?g      @r  c                 S   rh  r$   get_text)rl  ir$   r$   r%   rn  =  ro  zLTestDataFramePlots.test_scatterplot_color_by_categorical.<locals>.<listcomp>c                 s   s    | ]	\}}||kV  qd S Nr$   )rl  r  jr$   r$   r%   	<genexpr>>  s    zKTestDataFramePlots.test_scatterplot_color_by_categorical.<locals>.<genexpr>)r   r   Categoricalr    r   collectionscolorbarrP   r   	get_ticksr   r  _boundariesrW   get_ymajorticklabelsallrp   )r"   r  r  r#   rW   colorbar_collectionr  expected_ticksresult_ticksexpected_boundariesresult_boundariesexpected_yticklabelsresult_yticklabelsr$   r$   r%   %test_scatterplot_color_by_categorical!  s*    
 z8TestDataFramePlots.test_scatterplot_color_by_categorical)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   r   r  r   r    r   r  r$   r$   r%   'test_plot_scatter_with_categorical_data@  s   z:TestDataFramePlots.test_plot_scatter_with_categorical_datazx, y, cr   )r   r,   r5   c                 C   sz   t tjdjddddttjd d g dd}|jj	|||d	}|j
d jjd
ks.J |j
d jj dks;J d S )Nr5   r   r]   r  lowhighsizery   r  r   r  Greysr   )r   rP   rQ   rR   r   rS   rT   rU   r    r   r  cmapr   r  rW   
get_ylabel)r"   r?   r@   r   r#   rW   r$   r$   r%   test_plot_scatter_with_cG  s   z+TestDataFramePlots.test_plot_scatter_with_cc                 C   s   t tjdjddddttjd d g dd}d	}|jj	d
dd|d}|j
d jj|ks1J |jj	d
dddd}|j
d jd u sEJ |jj	dddd}|j
d jd u sXJ t|j
dgd d S )Nr5   r   r]   r  r  ry   r  r   	cubehelixr?   r@   r   )r?   r@   r   colormapF)r?   r@   r   r  r,   redr  r[  
facecolors)r   rP   rQ   rR   r   rS   rT   rU   r    r   r  r  r   r  r   )r"   r#   cmrW   r$   r$   r%   test_plot_scatter_with_c_propsU  s   z1TestDataFramePlots.test_plot_scatter_with_c_propsc                 C   s   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,   r5   r=   r*   r   )r  r  r  r  )r  r  r  r  r   r   r  r   r  r  spring)r?   r@   r   r  )	r   rP   r   r    r   r   r  r  get_facecolor)r"   r#   red_rgba
green_rgba
rgba_arrayrW   float_arrayr$   r$   r%   test_plot_scatter_with_c_arrayh  s   z1TestDataFramePlots.test_plot_scatter_with_c_arrayc                 C   sV   t tjddd g dd}|jjdddd	}tj|d j|j	d
 
 d d S )Nr5   rK   r]   r   r   r   r   r   )r?   r@   r   r   )right)r   rP   rQ   rR   r    r   r   r  valuesr  	get_sizesrV   r$   r$   r%   test_plot_scatter_with_s  s
   "z+TestDataFramePlots.test_plot_scatter_with_sc                 C   sX   t tjddd g dd}tj }|jjddd|d	}|j	d
 j
|u s*J d S )Nr5   rK   r]   r   r   r   r   r   )r?   r@   r   normr   )r   rP   rQ   rR   r   colorsLogNormr    r   r  r  )r"   r#   r  rW   r$   r$   r%   test_plot_scatter_with_norm  s   
z.TestDataFramePlots.test_plot_scatter_with_normc                 C   s   t tjddd g dd}|jjdddd	}|jd
 j}|j	 |j
 f}tjj| }|jD ]}||||ks?J q3d S )Nr5   rK   r]   r   r   r   r   r   r  r   )r   rP   rQ   rR   r    r   r  r  r   minmaxr   r  	Normalize)r"   r#   rW   	plot_normcolor_min_maxdefault_normvaluer$   r$   r%   test_plot_scatter_without_norm  s   
z1TestDataFramePlots.test_plot_scatter_without_normlegendr'   c                 C   sF   t tjddttjd d g dd}t|j	j
fi | d S )Nr5   r  ry   onetwothreer  r   )r   rP   rQ   rR   r   rS   rT   rU   r   r    r~   rc   r$   r$   r%   test_plot_bar  s   z TestDataFramePlots.test_plot_barc                 C   s>   t tjddttjd d tdd}t	|j
j d S )Nr5   )rL      rL   r  r   )r   rP   rQ   rR   r   rS   rT   rU   rq   r   r    r~   r!   r$   r$   r%   test_plot_bar_int_col  s   z(TestDataFramePlots.test_plot_bar_int_colc                 C   sR   t ddgddgd}t|jj}t|dd |jjddd}t|dddd	 d S )
Nr   r,   r3  Z   r9   #   rL   rotfontsizer:   
xlabelsize
ylabelsize)r   r   r    r~   r   rV   r$   r$   r%   test_plot_bar_ticks  
   z&TestDataFramePlots.test_plot_bar_ticksc                 C   sR   t ddgddgd}t|jj}t|dd |jjddd}t|dddd d S )	Nr   r,   r3  )yrot7      r  )r  r  r  )r   r   r    r_  r   rV   r$   r$   r%   test_plot_barh_ticks  r  z'TestDataFramePlots.test_plot_barh_ticksc                 C   sv   |}|  j}dd |D }t|jj}t| | t|j	
 tdt|d  t|jdt| ks9J d S )Nc                 S      g | ]}t |qS r$   r   rl  r   r$   r$   r%   rn    ro  z3TestDataFramePlots.test_boxplot.<locals>.<listcomp>r,   rz   )_get_numeric_datar   r   r    boxr   rk   r   r  rj   r  rP   r   r   r   r"   hist_dfr#   numeric_colslabelsrW   r$   r$   r%   test_boxplot  s   
zTestDataFramePlots.test_boxplotc                 C   s8   |}|d }|j jdd}t|ddd t|j j d S )Nheight(   r  r   r:   r  )r    r  r   r   )r"   r  r#   seriesr2   r$   r$   r%   test_boxplot_series  s
   z&TestDataFramePlots.test_boxplot_seriesc                 C   sv   |}t g d}|jj|d}| j}dd |D }t| | t	|j
 | t|jdt| ks9J d S )N)r,   ry   rz   )	positionsc                 S   r  r$   r   r   r$   r$   r%   rn    ro  zDTestDataFramePlots.test_boxplot_series_positions.<locals>.<listcomp>rz   )rP   r   r    r  r  r   r   rk   r   r  rj   r  r   r   )r"   r  r#   r  rW   r  r  r$   r$   r%   test_boxplot_series_positions  s   
z0TestDataFramePlots.test_boxplot_series_positionsc                 C   sj   |}|  j}dd |D }|jjdddd}t|dddd t| | t|jd	t| ks3J d S )
Nc                 S   r  r$   r   r   r$   r$   r%   rn    ro  z<TestDataFramePlots.test_boxplot_vertical.<locals>.<listcomp>2   r   F)r  r  vertr   r:   r  r  rz   )	r  r   r    r  r   r   get_yticklabelsr   r   r  r$   r$   r%   test_boxplot_vertical  s   
z(TestDataFramePlots.test_boxplot_verticalzignore:Attempt:UserWarningc                 C   s   |}|  j}dd |D }t|jjddddd}t|ddd t|d	d
 t||D ]\}}t|	 |g t
|jdks@J q+d S )Nc                 S   r  r$   r   r   r$   r$   r%   rn    ro  zETestDataFramePlots.test_boxplot_vertical_subplots.<locals>.<listcomp>TF)r(   r)   r  r   r=   )r,   r=   r-   r   r   rz   )r  r   r   r    r  r   r   rp   r   r  r   r   )r"   r  r#   r  r  r2   rW   r   r$   r$   r%   test_boxplot_vertical_subplots  s    
z1TestDataFramePlots.test_boxplot_vertical_subplotsc                 C   sx   |}|  j}dd |D }tg d}|jj|dd}t| | t	|j
 | t|jdt| ks:J d S )Nc                 S   r  r$   r   r   r$   r$   r%   rn  	  ro  zFTestDataFramePlots.test_boxplot_vertical_positions.<locals>.<listcomp>)r=   r5   r   F)r  r  rz   )r  r   rP   r   r    r  r   r  r   r  r   r  r   r   )r"   r  r#   r  r  r  rW   r$   r$   r%   test_boxplot_vertical_positions  s   
z2TestDataFramePlots.test_boxplot_vertical_positionsc                 C   st   t tjddttjd d g dd}d}tj	t
|d |jjdd	 W d    d S 1 s3w   Y  d S )
Nr5   r  ry   r  r   z2return_type must be {None, 'axes', 'dict', 'both'}rA   
not_a_typereturn_type)r   rP   rQ   rR   r   rS   rT   rU   rD   rE   r   r    r  rH   r$   r$   r%    test_boxplot_return_type_invalid  s   "z3TestDataFramePlots.test_boxplot_return_type_invalidr  )dictr2   bothc                 C   sJ   t tjddttjd d g dd}|jj	|d}t
|| d S )Nr5   r  ry   r  r   r  )r   rP   rQ   rR   r   rS   rT   rU   r    r  r   )r"   r  r#   r   r$   r$   r%   %test_boxplot_return_type_invalid_type  s   z8TestDataFramePlots.test_boxplot_return_type_invalid_typec                 C   sZ   t d ttjdd}t|jdd}dd |j	D }t
||d t|d	d
 d S )Nscipyr5   r]   r*   kder  c                 S   r  r$   r   r   r$   r$   r%   rn  (  ro  z2TestDataFramePlots.test_kde_df.<locals>.<listcomp>r  r   r9   )rD   importorskipr   rP   rQ   rR   r   r   r    r   r   r   )r"   r#   rW   r  r$   r$   r%   test_kde_df$  s   
zTestDataFramePlots.test_kde_dfc                 C   sD   t d ttjdd}|jdddd}t|dddd d S )	Nr  r5   rL   r*   r   r}  r[   )r  r  r  r  )	rD   r#  r   rP   rQ   rR   r   r    r   rV   r$   r$   r%   test_kde_df_rot,  s   
z"TestDataFramePlots.test_kde_df_rotc                 C   sD   t d ttjdd}t|jdddd}t	|ddd	 d S )
Nr  r5   r%  Tr   )r(   r  r)   r*   r+   r-   )
rD   r#  r   rP   rQ   rR   r   r   r    r   r1   r$   r$   r%   test_kde_df_subplots2  s   
z'TestDataFramePlots.test_kde_df_subplotsc                 C   s@   t d ttjdd}|jdddd}t|dd d S )	Nr  r5   r%  r   T)r  r   r)   r   r   )	rD   r#  r   rP   rQ   rR   r   r    r   r1   r$   r$   r%   test_kde_df_logy=  s   
z#TestDataFramePlots.test_kde_df_logyc                 C   s@   t d ttjdjdd}tj|jd< t	|j
dd d S )Nr  r5   r  r  r   r   r   r!  )rD   r#  r   rP   rQ   rR   uniformr   locr   r    r!   r$   r$   r%   test_kde_missing_valsC  s   
z(TestDataFramePlots.test_kde_missing_valsc                 C   sp   t tjdd}t|jj}dd |jD }t	||d t|jjdddd}t
|dd	d
 t|dd d S )Nr5   r  c                 S   r  r$   r   r   r$   r$   r%   rn  M  ro  z3TestDataFramePlots.test_hist_df.<locals>.<listcomp>r"  T)r(   r)   r   r*   r+   r-   r   r   )r   rP   rQ   rR   r   r   r    r   r   r   r   r   )r"   r#   rW   r  r2   r$   r$   r%   test_hist_dfI  s   zTestDataFramePlots.test_hist_dfc                 C   s6   t tjdd}|jjdd}t|ddd d S )Nr5   rL   r	  r
  r   r  )r   rP   rQ   rR   r    r   r   )r"   r  r2   r$   r$   r%   test_hist_df_seriesY  s   z&TestDataFramePlots.test_hist_df_seriesc                    sb   ddl m  ttjdd}|jjdddd} fdd	| D }t	
|d
  d d S )Nr   	Rectangler5   rL   Tr*   )
cumulativebinsdensityc                       g | ]	}t | r|qS r$   r   rl  r?   r0  r$   r%   rn  d      zMTestDataFramePlots.test_hist_df_series_cumulative_density.<locals>.<listcomp>r4   r  matplotlib.patchesr1  r   rP   rQ   rR   r    r   get_childrenr   assert_almost_equalr`  r"   r  rW   rectsr$   r0  r%   &test_hist_df_series_cumulative_density^  s
   z9TestDataFramePlots.test_hist_df_series_cumulative_densityc                    s`   ddl m  ttjdd}|jjddd} fdd	| D }t	
|d
  d d S )Nr   r0  r5   rL   Tr*   )r2  r3  c                    r5  r$   r6  r7  r0  r$   r%   rn  l  r8  zETestDataFramePlots.test_hist_df_series_cumulative.<locals>.<listcomp>rq  r  r9  r=  r$   r0  r%   test_hist_df_series_cumulativeg  s
   z1TestDataFramePlots.test_hist_df_series_cumulativec                 C   s<   t tjdd}|jjdddd}t|dddd d S )	Nr5   r%  r  r   
horizontal)r  r  orientationr   r  )r   rP   rQ   rR   r   r    r   r   r1   r$   r$   r%   test_hist_df_orientationp  s   z+TestDataFramePlots.test_hist_df_orientationweights皙?)r]   )shape)r]   r5   c                 C   sr   t ttddgtjdd}t|jd|d}t|jdd}dd	 |j	D }d
d	 |j	D }t
|| d S )Nr   r   r5   r5   r]   r   )r  rD  r!  c                 S   rh  r$   r  rl  patchr$   r$   r%   rn    ro  z8TestDataFramePlots.test_hist_weights.<locals>.<listcomp>c                 S   s   g | ]}d |   qS )rE  r  rH  r$   r$   r%   rn    s    )r   r  rp   rP   rQ   rR   r   r   r    rY  r   r<  )r"   rD  r#   r&  r'  patch_height_with_weightsexpected_patch_heightr$   r$   r%   test_hist_weightsv  s   z$TestDataFramePlots.test_hist_weightsc           
      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   rh  r$   ri  rk  r$   r$   r%   rn    ro  z7TestDataFramePlots._check_box_coord.<locals>.<listcomp>c                 S   rh  r$   r  rk  r$   r$   r%   rn    ro  c                 S   rh  r$   ry  rk  r$   r$   r%   rn    ro  c                 S   rh  r$   )r^  rk  r$   r$   r%   rn    ro  F)check_dtype)rP   r   r   r  )
r"   rY  
expected_y
expected_h
expected_x
expected_wresult_yresult_heightresult_xresult_widthr$   r$   r%   _check_box_coord  s   z#TestDataFramePlots._check_box_coordr7  r   rL   	   r   rz   ry   r   r   r   r   r   ry   rz   r   rX  rL   r  r5   r=   r[   )r=   rL   rX  r   rz   ry   )r   r=   r   r   r   r   )ry   rz   r   r=   rX  rL   c                 C   s  t |}|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 d S )Nr[   )r3  )r   r   r   r   r   rW  )rN  rO  rL   rY  rZ  T)r3  r$  )      r   r     )r3  r$  r)   r   r,   r5   rA  )r3  rB  )rP  rQ  )r3  r$  rB  )r3  r$  r)   rB  )r   r    r   rV  rY  rP   r   )r"   r7  r#   rW   r2   r$   r$   r%   test_hist_df_coord  s   
z%TestDataFramePlots.test_hist_df_coordc                 C   s,   t tjdd }t|jdd d S )Nr5   r  Tr  )r   rP   rQ   rR   r   cumsumr   r    r!   r$   r$   r%   test_plot_int_columns#  s   z(TestDataFramePlots.test_plot_int_columnsmarkers^+o)rc  rd  re  c                 C   s   dd l m} | }|  |d ttjd	d}|j
|d}t| d t| D ]\}}| || ks>J q0d S )Nr   o   r5   rK   )style)matplotlib.pyplotr   gcfclfadd_subplotr   rP   rQ   rR   r   r    	enumerater   r   
get_marker)r"   rb  pltrU  r#   rW   r0  rG   r$   r$   r%   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,   r5   Tr_  r    )r   r    
get_legend	get_textsr  )r"   r   rW   r$   r$   r%   test_line_label_none;  s
    z'TestDataFramePlots.test_line_label_nonezprops, expected))boxpropsboxes)whiskerpropswhiskers)cappropscaps)medianprops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 dqS rG  )rP   rQ   rR   )rl  kr$   r$   r%   
<dictcomp>N  s     zHTestDataFramePlots.test_specified_props_kwd_plot_box.<locals>.<dictcomp>ABCcolorC1r  r  r   r$   )r   r    r  	get_color)r"   propsr  r#   kwdr   r$   r$   r%   !test_specified_props_kwd_plot_boxC  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    rL   r,   rX  r   testr   r   )r  r  r  )
r   rP   r   r   r    r   r   r4  r   r  )r"   r#   rW   r\   ydatar$   r$   r%   test_unordered_tsT  s    z$TestDataFramePlots.test_unordered_tsc                 C   s8   t d tdg di}|j|d t|j|  d S Nr  r?   r   r!  rD   r#  r   r    r   r"   r  r#   r$   r$   r%   test_kind_both_ways`  s   
z&TestDataFramePlots.test_kind_both_waysc                 C   s@   t d tdg di}|jdd|d t|j|dd d S r  r  r  r$   r$   r%   test_kind_both_ways_x_yg  s   
z*TestDataFramePlots.test_kind_both_ways_x_yc                 C   sP   t td}d}tjt|d |j|d W d    d S 1 s!w   Y  d S )Nabcdno numeric data to plotrA   r!  )r   rS   rD   rE   r  r    r"   r  r#   rI   r$   r$   r%   test_all_invalid_plot_datan  s
   "z-TestDataFramePlots.test_all_invalid_plot_datac                 C   s~   t tjddtd}d|tjd|jd dk< d}tjt	|d |j
|d	 W d    d S 1 s8w   Y  d S )
Nr5   rL   r5   r   r   r   r  r  rA   r!  )r   rP   rQ   rR   r   r   rF  rD   rE   r  r    r  r$   r$   r%   (test_partially_invalid_plot_data_numericu  s    "z;TestDataFramePlots.test_partially_invalid_plot_data_numericc                 C   sZ   t tjdd}d}tjt|d |jdd W d    d S 1 s&w   Y  d S )Nr5   r  z*invalid_plot_kind is not a valid plot kindrA   invalid_plot_kindr!  )	r   rP   rQ   rR   r   rD   rE   r   r    rH   r$   r$   r%   test_invalid_kind  s
   "z$TestDataFramePlots.test_invalid_kindzx,y,lblr   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,   r5   r=   r*   r[   ry   r  x must be a label or positionrA   r?   r@   r   r   rD   rE   r   r    )r"   r?   r@   lblr#   r$   r$   r%   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,   r5   r=   r*   r[   ry   r  z.label should be list-like and same length as yrA   r   r   r   	bad_labelr  r  rH   r$   r$   r%   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[   )r5   r*   ry   AABr   r  rA   r>   )r   rS   rD   rE   r   r    r  r$   r$   r%   test_invalid_xy_args_dup_cols  s   "z0TestDataFramePlots.test_invalid_xy_args_dup_colszx,y,lbl,colorsr  bluer   bokehcythongreenyellowc                 C   sj   t ddgddgddgd}t|jd||d	 |j||||d
}t|jt|ks+J t| |d d S )Nr,   r5   r=   r*   r[   ry   r  r   r  )r?   r@   r   r  
linecolors)r   r   r    r   r   r   r   )r"   r?   r@   r  r  r#   rW   r$   r$   r%   test_y_listlike  s
   
z"TestDataFramePlots.test_y_listlikezx,y,colnamesc                 C   s0   t ddgddgd}||_t|j||d d S )Nr,   r5   r=   r*   r   r>   )r   r   r   r    )r"   r?   r@   colnamesr#   r$   r$   r%   test_xy_args_integer  s   z'TestDataFramePlots.test_xy_args_integerc                 C   sr   t tjdjddtjdjddtdtjdjdd d}|jjdddd}t|j	d	ks7J d S )
Nr5   r}  r)  r  r   r   rL   )r?   r@   gridsizer,   
r   rP   rQ   rR   r+  r   r    r   r   r  rV   r$   r$   r%   test_hexbin_basic  s   z$TestDataFramePlots.test_hexbin_basicc                 C   s   t tjdjddtjdjddtdtjdjdd d}|jjdddd}t|d	 j	j
dks:J t|d
dd d S )Nr5   r}  r)  r  r   r   T)r?   r@   r)   r   r,   r   r-   )r   rP   rQ   rR   r+  r   r    r   r   figurer2   r   r1   r$   r$   r%   test_hexbin_basic_subplots  s   z-TestDataFramePlots.test_hexbin_basic_subplotsreduce_Cc                 C   st   t tjdjddtjdjddtdtjdjdd d}|jjddd|d}t|j	d	ks8J d S )
Nr5   r}  r)  r  r   r   r   )r?   r@   r   reduce_C_functionr,   r  )r"   r  r#   rW   r$   r$   r%   test_hexbin_with_c  s   z%TestDataFramePlots.test_hexbin_with_czkwargs, expectedBuGnr  r  r  YlGnc                 C   s|   t tjdjddtjdjddtdtjdjdd d}|jjd	ddd|}|jd j	j
|ks<J d S )
Nr5   r}  r)  r  r   r   r>   r   r$   )r   rP   rQ   rR   r+  r   r    r   r  r  r   )r"   rY   r  r#   rW   r$   r$   r%   test_hexbin_cmap  s   	z#TestDataFramePlots.test_hexbin_cmapc                 C   sf   t tjddg dg dd}d}tjt|d |j  W d    d S 1 s,w   Y  d S )Nr5   r[   r=   XYZr   r   r   der   z/pie requires either y column or 'subplots=True'rA   )	r   rP   rQ   rR   rD   rE   r   r    r   rH   r$   r$   r%   test_pie_df_err  s   "z"TestDataFramePlots.test_pie_df_errr  c                 C   sF   t tjddg dg dd}t|jj|d}t|j|j	 d S )Nr5   r  r  r  r   r   )
r   rP   rQ   rR   r   r    r   r   textsrN   )r"   r@   r#   rW   r$   r$   r%   test_pie_df  s   zTestDataFramePlots.test_pie_dfc                 C   s   t tjddg dg dd}t|jjddd}t|t|jks&J |D ]	}t	|j
|j q(t||jD ]\}}| |ksDJ q8d S )Nr5   r  r  r  r   Tr'   )r   rP   rQ   rR   r   r    r   r   r   r   r  rN   rp   r  )r"   r#   r2   rW   ylabelr$   r$   r%   test_pie_df_subplots  s    z'TestDataFramePlots.test_pie_df_subplotsc                 C   s   t tjddg dg dd}g d}g d}t|jjdd||d	}t|t|jks0J |D ]}t	|j
| t|j|d
 q2d S )Nr5   r  r  r  r   r   )r[  gr   r   mT)r(   r)   r  r  r  )r   rP   rQ   rR   r   r    r   r   r   r   r  r   rY  )r"   r#   r  
color_argsr2   rW   r$   r$   r%   test_pie_df_labels_colors  s&   z,TestDataFramePlots.test_pie_df_labels_colorsc                 C   s  t tjdd}tdD ]
}tj|j||f< qtjj	dd\}}ddi}t
d  |jjdd|dd| W d    n1 sDw   Y  g d}t|D ]9\}}t|}d	||< d
d |jD }	|	|kskJ dd |  D }
|d | ||d d   }|
|ksJ qQd S )Nr5   )r*   r*   r*   )ncols	normalizeT)r)   rW   r  )0123rp  c                 S   rh  r$   r  r7  r$   r$   r%   rn  A  ro  z6TestDataFramePlots.test_pie_df_nan.<locals>.<listcomp>c                 S   rh  r$   r  r7  r$   r$   r%   rn  G  ro  r,   r$   )r   rP   rQ   rR   rq   r   ilocr   r   r)   r   r   r    r   rl  rS   r  rq  rr  )r"   r#   r  r   r2   rY   base_expectedrW   r  r   result_labelsexpected_labelsr$   r$   r%   test_pie_df_nan1  s$   z"TestDataFramePlots.test_pie_df_nanr   )r   r   r   c                 C   sp   t dt dddd}t|}t dd t dd d}t|}t|jfd|i|}t|ddd	 d S )
Nr  r   r4   r>   皙?皙?yerrr5   xerrr  rP   r   r   onesr   r    r   )r"   rY   r  r#   d_errdf_errrW   r$   r$   r%   test_errorbar_plotK  s   
z%TestDataFramePlots.test_errorbar_plotc                 C   sr   t dt dddd}t|}t dd t dd d}t|}t|d j||dd	d
}t|ddd d S )Nr  r   r4   r>   r  r  r,   r~   T)r  r  r  r   r5   r  r  )r"   r  r#   r  r  rW   r$   r$   r%   test_errorbar_plot_bar^  s   z)TestDataFramePlots.test_errorbar_plot_barc                 C   sv   t dt dddd}t|}t|d jt dd d}t|ddd	 t|jt d
d d}t|ddd	 d S )Nr  r   r4   r>   r@   r  r  r,   r  )r5   r  r5   )rP   r   r   r   r    r  r   r"   r  r#   rW   r$   r$   r%   test_errorbar_plot_yerr_arrayi  s   z0TestDataFramePlots.test_errorbar_plot_yerr_arrayr  u   誤差c                 C   st   t dt dddd}t|}t dd ||< t|j|d}t|ddd t|jd	d
|d}t|ddd d S )Nr  r   r4   r>   r  r  r5   r  r@   r?   )r@   r?   r  r,   r  )r"   r  r  r#   rW   r$   r$   r%   test_errorbar_plot_column_namet  s   z1TestDataFramePlots.test_errorbar_plot_column_namec                 C   sl   t dt dddd}t|}tt |jt jd	dd W d    d S 1 s/w   Y  d S )Nr  r   r4   r>   r5   r  r  )
rP   r   r   r   external_error_raisedr   r    rQ   rR   r   r"   r  r#   r$   r$   r%   &test_errorbar_plot_external_valueerror  s
   "z9TestDataFramePlots.test_errorbar_plot_external_valueerrorc                 C   sx   t dt dddd}t|}tdgd dgd d}tt |j|d W d    d S 1 s5w   Y  d S )Nr  r   r4   r>   zzzr  )rP   r   r   r   r  r  r    )r"   r  r#   r  r$   r$   r%   %test_errorbar_plot_external_typeerror  s   "z8TestDataFramePlots.test_errorbar_plot_external_typeerror)rG   r~   r_  y_errr  r  )r   r  c                 C   s@   t tdtdddd}t|j||d}t|ddd d S )Nr  r   r4   r>   r  r  r5   r  r   rP   r   r   r    r   )r"   r  r  r#   rW   r$   r$   r%   !test_errorbar_plot_different_yerr  s   
z4TestDataFramePlots.test_errorbar_plot_different_yerrzy_err, x_err)r  r  c                 C   sB   t tdtdddd}t|j|||d}t|ddd d S )Nr  r   r4   r>   )r  r  r  r5   r  r  )r"   r  r  x_errr#   rW   r$   r$   r%   &test_errorbar_plot_different_yerr_xerr  s   z9TestDataFramePlots.test_errorbar_plot_different_yerr_xerrc                 C   sh   t tdtdddd}t tdd tdd d}t|jd||d|d}t|d	d	d
 d S )Nr  r   r4   r>   r  r  T)r(   r  r  r)   r  r,   r  )r   rP   r   r  r   r    r   )r"   r  r#   r  r2   r$   r$   r%   /test_errorbar_plot_different_yerr_xerr_subplots  s   "zBTestDataFramePlots.test_errorbar_plot_different_yerr_xerr_subplotszIterator is consumed)r<   rE   c                 C   sN   t dt dddd}t|}t|jtdt|d}t|ddd d S )	Nr  r   r4   r>   rE  r  r5   r  )	rP   r   r   r   r    	itertoolsrepeatr   r   r  r$   r$   r%   test_errorbar_plot_iterator  s   z.TestDataFramePlots.test_errorbar_plot_iteratorc                 C   sv   t ttjdd}t ttjdd}t|j|d}t|ddd t|jddd}t|ddd d S )Nr5   r  r  r   r  r,   )r@   r  	r   rP   absrQ   rR   r   r   r    r   r"   r#   r  rW   r$   r$   r%   'test_errorbar_with_integer_column_names  s   z:TestDataFramePlots.test_errorbar_with_integer_column_namesc                 C   sb   t ttjdd}t ttjddddgd}t|j||d}t|ddd d S )Nr5   rK   r  r   r   r  r  r  )r"   r  r#   r  rW   r$   r$   r%   'test_errorbar_with_partial_columns_kind  s   z:TestDataFramePlots.test_errorbar_with_partial_columns_kindc                 C   s   t ttjdd}t ttjddddgd}tdddd	}|j|d
d |j|d
d t|j	|dd}t
|ddd d S )Nr5   rK   r  r   r   1/1/2000rL   M)r2  r1  T)inplacerG   r  r  )r   rP   r  rQ   rR   r   r
   r   r   r    r   )r"   r#   r  ixrW   r$   r$   r%   &test_errorbar_with_partial_columns_dti  s   z9TestDataFramePlots.test_errorbar_with_partial_columns_dtierr_boxc                 C   s   | S r  r$   r   r$   r$   r%   <lambda>  s    zTestDataFramePlots.<lambda>c                 C   sd   t dt dddd}t|}|t dd t dd d}t|j|d}t|dd	d
 d S )Nr  r   r4   r>   r  r  )r?   r   r  r,   r  r  )r"   r  r  r#   errrW   r$   r$   r%   &test_errorbar_with_partial_columns_box  s
   "z9TestDataFramePlots.test_errorbar_with_partial_columns_boxc           	      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}t|ddd t|j||d}t|ddd t|jd|d |d}t|ddd t|jdd|d}t|ddd t|j||d}t|ddd t|jd||dd}t|ddd d S )Nr  r   r4   r>   r  r  r  z1/1/2001r  )r1  rM   r  r5   r  r@   r?   )r@   r  r  r,   T)r(   r  r  r)   )rP   r   r  r
   r   r   r    r   )	r"   r  r  r  r  tdftdf_errrW   r2   r$   r$   r%   test_errorbar_timeseries  s.   z+TestDataFramePlots.test_errorbar_timeseriesc                 C   s   t j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    d S 1 scw   Y  d S )Nr5   )r=   r5   r[   r  r=   r[   )r  r  r,   r   r4   zCAsymmetrical error bars should be provided with the shape (3, 2, 5)rA   r  )rP   rQ   rR   r   r   reshapeTr    r  	get_pathsverticesr   r   r<  r  r  rD   rE   r   )r"   r  r#   rW   yerr_0_0expected_0_0rI   r$   r$   r%   test_errorbar_asymmetrical  s     "z-TestDataFramePlots.test_errorbar_asymmetricalc                 C   s   t tjddttjd d d}t|jdd t|j|d t	
d & | }t|jdks5J t||j t|jdksEJ W d    d S 1 sPw   Y  d S )	Nr5   rK   rL   rM   T)tabler   r,   )r   rP   rQ   rR   rS   rT   rU   r   r    r   r   r   tablesr   r  r   rV   r$   r$   r%   
test_table%  s   "zTestDataFramePlots.test_tablec                 C   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}t
|ddd	 t|jj	dd|d
}t
|ddd	 t|jj	dd|d}t
|ddd	 t|jj	dd||d}t
|ddd	 d S )Nr5   )r[   r5   r[   r?   r@   r   r>   r   r  )r?   r@   r  r,   )r?   r@   r  )r?   r@   r  r  )r   rP   r  rQ   rR   r   rq   r   r    r   r   r  r$   r$   r%   test_errorbar_scatter4  s$   z(TestDataFramePlots.test_errorbar_scatterc                    s   d fdd	}t ttjddg dd}|jjdd	d
ddd t ddd | j	ddd | j	ddd |jjdd	ddd t ddd | j	ddd d S )Nhas_xerrc                    sv   g }t  fddjD }|D ]}t|r|| q|| qfdd|D }t|t|gt| d d S )Nc                 3   s"    | ]}t | d r|jV  qdS )FN)r   r   r   has_errr$   r%   r  M  s     z`TestDataFramePlots.test_errorbar_scatter_color.<locals>._check_errorbar_color.<locals>.<genexpr>c                    s   g | ]	}| j v r|qS r$   )r  r7  rW   r$   r%   rn  S  r8  zaTestDataFramePlots.test_errorbar_scatter_color.<locals>._check_errorbar_color.<locals>.<listcomp>r  )	next
containersr   extendappendr   rP   r   r   )r  r  r  r   errsel	err_linesr  r  r%   _check_errorbar_colorK  s    zMTestDataFramePlots.test_errorbar_scatter_color.<locals>._check_errorbar_colorr5   )rL   r[   r  r   r   r   r  r  r  )r?   r@   r  r  r   r,   r  r  has_yerrr  )r?   r@   r  r  r   )r
  )
r   rP   r  rQ   rR   r   r    r   r   r  )r"   r  r#   r$   r  r%   test_errorbar_scatter_colorJ  s   z.TestDataFramePlots.test_errorbar_scatter_colorc                 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*   r3  z'unknown' is not arA   r   r   unknownr   )r?   r@   r  r  )r   rD   rE   r   KeyErrorr    r!   r$   r$   r%   test_scatter_unknown_colormapd  s   "z0TestDataFramePlots.test_scatter_unknown_colormapc                 C   s   dd l m} |d t \}}tg dg dg dg dd}dd }|D ]}|jddd	|d
d q'||  || |d t \}}t	t
 |jd
|d
d}W d    n1 saw   Y  || d S )Nr   r  r,   r5   r=   r*   r[   ry   r   r   r   r  c                 S   s   | D ]}t |jdksJ t| dd q| d | d fD ]}t| dd t|jdddd q| d | d fD ]}t| dd t|jdddd q;d S )	Nr,   Trf   r   r5   Frh   r=   )r   r   r   r  rk   r2   rW   r$   r$   r%   _check|  s   z5TestDataFramePlots.test_sharex_and_ax.<locals>._checkr   r   ra   T)r?   r@   ra   rW   sharex)r)   rW   r  )rh  r   close_generate_4_axes_via_gridspecr   r    tight_layoutri  r   r   UserWarningr"   rn  gsr2   r#   r  rW   r$   r$   r%   test_sharex_and_axj  s*   

	

z%TestDataFramePlots.test_sharex_and_axc                 C      dd l m} tg dg dg dg dd}t \}}|D ]}|jddd|d q||  |D ]%}t|jdks>J t	|
 d	d
 t	| d	d
 t	|jd	dd	d
 q3d S Nr   r  r  r   r   ra   )r?   r@   ra   rW   r,   Trf   rh   rh  r   r   r!  r    r"  ri  r   r   r   r  rk   r"   rn  r#   r%  r2   rW   r$   r$   r%   test_sharex_false_and_ax  s$   
z+TestDataFramePlots.test_sharex_false_and_axc                 C   s   dd l m} t \}}tg dg dg dg dd}dd }|D ]}|jddd|d	d
 q"||  || |d t \}}t	t
 |jd	|d	d}W d    n1 s\w   Y  ||  || d S )Nr   r  r  c                 S   s   | D ]}t |jdksJ t| dd t|jdddd q| d | d fD ]
}t| dd q(| d | d fD ]
}t| dd q;d S )	Nr,   Trf   rh   r   r5   r=   F)r   r   r   rk   r  r  r$   r$   r%   r    s   z5TestDataFramePlots.test_sharey_and_ax.<locals>._checkr   r   ra   T)r?   r@   ra   rW   rS  r  )r)   rW   rS  )rh  r   r!  r   r    r"  ri  r   r   r   r#  r$  r$   r$   r%   test_sharey_and_ax  s*   
	


z%TestDataFramePlots.test_sharey_and_axc                 C   r'  r(  r)  r*  r$   r$   r%   test_sharey_and_ax_tight  s$   
z+TestDataFramePlots.test_sharey_and_ax_tightc                 C   s   t d i }|dv r6ttjdjddtjdjddtdtjdjdd d}ddd	}n|d
krAt	 
 }nt	 }t|jdd|i|}td t  | du sbJ dS )z3Check that every plot type gets properly collected.r  )r   r   r   r5   r}  r)  r  r   r   r>   r  r  r  Nr$   )rD   r#  r   rP   rQ   rR   r+  r   r   r   r  weakrefrefr    rn  r   gccollect)r"   r  argsr#   r/  r$   r$   r%   test_memory_leak  s"   

z#TestDataFramePlots.test_memory_leakc           	         s  ddl m  dd lm ttjddt	dddd}t
tjdd|jtd	d
} fdd} fdd}| | fD ]H\}}|j|d}t|jdksUJ |j|d}t|jdksdJ ||fD ]}t| dd t| dd t|jdddd qhd qB| | fD ]C\}}|jd||gd}t|jdksJ t|jdksJ |D ]}t| dd t| dd t|jdddd qd 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 ]}t| dd qt|d  dd t|d jdddd t|d  dd t|d jdddd d | \}}tt |jd||gddd}W d    n	1 stw   Y  t|d jdksJ t|d jdksJ t|d  dd t|d  dd ||fD ]}t| dd t|jdddd qd d S )Nr   gridspecr5   rL   r  r2  rM   r  ABr   c                     sL     dd}  }|| d dd d f }|| dd d f }||fS )Nr=   r,   r5   GridSpecr  rk  r%  rU  r&  r'  r5  rn  r$   r%   _get_vertical_grid  
   zSTestDataFramePlots.test_df_gridspec_patterns_vert_horiz.<locals>._get_vertical_gridc                     sL     dd}  }|| d d d df }|| d d df }||fS )Nr,   r=   r5   r8  r:  r;  r$   r%   _get_horizontal_grid   r=  zUTestDataFramePlots.test_df_gridspec_patterns_vert_horiz.<locals>._get_horizontal_gridr  r,   Trf   rh   r  r   r)   rW   r  rS  Fr   r5  rh  r   r   rP   rQ   rR   r   r
   r   rN   rS   r    r   r   r   r  rk   r   r   r   r#  )	r"   tsr#   r<  r>  r&  r'  rW   r2   r$   r;  r%   $test_df_gridspec_patterns_vert_horiz	  sr   



z7TestDataFramePlots.test_df_gridspec_patterns_vert_horizc                    s  ddl m  dd lm ttjddt	dddd} fdd	}| }t
tjdd
|jtdd}|jd|d}|D ]%}t|jdksLJ t| dd t| dd t|jdddd qAd | }tt |jd|ddd}W d    n1 sw   Y  |D ]}t|jdksJ q|d |d fD ]
}t| dd q|d |d fD ]
}t| dd q|d |d fD ]}t| dd t|jdddd q|d |d fD ]}t| dd t|jdddd qd d S )Nr   r4  r5   rL   r  r6  rM   c                     st     dd}  }|| d dd df }|| d ddf }|| dd df }|| d }||||fS )Nr=   r5   r6   r8  )r%  rU  r&  r'  ax3ax4r;  r$   r%   _get_boxed_gridg  s   zKTestDataFramePlots.test_df_gridspec_patterns_boxed.<locals>._get_boxed_gridr%  ABCDr   Tr   r,   rf   rh   r  r?  r=   Fr@  )r"   rA  rE  r2   r#   rW   r$   r;  r%   test_df_gridspec_patterns_boxed\  sJ   
	
z2TestDataFramePlots.test_df_gridspec_patterns_boxedc                 C   s.   t tg dg ddtjjdddd d S )Nr   r  r3  r   r   r>   )kws)r   r   r   PlotAccessor_dataframe_kinds)r"   r$   r$   r%   test_df_grid_settings  s
   
z(TestDataFramePlots.test_df_grid_settingsc                 C   s>   t j \}}|g d ttjddj|d d S )N)r  r  r  r  r5   rL   r  )	r   r   r)   add_axesr   rP   rQ   rR   r    )r"   rU  rW   r$   r$   r%   test_plain_axes  s   "z"TestDataFramePlots.test_plain_axesc                 C   sX   t tjddtjddd}tj }|d}|j	d|ddddd	 d S )
Nr5   r   r3  )r   r   r,   r,   r   r   r   hsv)r  rW   r?   r@   r   r  )
r   rP   rQ   rR   r   r   r   r  rL  r    )r"   r#   rU  rW   r$   r$   r%   test_plain_axes_df  s   

z%TestDataFramePlots.test_plain_axes_dfc                 C   sr   t j \}}ddlm} ||}|jdddd}ttj	ddj
|d	 ttj	ddj
|d	 d S )
Nr   )make_axes_locatabler  z5%g?)r  padr5   rL   r  )r   r   r)   mpl_toolkits.axes_grid1rP  append_axesr   rP   rQ   rR   r    )r"   rU  rW   rP  dividercaxr$   r$   r%   #test_plain_axes_make_axes_locatable  s   "z6TestDataFramePlots.test_plain_axes_make_axes_locatablec                 C   sj   t j \}}ddlm} ||dddd}ttjddj	|d	 ttjddj	|d	 d S )
Nr   )
inset_axesz30%r  r=   )rb  r  r,  r5   rL   r  )
r   r   r)   %mpl_toolkits.axes_grid1.inset_locatorrW  r   rP   rQ   rR   r    )r"   rU  rW   rW  iaxr$   r$   r%   test_plain_axes_make_inset_axes  s
   "z2TestDataFramePlots.test_plain_axes_make_inset_axesmethod)rG   r_  r~   c                 C   sv   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 |}t	|j
|d d S )Nr5   )r  r5   r7  r   c                 S   s
   | j  S r  )r   r`  r#   r$   r$   r%   r       
 zBTestDataFramePlots.test_secondary_axis_font_size.<locals>.<lambda>r   c                 S   s
   | j d S )Ng?r^  r\  r$   r$   r%   r    r]  )r   r}  r   r   T)rE  r  
mark_right)r2   r  r$   )r   rP   rQ   rR   r   rS   assignr   r    r   rI  )r"   r[  r#   r  r  rY   rW   r$   r$   r%   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=   r5   r=   )r}  *      )MondayTuesday	Wednesday)salesvisitsdayri  r   r4   r=   c                 S   rh  r$   r  rl  tr$   r$   r%   rn    ro  zATestDataFramePlots.test_x_string_values_ticks.<locals>.<listcomp>rd  r  re  r  rf  r  )r   r    r  set_xlimrk   r  rp   
get_xticks)r"   r#   rW   xticklabelslabels_positionr$   r$   r%   test_x_string_values_ticks  s   z-TestDataFramePlots.test_x_string_values_ticksc                 C   s   t ddgddgg}ttjddddg|d}| }|d	d
 dd |	 D }t
t|| }|d dks?J |d dksGJ |d dksOJ |d dksWJ d S )Nr  i  r,   r5   rR  r   r   r   r4   r*   c                 S   rh  r$   r  rj  r$   r$   r%   rn    ro  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   from_productr   rP   rQ   rR   r   r    rl  rk   r  rp   rm  )r"   rN   r#   rW   rn  ro  r$   r$   r%   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 )Nr5   r*   r,   rM   r!  r   )r   r    r  )r"   r  r#   rW   xlimsr$   r$   r%   test_xlim_plot_line  s
   z&TestDataFramePlots.test_xlim_plot_linec                 C   s   t 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)k1k2k3k4)i  r     r   )i  ix  r   i  )ry  ry  i@  i  )r,   r=   r*   r=   )s1s2s3rE  rM   )rz  r{  r|  F)rW   r$  rE  T)rW   rE  r   r,   r=   c                 S   rh  r$   r  rj  r$   r$   r%   rn  	  ro  zWTestDataFramePlots.test_xlim_plot_line_correctly_in_mixed_plot_type.<locals>.<listcomp>)r   r   r)   r   r    r~   r  rk   )r"   rU  rW   indexesr#   rs  rn  r$   r$   r%   0test_xlim_plot_line_correctly_in_mixed_plot_type	  s"   	zCTestDataFramePlots.test_xlim_plot_line_correctly_in_mixed_plot_typec                 C   sl   t dgtd}|jsJ | }t| dksJ | d }t| dks*J t| dks4J d S )Nfoo)r   r   r,   r   )r   intemptyr    r   r   r   r4  )r"   r#   rW   rG   r$   r$   r%   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  rA   )r   rD   rE   r  r    r!   r$   r$   r%   test_plot_no_numeric_data%	  s   
"z,TestDataFramePlots.test_plot_no_numeric_data)rG   r~   r_  r   r   r4  r  r   c                 C   s   t d tdtdd tdd tdtdd}t|}|jddg|d}t|dks5J d	d
gddgdgf}t||D ]\}}|dkrRt||d |dkrat|j	t|ksaJ qDd S )Nr  rL   r,   r  )r   r  )r   r  r)   r  r=   r   r  r   r  r   r   r"  rG   )
rD   r#  rP   r   r   r    r   rp   r   r   )r"   r  r  r#   r2   r  rW   r  r$   r$   r%   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 SeriesrA   r   r)   )r   rq   rD   rE   NotImplementedErrorr    )r"   serrI   r$   r$   r%   (test_group_subplot_series_notimplementedB	  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 )Nr5   r  r  r   z6An iterable subplots for a DataFrame with a MultiIndexrA   r  )	r   rP   eyer   rr   rD   rE   r  r    rH   r$   r$   r%   ,test_group_subplot_multiindex_notimplementedH	  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 )Nr5   r   r   z4An iterable subplots for a DataFrame with non-uniquerA   r  r  )r   rP   r  rD   rE   r  r    rH   r$   r$   r%   0test_group_subplot_nonunique_cols_notimplementedN	  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,   r  )r  r  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 )NrL   r3  rA   r  rP   r   r   rD   rE   r   r    )r"   r)   expected_msgr  r#   r$   r$   r%   test_group_subplot_bad_inputT	  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 )NrL   r3  z Column label\(s\) \['bad_name'\]rA   )r   bad_namer  r  r  r$   r$   r%   &test_group_subplot_invalid_column_nameg	  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 )NrL   r   zshould be in only one subplotrA   r3  )r   r   r  r  r  r$   r$   r%   $test_group_subplot_duplicated_columnn	  s
   "z7TestDataFramePlots.test_group_subplot_duplicated_column)r  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 )NrL   r3  z1When subplots is an iterable, kind must be one ofrA   r  r  )r"   r  r  r#   r$   r$   r%   test_group_subplot_invalid_kindu	  s   "z2TestDataFramePlots.test_group_subplot_invalid_kindz index_name, old_label, new_label)Nrp  new)oldr  r  )Nrp  rp  )Nrp  r,   rp  )rG   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,   r5   r[   Type AType Br   r!  rp  )r  r  xlabel)r   rN   r   r    
get_xlabelr  str)r"   r  
index_name	old_label	new_labelr#   rW   r$   r$   r%   (test_xlabel_ylabel_dataframe_single_plot~	  s   z;TestDataFramePlots.test_xlabel_ylabel_dataframe_single_plotzxlabel, ylabel))NN)X LabelN)NY Label)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 )Nr  r  r,   r5   r[   r   )r  r?   r@   r  r  )r   r    r  r  )r"   r  r  r  xcolycolr#   rW   r$   r$   r%   'test_xlabel_ylabel_dataframe_plane_plot	  s    z:TestDataFramePlots.test_xlabel_ylabel_dataframe_plane_plot)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   )rE  r  r^   rZ   )	r   r    r  r2   r   get_visibler  rM  
get_yticks)r"   rE  ax_dfrW   r$   r$   r%   test_secondary_y	  s   


z#TestDataFramePlots.test_secondary_yc                 C   sJ   t  }t d | }|j }W d    d S 1 sw   Y  d S )NF)r   r   r   r    r   )r"   r#   r   r$   r$   r%   test_plot_no_warning	  s
   "z'TestDataFramePlots.test_plot_no_warning)NNNN)__name__
__module____qualname__rD   markslowr&   r3   r7   r;   xfailrJ   rX   parametrizerd   rm   ro   rt   r   r   r   rS   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rP   r   r5  r  r   r   r  r  r  r  r(  r*  r-  r/  rq   r
   r>  rC  rD  rG  rK  rQ  rV  r\  r]  re  rf  rv  r{  r|  r  r  r   r   CategoricalIndexr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  filterwarningsr  r  r  r  r$  r&  r'  r(  r-  r.  r/  r?  r@  rC  r  rL  rV  r  r   r^  ra  ro  rs  r  r  r   rI  _common_kindsr  r  r  r  r  r  r  r  r  r  r  r  stdr  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-  
_all_kindsr3  rB  rG  rK  rM  rO  rV  rZ  ra  rp  rr  rt  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$   r$   r$   r%   r   2   sN   





	


	


	




	



	



	

	



	





	
	


				








	
		."""***l
		
",	
	



(((6	!((S5
	
	

	
r   c                  C   sb   dd l m}  tjdd}| |d }| |d }| |d }| |d }|||||gfS )Nr   r5   r*  )r,   r   r  r   )rh  r   r   r5  r9  subplot)rn  r%  ax_tlax_llax_trax_lrr$   r$   r%   r!  	  s   r!  ).__doc__r   r   r0  r  r  rT   r.  numpyrP   rD   pandas.core.dtypes.apir   pandasr   r   r   r   r   r	   r
   r   pandas._testing_testingr   pandas.tests.plotting.commonr   r   r   r   r   r   r   r   r   r   r   r   r   pandas.io.formats.printingr   r#  r   rn  r   r!  r$   r$   r$   r%   <module>   sL    $	<

                   %