
    -Ph07                         d dl mZmZ d dlmZ d dlmZ  ej        d          Z ej        d          Z	 ej        d          Z
 ej        d          ZdZd	Zd
 ZddddedddfdZ G d de          ZdS )    )
exceptionsoptional_imports)utils)
graph_objsnumpypandasscipyzscipy.statszprobability densityprobabilityc                 :   t           f}t          r|t          j        fz  }t          r|t          j        j        j        fz  }t          | d         |          st          j	        d          d}||vrt          j	        d          t          st          d          dS )z
    Distplot-specific validations

    :raises: (PlotlyError) If hist_data is not a list of lists
    :raises: (PlotlyError) If curve_type is not valid (i.e. not 'kde' or
        'normal').
    r   zOops, this function was written to handle multiple datasets, if you want to plot just one, make sure your hist_data variable is still a list of lists, i.e. x = [1, 2, 3] -> x = [[1, 2, 3]])kdenormalz/curve_type must be defined as 'kde' or 'normal'z,FigureFactory.create_distplot requires scipyN)listnpndarraypdcoreseriesSeries
isinstancer   PlotlyErrorr	   ImportError)	hist_data
curve_typehist_data_types
curve_optss       _/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/plotly/figure_factory/_distplot.pyvalidate_distplotr      s     gO	 )BJ=(	 4BGN133ilO44 
$+
 
 	
 #J##$@
 
 	
  JHIIIJ J          ?r   NTc
                 @   |g }|g }t          | |           t          j        | |           t          |t          t
          f          r|gt          |           z  }g }
|r>t          | ||||||||	  	                                        }|
	                    |           |rn|dk    r*t          | ||||||||	  	        
                                }n)t          | ||||||||	  	                                        }|
	                    |           |	rt          | ||||||||	  	                                        }|
	                    |           t          j        ddt          d          t          ddgd	d
          t          ddgdd          t          ddgddd
                    }nKt          j        ddt          d          t          ddgd	d
          t          ddgdd                    }t!          |
g           }
t          j        |
|          S )aB  
    Function that creates a distplot similar to seaborn.distplot;
    **this function is deprecated**, use instead :mod:`plotly.express`
    functions, for example

    >>> import plotly.express as px
    >>> tips = px.data.tips()
    >>> fig = px.histogram(tips, x="total_bill", y="tip", color="sex", marginal="rug",
    ...                    hover_data=tips.columns)
    >>> fig.show()


    The distplot can be composed of all or any combination of the following
    3 components: (1) histogram, (2) curve: (a) kernel density estimation
    or (b) normal curve, and (3) rug plot. Additionally, multiple distplots
    (from multiple datasets) can be created in the same plot.

    :param (list[list]) hist_data: Use list of lists to plot multiple data
        sets on the same plot.
    :param (list[str]) group_labels: Names for each data set.
    :param (list[float]|float) bin_size: Size of histogram bins.
        Default = 1.
    :param (str) curve_type: 'kde' or 'normal'. Default = 'kde'
    :param (str) histnorm: 'probability density' or 'probability'
        Default = 'probability density'
    :param (bool) show_hist: Add histogram to distplot? Default = True
    :param (bool) show_curve: Add curve to distplot? Default = True
    :param (bool) show_rug: Add rug to distplot? Default = True
    :param (list[str]) colors: Colors for traces.
    :param (list[list]) rug_text: Hovertext values for rug_plot,
    :return (dict): Representation of a distplot figure.

    Example 1: Simple distplot of 1 data set

    >>> from plotly.figure_factory import create_distplot

    >>> hist_data = [[1.1, 1.1, 2.5, 3.0, 3.5,
    ...               3.5, 4.1, 4.4, 4.5, 4.5,
    ...               5.0, 5.0, 5.2, 5.5, 5.5,
    ...               5.5, 5.5, 5.5, 6.1, 7.0]]
    >>> group_labels = ['distplot example']
    >>> fig = create_distplot(hist_data, group_labels)
    >>> fig.show()


    Example 2: Two data sets and added rug text

    >>> from plotly.figure_factory import create_distplot
    >>> # Add histogram data
    >>> hist1_x = [0.8, 1.2, 0.2, 0.6, 1.6,
    ...            -0.9, -0.07, 1.95, 0.9, -0.2,
    ...            -0.5, 0.3, 0.4, -0.37, 0.6]
    >>> hist2_x = [0.8, 1.5, 1.5, 0.6, 0.59,
    ...            1.0, 0.8, 1.7, 0.5, 0.8,
    ...            -0.3, 1.2, 0.56, 0.3, 2.2]

    >>> # Group data together
    >>> hist_data = [hist1_x, hist2_x]

    >>> group_labels = ['2012', '2013']

    >>> # Add text
    >>> rug_text_1 = ['a1', 'b1', 'c1', 'd1', 'e1',
    ...       'f1', 'g1', 'h1', 'i1', 'j1',
    ...       'k1', 'l1', 'm1', 'n1', 'o1']

    >>> rug_text_2 = ['a2', 'b2', 'c2', 'd2', 'e2',
    ...       'f2', 'g2', 'h2', 'i2', 'j2',
    ...       'k2', 'l2', 'm2', 'n2', 'o2']

    >>> # Group text together
    >>> rug_text_all = [rug_text_1, rug_text_2]

    >>> # Create distplot
    >>> fig = create_distplot(
    ...     hist_data, group_labels, rug_text=rug_text_all, bin_size=.2)

    >>> # Add title
    >>> fig.update_layout(title='Dist Plot') # doctest: +SKIP
    >>> fig.show()


    Example 3: Plot with normal curve and hide rug plot

    >>> from plotly.figure_factory import create_distplot
    >>> import numpy as np

    >>> x1 = np.random.randn(190)
    >>> x2 = np.random.randn(200)+1
    >>> x3 = np.random.randn(200)-1
    >>> x4 = np.random.randn(210)+2

    >>> hist_data = [x1, x2, x3, x4]
    >>> group_labels = ['2012', '2013', '2014', '2015']

    >>> fig = create_distplot(
    ...     hist_data, group_labels, curve_type='normal',
    ...     show_rug=False, bin_size=.4)


    Example 4: Distplot with Pandas

    >>> from plotly.figure_factory import create_distplot
    >>> import numpy as np
    >>> import pandas as pd

    >>> df = pd.DataFrame({'2012': np.random.randn(200),
    ...                    '2013': np.random.randn(200)+1})
    >>> fig = create_distplot([df[c] for c in df.columns], df.columns)
    >>> fig.show()
    Nr   overlayclosestreversed)
traceorderg        r   y2F)domainanchorzerolinegffffff?   free)r&   r'   positionr   g      ?x1)r&   r'   dtickshowticklabels)barmode	hovermodelegendxaxis1yaxis1yaxis2)r/   r0   r1   r2   r3   )datalayout)r   r   validate_equal_lengthr   floatintlen	_Distplot	make_histappendmake_normalmake_kdemake_rugr   LayoutdictsumFigure)r   group_labelsbin_sizer   colorsrug_texthistnorm	show_hist
show_curveshow_rugr5   histcurverugr6   s                  r   create_distplotrP   2   s   v ~i,,,		<888(UCL)) /:I.D 

 

 )++ 	 	D !!
 
 kmm E 
 
 hjj  	E 


 

 (** 	 	C":...Sz$GGGay#FFF4yQuUUU
 
 
 ":...Sz$GGGQxEEE
 
 
 tR==D$v6666r   c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )r;   z?
    Refer to TraceFactory.create_distplot() for docstring
    c
                    || _         || _        || _        || _        || _        |	| _        t          |          | _        |r|| _        nd g| j        z  | _        g | _	        g | _
        |r|| _        n	g d| _        d g| j        z  | _        d g| j        z  | _        | j         D ]V}
| j	                            t          |
          dz             | j
                            t!          |
          dz             Wd S )N)
zrgb(31, 119, 180)zrgb(255, 127, 14)zrgb(44, 160, 44)zrgb(214, 39, 40)zrgb(148, 103, 189)zrgb(140, 86, 75)zrgb(227, 119, 194)zrgb(127, 127, 127)zrgb(188, 189, 34)zrgb(23, 190, 207)r   )r   rI   rE   rF   rJ   rK   r:   trace_numberrH   startendrG   curve_xcurve_yr=   minmax)selfr   rI   rE   rF   r   rG   rH   rJ   rK   traces              r   __init__z_Distplot.__init__  s    # ( "$	NN 	7$DMM!FT%66DM
 	 DKK  DK v 11v 11^ 	. 	.EJc%jj3.///HOOCJJ,----	. 	.r   c                    dg| j         z  }t          | j                   D ]}t          d| j        |         dd| j        | j        |         | j        |         t          | j        |t          | j                  z                     dt          | j        |         | j	        |         | j
        |                   d	          ||<   |S )
z
        Makes the histogram(s) for FigureFactory.create_distplot().

        :rtype (list) hist: list of histogram representations
        N	histogramr,   y1colorF)rT   rU   sizegffffff?)typexxaxisyaxisrI   namelegendgroupmarkerautobinxxbinsopacity)rS   rangerB   r   rI   rE   rG   r:   rT   rU   rF   )rZ   rM   indexs      r   r<   z_Distplot.make_hist?  s     v))4,-- 	 	E .'&u- -e4$+ec$+6F6F.F"GHHH*U+u-  
   DKK" r   c                     dg j         z  }t           j                   D ] fdt          d          D              j        <   t                               j                            j                            j        <    j        t          k    r  j        xx          j	                 z  cc<   t           j                   D ]t          d j                  j                 ddd j                  j                  j        rdnd	t           j        t           j                  z           
          
  
        |<   |S )z
        Makes the kernel density estimation(s) for create_distplot().

        This is called when curve_type = 'kde' in create_distplot().

        :rtype (list) curve: list of kde representations
        Nc                 n    g | ]1}j                  |j                 j                  z
  z  d z  z   2S   rT   rU   .0rd   rn   rZ   s     r   
<listcomp>z&_Distplot.make_kde.<locals>.<listcomp>e  R     # # # 
5!A%4:e;L)L$MPS$SS# # #r   rr   scatterr,   r_   linesFTr`   
rc   rd   yre   rf   moderg   rh   
showlegendri   )rS   rm   rV   scipy_statsgaussian_kder   rW   rI   ALTERNATIVE_HISTNORMrF   rB   rE   rJ   rG   r:   )rZ   rN   rn   s   ` @r   r?   z_Distplot.make_kde[  sy    **4,-- 
	< 
	<E# # # # #s# # #DL #.":":4>%;P"Q"QU## #DL } 444U###t}U';;###4,-- 	 	E,u%,u%&u- -e4$(N<55$+ec$+6F6F.F"GHHH  E%LL r   c                 6    dg j         z  }dg j         z  }dg j         z  }t           j                   D ]ʊt          j                             j                           \  |<   |<    fdt          d          D              j        <   t          j                             j                 |         |                    j        <    j	        t          k    r  j        xx          j                 z  cc<   t           j                   D ]t          d j                  j                 ddd j                  j                  j        rd	nd
t           j        t!           j                  z                     
  
        |<   |S )z
        Makes the normal curve(s) for create_distplot().

        This is called when curve_type = 'normal' in create_distplot().

        :rtype (list) curve: list of normal curve representations
        Nc                 n    g | ]1}j                  |j                 j                  z
  z  d z  z   2S rq   rs   rt   s     r   rv   z)_Distplot.make_normal.<locals>.<listcomp>  rw   r   rr   )locscalerx   r,   r_   ry   FTr`   rz   )rS   rm   r~   normfitr   rV   pdfrW   rI   r   rF   rB   rE   rJ   rG   r:   )rZ   rN   meansdrn   s   `   @r   r>   z_Distplot.make_normal  s    **v))Vd''4,-- 	< 	<E%0%5%9%9$.:O%P%P"DKE# # # # #s# # #DL #."2"6"6U#eBuI #7 # #DL } 444U###t}U';;###4,-- 	 	E,u%,u%&u- -e4$(N<55$+ec$+6F6F.F"GHHH  E%LL r   c                    dg| j         z  }t          | j                   D ]}t          d| j        |         | j        |         gt          | j        |                   z  ddd| j        |         | j        |         | j        s| j        rdnd| j        |         t          | j	        |t          | j	                  z           d	          
          ||<   |S )z{
        Makes the rug plot(s) for create_distplot().

        :rtype (list) rug: list of rug plot representations
        Nrx   r,   r%   markersFTzline-ns-open)ra   symbol)rc   rd   r{   re   rf   r|   rg   rh   r}   textri   )
rS   rm   rB   r   rE   r:   rJ   rK   rH   rG   )rZ   rO   rn   s      r   r@   z_Distplot.make_rug  s     ft((4,-- 	 	E.'%e,-DN54I0J0JJ&u- -e4%)^PtPEED]5)+ec$+.>.>&>?    CJJ 
r   N)	__name__
__module____qualname____doc__r\   r<   r?   r>   r@    r   r   r;   r;   
  sl         .. .. ..`  8" " "H& & &P    r   r;   )plotlyr   r   plotly.figure_factoryr   plotly.graph_objsr   
get_moduler   r   r	   r~   DEFAULT_HISTNORMr   r   rP   objectr;   r   r   r   <module>r      s!   / / / / / / / / ' ' ' ' ' ' ( ( ( ( ( ( ! ))  **##G,,))-88 ) $ J J JJ U7 U7 U7 U7pu u u u u u u u u ur   