
    g                        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(y)#    )
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}|S d}|S )NTF)THRES_FOR_FLIPPED_FACET_TITLES)numflippeds     ^/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/plotly/figure_factory/_facet_grid.py_is_flippedr   "   s#    
,, N N    c                     t        |t              r||    }|S t        |t              rdj                  ||       }|S | }|S )Nz{}: {})
isinstancedictstrformat)original_labelfacet_labels	facet_varlabels       r   _return_labelr$   *   sL    ,%^,
 L	 
L#	&	>: L Lr   c                 l    t        dddt        dddddj                  |       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   sD    

  ,r+L r   c                 n   d|dz
  |z  z
  |z  }|s:d}d}|dk(  r|dz
  ||z   z  d|z  z   }	d}
d}nX|dk(  rS|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'   colr   r(   r   rowZ   bottom      ?  r&   Fr)   r*   r,   r/   )r   r   AXIS_TITLE_COLOR)r8   lanenum_of_lanesSUBPLOT_SPACINGrow_colr   lr1   r2   r3   r4   r0   annotation_dicts                r   _annotation_dictrM   D   s2    
lQ/1	1lCAea/12S1W<AAIa/12S1W<AAIeGGa/12S1W<AAIGGa/12S1W<AAI

Yr!12O r   c                 d    |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   sk    c				 $_=E Lr   c                    g }| d   j                         j                         D ]  }d|v s| d   |   d   ddgk7  s|d|ddd	d
d
d}d|v rM| d   |   d   d   |d<   | d   |   d   d   |d<   d|d<   d|d<   |r|dxx   dz  cc<   |j                  |       vd|v s{d|d<   d|d<   | d   |   d   d   |d<   | d   |   d   d   |d<   |r|dxx   dz  cc<   |j                  |        || d   d<   y )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 *S=S]3/9c3ZG- "2Q?E #~!(mC0:1=d!(mC0:1=d#d"d$K3&K""5)C#d"d!(mC0:1=d!(mC0:1=d$K1$K""5);*> *CM(r   c                 8    |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~      s/    --!f<U<m<hLr   c                 `   t        ||dd||d      }g }|s|st        | j                  |            }|D ]e  }t        d||d   t        ||d            d|}|r|d   |   |d<   |r|d   |   |d	<   t	        ||||d      fi |}|j                  |dd       g ||fS |r|r|s|r	t        | j                  |r|n|            }t        |      D ]  \  }}| |   j                         D ]u  }|d   |d   |   |k(     }t        d||t        ||         d|}|r||   |d<   |r||   |d	<   t	        ||||   fi |}|j                  ||r|dz   nd|rdn|dz          w t        |d   |r|	n|
|r|n|      }|j                  t        ||r||z
  n|dz   |r|n|||rd
nd|              ||fS |r|rt        | j                  ||g            }|D ci c]  }|d   |d    }}| |   j                         } | |   j                         }!| |   j                         }"t        |       D ]F  \  }#}$t        |!      D ]  \  }%}&	 ||$|&f   }|"D ]  }|j                  j                         g dgk7  r2|||   |k(     }'t        d||t        ||         d|}|'|   }(|'|   })n't        d||t        ||         dd|}||   }(||   })|r|(|d<   |r|)|d	<   t	        ||||   fi |}|j                  ||#dz   |%dz           |#dk(  st        |!|%   |
|      }|j                  t        ||%dz   ||d|              t        | |#   |	|      }|j                  t        |||#z
  ||d
|             I ||fS c c}w # t        $ r! t        j                  g dg|||g      }Y \w xY w)NTFrowscolsshared_xaxesshared_yaxeshorizontal_spacingvertical_spacing
print_gridr   )r.   )rb   namery   r
   r3   r4   rA   r@   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item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YBJJz23! 	*E 1X(58"45 	E "1Xa[c
"1Xa[c
+z8E!H#59FE UAq)	*F e IyYrzzy)iPQ!/2 $	HAu
^224 	 %aq*)=)J K #"hy&9: #	 !.q!1E#J!.q!1E#J/:x	':>K   I1q519a!a%!( "a$- 3C&	IE  '0K!Oa!e#,K+#&EE 	7$	` U 
y

Iy+A BC=MNTQa 0NN	]))+
	]))+

^**,
 )* 5 A	Iu$-j$9 5 	50%@E ", JI||**,1C0DD).uZ/@I/M)N $ !!+!*#'hy.A#B! +	! !/q 1 .q 1 $ !!+!*#'hy.A#B',	!
 +! !&a %a%*c
%*c
3z8I+>BOE $$UIM9q=I?J@ >)"9-/?E  &&(!%M'+$)$0	Y5l "*Y"79I9UE )+#!(	qA	F Q  O   LL+,q!Z6H ) Es   M>	N&N-,N-c                 l   t        ||dd||d      }g }|sW|sUt        d|t        | |   |d      d|}|r| |   |d<   |r| |   |d<   t        ||| |   fi |}|j                  |dd       |r|r|s|rt	        | j                  |r|n|            }t        |      D ]  \  }}t        d|t        | |   |dt        d	
            d|}|r|d   |   |d<   |r|d   |   |d<   t        ||| |   fi |}|j                  ||r|dz   nd|rdn|dz          |r|	n|
}t        |d   ||r|n|      }|j                  t        ||r||z
  n|dz   |r|n|||rdnd|              ||fS |r|rt	        | j                  ||g            }|D ci c]  }|d   |d    }}| |   j                         }| |   j                         }t        |      D ](  \  } }!t        |      D ]  \  }"}#	 ||!|#f   }|j                  j                         g dgk7  r,t        d|t        | |   || dk(  t        d	
            d|}nt        d|dd|}|r||   |d<   |r||   |d<   t        ||| |   fi |}|j                  || dz   |"dz          | dk(  st        ||"   |
|      }|j                  t        ||"dz   ||d|              t        ||    |	|      }|j                  t        ||    || z
  ||d|             + ||fS c c}w # t        $ r! t        j                  g dg|||g      }Y >w xY w)NTFr   )r.   
colorscale	showscalerb   ry   r3   r4   r
   gffffff?)r3   )r.   r   r   colorbarr   rA   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   r   s$                                       r   _facet_grid_color_numericalr   `  sN   , *(C KY 
bnTR
 

 AE#JAE#J':r*~
1>
 	1%)Y9rzzy)iPQ!/2 %	HAu 	Z.'"!D\		 	E "1Xa[c
"1Xa[c
+z2j>5BE 	q1uqy!a!e *3%8HF!a&y)iE  '0K!Oa!e#,K+#&EE(	9%	P C 
y

Iy+A BC=MNTQa 0NN	]))+
	]))+
 )* 5 9	Iu$-j$9 - 	50%@E <<&&(-?,@@  	'#"$Z.'/'0A~%)D\	 	 '	E !SjUSlSE!&qE#J!&qE#J/:r*~9F   	Ay1}E>)"9-/?E  &&(!%M'+$)$0	I-\ "*Y"79I9UE y))+#!(	a9	v   O   LL+,q!Z6H ) Es   L-L		&L32L3c                    t        ||dd||d      }g }|sW|sUt        d|	t        ||d         d|}|r| |   |d<   |r| |   |d<   t        ||	|fi |}|j                  |d	d	       ||fS |r|r|s|rt	        | j                  |r|n|            }t        |      D ]  \  }}t        d|	t        ||d         d|}|r|d	   |   |d<   |r|d	   |   |d<   t        ||	|fi |}|j                  ||r|d	z   nd	|rd	n|d	z          t        |d
   |r|n||r|n|      }|j                  t        ||r||z
  n|d	z   |r|n|||rdnd|
              ||fS |rL|rIt	        | j                  ||g            }|D ci c]  }|d
   |d	    }}| |   j                         }| |   j                         }t        |      D ]  \  }}t        |      D ]  \  }} 	 ||| f   }t        d|	t        ||d         d|}|r||   |d<   |r||   |d<   t        ||	|fi |}|j                  ||d	z   |d	z          |d
k(  skt        ||   ||      }|j                  t        ||d	z   ||d|              t        ||   ||      }|j                  t        |||z
  ||d|
              ||fS c c}w # t        $ r t        j                  d d gg||g      }Y w xY w)NTFr   ra   )r.   ra   r   r3   r4   r
   r   rA   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   r   s!                                    r   _facet_gridr     s   ( *(C KY 
lv1FG
 
 AE#JAE#J':|
/<
 	1%z w IyYrzzy)iPQ!/2 "	HAu ,]65JK E "1Xa[c
"1Xa[c
+z<3@E 	q1uqy!a!e "a$- 3C&	IE  '0K!Oa!e#,K+#&EE 	3"	r k 
y

Iy+A BC=MNTQa 0NN	]))+
	]))+
 )* 5 -	Iu$-j$9   	5I0%@E  #lv9NO #
 !&qE#J!&qE#J/:|7D   	Ay1}E>)"9-/?E  &&(!%M'+$)$0	/ D "*Y"79I9UE )+#!(	I-	^ g  O   ILL4,!QLHEIs   ?J,J11%KKc                    t         st        d      t        | t         j                        st	        j
                  d      t        j                  |        |dv r|r|st	        j
                  d      |||||fD ]  }|	 | |     |dvrd}|dvrt	        j
                  d	      |t        vr(t	        j
                  d
j                  t                    |dk(  rd}nd}d|v r|d   }ni }|j                  dd      }|j                  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        | |   j                               }t        |      }t        |t              rs| |   j                         D ]]  }||j!                         vs| |   j                         j#                         }t	        j
                  t$        j                  |             |rt        | |   j                               }t        |      }t        |	t              rs| |   j                         D ]]  }||	j!                         vs| |   j                         j#                         }t	        j
                  t$        j                  |             d}|rt        | |   j&                  d   t(              s|rd}t        |t              rVt+        j,                  |d       | |   j                         D ])  }||j!                         vst	        j
                  d       nIt*        j.                  } i }d}!| |   j                         D ]  }|!t        |       k\  rd}!| |!   ||<   |!dz  }!! t1        | ||||||||||	||||||||      \  }"}#nt        | |   j&                  d   t2              rt        |t              ryd}t+        j,                  |d       | |   j                         D ])  }||j!                         vst	        j
                  d       t1        | ||||||||||	||||||||      \  }"}#n?t        |t4              r8|}$t+        j6                  |$       t9        | ||||||$||||	||||||||      \  }"}#nt        |t(              r|t*        j:                  j!                         v rt*        j:                  |   }$n@t	        j
                  d j                  t*        j:                  j!                                     t9        | ||||||$||||	||||||||      \  }"}#nRt*        j:                  d!   }$t9        | ||||||$||||	||||||||      \  }"}#nt=        | ||||||||	||||||||      \  }"}#|
st?        d"d#|z        }
|st?        d"d#|z        }"d$   jA                  |
|d%d&'       |r|"d$   jA                  tB        d(d)*       tE        |d+      }%tE        |d,      }&#jG                  |%       |#jG                  |&       ||"d$   d-<   tH        |"d$   d.   d/<   tJ        |"d$   d.   d0<   d1|"d$   d.   d+<   d|"d$   d.   d,<   d2|"d$   d.   d3<   |r3||"d$   d-<   |r)|rtM        |      }'|#jG                  |'       d4|"d$   d5   d6<   |#|"d$   d7<   |r|rtO        |"tP        ||       g g d8}(|"d$   D ]4  }d9|v r|(d+   jG                  |       d:|v s!|(d,   jG                  |       6 d})||fD *cg c]  }*|*s|*	 c}*D ]?  }+t        | |+   j#                         d   t(              s(| |+   D ]  },	 tS        |,       d}) A |)r*|(j!                         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 }0g }1|"d@   D ]T  }2|2|-   	t        |2|-         dkD  s|0jG                  tW        |2|-                |1jG                  t?        |2|-                V d|0v r|0jY                  d       d|0v rd|1v r|1jY                  d       d|1v rtW        |0      }3t?        |1      }4t        |3t2              xr t        |4t2              }5|5rt[        j\                  |3      }3t[        j^                  |4      }4|3dA|4|3z
  z  z  }3|4dA|4|3z
  z  z  }4|-d+k(  r%|r|}6nLt[        j\                  |4|3z
  t`        z        }6n,|-d,k(  r'|r|}6n"t[        j\                  |4|3z
  t`        z        }6nd}6|(|-   D ]w  }76|"d$   |7   dB<   d|"d$   |7   dC<   d|"d$   |7   dD<   |s'd|"d$   |7   dE<   dF|"d$   |7   dC<   tb        |"d$   |7   dG<   td        |"d$   |7   dH<   dI|"d$   |7   dG<   tf        dJdK|"d$   |7   dL<   y |-|/v s|"d$   D ]&  }dMj                  |-      |v s|5s|3|4g|"d$   |   dN<   (  |"S # t        $ r t	        j
                  d      w xY wc c}*w # tT        $ r Y w xY w)Oai  
    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)fixed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   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)8r   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vvarr   x_y	axis_name
fixed_axes
min_ranges
max_rangesr{   	min_range	max_rangerange_are_numbersr   
axis_titles8                                                           r   create_facet_gridr    s@   B OPPb",,'$$%IJJ 
R --((: 
 1iJ7 ?3 11 ::$$M
 	
 **$$(//0AB
 	
 [  6x( $$Wd3L
JJxL]"$%M&!$%M&!%&)L#]".81$EM&!$&M&! .L%KKLL"Y-..01";/&-)}++- Y.3355"$Y-"6"6"8"?"?"AK$001C1J1J;1WXXY "Y-..01";/&-)}++- Y.3355"$Y-"6"6"8"?"?"AK$001C1J1J;1WXXY Kbn))!,c2lK(D)))(E:j>002 C(--/1(44;  "&!;!;j>002 CC//$21$5HSMFA	
  =  ' C, :++A.7(D)"))(E:j>002 C(--/1(44;  $A$$  #  !'$ [, Hd+"*((9#>#$$  #  !'$ [* Hc*t116688&*&8&8&BO$00''-vd.@.@.E.E.G'H 
 $?#$$  #  !'$ [, #'"4"4V"<#>#$$  #  !'$ [. '#
[( S#+,C{*+MU"<P   H%. 	 	
 +1c2M*1c2M }%}% #.CM,)5CM(I&-@CM(M*#'CM(C #$CM(C ).CM(I&&1Hl#1*=""<0+.CM(#C( $/CM-  g3 0,M $K8} )c>##C(^##C(	) "q6'aQ' bgnn&q)3/3 I,0) ##% 	>C(- >	3=Hi(0>	> 3Z
	8	U
	8	U
	6	
  <I

[ 	3ESz%#eCj/A*=!!#eCj/2!!#eCj/2	3 j d# j j d# j  
O	
O	&y&9 
jv?
 

9-I		),I Y!677IY!677Icz#E JJ	I(=AS'STE#E JJ	I(=AS'S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Hj)*5	" *8} I??3'3.3D3<i2HCM#&w/Iu<I| J]   ,,) p	 ( " s*   gg'g'g,g$,	g98g9)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>r(     s    /  ' )     *
 
   !# 
G ' " GK)X8!*HfR[|J^ 

'cr   