U
    ^{fD                  
   @  sP  d dl mZ d dlmZ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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* G dd deZ+d!dddddZ,d"dddddZ-d#dddddZ.d$dddddddd Z/dS )%    )annotations)TYPE_CHECKING
CollectionLiteral
NamedTupleN)setp)MatplotlibColor)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)Axes)Line2Dc                      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d/dddddZddddZddddZ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 )0BoxPlotzLiteral['box']returnc                 C  s   dS )Nbox selfr   r   b/var/www/html/Darija-Ai-API/env/lib/python3.8/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   BP2   s   
r+   r"   strNone)return_typer   c                 K  s,   || j krtd|| _tj| |f| d S )Nz2return_type must be {None, 'axes', 'dict', 'both'})_valid_return_types
ValueErrorr.   r   __init__)r   datar.   kwargsr   r   r   r1   7   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_adjust?   s    
zBoxPlot._args_adjustN)r.   c                 K  st   |j dkr(dd |D }dd |D }nt|}|j|f|}|dkrN||fS |dkrh| j||d|fS ||fS d S )N   c                 S  s   g | ]}t |qS r   r   .0vr   r   r   
<listcomp>N   s     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>   R   s     r#   r$   r%   r&   )ndimr   boxplotr+   )clsr%   y
column_numr.   kwdsbpr   r   r   _plotI   s    
zBoxPlot._plotc                 C  s   d| j krt| jd k	r$tjdt d | j d| _t| jtrzddddg}| jD ] }||krPt	d| d	| qPn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   r:   )rI   rV   warningswarnr	   poprL   
isinstancer#   r0   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   rU   rc   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 )NrN   rO   rP   rQ   boxprops   rL   alphawhiskerpropsmedianpropscapprops)
rZ   rL   r#   getr[   r\   r]   r^   rI   r   )r   rJ   rN   rO   rP   rQ   r   r   r   maybe_color_bp   s"    zBoxPlot.maybe_color_bpc                 C  s  | j rtjtd| _| jd k	r,t| j| jn| j}t	| j
|dD ]\}\}}| |}| j }| jd k	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)r2   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>      s     c                 S  s   g | ]}t |qS r   r   )r<   rq   r   r   r   r>      s     c                 S  s   g | ]}t |qS r   r   )r<   r`   r   r   r   r>      s     )r5   pdSeriesobject_return_objbyr   r2   r    	enumerateZ
_iter_dataZ_get_axrI   copyT	set_titler   columnsZlevelsrK   r.   rn   _set_ticklabelsvaluesZ	use_indexrangelen)r   r2   ilabelrG   r%   rI   Z
ticklabelsretrJ   labelsr   r   r   
_make_plot   s^    



  





  

zBoxPlot._make_plotr   )r%   r   c                 C  s$   | j dkr|| n
|| d S )Nr4   )r6   set_xticklabelsset_yticklabels)r   r%   r   r   r   r   r}      s    
zBoxPlot._set_ticklabelsc                 C  s   d S rd   r   r   r   r   r   _make_legend   s    zBoxPlot._make_legendc                 C  s0   | j r|t| j  | jr,|t| j d S rd   )xlabel
set_xlabelr   ylabel
set_ylabel)r   r%   r2   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vertTr4   r!   )rI   rm   r   r   r   r   r6      s    zBoxPlot.orientationc                   s   | j d krt jS | jS d S rd   )r.   superresultrv   r   	__class__r   r   r      s    
zBoxPlot.result)r"   )Nr"   )NrL   )r'   r(   r)   propertyr    Z_layout_typer/   r   r+   r1   r9   classmethodrK   rb   re   rn   r   r}   r   r   r6   r   __classcell__r   r   r   r   r   )   s0   
   !  
4r   TFbool)numeric_onlygridc
                 K  sp  | |}|d kr6t|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 kr.|}t|dkrD|d n|}|d|  t|dddddd |S )Nr7   Tr8   )naxesr7   r8   figsizer%   layoutr   r   r   )r   r   F)indexry   rg   r   zBoxplot grouped by 333333??皙?皙?bottomtoprq   rightZwspace)groupbyrZ   listtuple_get_numeric_datar|   
differencer   r   rY   r   rm   rx   zipr{   appendr   rs   rt   Zsuptitler   )Zplotfr2   r|   rw   r   r   r   r%   r   r.   r3   groupedr   figr"   Z_axesr   r   Z	ax_valuesr   rp   Zgp_colkeysr~   Zre_plotfr   Zbyliner   r   r   _grouped_plot_by_column   sF    



	



r   int)rotr   c
              
     s  dd l m} tjkrtdt| tjr8| d} d}fdd}dd fdd	d
dfdd}|  |d krd }nt|t	t
fr|}n|g}|d k	rt|| f||||||d}nd krd|d k	rtd|d kr |d k	rd|ini }|| | }W 5 Q R X |  } t| j}|dkrDtd|d krV| j}n| | } ||| jj|f}|| |S )Nr   z,return_type must be {'axes', 'dict', 'both'}xc                    s   t dd} t| dddg} t| d}  dd }|rt|rddd	d
g}tt|td}|	 D ]2\}}||kr|| || < qft
d| d| qfn
| | | S )NrT   )rU   r   r:   krL   rN   rO   rP   rQ      rR   rS   )r   r@   Ztaker   rY   r
   r#   r   r   itemsr0   fill)r   ra   r_   Zkey_to_indexr`   value)rI   r   r   re   G  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 )Nrf   rN   r   rg   rh   rj   rO   rk   rP   r:   rl   rQ   rT   )rm   r   )rJ   rI   )ra   r   r   rn   d  s    



zboxplot.<locals>.maybe_color_bpr   )r%   c                   s8  | dd | dd  }}|r,|t| |r>|t| dd | D } dd |D }|j|f|} d k	r~|jd d |dd	}|r| n| }t	|t	| krt
t	|t	| \}	}
|
d
kst|
| |	9 } |r|j| d n|j| d |f| dkr|S dkr0tj||dS |S d S )Nr   r   c                 S  s   g | ]}t |qS r   r   )r<   r   r   r   r   r>   x  s     z/boxplot.<locals>.plot_group.<locals>.<listcomp>c                 S  s   g | ]}t jt|td qS )ro   )r@   Zasarrayr   ru   r;   r   r   r   r>   y  s     r$   )axisZ	labelsizer   Tr   )Zrotationr#   rC   )rY   r   r   r   rE   Ztick_paramsrm   Z
get_xticksZ
get_yticksr   divmodAssertionErrorr   r   r   r+   )r   r~   r%   rI   r   r   rJ   Zis_verticalZticksr   	remainder)fontsizern   r.   r   r   r   
plot_groupp  s2    

zboxplot.<locals>.plot_group)r|   rw   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/   r0   rZ   rs   rt   Zto_framer   r   r   Z
rc_contextZgcar   r   r|   r~   rz   r   )r2   columnrw   r%   r   r   r   r   r   r.   rI   pltre   r   r|   r   rcr   r   )ra   r   rI   rn   r.   r   r   rE   0  sd    

#





rE   c
                 K  s<   dd l m} t| f|||||||||	d	|
}|  |S )Nr   )	r   rw   r%   r   r   r   r   r   r.   )r   r   rE   Zdraw_if_interactive)r   r   rw   r%   r   r   r   r   r   r.   rI   r   r   r   r   boxplot_frame  s$    r   )r5   r   r   r7   r8   c              
   K  sF  |dk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 k	r"t|}tj||g}t|j}|jf |||||||d|}|S )NTF)r   Zsqueezer%   r7   r8   r   r   ro   )r%   r   r   r   r   r   r   r   r   r   r   rg   )r   r   )r   r   r   r   r%   r   r   )r   r   r   rs   rt   ru   r   rE   r{   r   locr   r   concatjoincomZconvert_to_list_likeZ
MultiIndexZfrom_productr   r~   )r   r5   r   r   r   r   r%   r   r   r7   r8   rI   r   r   r"   r   r`   groupdr   framesZdfZ	multi_keyr   r   r   boxplot_frame_groupby  s`    
	    




r   )NNTFNNNN)	NNNNr   TNNN)	NNNNr   TNNN)
TNNr   TNNNFT)0
__future__r   typingr   r   r   r   rW   Zmatplotlib.artistr   numpyr@   Zpandas._typingr   Zpandas.util._exceptionsr	   Zpandas.core.dtypes.commonr
   Zpandas.core.dtypes.missingr   Zpandasrs   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   Zmatplotlib.axesr   Zmatplotlib.linesr   r   r   rE   r   r   r   r   r   r   <module>   sz    N        ?                   "          