§
    ²[6g07  ã                   óð   — 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   z¼Oops, 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/surfInsights/venv3-11/lib/python3.11/site-packages/plotly/figure_factory/_distplot.pyÚvalidate_distplotr      s½   € õ �g€OÝ	ð )Ø�BœJ˜=Ñ(ˆÝ	ð 4Ø�BœGœNÔ1Ð3Ñ3ˆå�i ”l OÑ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          | ||||||||¦	  «	                             ¦   «         }|
 	                    |¦  «         |	ržt          | ||||||||¦	  «	                             ¦   «         }|
 	                    |¦  «         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å�(�U¥C˜LÑ)Ô)ð /Ø�:¥ I¡¤Ñ.ˆà€DØð åØØØØØØØØØñ

ô 

÷ Š)‰+Œ+ð 	ð 	�Š�DÑÔÐàð à˜Ò!Ð!ÝØØØØØØØØØñ
ô 
÷ Šk‰mŒmð ˆEõ ØØØØØØØØØñ
ô 
÷ Šh‰jŒjð ð 	�Š�EÑÔÐàð 
åØØØØØØØØØñ

ô 

÷ Š(‰*Œ*ð 	ð 	�Š�CÑÔÐÝÔ"ØØÝ :Ð.Ñ.Ô.Ý  S˜z°$ÀÐGÑGÔGÝ  a˜y°À#ÐFÑFÔFÝ  4˜y°¸QÈuÐUÑUÔUð
ñ 
ô 
ˆˆõ Ô"ØØÝ :Ð.Ñ.Ô.Ý  S˜z°$ÀÐGÑGÔGÝ  Q˜x°ÀÐEÑEÔEð
ñ 
ô 
ˆõ ˆt�R‰=Œ=€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  € ð #ˆŒØ ˆŒØ(ˆÔØ ˆŒØ"ˆŒØ$ˆŒÝ 	™NœNˆÔØð 	7Ø$ˆDŒMˆMà!˜F TÔ%6Ñ6ˆDŒMàˆŒ
ØˆŒØð 	Ø ˆDŒKˆKðð ð ˆDŒKð �v Ô 1Ñ1ˆŒØ�v Ô 1Ñ1ˆŒà”^ð 	.ð 	.ˆEØŒJ×Ò�c %™jœj¨3Ñ.Ñ/Ô/Ð/ØŒH�OŠO�C ™JœJ¨Ñ,Ñ-Ô-Ð-Ð-ð	.ð 	.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Ý $¤+¨eµc¸$¼+Ñ6FÔ6FÑ.FÔ"GÐHÑHÔHØÝØœ* UÔ+Øœ œØœ uÔ-ðñ ô ð
 ðñ ô ˆD�‰KˆKð" ˆ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Ñ$MÐPSÑ$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™œð#ñ #ô #ˆDŒL˜Ñõ #.×":Ò":¸4¼>È%Ô;PÑ"QÔ"QØ”˜UÔ#ñ#ô #ˆDŒL˜Ñð Œ}Õ 4Ò4Ð4Ø”˜UÐ#Ð#Ô# t¤}°UÔ';Ñ;Ð#Ð#Ñ#øå˜4Ô,Ñ-Ô-ð 	ð 	ˆEÝØØ”,˜uÔ%Ø”,˜uÔ%ØØØØÔ& uÔ-Ø Ô-¨eÔ4Ø$(¤NÐ<˜5˜5¸Ý $¤+¨eµc¸$¼+Ñ6FÔ6FÑ.FÔ"GÐHÑHÔHðñ ô ˆE�%‰LˆLð ˆ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˜Ô)Ñ)ˆØˆV�dÔ'Ñ'ˆå˜4Ô,Ñ-Ô-ð 	<ð 	<ˆEÝ%0Ô%5×%9Ò%9¸$¼.ÈÔ:OÑ%PÔ%PÑ"ˆD�‰K˜˜E™ð#ð #ð #ð #ð #å˜s™œð#ñ #ô #ˆDŒL˜Ñõ #.Ô"2×"6Ò"6Ø”˜UÔ#¨¨e¬¸B¸u¼Ið #7ñ #ô #ˆDŒL˜Ñð Œ}Õ 4Ò4Ð4Ø”˜UÐ#Ð#Ô# t¤}°UÔ';Ñ;Ð#Ð#Ñ#øå˜4Ô,Ñ-Ô-ð 	ð 	ˆEÝØØ”,˜uÔ%Ø”,˜uÔ%ØØØØÔ& uÔ-Ø Ô-¨eÔ4Ø$(¤NÐ<˜5˜5¸Ý $¤+¨eµc¸$¼+Ñ6FÔ6FÑ.FÔ"GÐHÑHÔHðñ ô ˆE�%‰LˆLð ˆ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è   € ð ˆf�tÔ(Ñ(ˆÝ˜4Ô,Ñ-Ô-ð 	ð 	ˆEåØØ”. Ô'ØÔ% eÔ,Ð-µ°D´NÀ5Ô4IÑ0JÔ0JÑJØØØØÔ& uÔ-Ø Ô-¨eÔ4Ø%)¤^ÐP°t´ÐP˜E˜EÈDØ”] 5Ô)ÝØœ+ e­c°$´+Ñ.>Ô.>Ñ&>Ô?Èðñ ô ðñ ô ˆC�‰JˆJð ˆ
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7ðpuð uð uð uð u�ñ uô uð uð uð ur   