o
    hUG                     @  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)
get_xticks
get_ytickslendivmodset_xticklabelsset_yticklabels)r   r   r   kwargsticksi	remainder r-   w/var/www/html/construction_image-detection-poc/venv/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?   r7   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)r4   datar@   r)   r-   r-   r.   rE   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nanrO   r-   r-   r.   rR   j   s   ( r8   r9   r   r:   )ndimr   boxplotr?   )clsr   rK   
column_numr@   kwds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   
no_defaultwarningswarnr	   
isinstancer8   rD   )r4   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_colorsrn   rm   )r   rn   r3   r-   r-   r.   _color_attrs   s   zBoxPlot._color_attrsc                 C  
   | j d S Nr   rt   r3   r-   r-   r.   _boxes_c      
zBoxPlot._boxes_cc                 C  ru   rv   rw   r3   r-   r-   r.   _whiskers_c   ry   zBoxPlot._whiskers_cc                 C  ru   )NrM   rw   r3   r-   r-   r.   
_medians_c   ry   zBoxPlot._medians_cc                 C  ru   rv   rw   r3   r-   r-   r.   _caps_c   ry   zBoxPlot._caps_crm   
color_kwdsQdict[str, MatplotlibColor] | MatplotlibColor | Collection[MatplotlibColor] | Nonec                 C     d S Nr-   )r4   rs   r}   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 )Nrc   rd   re   rf   	color_tup)
rl   rm   r8   getrx   rz   r{   r|   maybe_color_bpr]   )r4   r_   rc   rd   re   rf   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dtype)rJ   c                 S  rN   r-   r   )rP   colr-   r-   r.   rR      rS   z&BoxPlot._make_plot.<locals>.<listcomp>r   )r\   r@   rB   )r   r   r   c                 S  rN   r-   r   )rP   leftr-   r-   r.   rR      rS   c                 S  rN   r-   r   )rP   rp   r-   r-   r.   rR      rS   )rF   pdSeriesobject_return_objbyr   rJ   r5   	enumerate
_iter_data_get_axr]   copyT	set_titler   columnslevelsr`   r@   r   r/   rG   values	use_indexranger%   )r4   r   rJ   r+   labelrK   r   r]   r   
ticklabelsretr_   r   r-   r-   r.   
_make_plot   s\   
	






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


zBoxPlot._make_plotc                 C  r   r   r-   r3   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)r4   r   rJ   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vertTrB   r6   )r]   r   r3   r-   r-   r.   rG     s   zBoxPlot.orientationc                   s   | j d u r	t jS | jS r   )r@   superresultr   r3   	__class__r-   r.   r   	  s   
zBoxPlot.result)r!   r1   )r7   )r@   rA   r!   r"   )Nr7   )r   r   rK   rL   r@   rA   )Nrm   )r}   r~   r!   r"   r!   r"   )r   r   r!   r"   )r   r   r!   r"   )r!   r   )r;   r<   r=   propertyr5   _layout_typerC   r   r?   rE   classmethodr`   rq   r   rt   rx   rz   r{   r|   r   r   r   r   r   rG   r   __classcell__r-   r-   r   r.   r0   A   s@    








:
r0   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 )Nboxpropsrc   r      )rm   alphawhiskerpropsrd   medianpropsre   rM   cappropsrf   rr   )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)observedrH   TrI   )naxesrH   rI   r   r   layoutr   r   r   )r   r   )indexr   r   r   zBoxplot grouped by 333333??皙?皙?bottomtopr   rightwspace)groupbyrl   listtuple_get_numeric_datar   
differencer%   r   popr   r   r   zipr   appendr   r   r   suptitler   )plotfrJ   r   r   r   r   r   r   r   r@   r)   groupedr   r   r7   _axesr   r   	ax_valuesr+   r   gp_colkeysr   re_plotfr   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 )
Nrr   )rs   )r   r   rM   krm   rb      rg   rh   )r   rU   taker   r   r
   r8   r   r   itemsrD   fill)r   colorsro   key_to_indexrp   value)r]   r-   r.   r   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  rN   r-   r   )rP   r   r-   r-   r.   rR     rS   z/boxplot.<locals>.plot_group.<locals>.<listcomp>c                 S  s   g | ]}t jt|td qS )r   )rU   asarrayr   r   rO   r-   r-   r.   rR     s    r9   )axis	labelsizer   T)r   r   r   rotationr   r8   rX   )r   r   r   r   rZ   tick_paramsr/   r   r   r0   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@   r7   z7The 'layout' keyword is not supported when 'by' is Nonezfigure.figsizez;boxplot method requires numerical columns, nothing to plot.)r   r   )matplotlib.pyplotpyplotr0   rC   rD   rl   r   to_framer   r   r   
rc_contextgcar   r%   r   r   r   r   )rJ   columnr   r   r   r   r   r   r   r@   r]   pltr   r   r   r   rcr   r-   )r   r   r]   r@   r   r.   rZ   [  sf   



$


rZ   c
                 K  s<   dd l m} t| f|||||||||	d	|
}|  |S )Nr   )	r   r   r   r   r   r   r   r   r@   )r   r   rZ   draw_if_interactive)r4   r   r   r   r   r   r   r   r   r@   r]   r   r-   r-   r.   boxplot_frame  s$   r   rF   rH   rI   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   squeezer   rH   rI   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   rZ   r   r   locr   r   concatjoincomconvert_to_list_like
MultiIndexfrom_productr   r   )r   rF   r   r   r   r   r   r   r   rH   rI   r]   r   r   r7   r   rp   groupdr   framesdf	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)rF   r    r   r   r   r   r   r    r   r   rH   r    rI   r    );
__future__r   typingr   r   r   rj   matplotlib.artistr   numpyrU   pandas._libsr   pandas.util._decoratorsr   pandas.util._exceptionsr	   pandas.core.dtypes.commonr
   pandas.core.dtypes.genericr   pandas.core.dtypes.missingr   pandasr   pandas.core.commoncorecommonr   pandas.io.formats.printingr    pandas.plotting._matplotlib.corer   r   #pandas.plotting._matplotlib.groupbyr   !pandas.plotting._matplotlib.styler   !pandas.plotting._matplotlib.toolsr   r   r   collections.abcr   matplotlib.axesr   matplotlib.figurer   matplotlib.linesr   pandas._typingr   r/   r0   r   r   rZ   r   r  r-   r-   r-   r.   <module>   s    
 
Q? "