o
    ŀg:q                     @   s   d Z ddlZddlZddlZddlmZ ddl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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S )z Test cases for DataFrame.plot     N)is_platform_linux)np_version_gte1p24)	DataFrameSeries
date_range)_check_axes_shape_check_box_return_type_check_legend_labels_check_ticks_props_check_visible_flatten_visible)pprint_thing
matplotlibzmatplotlib.pyplotc                   @   s  e Zd Zejjejdg ddd Zejjejdg ddd Zejjejdg ddd Z	ejdd	d
gdd Z
ejdd	d
gdd Zejdg ddd Zdd Zejjdddd Zejdddgddgddgddgddgdd gg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ejd-ed.ed/d.d0gd1d2 Zd3d4 Zd5d6 Zejdd7dgddgddggd8d9 Zd:d; Zd<d= Zd>d? Zd@dA ZdBdC ZdDdE Zejjeoe  dFdGdHdIdJ Z!ejjeoe  dFdGdHdKdL Z"dMdN Z#ejdOg dPdQdR Z$dSdT Z%dUdV Z&dWdX Z'dYdZ Z(d[d\ Z)ejd]d^d_d`dadbdcd&ddgfgejdg dedfdg Z*ejdhdidjdkdidjdldmdndjdkdndjdldmdidGdkdidGdldmdndGdkdndGdldmdidjdodidjdldpdndjdodndjdldpdidjdqdrdidjdldqdsdndjdqdrdndjdldqdsdidGdqdrdidGdldqdsdndGdqdrdndGdldqdsdidjdqdtdidjdldqdudndjdqdtdndjdldqdugdvdw Z+ejdhdidGdkdidjdkdndGdkdndjdkdidjdodndjdogdxdy Z,ejdhdidGdkdidjdkdndGdkdndjdkdidjdodndjdogdzd{ Z-ejd|d&d}gd~d Z.ejddiddjigdnddGigdnddjigdiddjigdnddjiggdd Z/	i	G	G			dddZ0dbS )TestDataFramePlotsSubplotskind)barbarhlineareac                 C   s<  t tjddttjd d d}|j|dddd}t|ddd	 |j	d
ks+J t
||jD ]\}}t|t|gd q1|d d D ],}t|j t| dd |dkrbt|jdddd t|j dd t|  qEt|d j t|d   t|d jdd t|d j  t|d   d S )N   
      r   indexT)r   subplotssharexlegendr   r      axes_numlayoutr   labelsFvisibler   minor)r   nprandomdefault_rngliststringascii_lettersplotr   shapezipcolumnsr	   r   r   xaxisget_xticklabels	get_labelget_yticklabels)selfr   dfaxesaxcolumn r?   c/var/www/html/myenv/lib/python3.10/site-packages/pandas/tests/plotting/frame/test_frame_subplots.pytest_subplots"   s*   
z(TestDataFramePlotsSubplots.test_subplotsc                 C   s   t tjddttjd d d}|j|ddd}|D ]"}t|j	 t|
  t|j
dd t|j	  t|  qd S )	Nr   r   r   r   TFr   r   r   r)   )r   r,   r-   r.   r/   r0   r1   r2   r   r6   r7   r8   r9   r:   r   r;   r<   r=   r?   r?   r@   test_subplots_no_share_x@   s   
z3TestDataFramePlotsSubplots.test_subplots_no_share_xc                 C   sV   t tjddttjd d d}|j|ddd}|D ]
}| d u s(J qd S )Nr   r   r   r   TF)r   r   r   )	r   r,   r-   r.   r/   r0   r1   r2   
get_legendrC   r?   r?   r@   test_subplots_no_legendO   s   z2TestDataFramePlotsSubplots.test_subplots_no_legendr   r   c                 C   s  t dd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
 dd t|  q)t|d j t|d 	  t|d j	dd t|d j
  t|d   t|dd d S )N
2014-07-01MEr   startfreqperiodsr   r   r   TrB   r   r   r    r&   Fr'   r)   r+   r   )xrot)r   r   r,   r-   r.   r2   r   r   r6   r7   r8   r9   r
   r:   r   idxr;   r<   r=   r?   r?   r@   test_subplots_timeseriesZ   s    
z3TestDataFramePlotsSubplots.test_subplots_timeseriesc                 C   s   t dddd}ttjdd|d}|j|dd	d
dd}|D ]*}t|j t|  t|jdd t|j	  t|
  t|dd
dd q d S )NrG   rH   r   rI   r   r   r   TF-      )r   r   r   rotfontsizer)   )
xlabelsizerM   
ylabelsize)r   r   r,   r-   r.   r2   r   r6   r7   r8   r9   r
   rN   r?   r?   r@   test_subplots_timeseries_rotq   s   
z7TestDataFramePlotsSubplots.test_subplots_timeseries_rotcol)numeric	timedeltadatetime_no_tzdatetime_all_tzc              	   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|}|j|d}| d  d }|| j	}||k
 s`J d S )Nr   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)rY   rZ   r[   r\   textyr   r   )r,   arraypd	Timedeltato_datetimer   r2   	get_linesget_datavaluesall)r:   rX   datatestdatar=   resultexpectedr?   r?   r@   test_subplots_timeseries_y_axis~   s(   
z:TestDataFramePlotsSubplots.test_subplots_timeseries_y_axisc                 C   sd   t g dg dd}t|}d}tjt|d |jdd W d    d S 1 s+w   Y  d S )Nr]   rh   )rY   rl   zno numeric data to plotmatchrl   rm   )r,   ro   r   pytestraises	TypeErrorr2   )r:   rw   rx   msgr?   r?   r@   %test_subplots_timeseries_y_text_error   s   "z@TestDataFramePlotsSubplots.test_subplots_timeseries_y_text_errorz6not 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
        r]   rc   H)rK   z2017-08-01 02:00re   )cba)r   r   r   F)
categoriesorderedTrf   rd   )rY   periodcategoricaldatetime_mixed_tzrY   r   )xrn   r   r   r   r   N)r,   ro   rp   PeriodCategoricalrr   r   r2   rs   rt   ru   rv   )r:   rw   rx   	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_supportedzlayout, exp_layout)r   r   )r+   r   )r   r+   )r      )r+   r   )r   r+   )r   r   c                 C   sV   t tjddttjd d d}|jd|d}t|d|d |j	|ks)J d S )	Nr   r   r   r   Tr   r"   r   r    
r   r,   r-   r.   r/   r0   r1   r2   r   r3   )r:   r"   
exp_layoutr;   r<   r?   r?   r@   !test_subplots_layout_multi_column   s   z<TestDataFramePlotsSubplots.test_subplots_layout_multi_columnc                 C   s   t tjddttjd d d}d}tjt	|d |j
ddd	 W d    n1 s/w   Y  d
}tjt	|d |j
ddd	 W d    d S 1 sPw   Y  d S )Nr   r   r   r   z1Layout of 1x1 must be larger than required size 3r|   Tr   r   r   z1At least one dimension of layout must be positive)r+   r+   )r   r,   r-   r.   r/   r0   r1   r~   r   
ValueErrorr2   )r:   r;   r   r?   r?   r@   'test_subplots_layout_multi_column_error   s   "zBTestDataFramePlotsSubplots.test_subplots_layout_multi_column_errorz:kwargs, expected_axes_num, expected_layout, expected_shaper   r   r   r"   )r   r   c                 C   s\   t tjddttjd d d}|jdddi|}t|||d |j	|ks,J d S )	Nr   r   r   r   r   r   Tr    r?   r   )r:   kwargsexpected_axes_numexpected_layoutexpected_shaper;   r<   r?   r?   r@   "test_subplots_layout_single_column   s   z=TestDataFramePlotsSubplots.test_subplots_layout_single_columnrO   r^   1/1/2000rL   c                 C   sX   t d  ttjdd|d}|jddd W d    d S 1 s%w   Y  d S )Nr   )r^   r   r   T)r   r   r   )tmassert_produces_warningr   r,   r-   r.   standard_normalr2   )r:   rO   r;   r?   r?   r@   test_subplots_warnings  s   "z1TestDataFramePlotsSubplots.test_subplots_warningsc                 C   s   t jdd\}}ttjddttj	d d d}|j
d|d ddd	}t|dd
d |jdks6J |d j|u s?J |j
d|d ddd	}t|dd
d |jdksXJ |d j|u saJ t|ddd d S )Nr   r   r   r   r   Tr   Fr   r=   r   sharey)r   r   r    r#   r      )r   r   )mplpyplotr   r   r,   r-   r.   r/   r0   r1   r2   r   r3   figure)r:   figr<   r;   returnedr?   r?   r@   test_subplots_multiple_axes  s   z6TestDataFramePlotsSubplots.test_subplots_multiple_axesc                 C   s   t tjddttjd d d}d}tj	dd\}}t
jt|d |jd|d	 W d    d S 1 s9w   Y  d S )
Nr   r   r   r   z@The number of passed axes must be 3, the same as the output plotr   r|   Tr   r=   )r   r,   r-   r.   r/   r0   r1   r   r   r   r~   r   r   r2   )r:   r;   r   _r<   r?   r?   r@   !test_subplots_multiple_axes_error2  s   "z<TestDataFramePlotsSubplots.test_subplots_multiple_axes_error)r   r   c                 C   s   t jdd\}}ttjddttj	d d d}t
t! |jd||ddd}t|d|d	 |jd
ks;J W d    d S 1 sFw   Y  d S )Nr   )r   r   r   r   TF)r   r=   r"   r   r   r   r    )r   )r   r   r   r   r,   r-   r.   r/   r0   r1   r   r   UserWarningr2   r   r3   )r:   r"   r   r   r<   r;   r   r?   r?   r@   !test_subplots_multiple_axes_2_dim?  s   
"z<TestDataFramePlotsSubplots.test_subplots_multiple_axes_2_dimc                 C   sn   t jdd\}}ttjddttj	d d d}|j
d|gddd}t|dd	d
 |jdks5J d S )Nr   r   r   r   r   TFr   r   r    r   )r   r   r   r   r,   r-   r.   r/   r0   r1   r2   r   r3   )r:   r   r<   r;   r?   r?   r@   &test_subplots_multiple_axes_single_colY  s   zATestDataFramePlotsSubplots.test_subplots_multiple_axes_single_colc                 C   sH  t jjddddd\}}t 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 ]
}t| dd qD|d  D ]
}t| dd qU|g ddgf  D ]
}t| dd qk|g ddgf  D ]
}t| dd q|g ddgf  D ]
}t| dd qd S )Nr   T)r   r   g?gffffff?g333333?)leftrighthspacewspacer   )r   	   rG   rH   r   rI   r   r^   )r=   rT   r   r+   Fr'   )r   r   r   r   )r   r   r   subplots_adjustr   r,   r-   r.   r   r   	enumerateravelr2   r   r7   r9   )r:   r   r<   r;   ir=   r?   r?   r@   test_subplots_ts_share_axesf  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 t|d  dd t|d  d
d | D ]
}t| d
d qBd S )N)      ?       @      @      @)r   r   r   r   )r^   r   r   r   )ABCz
2014 10 11z
2014 10 14r   r   r   Tr   r   r   )r=   secondary_yFr'   r   )r   r   r2   r   r7   r   r9   )r:   dr;   r<   r=   r?   r?   r@   'test_subplots_sharex_axes_existing_axes  s   zBTestDataFramePlotsSubplots.test_subplots_sharex_axes_existing_axesc                 C   sX   t tjddtdd}|jdd}|D ]}t|dgd t|jd	ks)J qd S )
Nr   r^   r^   aaaaar5   Tr   r   r$   r   	r   r,   r-   r.   r/   r2   r	   lenlinesr:   r;   r<   r=   r?   r?   r@   test_subplots_dup_columns  s   z4TestDataFramePlotsSubplots.test_subplots_dup_columnsc                 C   sZ   t tjddtdd}|jddd}|D ]}t|dgd t|jd	ks*J qd S )
Nr   r   r   r   Tr   )r   r   r$   r   r   r   r?   r?   r@   %test_subplots_dup_columns_secondary_y  s   z@TestDataFramePlotsSubplots.test_subplots_dup_columns_secondary_yc                 C   sf   t tjddtdd}|jdd}t|dgd d	 t|jd
ks'J t|j	jdks1J d S )Nr   r   r   r   r   )r   z	a (right)r^   r$   r   )
r   r,   r-   r.   r/   r2   r	   r   r   right_ax)r:   r;   r=   r?   r?   r@   0test_subplots_dup_columns_secondary_y_no_subplot  s
   zKTestDataFramePlotsSubplots.test_subplots_dup_columns_secondary_y_no_subplotzWeird rounding problemsF)r   strictc                 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         $@d   r   r^   r   r   r   r   r   T)gridlog)r,   ro   r   r/   ranger2   r   r   assert_numpy_array_equalyaxisget_ticklocs)r:   rz   r;   r=   r?   r?   r@   test_bar_log_no_subplots  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,   ro   r   r   r2   r   r   r   r   r   )r:   rz   r=   r?   r?   r@   test_bar_log_subplots  s   z0TestDataFramePlotsSubplots.test_bar_log_subplotsc                 C   s6   |}|j jdd}t|tsJ t|d g dd d S )NTr   heightweightcategory)expected_keys)r2   box
isinstancer   r   )r:   hist_dfr;   ry   r?   r?   r@   )test_boxplot_subplots_return_type_default  s   

zDTestDataFramePlotsSubplots.test_boxplot_subplots_return_type_defaultrt)dictr<   bothc                 C   s,   |}|j j|dd}t||g ddd d S )NT)return_typer   r   F)r   check_ax_title)r2   r   r   )r:   r   r   r;   r   r?   r?   r@   !test_boxplot_subplots_return_type  s   
z<TestDataFramePlotsSubplots.test_boxplot_subplots_return_typec                 C   s   t tjddtdddtdd}tjddd	d
\}}|j	d	|d}|D ]}t
|jdks2J 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 S )Nr   r   r   r   r   r   ABr   r5   r   T)r   r   r'   r   Fr)   r   r,   r-   r.   r   r   r/   pltr   r2   r   r   r   r9   r7   r:   r;   r   r<   r=   r?   r?   r@   $test_df_subplots_patterns_minorticks  s   
z?TestDataFramePlotsSubplots.test_df_subplots_patterns_minorticksc                 C   s   t tjddtdddtdd}tdd\}}t	
t |jd	|d	d
}W d    n1 s4w   Y  |D ]}t|jdksFJ 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 S )Nr   r   r   r   r   r   r   r   T)r   r=   r   r'   r   Fr)   )r   r,   r-   r.   r   r   r/   r   r   r   r   r   r2   r   r   r   r9   r7   r   r?   r?   r@   2test_df_subplots_patterns_minorticks_1st_ax_hidden  s    
zMTestDataFramePlotsSubplots.test_df_subplots_patterns_minorticks_1st_ax_hiddenc                 C   s   t tjddtdddtdd}tdd\}}|j	d	|d
}|D ]%}t
|jdks0J t| d	d t| d	d t|jd	dd	d q%d S )Nr   r   r   r   r   r   r   r   Tr   r'   r)   r   r   r?   r?   r@   /test_df_subplots_patterns_minorticks_not_shared  s   
zJTestDataFramePlotsSubplots.test_df_subplots_patterns_minorticks_not_sharedc                 C   s   t tjdd}tj|jdd df< tj|jd ddf< tjdd\}}|j	j
|ddd td	d
d}tddd}t|d  | t|d  | d S )Nr   r   r^   r   r   TF)r=   r   r   g      @r         ?      )r   r,   r-   r.   nanilocr   r   r   r2   r   aranger   r   
get_xticks)r:   r;   r   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tjjdr d|d	< tjj	di |\}}t
d 5 |j|d
 d t
jdd}tj| W d    n1 sPw   Y  W d    d S W d    d S 1 shw   Y  d S )Nnowr   )rJ   rL   r   r   r   get_constrained_layoutTconstrained_layoutr   )r=   )return_filelike)r   )r   r   r,   r-   r.   hasattrr   r   Figurer   r   r   r2   ensure_cleansavefig)r:   rO   r;   r   r   r<   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  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   r   r^   zType AzType Br   Tr   r   c                 s   s    | ]	}|  d kV  qdS )r  N)
get_ylabel.0r=   r?   r?   r@   	<genexpr>D      zSTestDataFramePlotsSubplots.test_xlabel_ylabel_dataframe_subplots.<locals>.<genexpr>c                 3   s    | ]	}|   kV  qd S N)
get_xlabelr  )	old_labelr?   r@   r  E  r  )r   ylabelxlabelr   c                 3        | ]}|  t kV  qd S r  )r  strr  	new_labelr?   r@   r  I      c                 3   r   r  )r  r!  r  r"  r?   r@   r  J  r$  )r   r   namer2   rv   )r:   r   
index_namer  r#  r;   r<   r?   )r#  r  r@   %test_xlabel_ylabel_dataframe_subplots0  s   z@TestDataFramePlotsSubplots.test_xlabel_ylabel_dataframe_subplotsr   r   T)r   stacked?)r   r(  widthr   r  )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   r^   r   r   )r   r/   r   _check_bar_alignmentr:   r   r;   r?   r?   r@   test_bar_align_multiple_columnsL  s   $#z:TestDataFramePlotsSubplots.test_bar_align_multiple_columnsc                 C   s,   t tjdd}| j|fi | d S )Nr   r^   r   r,   r-   r.   r   r-  r.  r?   r?   r@   test_bar_align_single_columnr  s   z7TestDataFramePlotsSubplots.test_bar_align_single_columnc                 C   s2   t tjdd}| j|fddd| d S )Nr   r   r)  g?)r*  positionr0  r.  r?   r?   r@   test_bar_barwidth_position     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s6J |jd	  d
ksAJ d S )Nr   r   T)r(  r*  )r   r   r   r   r   )g      g      @r   r   r+   g      @)r   r,   r-   r.   r   r2   r   r6   r   r   r   ro   get_xlimpatchesget_x)r:   r5  r;   r=   ticksr?   r?   r@   test_bar_barwidth_position_int  s   
z9TestDataFramePlotsSubplots.test_bar_barwidth_position_intzkind, kwargsr(  r   c                 C   s2   t tjdd}| j|f|dd| d S )Nr   r   r   )r   r*  r0  )r:   r   r   r;   r?   r?   r@   &test_bar_barwidth_position_int_width_1  r4  zATestDataFramePlotsSubplots.test_bar_barwidth_position_int_width_1centerr   c              	   C   s  |j ||||||dd}t|}|D ]}	|dkr6|	j}
|	 \}}tdd |	jD }tdd |	jD }n$|dkrX|	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*  r2  r   r   c                 s       | ]}|  V  qd S r  )r8  r  pr?   r?   r@   r        zBTestDataFramePlotsSubplots._check_bar_alignment.<locals>.<genexpr>c                 s        | ]}|  |  V  qd S r  )r8  	get_widthr>  r?   r?   r@   r    r$  r   c                 s   r=  r  )get_yr>  r?   r?   r@   r    r@  c                 s   rA  r  )rC  
get_heightr>  r?   r?   r@   r    r$  g      ?r   Fr<  r+  )r2   r   r6   r6  minr7  maxr   get_ylimr   r   assert_almost_equalr8  rB  r   r5   rC  rD  r   r,   r  rv   )r:   r;   r   r(  r   r,  r*  r2  r<   r=   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   )1__name__
__module____qualname__r~   markslowparametrizerA   rD   rF   rP   rW   r{   r   xfailr   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/  r1  r3  r:  r;  r-  r?   r?   r?   r@   r   !   s@   	



2



	





















!









r   )__doc__r0   numpyr,   r~   pandas.compatr   pandas.compat.numpyr   pandasrp   r   r   r   pandas._testing_testingr   pandas.tests.plotting.commonr   r   r	   r
   r   r   pandas.io.formats.printingr   importorskipr   r   r   r?   r?   r?   r@   <module>   s     	

