
    -PhP                        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  ej        d          Z ej        d          Z ej        d          Zd	 ZddZddZd Zd Zd Zd Zd ZddZd Zd Zd Z	 	 	 	 	 	 	 	 	 	 d dZdS )!    )Number)
exceptionsoptional_importsN)
graph_objs)make_subplotspandasnumpyzscipy.statsc                    t                               | t                    }t                               |          }t                               |          }t                               |dd          }t                               |dd          }t                               |dd          }||z
  }d|z  }t                               ||||z
  k                       }	t                               ||||z   k                       }
||||||	|
d	S )
z6
    Calculate statistics for use in violin plot.
    2   linear)interpolation   lowerK   higher      ?)minmaxq1q2q3d1d2)npasarrayfloatr   r   
percentile)dataxvals_minvals_maxr   r   r   iqrwhisker_distr   r   s              ]/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/plotly/figure_factory/_violin.py
calc_statsr%      s     	

4AvvayyHvvayyH	q"H	5	5B	q"G	4	4B	q"H	5	5B
r'C9L 
!\)*+	,	,B	!\)*+	,	,B      #1f77b4rgb(0, 0, 0)c                       fdt          t                               D             }t          j         dd|d|t          j                            d|d          dd	
  
        S )
zG
    Produces a sideways probability distribution fig violin plot.
    c                     g | ]B}d d                     |                   z   dz   d                     |                   z   dz   CS )z(pdf(y), y)=({:0.2f}z, ))format).0ir   ys     r$   
<listcomp>z$make_half_violin.<locals>.<listcomp>-   sb        	)**1Q400047):J:J1Q4:P:PPSVV  r&   lines tonextxg      ?spline)widthcolorshapetext)
r   r0   modenamer9   fill	fillcolorline	hoverinfoopacity)rangelenr   ScatterscatterLine)r   r0   r=   	linecolorr9   s   ``   r$   make_half_violinrG   )   s        s1vv  D
 

$$3ix$PP   r&   c           	          t          j        | | |z
  gt          |           z  t           j                            |d          dddd          S )z2
    Returns a rugplot fig for a violin plot.
    zline-ew-open)r7   symbolmarkersr3   Fr0   )r0   r   markerr:   r;   
showlegendr?   )r   rC   rB   rD   Marker)valspdf_maxdistancer7   s       r$   make_violin_rugplotrQ   @   s^     
8h
#d))
+!((u^(LL   r&   c           
      z    t          j        ddg| |gddt           j                            dd                    S )z?
    Returns the scatterplot fig of most of a violin plot.
    r   r3   r2   r   
rgb(0,0,0)r6   r7   )r   r0   r;   r:   r>   )r   rC   rD   rE   )r   r   s     r$   make_non_outlier_intervalrU   O   sK     a&r($$3l$CC   r&   c           
          t          j        ddg| |gdd                    |           z   dd                    |          z   gdt           j                            dd          d	
          S )z@
    Makes the upper and lower quartiles for a violin plot.
    r   zlower-quartile: r+   zupper-quartile: r2      rS   rT   r9   )r   r0   r9   r:   r>   r?   )r   rC   r-   rD   rE   )r   r   s     r$   make_quartilesrX   \   s~     a&r(!1!1"!5!55!1!1"!5!55
 $$1L$AA
 
 
 
r&   c           
          t          j        dg| gdd                    |           z   gdt          dd          d	          S )
z;
    Formats the 'median' hovertext for a violin plot.
    r   zmedian: r+   rJ   squarezrgb(255,255,255))rI   r7   r9   )r   r0   r9   r:   rK   r?   )r   rC   r-   dict)r   s    r$   make_medianr\   m   sX     #$9++B///08+=>>>   r&   c           
      T    t           j                            | |dddddd          }|S )z-
    Makes the x-axis for a violin plot.
    Fr3   )titlerA   showgridzerolineshowlinemirrorticksshowticklabels)r   layoutXAxis)xaxis_titlexaxis_rangexaxiss      r$   
make_XAxisrj   {   s@     ## $ 	 	E Lr&   c           
      T    t           j                            | ddddddd          }|S )z-
    Makes the y-axis for a violin plot.
    TrW   F)r^   rd   	autorangeticklenra   r`   r_   rb   )r   re   YAxis)yaxis_titleyaxiss     r$   
make_YAxisrq      s@     ## $ 	 	E Lr&   Tc                 L   t                               | t                    } t          |           d         }t          |           d         }t          |           d         }t          |           d         }t          |           d         }t          |           d         }t          |           d         }	t                              |           }
t                               ||d          } |
|          }t                               |          }|rd	|z  d
z  nd}| |z
  dz
  |dz   g}t          | ||          t          |||          t          ||	          t          ||          t          |          g}|r&|                    t          | |||                     ||fS )z?
    Refer to FigureFactory.create_violin() for docstring.
    r   r   r   r   r   r   r   d   g       @
   r   g?)r=   )rP   r7   )r   r   r   r%   scipy_statsgaussian_kdelinspacer   rG   rU   rX   r\   appendrQ   )rN   r=   rugplotr    r!   r   r   r   r   r   pdfxxyymax_pdfrP   plot_xrange	plot_datas                    r$   
violinplotr      s    ::dE""D$&H$&H	D		$	B	D		$	B	D		$	B	D		$	B	D		$	B 
"
"4
(
(C	Xx	-	-B	RBffRjjG'.5g##AH8h&,gm<K"bI666R9555!"b))r2BI  
g	RRR	
 	
 	
 k!!r&   c                    g }| |         D ]}||vr|                     |           |r|                                 |                     |g          }t          |          }t	          d|ddd          }d}t          |          D ]\  }}t                              |                    |          |         t                    }|t          |          k    rd}t          |||         |          \  }}t          j                    }|D ]}|                    |d|dz              |dz  }|d                             d	                    |dz             t!          ||         |          i           |d                             d
                    d          t#          d          i           |d                             |
ddd||	           |S )u
    Refer to FigureFactory.create_violin() for docstring.

    Returns fig for violin plot without colorscale.

       T皙?Frowscolsshared_yaxeshorizontal_spacing
print_gridr   r=   ry   re   xaxis{}yaxis{}r3   closestr^   rL   	hovermodeautosizeheightr6   )rx   sortgroupbyrB   r   	enumerater   r   	get_groupr   r   r   Layoutappend_traceupdater-   rj   rq   )r   data_headergroup_headercolorsuse_colorscalegroup_statsry   r   r   r6   r^   
group_namer;   gbLfigcolor_indexkgrrN   r   r~   re   items                           r$   violin_no_colorscaler      s   * J\" $ $z!!d### 	|n	%	%BJA
QTePU  C K:&& 
 
2zz",,r**;7??#f++%%K!+F;/"
 "
 "
	; "$$ 	- 	-DT1a!e,,,,q 	Ha!e$$jA&L&LM	
 	
 	
 	

 M)**1--z"~~>???M     Jr&   c                    g }| |         D ]}||vr|                     |           |r|                                 |D ]}||vrt          j        d          |                     |g          }t          |          }t          d|ddd          }t          j        |d         t          j	                  }t          j        |d         t          j	                  }g }|D ]}|                     ||                    t          |          }t          |          }t          |          D ]\  }}t                              |                    |          |         t                     }||         |z
  ||z
  z  }t          j        |||          }t%          |d                    |          |	          \  }}t)          j                    }|D ]}|                    |d|dz              |d
                             d                    |dz             t1          ||         |          i           	t)          j        dgdgdt5          d||d|d         gd|d         ggd          d          } |                    | d|           |d
                             d                    d          t7          d          i           |d
                             |
ddd||	           |S )zr
    Refer to FigureFactory.create_violin() for docstring.

    Returns fig for violin plot with colorscale.

    zRAll values/groups in the index column must be represented as a key in group_stats.r   Tr   Fr   r   zrgb{}r   re   r   rJ      )sizecmincmax
colorscale	showscale)r   r0   r:   rK   rL   r   r3   r   r   )rx   r   r   PlotlyErrorr   rB   r   clrscolor_parserunlabel_rgbr   r   r   r   r   r   r   find_intermediate_colorr   r-   r   r   r   r   rj   rC   r[   rq   )!r   r   r   r   r   r   ry   r   r   r6   r^   r   r;   groupr   r   r   lowcolor	highcolorgroup_stats_valueskey	max_value	min_valuer   r   rN   intermedintermed_colorr   r~   re   r   trace_dummys!                                    r$   violin_colorscaler     s[   * J\" $ $z!!d###    ##(+   $ 
|n	%	%BJA
QTePU  C
  D,<==H!&)T-=>>I  4 4!!+c"23333&''I&''I:&& 
 
2zz",,r**;7??  Oi/I	4IJ5h	8TT!+GNN>::G"
 "
 "
	; "$$ 	- 	-DT1a!e,,,,Ha!e$$jA&L&LM	
 	
 	
 	
 $##F1IF1I7
 
 
   K [!Q''' M)**1--z"~~>???M     Jr&   c                    g }| |         D ]}||vr|                     |           |r|                                 |D ]}||vrt          j        d          |                     |g          }t          |          }t          d|ddd          }t          |          D ]\  }}t          	                    |
                    |          |         t                    }t          |||         |          \  }}t          j                    }|D ]}|                    |d|dz              |d                             d	                    |dz             t%          ||         |          i           |d                             d
                    d          t'          d          i           |d                             |
ddd||	           |S )r   zMIf colors is a dictionary, all the group names must appear as keys in colors.r   Tr   Fr   r   re   r   r   r3   r   r   )rx   r   r   r   r   rB   r   r   r   r   r   r   r   r   r   r   r   r-   rj   rq   )r   r   r   r   r   r   ry   r   r   r6   r^   r   r;   r   r   r   r   r   r   rN   r   r~   re   r   s                           r$   violin_dictr   n  s#   * J\" $ $z!!d###    ("    
|n	%	%BJA
QTePU  C :&& 
 
2zz",,r**;7??!+DF2JPW!X!X!X	;"$$ 	- 	-DT1a!e,,,, 	Ha!e$$jA&L&LM	
 	
 	
 	

 M)**1--z"~~>???M     Jr&   F  X  Violin and Rug Plotc                    t          |t                    rt          j        |d          }nt          j        |d          }|}t          | t
                    rTt          |           dk    rt          j        d          t          d | D                       st          j        d          t          rYt          | t          j        j        j                  r5|t          j        d          | |         j                                        } t!          | |d         |          \  }}t#          j        |
d	t"          j                            d
          |d	|	t+          d|          t-          d          d	  	        }|d                             t          d	d	d                     t#          j        ||          }|S t          | t          j        j        j                  st          j        d          |t          j        d          |d	u rKt          |t                    rt3          | |||||||||	|
          }|S t5          | |||||||||	|
          }|S t          |t                    rt          j        d          t          |          dk     rt          j        d          t          |t                    st          j        d          t7          | |||||||||	|
          }|S )a}  
    **deprecated**, use instead the plotly.graph_objects trace
    :class:`plotly.graph_objects.Violin`.

    :param (list|array) data: accepts either a list of numerical values,
        a list of dictionaries all with identical keys and at least one
        column of numeric values, or a pandas dataframe with at least one
        column of numbers.
    :param (str) data_header: the header of the data column to be used
        from an inputted pandas dataframe. Not applicable if 'data' is
        a list of numeric values.
    :param (str) group_header: applicable if grouping data by a variable.
        'group_header' must be set to the name of the grouping variable.
    :param (str|tuple|list|dict) colors: either a plotly scale name,
        an rgb or hex color, a color tuple, a list of colors or a
        dictionary. An rgb color is of the form 'rgb(x, y, z)' where
        x, y and z belong to the interval [0, 255] and a color tuple is a
        tuple of the form (a, b, c) where a, b and c belong to [0, 1].
        If colors is a list, it must contain valid color types as its
        members.
    :param (bool) use_colorscale: only applicable if grouping by another
        variable. Will implement a colorscale based on the first 2 colors
        of param colors. This means colors must be a list with at least 2
        colors in it (Plotly colorscales are accepted since they map to a
        list of two rgb colors). Default = False
    :param (dict) group_stats: a dictionary where each key is a unique
        value from the group_header column in data. Each value must be a
        number and will be used to color the violin plots if a colorscale
        is being used.
    :param (bool) rugplot: determines if a rugplot is draw on violin plot.
        Default = True
    :param (bool) sort: determines if violins are sorted
        alphabetically (True) or by input order (False). Default = False
    :param (float) height: the height of the violin plot.
    :param (float) width: the width of the violin plot.
    :param (str) title: the title of the violin plot.

    Example 1: Single Violin Plot

    >>> from plotly.figure_factory import create_violin
    >>> import plotly.graph_objs as graph_objects

    >>> import numpy as np
    >>> from scipy import stats

    >>> # create list of random values
    >>> data_list = np.random.randn(100)

    >>> # create violin fig
    >>> fig = create_violin(data_list, colors='#604d9e')

    >>> # plot
    >>> fig.show()

    Example 2: Multiple Violin Plots with Qualitative Coloring

    >>> from plotly.figure_factory import create_violin
    >>> import plotly.graph_objs as graph_objects

    >>> import numpy as np
    >>> import pandas as pd
    >>> from scipy import stats

    >>> # create dataframe
    >>> np.random.seed(619517)
    >>> Nr=250
    >>> y = np.random.randn(Nr)
    >>> gr = np.random.choice(list("ABCDE"), Nr)
    >>> norm_params=[(0, 1.2), (0.7, 1), (-0.5, 1.4), (0.3, 1), (0.8, 0.9)]

    >>> for i, letter in enumerate("ABCDE"):
    ...     y[gr == letter] *=norm_params[i][1]+ norm_params[i][0]
    >>> df = pd.DataFrame(dict(Score=y, Group=gr))

    >>> # create violin fig
    >>> fig = create_violin(df, data_header='Score', group_header='Group',
    ...                    sort=True, height=600, width=1000)

    >>> # plot
    >>> fig.show()

    Example 3: Violin Plots with Colorscale

    >>> from plotly.figure_factory import create_violin
    >>> import plotly.graph_objs as graph_objects

    >>> import numpy as np
    >>> import pandas as pd
    >>> from scipy import stats

    >>> # create dataframe
    >>> np.random.seed(619517)
    >>> Nr=250
    >>> y = np.random.randn(Nr)
    >>> gr = np.random.choice(list("ABCDE"), Nr)
    >>> norm_params=[(0, 1.2), (0.7, 1), (-0.5, 1.4), (0.3, 1), (0.8, 0.9)]

    >>> for i, letter in enumerate("ABCDE"):
    ...     y[gr == letter] *=norm_params[i][1]+ norm_params[i][0]
    >>> df = pd.DataFrame(dict(Score=y, Group=gr))

    >>> # define header params
    >>> data_header = 'Score'
    >>> group_header = 'Group'

    >>> # make groupby object with pandas
    >>> group_stats = {}
    >>> groupby_data = df.groupby([group_header])

    >>> for group in "ABCDE":
    ...     data_from_group = groupby_data.get_group(group)[data_header]
    ...     # take a stat of the grouped data
    ...     stat = np.median(data_from_group)
    ...     # add to dictionary
    ...     group_stats[group] = stat

    >>> # create violin fig
    >>> fig = create_violin(df, data_header='Score', group_header='Group',
    ...                     height=600, width=1000, use_colorscale=True,
    ...                     group_stats=group_stats)

    >>> # plot
    >>> fig.show()
    rgbNr   zRIf data is a list, it must be nonempty and contain either numbers or dictionaries.c              3   @   K   | ]}t          |t                    V  d S )N)
isinstancer   )r.   elements     r$   	<genexpr>z create_violin.<locals>.<genexpr>P  s,      GGwz'622GGGGGGr&   z0If data is a list, it must contain only numbers.zVdata_header must be the column name with the desired numeric data for the violin plot.r   F   )r   r3   r   )	r^   r   fontr   rL   r6   ri   rp   r   rp   )ra   rd   rc   )r   re   zGError. You must use a pandas DataFrame if you are using a group header.zFThe colors param cannot be a dictionary if you are using a colorscale.r   zHcolors must be a list with at least 2 colors. A Plotly scale is allowed.z,Your group_stats param must be a dictionary.)r   r[   r   validate_colors_dictvalidate_colorslistrB   r   r   allpdcoreframe	DataFramevaluestolistr   r   r   re   Fontrj   rq   r   Figurer   r   r   )r   r   r   r   r   r   ry   r   r   r6   r^   valid_colorsr   r~   re   r   s                   r$   create_violinr     s|   V &$ ;0??+FE:: dD!! 	4yyA~~ ,/   GG$GGGGG  ,I    		5*T27=#:;; 		5" ,'   $+2244D ",LOW"
 "
 "
	; ""''R'00R--R..

 

 

 	wtU5PRSSSTTTYv>>>
 $ 788 	(    (,   U"",-- !  "  
*  "  
,--  ,*   <  1$$ ,/   k400  ,E   $ C Jr&   )r'   r(   )r'   )r'   T)
NNNFNTFr   r   r   )numbersr   plotlyr   r   plotly.colorsr   r   plotly.graph_objsr   plotly.subplotsr   
get_moduler   r   ru   r%   rG   rQ   rU   rX   r\   rj   rq   r   r   r   r   r    r&   r$   <module>r      s         / / / / / / / /       ( ( ( ( ( ( ) ) ) ) ) )  **  ))))-88  8   .   
 
 
  "    "  "$" $" $" $"N@ @ @Fd d dNE E ET 	

P P P P P Pr&   