o
    թZhUG                     @  s  d dl mZ d dlmZmZm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 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l,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3 d8ddZ4G dd  d e Z5d9d!d"Z6			#	$				d:d;d)d*Z7					 	#			d<d=d/d0Z8					 	#			d<d=d1d2Z9	#			 	#				$	#d>d?d6d7Z:dS )@    )annotations)TYPE_CHECKINGLiteral
NamedTupleN)setp)lib)cache_readonly)find_stack_level)is_dict_like)	ABCSeriesremove_na_arraylike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r)tt|t|\}}|dks%J |||9 }|r6| 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.
    r   N)Z
get_xticksZ
get_ytickslendivmodZset_xticklabelsZset_yticklabels)r   r   r   kwargsZticksi	remainder r(   Z/var/www/html/lang_env/lib/python3.10/site-packages/pandas/plotting/_matplotlib/boxplot.py_set_ticklabels/   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)   _kindB   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)   BPJ   s   
 r:   r2   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)r/   datar;   r%   r(   r(   r)   r@   O   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>f       z!BoxPlot._plot.<locals>.<listcomp>c                 S  s(   g | ]}|j d kr|nttjgqS )r   )sizenparraynanrJ   r(   r(   r)   rM   j   s   ( r3   r4   r   r5   )ndimr   boxplotr:   )clsr   rF   
column_numr;   kwdsZysbpr(   r(   r)   _plot`   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	   
isinstancer3   r?   )r/   colorcolormap
valid_keyskeyr(   r(   r)   _validate_color_argsv   s$   

zBoxPlot._validate_color_argsc                 C  s   t d| jd dS )N   )
num_colorsrg   rf   )r   rg   r.   r(   r(   r)   _color_attrs   s   zBoxPlot._color_attrsc                 C  
   | j d S Nr   rm   r.   r(   r(   r)   _boxes_c      
zBoxPlot._boxes_cc                 C  rn   ro   rp   r.   r(   r(   r)   _whiskers_c   rr   zBoxPlot._whiskers_cc                 C  rn   )NrH   rp   r.   r(   r(   r)   
_medians_c   rr   zBoxPlot._medians_cc                 C  rn   ro   rp   r.   r(   r(   r)   _caps_c   rr   zBoxPlot._caps_crf   
color_kwdsQdict[str, MatplotlibColor] | MatplotlibColor | Collection[MatplotlibColor] | Nonec                 C     d S Nr(   )r/   rl   rv   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]   r^   r_   r`   	color_tup)
re   rf   r3   getrq   rs   rt   ru   maybe_color_bprX   )r/   rY   r]   r^   r_   r`   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)rE   c                 S  rI   r(   r   )rK   colr(   r(   r)   rM      rN   z&BoxPlot._make_plot.<locals>.<listcomp>r   )rW   r;   r=   )r   r   r   c                 S  rI   r(   r   )rK   leftr(   r(   r)   rM      rN   c                 S  rI   r(   r   )rK   ri   r(   r(   r)   rM      rN   )rA   pdSeriesobject_return_objbyr   rE   r0   	enumerateZ
_iter_dataZ_get_axrX   copyT	set_titler   columnslevelsrZ   r;   r}   r*   rB   valuesZ	use_indexranger#   )r/   r~   rE   r&   labelrF   r   rX   r   Z
ticklabelsretrY   r   r(   r(   r)   
_make_plot   s\   
	






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


zBoxPlot._make_plotc                 C  rx   ry   r(   r.   r(   r(   r)   _make_legend   s   zBoxPlot._make_legendc                 C  s4   | j r|t| j  | jr|t| j d S d S ry   )xlabel
set_xlabelr   ylabel
set_ylabel)r/   r   rE   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=   r1   )rX   r|   r.   r(   r(   r)   rB     s   zBoxPlot.orientationc                   s   | j d u r	t jS | jS ry   )r;   superresultr   r.   	__class__r(   r)   r   	  s   
zBoxPlot.result)r!   r,   )r2   )r;   r<   r!   r"   )Nr2   )r   r   rF   rG   r;   r<   )Nrf   )rv   rw   r!   r"   r!   r"   )r~   r   r!   r"   )r   r   r!   r"   )r!   r   )r6   r7   r8   propertyr0   Z_layout_typer>   r   r:   r@   classmethodrZ   rj   r   rm   rq   rs   rt   ru   rz   r}   r   r   r   rB   r   __classcell__r(   r(   r   r)   r+   A   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      )rf   alphaZwhiskerpropsr^   Zmedianpropsr_   rH   Zcappropsr`   rk   )r|   r   )rY   r{   rX   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observedrC   TrD   )naxesrC   rD   r   r   layoutr   r   r   )r   r   )indexr   r   r   zBoxplot grouped by 333333??皙?皙?bottomtopr   rightZwspace)groupbyre   listtuple_get_numeric_datar   
differencer#   r   popr   r|   r   zipr   appendr   r   r   Zsuptitler   )ZplotfrE   r   r   r   r   r   r   r   r;   r%   groupedr   r~   r2   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 )
Nrk   )rl   )r   r   rH   krf   r\      ra   rb   )r   rP   Ztaker   r   r
   r3   r   r   itemsr?   fill)r   colorsrh   Zkey_to_indexri   value)rX   r(   r)   rz   r  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  rI   r(   r   )rK   r   r(   r(   r)   rM     rN   z/boxplot.<locals>.plot_group.<locals>.<listcomp>c                 S  s   g | ]}t jt|td qS )r   )rP   Zasarrayr   r   rJ   r(   r(   r)   rM     s    r4   )axisZ	labelsizer   T)r   r   r   Zrotationr{   r3   rS   )r   r   r   r   rU   Ztick_paramsr*   r|   r}   r+   r:   )r   r   r   rX   r   r   rY   )r   r   r;   r   r(   r)   
plot_group  s&   zboxplot.<locals>.plot_group)r   r   r   r   r   r   r;   r2   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+   r>   r?   re   r   Zto_framer   r   r   Z
rc_contextZgcar   r#   r   r   r   r   )rE   columnr   r   r   r   r   r   r   r;   rX   pltrz   r   r   r   rcr   r(   )r   r   rX   r;   r   r)   rU   [  sf   



$


rU   c
                 K  s<   dd l m} t| f|||||||||	d	|
}|  |S )Nr   )	r   r   r   r   r   r   r   r   r;   )r   r   rU   Zdraw_if_interactive)r/   r   r   r   r   r   r   r   r   r;   rX   r   r(   r(   r)   boxplot_frame  s$   r   rA   rC   rD   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   rC   rD   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   rU   r   r   locr   r   concatjoincomZconvert_to_list_likeZ
MultiIndexZfrom_productr   r   )r   rA   r   r   r   r   r   r   r   rC   rD   rX   r   r~   r2   r   ri   groupdr   frames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)rA   r    r   r   r   r   r   r    r   r   rC   r    rD   r    );
__future__r   typingr   r   r   rc   Zmatplotlib.artistr   numpyrP   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.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   rU   r   r   r(   r(   r(   r)   <module>   s    
 
Q? "