a
    dcE                  
   @  sf  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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l*m+Z+ G dd deZ,d$ddddddZ-d%dddddddZ.d&ddddddd Z/d'dddddddd!d"d#Z0dS )(    )annotations)TYPE_CHECKINGLiteral
NamedTupleN)setp)find_stack_level)is_dict_likeremove_na_arraylikepprint_thing)LinePlotMPLPlot)create_iter_data_given_by)get_standard_colors)create_subplotsflatten_axesmaybe_adjust_figure)
Collection)Axes)Line2D)MatplotlibColorc                      s   e Zd ZeddddZdZdZG dd deZd.d
ddddZ	ddddZ
ed/d
dddZdd Zd0dddddZddddZddddZd d!dd"d#d$Zddd%d&Zddd'd(Zed)dd*d+Ze fd,d-Z  ZS )1BoxPlotzLiteral['box']returnc                 C  s   dS )NZbox selfr   r   l/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/pandas/plotting/_matplotlib/boxplot.py_kind,   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   axzdict[str, list[Line2D]]linesN)__name__
__module____qualname____annotations__r   r   r   r   BP4   s   
r*   r!   strNone)return_typer   c                 K  s0   || j vrtd|| _tj| |fi | d S )Nz2return_type must be {None, 'axes', 'dict', 'both'})_valid_return_types
ValueErrorr-   r   __init__)r   datar-   kwargsr   r   r   r0   9   s    
zBoxPlot.__init__c                 C  s"   | j r| jdkrd| _nd| _d S )NverticalF)subplotsorientationsharexshareyr   r   r   r   _args_adjustA   s    
zBoxPlot._args_adjustN)r-   c                 K  sx   |j dkr(dd |D }dd |D }nt|}|j|fi |}|dkrR||fS |dkrl| j||d|fS ||fS d S )N   c                 S  s   g | ]}t |qS r   r	   .0vr   r   r   
<listcomp>P       z!BoxPlot._plot.<locals>.<listcomp>c                 S  s(   g | ] }|j d kr|nttjgqS )r   )sizenparraynanr:   r   r   r   r=   T   r>   r"   r#   r$   r%   )ndimr
   boxplotr*   )clsr$   y
column_numr-   kwdsbpr   r   r   _plotK   s    
zBoxPlot._plotc                 C  s   d| j v rp| jd ur$tjdt d | j d| _t| jtrvg d}| jD ] }||vrLt	d| d| qLnd | _t
d| jd d}|d	 | _|d	 | _|d
 | _|d	 | _d S )NcolorzC'color' and 'colormap' cannot be used simultaneously. Using 'color')
stacklevelboxeswhiskersmedianscaps!color dict contains invalid key ''. The key must be either    )
num_colorscolormaprL   r   r9   )rI   rW   warningswarnr   poprL   
isinstancer"   r/   r   _boxes_c_whiskers_c
_medians_c_caps_c)r   
valid_keyskeycolorsr   r   r   _validate_color_args`   s,    





zBoxPlot._validate_color_argsrL   zQdict[str, MatplotlibColor] | MatplotlibColor | Collection[MatplotlibColor] | None)
color_kwdsr   c                 C  s   d S Nr   )r   rV   rd   r   r   r   _get_colors   s    zBoxPlot._get_colorsc                 C  s   t | jtrN| jd| j}| jd| j}| jd| j}| jd| j}n0| jpX| j}| jpd| j}| jpp| j}| jp|| j}| jdst	|d |dd | jdst	|d |dd | jd	st	|d |dd | jd
st	|d |dd d S )NrO   rP   rQ   rR   boxprops   rL   alphawhiskerpropsmedianpropscapprops)
r[   rL   r"   getr\   r]   r^   r_   rI   r   )r   rJ   rO   rP   rQ   rR   r   r   r   maybe_color_bp   s"    zBoxPlot.maybe_color_bpc                 C  s  | j rtjtd| _| jd ur,t| j| jn| j}t	| j
|dD ]\}\}}| |}| j }| jd ur|j}|t| dd | jjjd D }n
t|g}| j||f|| jd|\}}	| |	 || j|< | || qBn| jjj}| d}| j }| j||fd| jd|\}}	| |	 || _dd | 
 D }
dd |
D }
| jstd	d tt|
D }
| ||
 d S )
NZdtype)r1   c                 S  s   g | ]}t |qS r   r   )r;   colr   r   r   r=      s   z&BoxPlot._make_plot.<locals>.<listcomp>r   )rH   r-   c                 S  s   g | ]\}}|qS r   r   )r;   left_r   r   r   r=      r>   c                 S  s   g | ]}t |qS r   r   )r;   rr   r   r   r   r=      r>   c                 S  s   g | ]}t |qS r   r   )r;   ra   r   r   r   r=      r>   )r4   pdSeriesobject_return_objbyr   r1   r   	enumerateZ
_iter_dataZ_get_axrI   copyT	set_titler   columnslevelsrK   r-   ro   _set_ticklabelsvaluesZ	use_indexrangelen)r   r1   ilabelrG   r$   rI   Z
ticklabelsretrJ   labelsr   r   r   
_make_plot   sV    











zBoxPlot._make_plotr   z	list[str])r$   r   r   c                 C  s$   | j dkr|| n
|| d S )Nr3   )r5   set_xticklabelsset_yticklabels)r   r$   r   r   r   r   r      s    
zBoxPlot._set_ticklabelsc                 C  s   d S re   r   r   r   r   r   _make_legend   s    zBoxPlot._make_legendc                 C  s0   | j r|t| j  | jr,|t| j d S re   )xlabel
set_xlabelr   ylabel
set_ylabel)r   r$   r1   r   r   r   _post_plot_logic   s    zBoxPlot._post_plot_logicz!Literal['horizontal', 'vertical']c                 C  s   | j ddrdS dS d S )NvertTr3   r    )rI   rn   r   r   r   r   r5      s    zBoxPlot.orientationc                   s   | j d u rt jS | jS d S re   )r-   superresultrw   r   	__class__r   r   r      s    
zBoxPlot.result)r!   )Nr!   )NrL   )r&   r'   r(   propertyr   Z_layout_typer.   r   r*   r0   r8   classmethodrK   rc   rf   ro   r   r   r   r   r5   r   __classcell__r   r   r   r   r   +   s.   
 !  
4r   TFboolztuple[float, float] | None)numeric_onlygridfigsizec
                 K  st  |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r|p|}n|p|}g }t|D ]\\}}|| }|| }t| \}}| |||f||d
|
}|| || || qtj||dd}|	d u r2|}t|dkrH|d n|}|d|  t|dddddd |S )NF)Zobservedr6   Tr7   )naxesr6   r7   r   r$   layoutr   r   r   )r   r   )indexrz   rh   r   zBoxplot grouped by 333333??皙?皙?Zbottomtoprr   rightZwspace)groupbyr[   listtuple_get_numeric_datar}   
differencer   r   rZ   r   rn   ry   zipr|   appendr   rt   ru   Zsuptitler   )Zplotfr1   r}   rx   r   r   r   r$   r   r-   r2   groupedr   figr!   Z_axesr   r   Z	ax_valuesr   rq   Zgp_colkeysr   Zre_plotfr   Zbyliner   r   r   _grouped_plot_by_column   sF    


	



r   z
int | Noneint)fontsizerotr   r   c
              
     s  dd l m} tjvrtdt| tjr8| d} d}fdd}dd fdd	d
dfdd}|  |d u rd }nt|t	t
fr|}n|g}|d urt|| f||||||d}nΈd u rd|d urtd|d u r6|d urd|ini }|| | }W d    n1 s,0    Y  |  } t| j}|dkrZtd|d u rl| 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 }|rt|rg d}tt|td}|	 D ]2\}}||v r~|| || < q`t
d| d	| q`n
| | | S )
NrU   )rV   )r   r   r9   krL   rN      rS   rT   )r   r@   Ztaker   rZ   r   r"   r   r   itemsr/   fill)r   rb   r`   Zkey_to_indexra   value)rI   r   r   rf   I  s$    

zboxplot.<locals>._get_colorsr,   r   c                   s   | ds t| d  d dd | ds@t| d  d dd | ds`t| d	  d
 dd | dst| d  d dd d S )Nrg   rO   r   rh   ri   rk   rP   rl   rQ   r9   rm   rR   rU   )rn   r   )rJ   rI   )rb   r   r   ro   f  s    



zboxplot.<locals>.maybe_color_bpr   )r$   c                   s@  | dd | dd  }}|r,|t| |r>|t| dd | D } dd |D }|j|fi |} d ur|jd d |dd	}|r| n| }t	|t	| krt
t	|t	| \}	}
|
d
ksJ |
| |	9 } |r|j| d n|j| d |fi | dkr |S dkr8tj||dS |S d S )Nr   r   c                 S  s   g | ]}t |qS r   r   )r;   r   r   r   r   r=   z  r>   z/boxplot.<locals>.plot_group.<locals>.<listcomp>c                 S  s   g | ]}t jt|td qS )rp   )r@   Zasarrayr
   rv   r:   r   r   r   r=   {  r>   r#   )axisZ	labelsizer   Tr   )Zrotationr"   rC   )rZ   r   r   r   rE   Ztick_paramsrn   Z
get_xticksZ
get_yticksr   divmodr   r   r   r*   )r   r   r$   rI   r   r   rJ   Zis_verticalZticksr   	remainder)r   ro   r-   r   r   r   
plot_groupr  s2    

zboxplot.<locals>.plot_group)r}   rx   r   r   r$   r   r-   r!   z7The 'layout' keyword is not supported when 'by' is Nonezfigure.figsizez;boxplot method requires numerical columns, nothing to plot.)matplotlib.pyplotpyplotr   r.   r/   r[   rt   ru   Zto_framer   r   r   Z
rc_contextZgcar   r   r}   r   r{   r   )r1   columnrx   r$   r   r   r   r   r   r-   rI   pltrf   r   r}   r   rcr   r   )rb   r   rI   ro   r-   r   r   rE   2  sd    

#

(



rE   c
                 K  s<   dd l m} t| f|||||||||	d	|
}|  |S )Nr   )	r   rx   r$   r   r   r   r   r   r-   )r   r   rE   Zdraw_if_interactive)r   r   rx   r$   r   r   r   r   r   r-   rI   r   r   r   r   boxplot_frame  s$    r   )r4   r   r   r   r   r6   r7   c              
   K  sF  |du rt | }t|d||	|
||d\}}t|}tjtd}t| |D ]@\\}}}|jf |||||d|}|t	| ||j
|< qHt|ddddd	d
 nt|  \}}| jdkrtj||dd}n,t |dkr|d |dd  }n|d }|d ur"t|}tj||g}t|j}|jf |||||||d|}|S )NTF)r   Zsqueezer$   r6   r7   r   r   rp   )r$   r   r   r   r   r   r   r   r   r   r   rh   )r   r   )r   r   r   r   r$   r   r   )r   r   r   rt   ru   rv   r   rE   r|   r   locr   r   concatjoincomZconvert_to_list_likeZ
MultiIndexZfrom_productr   r   )r   r4   r   r   r   r   r$   r   r   r6   r7   rI   r   r   r!   r   ra   groupdr   framesZdfZ	multi_keyr   r   r   boxplot_frame_groupby  sX    
	





r   )NNTFNNNN)	NNNNr   TNNN)	NNNNr   TNNN)
TNNr   TNNNFT)1
__future__r   typingr   r   r   rX   Zmatplotlib.artistr   numpyr@   Zpandas.util._exceptionsr   Zpandas.core.dtypes.commonr   Zpandas.core.dtypes.missingr
   Zpandasrt   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.linesr   Zpandas._typingr   r   r   rE   r   r   r   r   r   r   <module>   s|    N        ?                   "          