o
    5ch                     @   s   d 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
Zddl
mZmZmZ ddlmZ ddlmZ ddlmZ e	jG dd deZdS )z Test cases for DataFrame.plot     N)	DataFrameSeries
date_range)TestPlotBase)pprint_thingc                   @   s  e Zd Zejjdd Zdd Zdd Zejj	ddd	d
 Z
dd Zejdi dddfddidddfgdd Ze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$ Zd%d& Zd'd( Zd)d* Zejd+d,d-d.d/d0d1dd2gfgejd3g d4d5d6 Zejd7d8d9d:d8d9d;d<d=d9d:d=d9d;d<d8d>d:d8d>d;d<d=d>d:d=d>d;d<d8d9d?d8d9d;d@d=d9d?d=d9d;d@d8d9dAdBd8d9d;dAdCd=d9dAdBd=d9d;dAdCd8d>dAdBd8d>d;dAdCd=d>dAdBd=d>d;dAdCd8d9dAdDd8d9d;dAdEd=d9dAdDd=d9d;dAdEgdFdG Zejd7d8d>d:d8d9d:d=d>d:d=d9d:d8d9d?d=d9d?gdHdI Zejd7d8d>d:d8d9d:d=d>d:d=d9d:d8d9d?d=d9d?gdJdK ZejdLddMgdNdO ZdPdQ Z	8	>	>	R	S	SdVdTdUZd0S )WTestDataFramePlotsSubplotsc                 C   s  t tjddttjd d d}dD ]}|j|dddd}| j|ddd |j	d	ks.J t
||jD ]\}}| j|t|gd
 q4|d d D ]1}| |j | j| dd |dkri| j|jdddd | j|j dd | |  qI| |d j | |d   | |d jdd | |d j  | |d   |j|ddd}|D ]'}| |j | |  | |jdd | |j  | |  q|j|ddd}|D ]
}| d u sJ qqd S )N
      index)barbarhlineareaT)kindsubplotssharexlegendr	      axes_numlayoutr	   labelsFvisibler   minorr   r   r   )r   r   r   )r   nprandomrandliststringascii_lettersplot_check_axes_shapeshapezipcolumns_check_legend_labelsr   _check_visiblexaxisget_xticklabels	get_labelget_yticklabels
get_legend)selfdfr   axesaxcolumn r:   e/var/www/html/gps/gps/lib/python3.10/site-packages/pandas/tests/plotting/frame/test_frame_subplots.pytest_subplots   s>   $z(TestDataFramePlotsSubplots.test_subplotsc                 C   s  t dddd}ttjd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
 dd | |  q,| |d j | |d 	  | |d j	dd | |d j
  | |d   | j|dd |j|ddddd}|D ]0}| |j | |	  | |j	dd | |j
  | |  | j|dddd qqd S )N
2014-07-01Mr   startfreqperiodsr	   r
   )r   r   Tr"   r   r   r   Fr   r   r!   r   )xrot-      )r   r   r   rotfontsize)
xlabelsizerC   
ylabelsize)r   r   r#   r$   r%   r)   r*   r/   r0   r1   r2   r3   _check_ticks_props)r5   idxr6   r   r7   r8   r:   r:   r;   test_subplots_timeseries@   s6   z3TestDataFramePlotsSubplots.test_subplots_timeseriesc           	   	   C   s  t g dtjdddtjdddtjdddgtdtd	td
gtjdddtjd	ddtjd
ddgg dd}t|}g d}|D ]}|j|d}| d  d }|| j	}||k
 shJ qId}tjt|d |jdd W d    d S 1 sw   Y  d S )Nr         is)unitr   mh2017-08-01 00:00:002017-08-01 02:00:002017-08-02 00:00:00Tutc)Thisshouldfail)numeric	timedeltadatetime_no_tzdatetime_all_tztext)r\   r]   r^   r_   )yr   r   zno numeric data to plotmatchr`   )r#   arraypd	Timedeltato_datetimer   r)   	get_linesget_datavaluesallpytestraises	TypeError)	r5   datatestdatay_colscolr8   resultexpectedmsgr:   r:   r;   test_subplots_timeseries_y_axis`   s4   
"z:TestDataFramePlotsSubplots.test_subplots_timeseries_y_axisz6not support for period, categorical, datetime_mixed_tz)reasonc                 C   s  t g dtjdddtjdddtjdddgtjg dg dd	d
tjdddtdtdgd}t|}|jddd}| d 	 d |d j
k sTJ |jddd}| d 	 d |d j
k snJ |jddd}| d 	 d |d j
k sJ dS )a  
        This test will fail for:
            period:
                since period isn't yet implemented in ``select_dtypes``
                and because it will need a custom value converter +
                tick formatter (as was done for x-axis plots)

            categorical:
                 because it will need a custom value converter +
                 tick formatter (also doesn't work for x-axis, as of now)

            datetime_mixed_tz:
                because of the way how pandas handles ``Series`` of
                ``datetime`` objects with different timezone,
                generally converting ``datetime`` objects in a tz-aware
                form could help with this problem
        rM   rT   H)rA   z2017-08-01 02:00rV   )cba)r{   rz   ry   F)
categoriesorderedTrW   rU   )r\   periodcategoricaldatetime_mixed_tzr\   r~   )xra   r   r   r   r   N)r#   rd   re   PeriodCategoricalrg   r   r)   rh   ri   rj   rk   )r5   ro   rp   	ax_periodax_categoricalax_datetime_mixed_tzr:   r:   r;   -test_subplots_timeseries_y_axis_not_supported   s<   
zHTestDataFramePlotsSubplots.test_subplots_timeseries_y_axis_not_supportedc                 C   s  t tjddttjd d d}|jddd}| j|ddd |j	dks(J |jddd}| j|ddd |j	dks>J |jdd	d}| j|ddd |j	dksTJ |jdd
d}| j|dd
d |j	d
ksjJ |jddd}| j|dd
d |j	d
ksJ |jddd}| j|ddd |j	dksJ d}t
jt|d |jddd W d    n1 sw   Y  d}t
jt|d |jddd W d    d S 1 sw   Y  d S )Nr   r	   r
   TrN   rN   r   r   r   r!   rN   rN   r!   )r      )r!   r   )r   r!   )r   r   z1Layout of 1x1 must be larger than required size 3rb   r   r   z1At least one dimension of layout must be positive)r!   r!   )r   r#   r$   r%   r&   r'   r(   r)   r*   r+   rl   rm   
ValueError)r5   r6   r7   ru   r:   r:   r;   !test_subplots_layout_multi_column   s6   $"z<TestDataFramePlotsSubplots.test_subplots_layout_multi_columnz:kwargs, expected_axes_num, expected_layout, expected_shaper   r   r   r   )r	   r	   c                 C   sZ   t tjddttjd d d}|jdddi|}| j|||d |j	|ks+J d S )Nr   r   r
   r   Tr   r:   )
r   r#   r$   r%   r&   r'   r(   r)   r*   r+   )r5   kwargsexpected_axes_numexpected_layoutexpected_shaper6   r7   r:   r:   r;   "test_subplots_layout_single_column   s   $z=TestDataFramePlotsSubplots.test_subplots_layout_single_columnc                 C   s|   t d / ttjdd}|jddd ttjddtdddd}|jddd W d    d S 1 s7w   Y  d S )	Nd   r   T)r	   rN   r   1/1/2000rB   r
   )tmassert_produces_warningr   r#   r$   randnr)   r   r5   r6   r:   r:   r;   test_subplots_warnings   s   "z1TestDataFramePlotsSubplots.test_subplots_warningsc                 C   s  | j dd\}}ttjddttjd d d}|j	d|d ddd}| j
|dd	d
 |jdks5J |d j|u s>J |j	d|d ddd}| j
|dd	d
 |jdksXJ |d j|u saJ | j
|ddd
 t  d}tjt|d | j dd\}}|j	d|d W d    n1 sw   Y  | j dd\}}t \ tdt ttjddttjd d d}|j	d|dddd}| j
|ddd
 |jdksJ |j	d|dddd}| j
|ddd
 |jdksJ |j	d|dddd}W d    n	1 sw   Y  | j
|ddd
 |jdksJ | j dd\}}ttjddttjd d d}|j	d|gddd}| j
|ddd
 |jdksMJ d S )NrN   r	   r   r
   Tr   F)r   r8   r   sharey)r   r	   r   r   r      )rN   r	   z@The number of passed axes must be 3, the same as the output plotrb   r   r8   ignorer   )rN   r   )r   r8   r   r   r   r   )r   r   r   r   r   )pltr   r   r#   r$   r%   r&   r'   r(   r)   r*   r+   figurer   closerl   rm   r   warningscatch_warningssimplefilterUserWarning)r5   figr7   r6   returnedru   r:   r:   r;   test_subplots_multiple_axes   sT   $	
$


$z6TestDataFramePlotsSubplots.test_subplots_multiple_axesc                 C   sN  | j jddddd\}}| j jddddd ttjdd	td
dddd}t|	 D ]\}}|| j
|dd q,|dd 	 D ]}| j| dd qB|d 	 D ]}| j| dd qT|g ddgf 	 D ]}| j| dd qk|g ddgf 	 D ]}| j| dd q|g ddgf 	 D ]}| j| dd qd S )Nr	   T)r   r   g?gffffff?g333333?)leftrighthspacewspacer   	   r=   r>   r?   r
   rO   )r8   rG   r   r!   Fr   )r   r   rN   r   rN   )r   r   subplots_adjustr   r#   r$   r   r   	enumerateravelr)   r/   r1   r3   )r5   r   r7   r6   ir8   r:   r:   r;   test_subplots_ts_share_axes6  s&   z6TestDataFramePlotsSubplots.test_subplots_ts_share_axesc                 C   s   g dg dg dd}t |tddd}|dd	g jd
d}|d j|d d
d | j|d  dd | j|d  d
d | D ]}| j| d
d qDd S )N)      ?       @      @      @)r   r   r   r   )rO   r   r	   r   )ABCz
2014 10 11z
2014 10 14r
   r   r   Tr   r   r   )r8   secondary_yFr   r   )r   r   r)   r/   r1   r   r3   )r5   dr6   r7   r8   r:   r:   r;   'test_subplots_sharex_axes_existing_axesS  s   zBTestDataFramePlotsSubplots.test_subplots_sharex_axes_existing_axesc                 C   s   t tjddtdd}|jdd}|D ]}| j|dgd t|jdks(J qt	
  |jddd	}|D ]}| j|dgd t|jdksIJ q6t	
  |jdd
}| j|dgd d t|jdksgJ t|jjdksqJ d S )NrO   aaaaar-   Tr   r{   r   r   )r   r   )r   z	a (right)r   )r   r#   r$   r%   r&   r)   r.   lenlinesr   r   right_ax)r5   r6   r7   r8   r:   r:   r;   test_subplots_dup_columns`  s   z4TestDataFramePlotsSubplots.test_subplots_dup_columnsc                 C   sZ   t g d}tdgd ttdddtdd}|jjddd	}t|j	
 | d S )
N)皙?r         $@r   r	   rO   r   r   r   r   r
   T)gridlog)r#   rd   r   r&   ranger)   r   r   assert_numpy_array_equalyaxisget_ticklocs)r5   rt   r6   r8   r:   r:   r;   test_bar_log_no_subplotsu  s   &z3TestDataFramePlotsSubplots.test_bar_log_no_subplotsc                 C   sf   t g d}ttddgtddggjjddd}t|d j	 | t|d j	 | d S )	N)r   r   r   g      Y@g     @@g     @   i,  i  T)r   r   r   r   )
r#   rd   r   r   r)   r   r   r   r   r   )r5   rt   r8   r:   r:   r;   test_bar_log_subplots  s   z0TestDataFramePlotsSubplots.test_bar_log_subplotsc                 C   sh   |}|j jdd}t|tsJ | j|d g dd dD ]}|j j|dd}| j||g ddd qd S )	NTr   )heightweightcategory)expected_keys)dictr7   both)return_typer   F)r   check_ax_title)r)   box
isinstancer   _check_box_return_type)r5   hist_dfr6   rs   tr   r:   r:   r;   !test_boxplot_subplots_return_type  s   
z<TestDataFramePlotsSubplots.test_boxplot_subplots_return_typec                 C   sJ  dd l m} ttjddtdddtdd}|jddd	d
\}}|j	d	|d}|D ]}t
|jdks6J | 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  |dd\}}tt |j	d	|d	d}W d    n1 sw   Y  |D ]}t
|jdksJ | 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  |dd\}}|j	d	|d}|D ])}t
|jdksJ | j| d	d | j| d	d | j|jd	dd	d qt  d S )Nr   r   rN   r   r   AB)r   r-   r   T)r   r   r   Fr   )r   r8   r   )matplotlib.pyplotpyplotr   r#   r$   r   r   r&   r   r)   r   r   r/   r3   r1   r   r   r   r   )r5   r   r6   r   r7   r8   r:   r:   r;   $test_df_subplots_patterns_minorticks  sH   
z?TestDataFramePlotsSubplots.test_df_subplots_patterns_minorticksc                 C   s   t tjdd}tj|jdd df< tj|jd ddf< | jdd\}}|jj	|ddd t
d	dd
}t
ddd
}t|d  | t|d  | d S )Nr   rN   rO   r   r   TF)r8   r   r   g      @      ?      )r   r#   r$   r%   nanilocr   r   r)   r   aranger   r   
get_xticks)r5   r6   figsaxsexpected_ax1expected_ax2r:   r:   r;   test_subplots_sharex_false  s   z5TestDataFramePlotsSubplots.test_subplots_sharex_falsec              	   C   s   t ddd}ttjdd|d}i }t| jjdrd|d< | jjdi |\}}t	
d 5 |j|d
 d t	jdd}| j| W d    n1 sNw   Y  W d    d S W d    d S 1 sfw   Y  d S )Nnowr   )r@   rB   r	   r
   get_constrained_layoutTconstrained_layoutrN   r   )r8   )return_filelike)rN   )r   r   r#   r$   r%   hasattrr   Figurer   r   r   r)   ensure_cleansavefig)r5   rK   r6   r   r   r7   pathr:   r:   r;    test_subplots_constrained_layout  s   "z;TestDataFramePlotsSubplots.test_subplots_constrained_layoutz index_name, old_label, new_label)N new)oldr   r   )Nr   r   )Nr   r   Nr   rN   r   )r   r   r   c                    s   t ddgddggddgd}||j_|j|dd}td	d
 |D s$J tfdd
|D s1J |j|  dd}t fdd
|D sGJ t fdd
|D sTJ d S )Nr   rN   rO   zType AzType Br   Tr   r   c                 s   s    | ]	}|  d kV  qdS )r   N)
get_ylabel.0r8   r:   r:   r;   	<genexpr>      zSTestDataFramePlotsSubplots.test_xlabel_ylabel_dataframe_subplots.<locals>.<genexpr>c                 3   s    | ]	}|   kV  qd S N)
get_xlabelr   )	old_labelr:   r;   r    r  )r   ylabelxlabelr   c                 3        | ]}|  t kV  qd S r  )r   strr   	new_labelr:   r;   r         c                 3   r  r  )r  r	  r   r
  r:   r;   r    r  )r   r   namer)   rk   )r5   r   
index_namer  r  r6   r7   r:   )r  r  r;   %test_xlabel_ylabel_dataframe_subplots  s   z@TestDataFramePlotsSubplots.test_xlabel_ylabel_dataframe_subplotsr   r   T)r   stacked?r   r  widthr   Fr   r   r   r  edge)r   r  align)r   r  r  r  )r   r   r  )r   r   r  r  c                 C   s:   t dgd ttddtdd}| j|fi | d S )Nr	   rO   r   r
   )r   r&   r   _check_bar_alignmentr5   r   r6   r:   r:   r;   test_bar_align_multiple_columns  s   $#z:TestDataFramePlotsSubplots.test_bar_align_multiple_columnsc                 C   s&   t tjd}| j|fi | d S )NrO   r   r#   r$   r   r  r  r:   r:   r;   test_bar_align_single_column)  s   z7TestDataFramePlotsSubplots.test_bar_align_single_columnc                 C   s.   t tjdd}| j|fddd| d S )NrO   r  g?)r  positionr  r  r:   r:   r;   test_bar_barwidth_position8  s   z5TestDataFramePlotsSubplots.test_bar_barwidth_positionwr   c                 C   s   t tjdd}|jjd|d}|j }t	|t
g d | dks)J |jd  dks4J |jd  d	ks?J d S )
NrO   T)r  r  )r   r   rN   r	   r   )g      g      @r   r   r!   g      @)r   r#   r$   r   r)   r   r0   r   r   r   rd   get_xlimpatchesget_x)r5   r  r6   r8   ticksr:   r:   r;   test_bar_barwidth_position_intG  s   
z9TestDataFramePlotsSubplots.test_bar_barwidth_position_intc                 C   sp   t tjdd}| j|dddd | j|dddd | j|dddd | j|dddd | j|dddd d S )	NrO   r   Tr   r  r   Fr  r  r   r:   r:   r;   &test_bar_barwidth_position_int_width_1S  s   zATestDataFramePlotsSubplots.test_bar_barwidth_position_int_width_1centerr   c              	   C   s   |j ||||||dd}| |}|D ]}	|dkr7|	j}
|	 \}}tdd |	jD }tdd |	jD }n$|dkrY|	j}
|	 \}}tdd |	jD }td	d |	jD }nt	t
||d
  t
||d
  |	jd }|dkr|du s||du r| }|| |  }nU|dkr|du r| | t|j |  }| }n9|dkr|du s|du r| | |  }| }n|dkr|du r| | t|j |  }| }nt	|
 tt|k sJ |dkrt
|
 d | q|dkrt
|
 d | qt	|S )NT)r   r  r   r  r  r  r   r   c                 s       | ]}|  V  qd S r  )r!  r   pr:   r:   r;   r  w      zBTestDataFramePlotsSubplots._check_bar_alignment.<locals>.<genexpr>c                 s        | ]}|  |  V  qd S r  )r!  	get_widthr'  r:   r:   r;   r  x  r  r   c                 s   r&  r  )get_yr'  r:   r:   r;   r  |  r)  c                 s   r*  r  )r,  
get_heightr'  r:   r:   r;   r  }  r  g      ?r   Fr%  r  )r)   _flatten_visibler0   r  minr   maxr   get_ylimr   r   assert_almost_equalr!  r+  r   r-   r,  r-  r   r#   r   rk   )r5   r6   r   r  r   r  r  r  r7   r8   axisax_minax_maxmin_edgemax_edger(  r  r%  r:   r:   r;   r  \  sZ   






z/TestDataFramePlotsSubplots._check_bar_alignment)r   FFr%  r   r   ) __name__
__module____qualname__rl   markslowr<   rL   rv   xfailr   r   parametrizer   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r#  r$  r  r:   r:   r:   r;   r      s    
& "
2%


;

.













!


r   )__doc__r'   r   numpyr#   rl   pandas.util._test_decoratorsutil_test_decoratorstdpandasre   r   r   r   pandas._testing_testingr   pandas.tests.plotting.commonr   pandas.io.formats.printingr   skip_if_no_mplr   r:   r:   r:   r;   <module>   s    