
    .iA                    ,   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
mZ d dlmZmZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZmZ d d
lmZ d dlmZmZmZm Z  er&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,m-Z-  G d de      Z. G d de.      Z/	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZ0	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ1	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ2	 	 	 	 	 	 	 	 	 	 	 	 	 	 d 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d!dZ3y)"    )annotations)TYPE_CHECKINGAnyLiteralfinalN)
is_integeris_list_like)ABCDataFrameABCIndex)isnaremove_na_arraylike)pprint_thing)LinePlotMPLPlot)create_iter_data_given_byreformat_hist_y_given_by)unpack_single_str_list)create_subplotsflatten_axesmaybe_adjust_figureset_ticks_props)Axes)BarContainer)Figure)Polygon)PlottingOrientation)	DataFrameSeriesc                      e Zd Zedd       Z	 	 dddd	 	 	 	 	 ddZddZddZe	 	 	 	 d	 	 	 	 	 	 	 	 	 dd       Z	ddZ
dd	Zeedd
              ZddZedd       Zy)HistPlotc                     y)Nhist selfs    ^/var/www/app/trading-bot/venv/lib/python3.12/site-packages/pandas/plotting/_matplotlib/hist.py_kindzHistPlot._kind9   s        N)rangeweightsc                   t        |      rt        j                  |      }|| _        || _        || _        |j                  d      | _        |j                  d      | _        t        j                  | |fi | | j                  |      | _        y )Nxlabelylabel)r	   nparraybottom
_bin_ranger*   getr,   r-   r   __init___adjust_binsbins)r%   datar5   r0   r)   r*   kwargss          r&   r3   zHistPlot.__init__=   sv     XXf%Fjj*jj*t.v.%%d+	r(   c                >   t        |      r| j                  ct        | j                        }| j                  j	                  |      | j
                     }|D cg c]  \  }}| j                  ||       }}}|S | j                  | j                  |      }|S c c}}w N)r   byr   r6   groupbycolumns_calculate_bins)r%   r5   by_modifiedgroupedkeygroups         r&   r4   zHistPlot._adjust_binsU   s    dww"4TWW=))++K8FLSTjc5,,UD9TT  ++DIIt< Us   Bc                    |j                         j                         }|j                  }|j                  dk(  r|j	                  d      }|t        |          }t        j                  ||| j                        S )zCalculate bins given data   )r5   r)   )	infer_objects_get_numeric_datavaluesndimreshaper   r.   histogram_bin_edgesr1   )r%   r6   r5   	nd_valuesrG   s        r&   r=   zHistPlot._calculate_bins_   sg    &&(::<	!!>>Q^^B'Ff&%%f4tOOr(   c                  |dk(  r| j                  ||t        |      dz
         t        j                  t        |      dz
        }	|| j	                  |||	|d         z   } |j
                  |f||d|\  }
}}| j                  |||
       |S )Nr      label)r5   r0   )_initialize_stackerlenr.   zeros_get_stacked_valuesr"   _update_stacker)clsaxystyler0   
column_numstacking_idr5   kwdsbasenpatchess               r&   _plotzHistPlot._plotj   s     ?##BSY]CxxD	A&#11"k4gWW"2771G4G$G4BQ/r(   c                   | j                         }| j                         }| j                   t        | j                  | j
                        n| j                  }t        | j                  |            D ]v  \  }\  }}| j                  |      }| j                  j                         }	| j                  | j                  |	d<   t        |      }| j                  ||      }||	d<   | j                  ||	||      \  }
}	|
|
|	d<   | j                  |	|       | j                  +|	d   |   |	d<   | j                   |	d<   |	j#                  d       | j$                  )t'        |       j)                  | j$                  ||      |	d<   t+        || j                        } | j,                  ||f||d|	}| j                  |j/                  t        |             | j1                  |d	   |       y y )
N)r6   color)indexrN   rW   r5   r*   )rX   rY   r   )_get_colors_get_stacking_idr:   r   r6   r'   	enumerate
_iter_data_get_axrZ   copyr`   r   _mark_right_label_apply_style_colors_make_plot_keywordsr<   popr*   type_get_column_weightsr   r^   	set_title_append_legend_handles_labels)r%   figcolorsrY   r6   irN   rV   rU   rZ   rW   artistss               r&   
_make_plotzHistPlot._make_plot   s   !!#++-
 ww" &dii< 	
 'tD'AB $	BMAzqaB99>>#Dzz% $

W 'E**5*:E!DM2264EJKE4  %W$$T1- ww"#F|AV $W!||'"&t*"@"@qRS"TY(DGG4A djjQV1+VQUVG ww"\%01 ..wqz5AI$	Br(   c                @    | j                   |d<   | j                  |d<   y)z/merge BoxPlot/KdePlot properties to passed kwdsr0   r5   N)r0   r5   r%   rZ   rV   s      r&   rj   zHistPlot._make_plot_keywords   s     XyyVr(   c                    | Lt        j                  |       dk7  r%t        j                  |       d   dk7  r
	 | d d |f   } | t        |          } | S # t        $ r}t	        d      |d }~ww xY w)NrM   rD   z?weights must have the same shape as data, or be a single column)r.   rH   shape
IndexError
ValueErrorr   )r*   rr   rV   errs       r&   rm   zHistPlot._get_column_weights   s     www1$'):2)>!)C%admG tAwh'G " $0 s   	A 	A+A&&A+c                4   | j                   dk(  rE|j                  | j                  dn| j                         |j                  | j                         y |j                  | j                         |j                  | j                  dn| j                         y )N
horizontal	Frequency)orientation
set_xlabelr,   
set_ylabelr-   r%   rU   r6   s      r&   _post_plot_logiczHistPlot._post_plot_logic   sp    |+ MM#{{2 MM$++&MM$++&MM#{{2r(   c                D    | j                   j                  dd       dk(  ryy)Nr   r}   vertical)rZ   r2   r$   s    r&   r   zHistPlot.orientation   s    99==-=r(   )returnzLiteral['hist', 'kde'])
   r   )r5   #int | np.ndarray | list[np.ndarray]r0   int | np.ndarrayr   None)r5   r   )r6   Series | DataFramer   
np.ndarray)Nr   r   N)
rU   r   rV   r   r0   r   rX   intr   z5BarContainer | Polygon | list[BarContainer | Polygon])rp   r   r   r   rZ   zdict[str, Any]rV   r   r   r   )rr   r   rU   r   r   r   )r   r   )__name__
__module____qualname__propertyr'   r3   r4   r=   classmethodr^   rt   rj   r   staticmethodrm   r   r   r#   r(   r&   r    r    8   s      57#$	, , 2, !	, 
,0P 
 #$ 
 !  
? ..B`!      r(   r    c                      e Zd Zed
d       Zedd       Z	 ddd	 ddZedd       Ze		 	 	 	 	 	 d	 	 	 	 	 dd       Z
ddZdd	Zy)KdePlotc                     y)Nkder#   r$   s    r&   r'   zKdePlot._kind   s    r(   c                     y)Nr   r#   r$   s    r&   r   zKdePlot.orientation   s    r(   N)r*   c               \    t        j                  | |fi | || _        || _        || _        y r9   )r   r3   	bw_methodindr*   )r%   r6   r   r   r*   r7   s         r&   r3   zKdePlot.__init__   s.     	t.v."r(   c                   |vt        j                  |       t        j                  |       z
  }t        j                  t        j                  |       d|z  z
  t        j                  |       d|z  z   d      }|S t	        |      rtt        j                  |       t        j                  |       z
  }t        j                  t        j                  |       d|z  z
  t        j                  |       d|z  z   |      }|S )N      ?i  )r.   nanmaxnanminlinspacer   )rV   r   sample_ranges      r&   _get_indzKdePlot._get_ind   s    ;99Q<"))A,6L++		!s\11		!s\11C 
 _99Q<"))A,6L++		!s\11		!s\11C
 
r(   c	                    ddl m}
 t        |      } |
|||      }|J |j                  |      }t	        j
                  |||fd|i|	}|S )Nr   )gaussian_kde)r   r*   rW   )scipy.statsr   r   evaluater   r^   )rT   rU   rV   rW   r   r*   r   rX   rY   rZ   r   gkdeliness                r&   r^   zKdePlot._plot  sZ     	-"AGD MM#b#q>>>r(   c                t    | j                   |d<   t        |       j                  || j                        |d<   y )Nr   )r   r   )r   rl   r   r   rv   s      r&   rj   zKdePlot._make_plot_keywords  s1     NN[4j))!):Ur(   c                &    |j                  d       y )NDensity)r   r   s      r&   r   zKdePlot._post_plot_logic"  s    
i r(   )r   zLiteral['kde'])r   zLiteral['vertical'])NNr   r   )rV   r   )NNNNNN)rU   r   rV   r   rY   
int | Noner   r   )r   r   r   r   r'   r   r3   r   r   r   r^   rj   r   r#   r(   r&   r   r      s        )-9=	  $  "&    .;!r(   r   c                h   |dk(  rt        d      |j                  |      }|||   }t        |      }t        |||||
|      \  }}t	        t        |      |d      D ]N  \  }
\  }}|r t        |t              r|j                         } | ||
fi | |
j                  t        |             P ||fS )NdefaultzNfigsize='default' is no longer supported. Specify figure size by tuple instead)naxesfigsizesharexshareyrU   layoutFstrict)rz   r;   rP   r   zipr   
isinstancer
   rF   rn   r   )plotfr6   columnr:   numeric_onlyr   r   r   r   rotrU   r7   r?   r   rp   axesr@   rA   s                     r&   _grouped_plotr   &  s      )3
 	

 ll2G&/LEWVFrRXIC  T 2GEJ (LS%Jul;++-EeR"6"
\#&'	( 9r(   c                   r<dvsJ | j                   dk(  r| j                  d<   n|| j                  d<   n|d<   dfd}||	}t        || ||||||||	
      \  }}t	        |||||       t        |ddddd	d
       |S )a  
    Grouped histogram

    Parameters
    ----------
    data : Series/DataFrame
    column : object, optional
    by : object, optional
    ax : axes, optional
    bins : int, default 50
    figsize : tuple, optional
    layout : optional
    sharex : bool, default False
    sharey : bool, default False
    rot : float, default 90
    grid : bool, default True
    legend: : bool, default False
    kwargs : dict, keyword arguments passed to matplotlib.Axes.hist

    Returns
    -------
    collection of Matplotlib Axes
    rN   rM   c                     |j                   | j                         j                  fdi r|j                          y y )Nr5   )r"   dropnarG   legend)rA   rU   r5   r7   r   s     r&   
plot_groupz!_grouped_hist.<locals>.plot_group  s8    %%;D;F;IIK r(   )r   r:   r   r   rU   r   r   r   
xlabelsizexrot
ylabelsizeyrotg333333?g?g?r   333333?)r0   topleftrighthspacewspacer   )rH   namer<   r   r   r   )r6   r   r:   rU   r5   r   r   r   r   r   gridr   r   r   r   r   r7   r   rp   r   s       `          ``   r&   _grouped_histr   O  s    T f$$$99>"iiF7O^"llF7O$F7O
 |IC $:D Dc3s3 Kr(   c                   dd l m} |
rd|v rt        d      |S|j                  dd       t        d      |j	                  d|j                         r|j                         n|j                  |            }|7t        |      t        |j                               k7  r |j                  |dd	i ||j                         }n|j                         |k7  rt        d
      | j                         j                  }|
r| j                   |d<    |j"                  |fd|	i| |
r|j%                          |j'                  |       t)        j*                  |g      }t-        |||||       n&d|v rt        d      t/        | f|||||	|||||
d
|}t1        |d      r"|j2                  dk(  rt5        |      dk(  r|d   S |S )Nr   rN    Cannot use both legend and labelr   z7The 'layout' keyword is not supported when 'by' is Nonefigure)r   forwardTz&passed axis not bound to passed figurer5   r   z`Cannot pass 'figure' when using the 'by' argument, since a new 'Figure' instance will be created)
r:   rU   r   r   r5   r   r   r   r   r   rH   rM   )matplotlib.pyplotpyplotrz   r2   rk   get_fignumsgcfr   tupleget_size_inchesset_size_inchesgca
get_figureAssertionErrorr   rG   r   r"   r   r   r.   r/   r   r   hasattrrH   rP   )r%   r:   rU   r   r   r   r   r   r   r5   r   rZ   pltrp   rG   r   s                   r&   hist_seriesr     s    $'T/;<<	z88Hd#/VWWhh3??#4cggi#**W*:U
 5>U3;N;N;P5Q#QC7$7:B]]_# !IJJ%% IIDM*T*T*IIK
xx~!!	
 tO  
!!
 
 tV99>c$i1n7NKr(   c                   |rd|v rt        d      |t        | f||||||	|
|||||||d|}|S |-t        |t        t        j
                  t        f      s|g}| |   } | j                  t        j                  ddfd      } t        | j                        }|dk(  rt        d	      t        ||d
|	|
||      \  }}d|v}t        t        |      | j                  d
      D ]s  \  }}|r|r||d<    |j                  | |   j                         j                   fd|i| |j#                  |       |j%                  |       |sd|j'                          u t)        |||||       t+        |dd       |S )NrN   r   )r   r:   rU   r   r   r   r   r   r5   r   r   r   r   r   
datetime64
datetimetz	timedelta)includeexcluder   zDhist method requires numerical or datetime columns, nothing to plot.F)r   rU   squeezer   r   r   r   r   r5   r   r   )r   r   )rz   r   r   listr.   ndarrayr   select_dtypesnumberrP   r<   r   r   r   r"   r   rG   rn   r   r   r   r   )r6   r   r:   r   r   r   r   r   rU   r   r   r   r   r5   r   rZ   r   r   rp   can_set_labelcols                        r&   
hist_framer     s   $ 'T/;<<	~
!!
  !
$ &4X">?XFF|L,7  D EzR
 	
  IC 4'M|D)4<<F CmDMS	  "))===
S
IIK $:D C4Kr(   )	NNTNTTNr   N)r6   r   r   boolr   tuple[float, float] | Noner   r   r   r   r   float)NNN2   NNFFZ   TNNNNF)r6   r   r5   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )
NNTNNNNNr   F)r%   r   r   r   r   r   r   r   r   r   r5   r   r   r   )NNTNNNNNFFNNr   F)r6   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   r   r   r   )4
__future__r   typingr   r   r   r   numpyr.   pandas.core.dtypes.commonr   r	   pandas.core.dtypes.genericr
   r   pandas.core.dtypes.missingr   r   pandas.io.formats.printingr    pandas.plotting._matplotlib.corer   r   #pandas.plotting._matplotlib.groupbyr   r    pandas.plotting._matplotlib.miscr   !pandas.plotting._matplotlib.toolsr   r   r   r   matplotlib.axesr   matplotlib.containerr   matplotlib.figurer   matplotlib.patchesr   pandas._typingr   pandasr   r   r    r   r   r   r   r   r#   r(   r&   <module>r	     s   "  
 4 D  $1(*2ex ePC!h C!R *.&
&
 & (& & & 
&V *.!	!	!O
O
 O (O O O 
O O O O  !Oh !	!	*.I
I 	I
 I I (I I I\ !	!	*.Q
Q 	Q
 Q Q Q Q (Q Q Qr(   