o
    mqiG                     @  s  d dl mZ d dlmZmZmZ d dlZd dlZd dl	m
Z
 d dlZd dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlZd dlm  mZ d dlm Z  d dl!m"Z" d dl#m$Z$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+m,Z,m-Z- erd dl.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7 d9ddZ8G d d! d!e$Z9d:d"d#Z:			$	%				d;d<d*d+Z;					 	$			d=d>d0d1Z<					 	$			d=d>d2d3Z=	$			 	$				%	$d?d@d7d8Z>dS )A    )annotations)TYPE_CHECKINGLiteral
NamedTupleN)setp)lib)cache_readonly)find_stack_level)is_dict_like)	ABCSeriesremove_na_arraylike)Versionpprint_thing)LinePlotMPLPlot)create_iter_data_given_by)get_standard_colors)create_subplotsflatten_axesmaybe_adjust_figure)
Collection)Axes)Figure)Line2D)MatplotlibColoraxr   labels	list[str]is_verticalboolreturnNonec                 K  s   |r|   n|  }t|t|kr2tt|t|\}}ttjtdk r.|dks.J |||9 }|r?| j|fi | dS | j|fi | dS )zSet the tick labels of a given axis.

    Due to https://github.com/matplotlib/matplotlib/pull/17266, we need to handle the
    case of repeated ticks (due to `FixedLocator`) and thus we duplicate the number of
    labels.
    z3.10r   N)	Z
get_xticksZ
get_ytickslendivmodr   mpl__version__Zset_xticklabelsZset_yticklabels)r   r   r    kwargsZticksi	remainder r+   j/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/pandas/plotting/_matplotlib/boxplot.py_set_ticklabels1   s   r-   c                      s   e Zd Zed6ddZdZdZG dd deZd7d8ddZ	e
		d9d:ddZdd Zedd Zedd Zedd Zedd Zed d! Z		"d;d<d%d&Zd=d'd(Zd>d+d,Zd=d-d.Zd?d/d0Zed@d2d3Ze fd4d5Z  ZS )ABoxPlotr"   Literal['box']c                 C  s   dS )Nboxr+   selfr+   r+   r,   _kindE   s   zBoxPlot._kind
horizontal)Naxesdictbothc                   @  s   e Zd ZU ded< ded< dS )z
BoxPlot.BPr   r   zdict[str, list[Line2D]]linesN)__name__
__module____qualname____annotations__r+   r+   r+   r,   BPM   s   
 r=   r5   return_typestrr#   c                 K  sT   || j vr	td|| _tj| |fi | | jr(| jdkr#d| _d S d| _d S d S )Nz2return_type must be {None, 'axes', 'dict', 'both'}verticalF)	_valid_return_types
ValueErrorr>   r   __init__subplotsorientationsharexsharey)r2   datar>   r(   r+   r+   r,   rC   R   s   



zBoxPlot.__init__Nr   r   y
np.ndarrayc                 K  st   |j dkrdd |D }dd |D }nt|}|j|fi |}|dkr)||fS |dkr6| j||d|fS ||fS )N   c                 S     g | ]}t |qS r+   r   .0vr+   r+   r,   
<listcomp>i       z!BoxPlot._plot.<locals>.<listcomp>c                 S  s(   g | ]}|j d kr|nttjgqS )r   )sizenparraynanrM   r+   r+   r,   rP   m   s   ( r6   r7   r   r8   )ndimr   boxplotr=   )clsr   rI   
column_numr>   kwdsZysbpr+   r+   r,   _plotc   s   
zBoxPlot._plotc                 C  sb   |t ju rd S |d urtjdt d t|tr/g d}|D ]}||vr.td| d| q|S )NzC'color' and 'colormap' cannot be used simultaneously. Using 'color')
stacklevelboxeswhiskersmedianscaps!color dict contains invalid key ''. The key must be either )r   Z
no_defaultwarningswarnr	   
isinstancer6   rB   )r2   colorcolormap
valid_keyskeyr+   r+   r,   _validate_color_argsy   s$   

zBoxPlot._validate_color_argsc                 C  s   t d| jd dS )N   )
num_colorsrj   ri   )r   rj   r1   r+   r+   r,   _color_attrs   s   zBoxPlot._color_attrsc                 C  
   | j d S Nr   rp   r1   r+   r+   r,   _boxes_c      
zBoxPlot._boxes_cc                 C  rq   rr   rs   r1   r+   r+   r,   _whiskers_c   ru   zBoxPlot._whiskers_cc                 C  rq   )NrK   rs   r1   r+   r+   r,   
_medians_c   ru   zBoxPlot._medians_cc                 C  rq   rr   rs   r1   r+   r+   r,   _caps_c   ru   zBoxPlot._caps_cri   
color_kwdsQdict[str, MatplotlibColor] | MatplotlibColor | Collection[MatplotlibColor] | Nonec                 C     d S Nr+   )r2   ro   ry   r+   r+   r,   _get_colors   s   zBoxPlot._get_colorsc                 C  s   t | jtr'| jd| j}| jd| j}| jd| j}| jd| j}n| jp,| j}| jp2| j}| jp8| j}| jp>| j}||||f}t|fd|i| j	 d S )Nr`   ra   rb   rc   	color_tup)
rh   ri   r6   getrt   rv   rw   rx   maybe_color_bpr[   )r2   r\   r`   ra   rb   rc   r~   r+   r+   r,   r      s   zBoxPlot.maybe_color_bpfigr   c                 C  s  | j r{tjtd| _| jd urt| j| jn| j}t	| j
|dD ]W\}\}}| |}| j }| jd urO|j}|t| | jjj}dd |d D }	nt|g}	| j||f|| jd|\}
}| | |
| j|< t||	| jdkd q!d S | jjj}| d}| j }| j||fd| jd|\}
}| | |
| _d	d | jjD }| jsd
d tt|D }t||| jdkd d S )NZdtype)rH   c                 S  rL   r+   r   )rN   colr+   r+   r,   rP      rQ   z&BoxPlot._make_plot.<locals>.<listcomp>r   )rZ   r>   r@   )r   r   r    c                 S  rL   r+   r   )rN   leftr+   r+   r,   rP      rQ   c                 S  rL   r+   r   )rN   rl   r+   r+   r,   rP      rQ   )rD   pdSeriesobject_return_objbyr   rH   r3   	enumerateZ
_iter_dataZ_get_axr[   copyT	set_titler   columnslevelsr]   r>   r   r-   rE   valuesZ	use_indexranger$   )r2   r   rH   r)   labelrI   r   r[   r   Z
ticklabelsretr\   r   r+   r+   r,   
_make_plot   s\   
	













zBoxPlot._make_plotc                 C  r{   r|   r+   r1   r+   r+   r,   _make_legend   s   zBoxPlot._make_legendc                 C  s4   | j r|t| j  | jr|t| j d S d S r|   )xlabel
set_xlabelr   ylabel
set_ylabel)r2   r   rH   r+   r+   r,   _post_plot_logic   s
   zBoxPlot._post_plot_logic!Literal['horizontal', 'vertical']c                 C  s   | j ddr	dS dS )NvertTr@   r4   )r[   r   r1   r+   r+   r,   rE     s   zBoxPlot.orientationc                   s   | j d u r	t jS | jS r|   )r>   superresultr   r1   	__class__r+   r,   r     s   
zBoxPlot.result)r"   r/   )r5   )r>   r?   r"   r#   )Nr5   )r   r   rI   rJ   r>   r?   )Nri   )ry   rz   r"   r#   r"   r#   )r   r   r"   r#   )r   r   r"   r#   )r"   r   )r9   r:   r;   propertyr3   Z_layout_typerA   r   r=   rC   classmethodr]   rm   r   rp   rt   rv   rw   rx   r}   r   r   r   r   rE   r   __classcell__r+   r+   r   r,   r.   D   s@    








:
r.   c                 K  s   | dst| d |d dd | ds t| d |d dd | ds0t| d	 |d
 dd | dsBt| d |d dd d S d S )NZboxpropsr`   r      )ri   alphaZwhiskerpropsra   Zmedianpropsrb   rK   Zcappropsrc   rn   )r   r   )r\   r~   r[   r+   r+   r,   r     s   



r   TFnumeric_onlygridfigsizetuple[float, float] | Nonec
                 K  sp  |j |dd}|d u rt|ttfs|g}| j|}t|}t||
	dd|
	dd|||d\}}t
|}|
	dd |
	dd }}|
d	drQ|pO|}n|pT|}g }t|D ].\}}|| }|| }t| \}}| |||f||d
|
}|| || || q[tj||dd}|	d u r|}t|dkr|d n|}|d|  t|dddddd |S )NF)ZobservedrF   TrG   )naxesrF   rG   r   r   layoutr   r   r   )r   r   )indexr   r   r   zBoxplot grouped by 333333??皙?皙?bottomtopr   rightZwspace)groupbyrh   listtuple_get_numeric_datar   
differencer$   r   popr   r   r   zipr   appendr   r   r   Zsuptitler   )ZplotfrH   r   r   r   r   r   r   r   r>   r(   groupedr   r   r5   Z_axesr   r   Z	ax_valuesr)   r   Zgp_colkeysr   Zre_plotfr   Zbyliner+   r+   r,   _grouped_plot_by_column!  sF   


	


r   fontsize
int | Nonerotintc
              
     s|  dd l m} tjvrtdt| tr| d} d}fdd}d fdd	}|  |d u r5d }nt|tt	fr?|}n|g}|d urYt
|| f||||||d
}|S d u r_d|d urgtd|d u r|d ursd|ini }|| | }W d    n1 sw   Y  |  } t| j}|dkrtd|d u r| j}n| | } ||| jj|fi }|| |S )Nr   z,return_type must be {'axes', 'dict', 'both'}xc                    s   t dd} t| g d} t| d}  dd }|rPt|rKg d}tt|td}|	 D ]\}}||v r?|| || < q0t
d| d	| | S | | | S )
Nrn   )ro   )r   r   rK   kri   r_      rd   re   )r   rS   Ztaker   r   r
   r6   r   r   itemsrB   fill)r   colorsrk   Zkey_to_indexrl   value)r[   r+   r,   r}   u  s&   

zboxplot.<locals>._get_colorsr   r   c                   s   | dd | dd }}|r|t| |r|t| dd | D } dd |D }|j|fi |}d urA|jdd t|| |dd	d
 t|fd i| dkr]|S dkrht	j
||dS |S )Nr   r   c                 S  rL   r+   r   )rN   r   r+   r+   r,   rP     rQ   z/boxplot.<locals>.plot_group.<locals>.<listcomp>c                 S  s   g | ]}t jt|td qS )r   )rS   Zasarrayr   r   rM   r+   r+   r,   rP     s    r7   )axisZ	labelsizer   T)r   r   r    Zrotationr~   r6   rV   )r   r   r   r   rX   Ztick_paramsr-   r   r   r.   r=   )r   r   r   r[   r   r   r\   )r   r   r>   r   r+   r,   
plot_group  s&   zboxplot.<locals>.plot_group)r   r   r   r   r   r   r>   r5   z7The 'layout' keyword is not supported when 'by' is Nonezfigure.figsizez;boxplot method requires numerical columns, nothing to plot.)r   r   )matplotlib.pyplotpyplotr.   rA   rB   rh   r   Zto_framer   r   r   Z
rc_contextZgcar   r$   r   r   r   r   )rH   columnr   r   r   r   r   r   r   r>   r[   pltr}   r   r   r   rcr   r+   )r   r   r[   r>   r   r,   rX   ^  sf   



$


rX   c
                 K  s<   dd l m} t| f|||||||||	d	|
}|  |S )Nr   )	r   r   r   r   r   r   r   r   r>   )r   r   rX   Zdraw_if_interactive)r2   r   r   r   r   r   r   r   r   r>   r[   r   r+   r+   r,   boxplot_frame  s$   r   rD   rF   rG   c              
   K  sF  |du rQt | }t|d||	|
||d\}}t|}tjtd}t| |D ] \\}}}|jd|||||d|}|t	| ||j
|< q$t|ddddd	d
 |S t|  \}}| jdkretj||dd}nt |dkrw|d |dd  }n|d }|d urt|}tj||g}t|j}|jd|||||||d|}|S )NTF)r   Zsqueezer   rF   rG   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   rX   r   r   locr   r   concatjoincomZconvert_to_list_likeZ
MultiIndexZfrom_productr   r   )r   rD   r   r   r   r   r   r   r   rF   rG   r[   r   r   r5   r   rl   groupdr   framesZdfZ	multi_keyr+   r+   r,   boxplot_frame_groupby   sZ   
	




r   )r   r   r   r   r    r!   r"   r#   r   )NNTFNNNN)r   r!   r   r!   r   r   )	NNNNr   TNNN)r   r   r   r   r   r!   r   r   )
TNNr   TNNNFT)rD   r!   r   r   r   r   r   r!   r   r   rF   r!   rG   r!   )?
__future__r   typingr   r   r   rf   Z
matplotlibr&   Zmatplotlib.artistr   numpyrS   Zpandas._libsr   Zpandas.util._decoratorsr   Zpandas.util._exceptionsr	   Zpandas.core.dtypes.commonr
   Zpandas.core.dtypes.genericr   Zpandas.core.dtypes.missingr   Zpandasr   Zpandas.core.commoncorecommonr   Zpandas.util.versionr   Zpandas.io.formats.printingr   Z pandas.plotting._matplotlib.corer   r   Z#pandas.plotting._matplotlib.groupbyr   Z!pandas.plotting._matplotlib.styler   Z!pandas.plotting._matplotlib.toolsr   r   r   collections.abcr   Zmatplotlib.axesr   Zmatplotlib.figurer   Zmatplotlib.linesr   Zpandas._typingr   r-   r.   r   r   rX   r   r   r+   r+   r+   r,   <module>   s    
 
Q? "