
    ~i                        d dl mZ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Z  ej        d          ZdZdZd	Zd
ZdZdZdZdZdZdZdZdZdZg dZdZd Zd Zd Z 	 d%dZ!d Z"d&dZ#d Z$d Z%d  Z&d! Z'	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d'd$Z(dS )(    )
exceptionsoptional_importsN)utils)make_subplots)Numberpandasz#969696z#0f0f0f   z#ffffffz#efefefz#edededz#d0d0d0   ?      ?   
   )scatter	scattergl	histogrambarboxzIf you are using a dictionary for custom labels for the facet row/col, make sure each key in that column of the dataframe is in your facet labels. The keys you need are {}c                 &    | t           k    rd}nd}|S )NTF)THRES_FOR_FLIPPED_FACET_TITLES)numflippeds     U/home/jrussi/.local/lib/python3.11/site-packages/plotly/figure_factory/_facet_grid.py_is_flippedr   "   s    
,,,N    c                     t          |t                    r	||          }n.t          |t                    rd                    ||           }n| }|S )Nz{}: {})
isinstancedictstrformat)original_labelfacet_labels	facet_varlabels       r   _return_labelr$   *   sQ    ,%% ^,	L#	&	& 	>::Lr   c                     t          dddt          ddddd                    |           t          dd	
          
  
        }|S )Nr   leftmiddle{Gz?Fpaperz
factor({})   #000000sizecolor
	textanglexanchoryanchorxy	showarrowxrefyreftextfont)r   LEGEND_ANNOT_Xr   )
color_namelegend_titles     r   _legend_annotationr=   4   sW    

  ,,r+++  L r   colTc                    d|dz
  |z  z
  |z  }|s<d}d}|dk    r|dz
  ||z   z  d|z  z   }	d}
d}n[|dk    r|dz
  ||z   z  d|z  z   }
d}	d	}n?|dk    rd}d
}|dz
  ||z   z  d|z  z   }	d}
d}n|dk    rd}d}|dz
  ||z   z  d|z  z   }
d}	d}t          ||||	|
dddt          |           t          dt                    
  
        }|S )Nr
   centerr'   r>   r   r(   r   rowZ   bottom      ?  r&   Fr)   r*   r,   r/   )r   r   AXIS_TITLE_COLOR)r8   lanenum_of_lanesSUBPLOT_SPACINGrow_colr   tempr1   r2   r3   r4   r0   annotation_dicts                r   _annotation_dictrM   D   sZ    !_44FD ed_45d
BAAIId_45d
BAAIeGGd_45d
BAAIIGGd_45d
BAAI

YYr!1222  O r   c                 j    |dk    rd}d}d}n|dk    rd}d}d}| sd} dt           d	d
| ||dd|ddd
}|S )Nr3   r   gr   r4   rE    r+   r.   r-   Fr@   r)   r'   )
r9   r5   r8   r0   r3   r1   r6   r4   r2   r7   )AXIS_TITLE_SIZE)r8   x_or_y_axisx_posy_posr0   annots         r   _axis_title_annotationrV   p   s    c						  $_== E Lr   Fc                    g }| d                                                                          D ]}d|v r| d         |         d         ddgk    r|d|ddd	d
d
d}d|v rl| d         |         d         d         |d<   | d         |         d         d         |d<   d|d<   d|d<   |r|dxx         dz  cc<   |                    |           d|v rkd|d<   d|d<   | d         |         d         d         |d<   | d         |         d         d         |d<   |r|dxx         dz  cc<   |                    |           || d         d<   d S )Nlayoutaxisdomaing        rD   belowr
   r.   widthrectr)   )	fillcolorlayerlinetyper6   r7   xaxisr   x0x1gGz?y0r   y1r   yaxisshapes)to_plotly_jsonkeysappend)figannot_rect_colorflipped_rowsflipped_colsshapes_listkeyshapes          r   _add_shapes_to_figrt      s   K8}++--2244 * *S==S]3/9c3ZGG- "2Q?? E #~~!(mC0:1=d!(mC0:1=d#d"d '$KKK3&KKK""5))))C#d"d!(mC0:1=d!(mC0:1=d %$KKK1$KKK""5))))CM(r   c                 :    |dv rd| d<   t          dd|i|| d<   | S )Nr   r   markersmoder.   marker )r   )trace
trace_typer.   kwargs_markers       r   _make_trace_for_scatterr~      s8    ---!f<<U<m<<hLr   c                 	   t          ||dd||d          }g }|s|st          |                     |                    }|D ]}t          d||d         t          ||d                            d|}|r|d         |         |d<   |r|d         |         |d	<   t	          ||||d                  fi |}|                    |dd           n|r|r|sM|rJt          |                     |r|n|                    }t          |          D ]\  }}| |                                         D ]}|d         |d         |         |k             }t          d||t          ||                   d|}|r||         |d<   |r||         |d	<   t	          ||||         fi |}|                    ||r|dz   nd|rdn|dz              t          |d         |r|	n|
|r|n|          }|	                    t          ||r||z
  n|dz   |r|n|||rd
nd|                     n[|rX|rUt          |                     ||g                    }d |D             }| |                                         }| |                                         } | |                                         }!t          |          D ]\  }"}#t          |           D ]m\  }$}%	 ||#|%f         }n2# t          $ r% t                              g dg|||g          }Y nw xY w|!D ]}|j                                        g dgk    rG|||         |k             }&t          d||t          ||                   d|}|&|         }'|&|         }(n5t          d||t          ||                   dd|}||         }'||         }(|r|'|d<   |r|(|d	<   t	          ||||         fi |}|                    ||"dz   |$dz              |"dk    rBt          | |$         |
|          }|	                    t          ||$dz   ||d|                     ot          ||"         |	|          }|	                    t          |||"z
  ||d
|                     ||fS )NTFrowscolsshared_xaxesshared_yaxeshorizontal_spacingvertical_spacing
print_gridr   )r.   )rb   namery   r
   r3   r4   rA   r>   c                 ,    i | ]}|d          |d         S r   r
   rz   .0items     r   
<dictcomp>z1_facet_grid_color_categorical.<locals>.<dictcomp>  "    NNNTQaNNNr   NNNcolumns)rb   r   ry   
showlegendrJ   r   rz   )r   listgroupbyr   r~   append_trace	enumerateuniquer$   rl   rM   KeyErrorpd	DataFramevaluestolist))dfr3   r4   	facet_row	facet_colr;   colormapnum_of_rowsnum_of_colsfacet_row_labelsfacet_col_labelsr|   ro   rp   
show_boxesrI   marker_colorkwargs_tracer}   rm   annotationscolor_groupsgroupr{   groups_by_facetj	color_valdata_by_colorr#   groups_by_facetstuple_to_facet_group
row_values
col_values
color_vals	row_countx_val	col_county_valgroup_filterednew_xnew_ys)                                            r   _facet_grid_color_categoricalr      s   * *(  C K CY CBJJz2233! 	* 	*E 1X(58"4555  	 E  )"1Xa[c
 )"1Xa[c
+z8E!H#5 9F E UAq))))	*"  pI py pY przzy*O))iPPQQ!/22 $	 $	HAu
^2244  	 %aq*)=)J K #"hy&9:::  #	   2!.q!1E#J 2!.q!1E#J/:x	': >K    I41q55196Oaa!a%    "a$-C  3C&5		I E  '0;K!OOa!e#,=KK+#&1EEE  	 	 	 	7$	L 
 Hy H

Iy+A B BCCNN=MNNN	]))++
	]))++

^**,,
 )* 5 5 A	 A	Iu$-j$9$9 5 5 	50%@EE   LL+++,q!Z6H )  EEE
 ", J JI|**,,1C1C1C0DDD).uZ/@I/M)N $ !!+!*#'hy.A#B#B#B! ! +	! ! !/q 1 .q 1 $ !!+!*#'hy.A#B#B#B',	! !
 +! ! !&a %a +%*c
 +%*c
3z8I+> BO E $$UIM9q=IIII>>)"9-/? E  &&(!%M'+$)$0  	 	 	 "*Y"79I9UUE )+#!(  	 	 	 	 s   
K,L
Lc                    t          ||dd||d          }g }|sm|skt          d|t          | |         |d          d|}|r| |         |d<   |r| |         |d<   t          ||| |         fi |}|                    |dd           |r|r|s/|r,t	          |                     |r|n|                    }t          |          D ]\  }}t          d|t          | |         |dt          d	
                    d|}|r|d         |         |d<   |r|d         |         |d<   t          ||| |         fi |}|                    ||r|dz   nd|rdn|dz              |r|	n|
}t          |d         ||r|n|          }|                    t          ||r||z
  n|dz   |r|n|||rdnd|                     n|r|rt	          |                     ||g                    }d |D             }| |         
                                }| |         
                                }t          |          D ]\  }} t          |          D ]@\  }!}"	 || |"f         }n2# t          $ r% t                              g dg|||g          }Y nw xY w|j                                        g dgk    r9t          d|t          | |         ||dk    t          d	
                    d|}nt          d|dd|}|r||         |d<   |r||         |d<   t          ||| |         fi |}|                    ||dz   |!dz              |dk    rBt          ||!         |
|          }|                    t          ||!dz   ||d|                     Bt          ||         |	|          }|                    t          ||         ||z
  ||d|                     ||fS )NTFr   )r.   
colorscale	showscalerb   ry   r3   r4   r
   gffffff?)r3   )r.   r   r   colorbarr   rA   r>   )r   c                 ,    i | ]}|d          |d         S r   rz   r   s     r   r   z/_facet_grid_color_numerical.<locals>.<dictcomp>  r   r   r   r   )rb   r   r   rz   )r   r   r~   r   r   r   r   r$   rl   rM   r   r   r   r   r   r   )#r   r3   r4   r   r   r;   r   r   r   r   r   r|   ro   rp   r   rI   r   r   r}   rm   r   r{   r   r   r   labelsr#   r   r   r   r   r   r   r   r   s#                                      r   _facet_grid_color_numericalr   _  s   * *(  C K &Y & 
bnTRRR
 
 
 

  	AE#J 	AE#J':r*~
 
1>
 
 	1%%% h) hY h9 hrzzy*O))iPPQQ!/22 %	 %	HAu 	Z.'"!D\\\	  	 	 	 	E  )"1Xa[c
 )"1Xa[c
+z2j> 5B E 	0q1uuqy2K!!a!e   *3H%%8HF!a&y"G))i E  '0;K!OOa!e#,=KK+#&1EEE(  	 	 	 	9%	N 
 ?y ?

Iy+A B BCCNN=MNNN	]))++
	]))++
 )* 5 5 9	 9	Iu$-j$9$9 - - 	50%@EE   LL+++,q!Z6H )  EEE
 <&&((-?-?-?,@@@  	'#"$Z.'/'0A~%)D\\\	     	 	 '	 	EE !SjUSSlSSE *!&qE#J *!&qE#J/:r*~ 9F    	Ay1}EEE>>)"9-/? E  &&(!%M'+$)$0  	 	 	 "*Y"79I9UUE y))+#!(  	 	 	 	 s   
I,JJc                    t          ||dd||d          }g }|sh|sft          d|	t          ||d                   d|}|r| |         |d<   |r| |         |d<   t          ||	|fi |}|                    |d	d	           n|r|r|s|rt	          |                     |r|n|                    }t          |          D ]\  }}t          d|	t          ||d                   d|}|r|d	         |         |d<   |r|d	         |         |d<   t          ||	|fi |}|                    ||r|d	z   nd	|rd	n|d	z              t          |d
         |r|n||r|n|          }|                    t          ||r||z
  n|d	z   |r|n|||rdnd|
                     ܐn|r|rt	          |                     ||g                    }d |D             }| |         
                                }| |         
                                }t          |          D ]L\  }}t          |          D ]\  }}	 |||f         }n1# t          $ r$ t                              d d gg||g          }Y nw xY wt          d|	t          ||d                   d|}|r||         |d<   |r||         |d<   t          ||	|fi |}|                    ||d	z   |d	z              |d
k    rBt          ||         ||          }|                    t          ||d	z   ||d|                     t          ||         ||          }|                    t          |||z
  ||d|
                     N||fS )NTFr   ra   )r.   ra   r   r3   r4   r
   r   rA   r>   c                 ,    i | ]}|d          |d         S r   rz   r   s     r   r   z_facet_grid.<locals>.<dictcomp>R  r   r   r   r   rz   )r   r   r~   r   r   r   r   r$   rl   rM   r   r   r   r   ) r   r3   r4   r   r   r   r   r   r   r|   ro   rp   r   rI   r   r   r}   rm   r   r{   r   r   r   r#   r   r   r   r   r   r   r   r   s                                    r   _facet_gridr     s0   & *(  C K jY j 
lv1FGGG
 
 
 
  	AE#J 	AE#J':|
 
/<
 
 	1%%%%
 YI Yy YY Yrzzy*O))iPPQQ!/22 "	 "	HAu ,]65JKKK   E  )"1Xa[c
 )"1Xa[c
+z< 3@ E 	0q1uuqy2K!!a!e   "a$-C  3C&5		I E  '0;K!OOa!e#,=KK+#&1EEE  	 	 	 	3"	H 
 3y 3

Iy+A B BCCNN=MNNN	]))++
	]))++
 )* 5 5 -	 -	Iu$-j$9$9     	5I0%@EE I I ILL4,!QLHHEEEI #lv9NOOO  # 
  *!&qE#J *!&qE#J/:| 7D    	Ay1}EEE>>)"9-/? E  &&(!%M'+$)$0  	 	 	 "*Y"79I9UUE )+#!(  	 	 	 	 s   4
H??+I-,I-r   fixedc                 \   t           st          d          t          | t           j                  st	          j        d          t          j        |            |dv r|r|st	          j        d          |||||fD ]0}|,	 | |          # t          $ r t	          j        d          w xY w1|dvrd}|dvrt	          j        d	          |t          vr,t	          j        d

                    t                              |dk    rd}nd}d|v r	|d         }ni }|                    dd          }|                    dd           |}d|vr|rd|d<   nd|d<   d|vr|sd|d<   d|vr|s	ddd|d<   ni |d<   |s|sd}nd}d}d}d}d}|rt          | |                                                   }t          |          }t          |t                    r| |                                         D ]p}||                                vrX| |                                                                         }t	          j        t$          
                    |                    q|rt          | |                                                   }t          |          }t          |	t                    r| |                                         D ]p}||	                                vrX| |                                                                         }t	          j        t$          
                    |                    qd}|rt          | |         j        d         t(                    s|rd}t          |t                    r]t+          j        |d           | |                                         D ],}||                                vrt	          j        d          -nRt*          j        } i }d}!| |                                         D ]'}|!t          |           k    rd}!| |!         ||<   |!dz  }!(t1          | ||||||||||	||||||||          \  }"}#nt          | |         j        d         t2                    rt          |t                    rd}t+          j        |d           | |                                         D ],}||                                vrt	          j        d          -t1          | ||||||||||	||||||||          \  }"}#nZt          |t4                    r<|}$t+          j        |$           t9          | ||||||$||||	||||||||          \  }"}#n	t          |t(                    r|t*          j                                        v rt*          j        |         }$nCt	          j        d 
                    t*          j                                                            t9          | ||||||$||||	||||||||          \  }"}#nYt*          j        d!         }$t9          | ||||||$||||	||||||||          \  }"}#n"t=          | ||||||||	||||||||          \  }"}#|
st?          d"d#|z            }
|st?          d"d#|z            }|"d$                              |
|d%d&'           |r#|"d$                              tB          d(d)*           tE          |d+          }%tE          |d,          }&|##                    |%           |##                    |&           ||"d$         d-<   tH          |"d$         d.         d/<   tJ          |"d$         d.         d0<   d1|"d$         d.         d+<   d|"d$         d.         d,<   d2|"d$         d.         d3<   |rD||"d$         d-<   |r7|r$tM          |          }'|##                    |'           d4|"d$         d5         d6<   |#|"d$         d7<   |r|rtO          |"tP          ||           g g d8}(|"d$         D ]A}d9|v r|(d+         #                    |           "d:|v r|(d,         #                    |           Bd})d; ||fD             D ]b}*t          | |*                                         d         t(                    r-| |*         D ]$}+	 tS          |+           d})# tT          $ r Y !w xY wc|)r3|(                                D ]},|(|,         D ]}-d<|"d$         |-         d=<   |d>k    rd+d,g}.n|d?k    rd,g}.n|d@k    rd+g}.n|dk    rg }.|.D ]},g }/g }0|"dA         D ]s}1|1|,         it          |1|,                   dk    rP|/#                    tW          |1|,                              |0#                    t?          |1|,                              td|/v r|/,                    d           d|/v d|0v r|0,                    d           d|0v tW          |/          }2t?          |0          }3t          |2t2                    ot          |3t2                    }4|4rt[          j.        |2          }2t[          j/        |3          }3|2dB|3|2z
  z  z  }2|3dB|3|2z
  z  z  }3|,d+k    r%|r|}5nMt[          j.        |3|2z
  t`          z            }5n-|,d,k    r$|r|}5n"t[          j.        |3|2z
  t`          z            }5nd}5|(|,         D ]}6|5|"d$         |6         dC<   d|"d$         |6         dD<   d|"d$         |6         dE<   |rxd|"d$         |6         dF<   dG|"d$         |6         dD<   tb          |"d$         |6         dH<   td          |"d$         |6         dI<   dJ|"d$         |6         dH<   tf          dKdL|"d$         |6         dM<   |,|.v r7|"d$         D ].}dN
                    |,          |v r|4r|2|3g|"d$         |         dO<   /|"S )Pai  
    Returns figure for facet grid; **this function is deprecated**, since
    plotly.express functions should be used instead, for example

    >>> import plotly.express as px
    >>> tips = px.data.tips()
    >>> fig = px.scatter(tips,
    ...     x='total_bill',
    ...     y='tip',
    ...     facet_row='sex',
    ...     facet_col='smoker',
    ...     color='size')


    :param (pd.DataFrame) df: the dataframe of columns for the facet grid.
    :param (str) x: the name of the dataframe column for the x axis data.
    :param (str) y: the name of the dataframe column for the y axis data.
    :param (str) facet_row: the name of the dataframe column that is used to
        facet the grid into row panels.
    :param (str) facet_col: the name of the dataframe column that is used to
        facet the grid into column panels.
    :param (str) color_name: the name of your dataframe column that will
        function as the colormap variable.
    :param (str|list|dict) colormap: the param that determines how the
        color_name column colors the data. If the dataframe contains numeric
        data, then a dictionary of colors will group the data categorically
        while a Plotly Colorscale name or a custom colorscale will treat it
        numerically. To learn more about colors and types of colormap, run
        `help(plotly.colors)`.
    :param (bool) color_is_cat: determines whether a numerical column for the
        colormap will be treated as categorical (True) or sequential (False).
            Default = False.
    :param (str|dict) facet_row_labels: set to either 'name' or a dictionary
        of all the unique values in the faceting row mapped to some text to
        show up in the label annotations. If None, labeling works like usual.
    :param (str|dict) facet_col_labels: set to either 'name' or a dictionary
        of all the values in the faceting row mapped to some text to show up
        in the label annotations. If None, labeling works like usual.
    :param (int) height: the height of the facet grid figure.
    :param (int) width: the width of the facet grid figure.
    :param (str) trace_type: decides the type of plot to appear in the
        facet grid. The options are 'scatter', 'scattergl', 'histogram',
        'bar', and 'box'.
        Default = 'scatter'.
    :param (str) scales: determines if axes have fixed ranges or not. Valid
        settings are 'fixed' (all axes fixed), 'free_x' (x axis free only),
        'free_y' (y axis free only) or 'free' (both axes free).
    :param (float) dtick_x: determines the distance between each tick on the
        x-axis. Default is None which means dtick_x is set automatically.
    :param (float) dtick_y: determines the distance between each tick on the
        y-axis. Default is None which means dtick_y is set automatically.
    :param (bool) show_boxes: draws grey boxes behind the facet titles.
    :param (bool) ggplot2: draws the facet grid in the style of `ggplot2`. See
        http://ggplot2.tidyverse.org/reference/facet_grid.html for reference.
        Default = False
    :param (int) binsize: groups all data into bins of a given length.
    :param (dict) kwargs: a dictionary of scatterplot arguments.

    Examples 1: One Way Faceting

    >>> import plotly.figure_factory as ff
    >>> import pandas as pd
    >>> mpg = pd.read_table('https://raw.githubusercontent.com/plotly/datasets/master/mpg_2017.txt')

    >>> fig = ff.create_facet_grid(
    ...     mpg,
    ...     x='displ',
    ...     y='cty',
    ...     facet_col='cyl',
    ... )
    >>> fig.show()

    Example 2: Two Way Faceting

    >>> import plotly.figure_factory as ff

    >>> import pandas as pd

    >>> mpg = pd.read_table('https://raw.githubusercontent.com/plotly/datasets/master/mpg_2017.txt')

    >>> fig = ff.create_facet_grid(
    ...     mpg,
    ...     x='displ',
    ...     y='cty',
    ...     facet_row='drv',
    ...     facet_col='cyl',
    ... )
    >>> fig.show()

    Example 3: Categorical Coloring

    >>> import plotly.figure_factory as ff
    >>> import pandas as pd
    >>> mtcars = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/mtcars.csv')
    >>> mtcars.cyl = mtcars.cyl.astype(str)
    >>> fig = ff.create_facet_grid(
    ...     mtcars,
    ...     x='mpg',
    ...     y='wt',
    ...     facet_col='cyl',
    ...     color_name='cyl',
    ...     color_is_cat=True,
    ... )
    >>> fig.show()


    z3'pandas' must be installed for this figure_factory.z"You must input a pandas DataFrame.rv   z`You need to input 'x' and 'y' if you are you are using a trace_type of 'scatter' or 'scattergl'.NzIx, y, facet_row, facet_col and color_name must be keys in your dataframe.free)r   free_xfree_yr   z?'scales' must be set to 'fixed', 'free_x', 'free_y' and 'free'.z'trace_type' must be in {}r   gQ?gQ?ry   r.   r-   r      opacityg333333?ra   darkgreyr
   r\   zrgb(31, 119, 180)zrgb(0, 0, 0)Fr   TrgbzxIf using 'colormap' as a dictionary, make sure all the values of the colormap column are in the keys of your dictionary.zlIf 'colormap' is a string, it must be the name of a Plotly Colorscale. The available colorscale names are {}RedsiX  d   rX   rO   zrgb(251, 251, 251))heightr]   titlepaper_bgcolorzrgb(255, 255, 255)closest)plot_bgcolorr   	hovermoder3   r4   r   legendbgcolorborderwidthr   topr2      marginrr   )r3   r4   rc   rh   c                     g | ]}||S rz   rz   )r   vs     r   
<listcomp>z%create_facet_grid.<locals>.<listcomp>U  s    '''aQ''''r   categoryrb   r   r   r   datag?dtickticklenzeroline	tickwidth   	gridwidth	gridcolor   r   rP   tickfontz{}axisrange)4r   ImportErrorr   r   r   PlotlyErrorr   validate_dataframer   VALID_TRACE_TYPESr   poplenr   r   r   rk   r   CUSTOM_LABEL_ERRORilocr   clrsvalidate_colors_dictDEFAULT_PLOTLY_COLORSr   r   r   validate_colorscaler   PLOTLY_SCALESr   maxupdatePLOT_BGCOLORrV   rl   LEGEND_COLORLEGEND_BORDER_WIDTHr=   rt   ANNOT_RECT_COLORint
ValueErrorminremovemathfloorceilMAX_TICKS_PER_AXIS
GRID_WIDTH
GRID_COLOR
TICK_COLOR)7r   r3   r4   r   r   r;   r   color_is_catr   r   r   r]   r|   scalesdtick_xdtick_yr   ggplot2binsizekwargsrr   rI   r}   r   r   r   r   ro   rp   unique_keysshow_legendvaldefault_colorsr   rm   r   colorscale_listx_title_annoty_title_annotlegend_annotaxis_labelsstring_number_in_datavarr   x_y	axis_name
fixed_axes
min_ranges
max_rangesr{   	min_range	max_rangerange_are_numbersr   
axis_titles7                                                          r   create_facet_gridr)    s   B  QOPPPb",'' K$%IJJJ 
R   --- 	 	(:  
 1iJ7  ?3    ,)    111 :::$M
 
 	
 ***$(//0ABB
 
 	
 [   6x( $$Wd33L
JJxL]"" 	&$%M&!!$%M&!%% 	*&)L#]"" 	'.81$E$EM&!!$&M&!  & 	/.L%KKLL Y"Y-..0011";//&-- 	Y)}++-- Y Y.335555"$Y-"6"6"8"8"?"?"A"AK$01C1J1J;1W1WXXX 6  Y"Y-..0011";//&-- 	Y)}++-- Y Y.335555"$Y-"6"6"8"8"?"?"A"AK$01C1J1J;1W1WXXX 6 K q
bn)!,c22 [	l [	K(D)) )(E:::j>0022  C(--//11(4;   2 "&!;j>0022  CC////$21$5HSMFAA<  '   C, :+A.77 o	(D)) n")(E:::j>0022  C(--//11(4;   2 $A$$  #  !'$ $ [[, Hd++ M"*(999#>#$$  #  !'$ $ [[* Hc** 4t1668888&*&8&BOO$0''-vd.@.E.E.G.G'H'H  
 $?#$$  #  !'$ $ [[, #'"4V"<#>#$$  #  !'$ $ [. '#
 
[(  -S#+,, ,C{*++MU"<P      
H%. 	 	
 	
 	
 +1c22M*1c22M }%%%}%%% #.CM,)5CM(I&-@CM(M*#'CM(C #$CM(C ).CM(I& /&1Hl# 	/ 11*==""<000+.CM(#C( $/CM-   Ng N3 0,MMM $$K8} ) )c>>##C((((^^##C(((!''Aq6'''  bgnn&&q)3// 	3  III,0))!   D  >##%% 	> 	>C(- > >	3=Hi(00> 3Z

	8		U

	8		U

	6		
  <I <I

[ 	3 	3ESz%#eCj//A*=*=!!#eCj//222!!#eCj//222j  d### j  j  d### j   
OO	
OO	&y&99 
jv?
 ?
  	
9--I	),,I Y!677IY!677Iczz U#EE J	I(=AS'STTEE U#EE J	I(=AS'STTEE%c* 	 	J16CM*%g.34CM*%i049CM*%j1 
9:Hj)+678Hj))49CHj)+69CHj)+69:Hj)+6'9 9Hj)*5 *8} I I??3''3..3D.3<i2HCM#&w/Js   B

B)b++
b87b8)r>   T)FF)NNNNNNFNNNNr   r   NNTFr
   ))plotlyr   r   plotly.colorscolorsr   plotly.figure_factoryr   plotly.subplotsr   r  numbersr   
get_moduler   r  rF   rQ   r  r   r   r  r  r:   LEGEND_ANNOT_Yr
  r   r  r   r   r   r$   r=   rM   rV   rt   r~   r   r   r   r)  rz   r   r   <module>r2     s   / / / / / / / /       ' ' ' ' ' ' ) ) ) ) ) )         **
 
   !# 
GGG '       " GK) ) ) )X  8!* !* !* !*H  e e ePZ Z ZzI I I\ 

'c c c c c cr   