
    Lec              
           d dl Z d dlZd dlZd dlZd dlmZmZ d dlZd dl	Z	d dl
mZ ddlmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( ddl)m*Z* ddl+m,Z,m-Z- ddl.m/Z/ d Z0 G d de	j1                  Z2 e2d          Z3d Z4d Z5d Z6ddZ7d Z8ddZ9d Z:ddZ;ddZ<ddZ=d Z>d Z?d Z@d  ZAd! ZBd" ZCd# ZDd$ ZEd% ZFd& ZGdd(ZHd) ZIdd*ZJdd+ZKdd,ZLdd.ZMd/ ZNg ZO ed0g d1          ZPg d2ZQdd3ZRd4 ZS	 	 dd5ZT eSd6d7d8d9g d:            eSd;d7d<d=g d>            eSd?d7d@d=dAdBg            eSd?d7d@d9g dC            eSd?d7d@dDg dE            eSdFd7d<d=g dG            eSdFd7d@d=g dH            eSdId7d<dDg dJ            eSdId7dKdDg dL            eSdMd7d@d9dNdOg            eSdMd7d@dDg dP            eSdQd7d@d9g dR            eSdQd7d@dDdSdTg            eSd6dUdVd9g dW            eSd6dUdVdDg dX            eSdYdUdVd=g dZ            eSdYdUdVd9d[d\g            eSdYdUdVd]d^g            eSd_dUdVdDg d`            eSd6dad8d9g db            eSd;dad<d=g dc            eSdFdad<d=g dG            eSdIdadKdDg dd            eSdIdad<dDg dJ            eSdIdad@dDdeg            eSdfdUdVdDg dg            eSdfdUdVd9dhg            eSdfdUdVd=dig           ddjZUddlZVddnZWdo ZXddqZYdr ZZds Z[dt Z\du Z]dv Z^dw Z_dx Z` G dy dze          Za ejb        d{          Zcd|d}d~ddddddd	Zdg g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d¢g dâg dĢg dŢg dƢg dǢg dȢg dɢg dʢg dˢg d̢g d͢g d΢g dϢg dТg dѢg dҢg dӢg dԢg dբg d֢g dעg dآg d٢g dڢg dۢg dܢg dݢg dޢg dߢg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g dg dg dg dg dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g d!g d"g d#g d$g d%g d&g d'g d(g d)g d*g d+g d,g d-g d.g d/g d0g d1g d2g d3g d4g d5g d6g d7g d8g d9g d:g d;g d<g d=g d>g d?g d@g dAg dBg dCg dDg dEg dFg dGg dHg dIg dJg dKg dLg dMg dNg dOg dPg dQg dRg dSg dTg dUg dVg dWg dXg dYg dZg d[g d\g d]g d^g d_g d`g dag dbg dcg ddg deg dfg dgg dhg dig djg dkg dlg dmg dng dog dpg dqg drg dsg dtg dug dvg dwg dxg dyg dzg d{g d|g d}g d~g dg dg dg dg dg dxZeZfd eeD             Zg G d de          Zh G d de          ZidS (      N)defaultdict
namedtuple)Version   )	AdjointLayoutCompositeOverlay
DynamicMap	GridSpaceHoloMapLayoutNdLayout	NdOverlayOverlay)
item_check)	Operation)CallbackErrorCycle)get_nested_streams)	arraylike_typesclosest_matchdisable_constantget_overlay_spec	is_numberisfinite
match_specunique_iterator
wrap_tuple)Points)LinkedStreamParams)dimc                 l   t          | t                    rt          d | D                       rdS t          | t                    r!| j        t
          t          t          t          fvS t          | t          t
          t          f          r+| 	                                D ]}t          |          s dS dS dS )z
    Predicate that returns whether the object is displayable or not
    (i.e. whether the object obeys the nesting hierarchy)
    c              3   Z   K   | ]&}t          |t          t          t          f          V  'd S N)
isinstancer   r
   r   .0os     7lib/python3.11/site-packages/holoviews/plotting/util.py	<genexpr>zdisplayable.<locals>.<genexpr>/   sG       (6 (6,- )31w	=6Y(Z(Z (6 (6 (6 (6 (6 (6    FT)r%   r   anyr   typer   r
   r   r	   valuesdisplayable)objels     r)   r/   r/   *   s    
 #w C (6 (614(6 (6 (6 %6 %6 u#w Ix	8ZHHH#	68455 **,, 	 	Br?? uut4r+   c                       e Zd ZdS )WarningN)__name__
__module____qualname__ r+   r)   r3   r3   <   s          r+   r3   namec                    t          | t                    rOt          d | D                       }t          j                            d|z             |                                 S t          | t                    rG| j        t          t          fv r| j        j
        }t          d|z            |                                 S t          | t                    rct          j                            d                    | j        j
        t          |           j
                             |                                 S t          | t          t          f          r	 t          j                            d           g }|                                 D ]n}t          |t                    rWt!          |          sHt          |                                          }|                    |                                           ot          |          S # t          $ r t          t%          |                     w xY wt          t%          |                     )Nc              3      K   | ]:}t          |t          t          t          f          $t	          |          j        V  ;d S r$   )r%   r   r
   r   r-   r4   r&   s     r)   r*   zcollate.<locals>.<genexpr>A   s]       N N$Q)](KLLN477+ N N N N N Nr+   a  Nesting %ss within an Overlay makes it difficult to access your data or control how it appears; we recommend calling .collate() on the Overlay in order to follow the recommended nesting structure shown in the Composing Data user guide (http://goo.gl/2YS8LJ)zNesting a %s inside a DynamicMap is not supported. Ensure that the DynamicMap callback returns an Element or (Nd)Overlay. If you have applied an operation ensure it is not dynamic by setting dynamic=False.zNesting {0}s within a {1} makes it difficult to access your data or control how it appears; we recommend calling .collate() on the {1} in order to follow the recommended nesting structure shown in the Composing Data user guide (https://goo.gl/2YS8LJ)zLayout contains HoloMaps which are not nested in the recommended format for accessing your data; calling .collate() on these objects will resolve any violations of the recommended nesting presented in the Composing Data tutorial (https://goo.gl/2YS8LJ))r%   r   nextdisplay_warningparamwarningcollater	   r-   r   r4   	Exceptionformatr   r   r.   r/   extendundisplayable_info)r0   nested_typeobj_nameexpandedr1   collated_layouts         r)   r@   r@   ?   sO   #w 
 N NS N N N N N%%0 3>	>	? 	? 	? {{}}#z"" 8
G,,,x(H 5 8@	@ A A A
 {{}}#w 1%%6 7=f!499#577 77	8 	8 	8 {{}}	C&(+	,	, 1	5!))34 4 4 Hjjll > >b'** >;r?? >&,RZZ\\&:&:OOOO$:$:$<$<===(### 	5 	5 	5.s33444	5 *3//000s   B2H	 	'H0c                 `    t          | t                    ot          | j        t                    S )zP
    Determines whether object is a DynamicMap returning (Nd)Overlay types.
    )r%   r	   lastr   r0   s    r)   isoverlay_fnrL   q   s&     c:&&SJsxAQ,R,RSr+   c                     t          | t                    r9t          | j        t                    rt	          | j                  S | j        dS dS dS )zg
    Computes the depth of a DynamicMap overlay if it can be determined
    otherwise return None.
    N   )r%   r	   rJ   r   lenrK   s    r)   overlay_depthrP   x   sP    
 #z"" ch 011 	sx== X4qqr+   c                    |g }|| gz   }t          t                    }t          | t                    st          | t                    rt          |           D ]\  }}|| g||<   nt          | t                    r||                                 D ]f}t          |t                    r=t          ||          	                                D ]\  }}||xx         || gz   z  cc<   T|dxx         | |gz  cc<   gn%| |d         vr|d         
                    |            |S t          | j        t                    }| j        j        }	| |d         vr|s|d         
                    |            t          |           }
| j        j        r| j        j        ng }t          |          D ]\  }}d}t#          d |D                       rt%          |          rd}t          |          }|
||
|k     r	|
dk    rQd}|	r|nd}t          ||          }t'          |                                          }|	                                D ]<\  }}|r||z   n||z   |z   }t          t+          ||         |z                       ||<   =t#          d |D                       }t#          d	 | j        D                       }|s|r|r|	st'          |                                          }t          | j                  D ]R\  }}|r |r|||z            
                    |            ||||z            vr|||z            
                    |           S|S )
a  
    Traverses an overlayable composite container to determine which
    objects are associated with specific (Nd)Overlay layers by
    z-order, making sure to take DynamicMap Callables into
    account. Returns a mapping between the zorders of each layer and a
    corresponding lists of objects.

    Used to determine which overlaid subplots should be linked with
    Stream callbacks.
    Nr   Fc              3   H   K   | ]}t          |          p|j        d u  V  d S r$   )rL   rJ   r'   ps     r)   r*   z.compute_overlayable_zorders.<locals>.<genexpr>   s6      EE1LOO5qv~6EEEEEEr+   TrN   )pathc              3   X   K   | ]%}t          |t                    o|j        j        V  &d S r$   )r%   r	   callback_is_overlayrS   s     r)   r*   z.compute_overlayable_zorders.<locals>.<genexpr>   s6      SS
1j))Daj.DSSSSSSr+   c              3   \   K   | ]'}t          |t          t          f          o|j        V  (d S r$   )r%   r   r    linked)r'   ss     r)   r*   z.compute_overlayable_zorders.<locals>.<genexpr>   sL       ( ( Qv 677DAH ( ( ( ( ( (r+   )r   listr%   r	   r   	enumerater   r.   compute_overlayable_zordersitemsappendrJ   rW   rX   rP   link_inputsinputsr,   rL   maxkeysr   streams)r0   rU   
zorder_mapzr(   r1   kv	isoverlayisdynoverlaydepthdmap_inputsinpno_zorder_incrementinput_depthdeep_zordersoffsetdzobjsglobal_zfoundrZ   s                         r)   r^   r^      s    |:DT""J c:&& c+,, 	&!# ) )1!"C
1)W%% 	&jjll / /b"233 / ;B E E K K M M 3 31"1cU23 qMMMc2Y.MMMM/ 
1%%qM  %%%38%566I<+L
*Q-	1S!!!#E *-)AI#,%%rKK(( T T3#EEEEEEE 	',WZJ[J[ 	'"&#C((!8U[=P=P qyy&*# $AA123TBBBZ__&&''$**,, 	T 	THB#6GvaxxF2IaKH#'
88LT8Q(R(R#S#SJx  	T SSdSSSSSE ( (;( ( ( ( (F / /Y /| /Z__&&''ch'' 	/ 	/DAq 1V 16!8$++C000
6!8,,,6!8$++A...r+   c                     t          | t                    sdS | j        j        rdS t	          d | j        j        D                       S )z
    Traverses a DynamicMap graph and determines if any components
    were overlaid dynamically (i.e. by * on a DynamicMap).
    FTc              3   4   K   | ]}t          |          V  d S r$   )is_dynamic_overlay)r'   dms     r)   r*   z%is_dynamic_overlay.<locals>.<genexpr>   s+      IIb%b))IIIIIIr+   )r%   r	   rW   rX   r,   rb   )dmaps    r)   ry   ry      sQ    
 dJ'' Ju		" JtIIDM4HIIIIIIr+   c                    g }t          | t                    rt          |            t          | j        t
                    r4|s2| j                                        D ]}|                    |            nt          | j        t                    rs| j
        j        r5t          |           r&| j
        j        D ]}|t          ||dz             z  }nG| j                                        D ]}|                    |            n|                    |            |S t          | t                    r0|                                 D ]\  }}|                    |           n|                    |            |S )a  
    Splits a DynamicMap into the original component layers it was
    constructed from by traversing the graph to search for dynamically
    overlaid components (i.e. constructed by using * on a DynamicMap).
    Useful for assigning subplots of an OverlayPlot the streams that
    are responsible for driving their updates. Allows the OverlayPlot
    to determine if a stream update should redraw a particular
    subplot.
    rN   )r%   r	   initialize_dynamic
issubclassr-   r   rJ   r.   r`   r   rW   rb   ry   split_dmap_overlayr_   )r0   rl   layers_rn   _kri   s          r)   r   r      s    F#z"" 3ch	** 	5 	X__&& # #c""""#'** 	|" ''9#'>'> '<. ? ?C0eAg>>>FF? ** ' 'AMM#&&&&' MM##w YY[[ 	 	EBMM!	 	cMr+   c                     |                      d t          g          }|D ]3}|j        r
t          |          s||                                          4dS )zD
    Initializes all DynamicMap objects contained by the object
    c                     | S r$   r7   xs    r)   <lambda>z$initialize_dynamic.<locals>.<lambda>  s    1 r+   )specsN)traverser	   	unboundedrO   _initial_key)r0   dmapsr{   s      r)   r}   r}     si     LLZLL99E & &> 	4yy 	&""$$%%& &r+   Fc                    | j         rEt          | j                   dk    r-| j         d         dk    rt          | t                    s| j        S t          fd| j         D                       }|| j        v r|r| j        |         S 	 | |         S # t          $ r Y dS t          t          f$ r}|d}~wt          $ r$ t          t          j                               Y dS w xY w)aA  Returns the current frame in a mapping given a key mapping.

    Args:
        obj: Nested Dimensioned object
        key_map: Dictionary mapping between dimensions and key value
        cached: Whether to allow looking up key in cache

    Returns:
        The item in the mapping corresponding to the supplied key.
    rN   r   Framec              3   D   K   | ]}|j         v |j                  V  d S r$   r8   )r'   kdkey_maps     r)   r*   z!get_plot_frame.<locals>.<genexpr>   s6      OORBGw<N<N <N<N<N<NOOr+   N)kdimsrO   r%   r	   rJ   tupledataKeyErrorStopIterationr   rA   print	traceback
format_exc)map_objr   cachedkeyes    `   r)   get_plot_framer     s    	 #gm,,11gmA6F'6Q6Qw
++ 7R |
OOOO7=OOO
O
OC
glv|C  	3< 	 	 	44}- 	 	 	G 	 	 	)&(()))44	s$   B 
CC,B..-CCc                    |                      d           }t          |                     d           |                    d                     D ]\\  }}t          |t                    rBt          |j                  5  |j        j        |j        _        ddd           n# 1 swxY w Y   ]t          d          5  |                     fdt          t          gd          cddd           S # 1 swxY w Y   dS )a  Extracts a single frame from a nested object.

    Replaces any HoloMap or DynamicMap in the nested data structure,
    with the item corresponding to the supplied key.

    Args:
        obj: Nested Dimensioned object
        key_map: Dictionary mapping between dimensions and key value
        cached: Whether to allow looking up key in cache

    Returns:
        Nested datastructure where maps are replaced with single frames
    c                     | S r$   r7   r   s    r)   r   z'get_nested_plot_frame.<locals>.<lambda>=  s    a r+   c                     | S r$   r7   r   s    r)   r   z'get_nested_plot_frame.<locals>.<lambda>A  s    q r+   c                     | S r$   r7   r   s    r)   r   z'get_nested_plot_frame.<locals>.<lambda>A  s    A r+   NFc                 (    t          |           S )N)r   )r   )r   r   r   s    r)   r   z'get_nested_plot_frame.<locals>.<lambda>F  s    >!WV#L#L#L r+   )clone)
mapzipr   r%   r	   r   rW   rb   r   r   )r0   r   r   r   it1it2s    ``   r)   get_nested_plot_framer   /  s|    GGKK  E [[115>>++3N3NOO : :Sc:&& 	:!#,// : :&)l&9#: : : : : : : : : : : : : : :	E		 = =yyLLLLL$g.e  = == = = = = = = = = = = = = = = = = =s$   ?B""B&	)B&	=(C22C69C6c                 \   |rdnd}d}t          | t                    rd| j        j         d}d| d}n;t          | t                    r	d}d| d	}nt          | t
                    rd
}d| d	}|s
| d| d| S d                    d                    d|z  |d|z  g                    S )z:Generate helpful message regarding an undisplayable objectz<tt>collate</tt>r@   zVFor more information, please consult the Composing Data tutorial (http://git.io/vtIQh)zHoloMap of z objects cannot be displayed.zPlease call the z( method to generate a displayable objectzNLayout containing HoloMaps of Layout or GridSpace objects cannot be displayed.z$ method on the appropriate elements.z=GridSpace containing HoloMaps of Layouts cannot be displayed.
z<center>{msg}</center>z<br>z	<b>%s</b>z	<i>%s</i>)msg)r%   r   r-   r4   r   r
   rB   join)r0   htmlr@   infoerrorremedys         r)   rD   rD   J  s    %)7  iGcD#w RNch/NNNUGUUU	C	 	  R`QGQQQ	C	#	# ROQGQQQ A++6++T+++'..FKK5 &+*<=5? 5?. A A 	Ar+   c                     | j         j        dvrdS |dk    rn|dk    r|dz  }nt          d| d           ||           } ||z  | z  S )z
    Scales point sizes according to a scaling factor,
    base size and size_fn, which will be applied before
    scaling.
    )ifNareawidthr   z.Invalid value for argument "scaling_method": "z%". Valid values are: "width", "area".)dtypekind
ValueError)sizessize_fnscaling_factorscaling_method	base_sizes        r)   compute_sizesr   `  s     {z))t	7	"	"'*1^ 1 1 12 2 	2 GENNEn$U*+r+   c                     t          | t                    rDt          |           dk    r| \  }}d}n3t          |           dk    r| \  }}}nt          d          | fdz  \  }}}|||fS )zu
    Process a padding value supplied as a tuple or number and returns
    padding values for x-, y- and z-axis.
    r   r      zPadding must be supplied as an number applied to all axes or a length two or three tuple corresponding to the x-, y- and optionally z-axis)r%   r   rO   r   )paddingxpadypadzpads       r)   get_axis_paddingr   t  s    
 '5!! (w<<1 JD$DD\\Q&D$ Q R R R $:a<dD$r+   c                     t          |           rB| |k    r<t          | t          j                  r|t          j        dd          z  }| |z
  ||z   }} | |fS )z`
    If lower and high values are equal ensures they are separated by
    the defined span.
    rN   r[   )r   r%   np
datetime64timedelta64)lowhighspans      r)   get_minimum_spanr     s_    
 ~~ (#++c2=)) 	1".C000DHd4iT9r+   c                 *   |rq|dk    rk|rC|j         |v r:||j                  d         }||j                  d         }||j                  d         }nB|                     |d          }|j        }|j        }nt          j        t          j        fx}x}}|||fS )zt
    Computes the data, soft- and hard-range along a dimension given
    an element and a dictionary of ranges.
    categoricalr   softhardF)dimension_range)r9   range
soft_ranger   nan)elementranges	dimensiondrangesrangehranges         r)   	get_ranger     s    
  
4Y-// 	%in..IN+F3FIN+F3FIN+F3FF]]9e]DDF)F_FF$&FBF#333&66!!r+   c                   	 | j         }|                                }d|d         j        v sd|d         j        v r|d         n|d         	|}t          |t                    rNt          |j        t                    r3t          	fd|	                                d         D                       }n)t	          d|idg          }t          |j        |          }	j        |v r|	j                 d         }n||                     |j        d	          j                            d
          }|r2|                    |d          r||                             	          }n|                    	          }t          |t                    r|j        }t          |t                    rt          	fd|D                       }||	fS )z
    Utility to find the range for an adjoined
    plot given the plot, the element, the
    Element the plot is adjoined to and the
    dictionary of ranges.
    	frequencyrN   countr   c              3   J   K   | ]}|                     d           v |V  dS allN
dimensions)r'   hmr!   s     r)   r*   z&get_sideplot_ranges.<locals>.<genexpr>  sE       : :R BMM%$8$888 !8888: :r+   r   r   combinednorm	framewiseFc              3   J   K   | ]}|                     d           v |V  dS r   r   )r'   ovr!   s     r)   r*   z&get_sideplot_ranges.<locals>.<genexpr>  sE       6 6e 4 444 44446 6r+   )current_keyr   r9   r%   r   r~   r-   r   r<   _split_overlaysr   rJ   lookup_optionsoptionsgetr   )
plotr   mainr   r   dims
range_item
main_ranger   r!   s
            @r)   get_sideplot_rangesr     s    
CD DGL00GtAw|4K4K$q''QUVWQXCJ$   5di!122 	: : : : :4+?+?+A+A!+D : : : : :J aYwi888
JOV44
x6CH%j1

''
@@HLL[YY	 	/U33 	/#C..s33JJ#))#..J *g&& %_
*.// 6 6 6 6 6z 6 6 6 6 6
z3&&r+   c                     d | D             } d |D             }| d         du s|d         du s| d         |d         k    o%| d         du p|d         du p| d         |d         k    S )z>Checks whether range1 is within the range specified by range2.c                 4    g | ]}t          |          r|nd S r$   r   r'   rs     r)   
<listcomp>z within_range.<locals>.<listcomp>  '    999Q8A;;(aaD999r+   c                 4    g | ]}t          |          r|nd S r$   r   r   s     r)   r   z within_range.<locals>.<listcomp>  r   r+   r   NrN   r7   )range1range2s     r)   within_ranger    s    99&999F99&999FAY$M&)t"3MvayF1I7M OAY$M&)t"3MvayF1I7MPr+   c                 Z   t          t          |           dg          t          t          d | D                                 fdD             t	          fd|D                       rt          d          t          fd|D                       st          d          d S )	Ntesting_kdimr   c                 0    g | ]}|j         D ]	}|j        
S r7   )r   r9   )r'   rz   r   s      r)   r   z+validate_unbounded_mode.<locals>.<listcomp>  s)    (W(W(WRbh(W(W(W(W(W(Wr+   c                 <    i | ]}|                     |          S r7   r   )r'   d	composites     r)   
<dictcomp>z+validate_unbounded_mode.<locals>.<dictcomp>  s'    ===!9??1%%===r+   c              3   D   K   | ]}d  |j         D             k     V  dS )c                     h | ]	}|j         
S r7   r8   r'   r  s     r)   	<setcomp>z4validate_unbounded_mode.<locals>.<genexpr>.<setcomp>  s    )))1)))r+   Nr   )r'   rz   holomap_kdimss     r)   r*   z*validate_unbounded_mode.<locals>.<genexpr>  sO       + + *))))]:: + + + + + +r+   z{DynamicMap that are unbounded must have key dimensions that are a subset of dimensions of the HoloMap(s) defining the keys.c              3      K   | ]J}                                 D ]3\  }}||j        v t          ||                    |                    V  4Kd S r$   )r_   r   r  r   )r'   rz   r  hmrangehmrangess       r)   r*   z*validate_unbounded_mode.<locals>.<genexpr>  so       S S080@0@S S",!WAMM grxx{{33DQMMMMS Sr+   zGHoloMap(s) have keys outside the ranges specified on the DynamicMap(s).)r   r]   setr   r,   rA   r   )holomapsdynmapsr	  r  r  s     @@@r)   validate_unbounded_moder    s   	(++N3CDDDI(W(W8(W(W(WXXYYM====}===H
 + + + +")+ + + + + . T U U 	U S S S Sg S S S S S . - . . 	.. .r+   c                     |                      d t          g          }|                      d dg          }t          d |D                       }|rt          ||           n|r|st	          d          |o| |fS )zEReturns the common mode of the dynamic maps in given composite objectc                     | S r$   r7   r   s    r)   r   z"get_dynamic_mode.<locals>.<lambda>  s    1 r+   c                     | S r$   r7   r   s    r)   r   z"get_dynamic_mode.<locals>.<lambda>  s    A r+   r   c              3   $   K   | ]}|j         V  d S r$   )r   )r'   ms     r)   r*   z#get_dynamic_mode.<locals>.<genexpr>  s$      99AAK999999r+   z[DynamicMaps in unbounded mode must be displayed alongside a HoloMap to define the sampling.)r   r	   r,   r  rA   )r	  r  r  dynamic_unboundeds       r)   get_dynamic_moder    s      zl;;G!!++	{;;H9999999 ='2222	 =8 = < = = 	=#8|%666r+   c                     t          t          d |D             |                    }	  | j        ddt          gi| dS # t          $ r Y dS w xY w)z8
    Initializes any DynamicMaps in unbounded mode.
    c                     g | ]	}|j         
S r7   r8   r  s     r)   r   z(initialize_unbounded.<locals>.<listcomp>  s    222!qv222r+   selection_specsNr7   )dictr   selectr	   r   )r0   r   r   r"  s       r)   initialize_unboundedr#    sv     #22z222C8899F
::J<:6:::::   s   A   
AAc                     t          t          |          |j                  }fdt          |          D             }t	          ||          }||ddfS ||         d         }||||k    fS )zz
    Given a plot, subplot and dynamically generated (Nd)Overlay
    find the closest matching Element for that plot.
    c           	      \    g | ](\  }\  }}|t          t          |          |          f)S r7   )r   r   )r'   r   rh   r1   overlays       r)   r   z"dynamic_update.<locals>.<listcomp>  sI     1 1 1GQ !':a=="==> 1 1 1r+   NFrN   )r   r   current_framer]   r   )	r   subplotr   r&  r_   r   r   closestmatcheds	      `     r)   dynamic_updater+    s    
 "'",S//")"79 9J1 1 1 1(//1 1 1EJ..Ge##GnQGGZ7222r+   Tc                    t          |t                    r2t          j        |          }t          j        ||           }||         } nt          |t
                    r|\  }}n(t          j        |           t          j        |           }}| |z
  ||z
  z  } t          j        	                    | t          j
        t          j        |                               }  ||           } |rt          |           S | S )z[
    Maps an array of values to RGB hex strings, given
    a color range and colormap.
    )mask)r%   r   r   argsortsearchsortedr   nanminnanmaxmaarraylogical_notr   rgb2hex)arrcrangecmaphexxsortedyposcmincmaxs           r)   
map_colorsr>    s    
 &/** 
F*V$$vs++dmfe$$ 	8JD$$33$DTzd4i(ekk#BN2;s3C3C$D$DkEE
$s))C
 s||
r+   c                      t                     |k    r\|r|r fdt          |          D              n<d\  }}t          j        |t                     dz
  |z   |          } fd|D               S )zL
    Resample the number of colors in a palette to the selected number.
    c                 @    g | ]}|t                    z           S r7   rO   r'   r   palettes     r)   r   z$resample_palette.<locals>.<listcomp>(  s(    GGG1wqW~.GGGr+   )g      gP@?rN   c                 ^    g | ])}t          t          j        |                             *S r7   )intr   roundr'   ri   rC  s     r)   r   z$resample_palette.<locals>.<listcomp>,  s.    BBBQws28A;;//0BBBr+   )rO   r   r   linspace)rC  ncolorsr   cmap_categoricallpadrpadindexess   `      r)   resample_paletterN  "  s     7||w 	C+ 	CGGGGgGGGGG,JD$k$Wa(=wGGGBBBB'BBBGNr+   c                     ddl }ddlm}m} |pd}t	           |          s                     d          r                     dd           t          |j                  t          d          k     rTddl m	} 	 |
                                nx# t          $ r* |
                                                                Y nEw xY wdd	l m} |                     |                                                                          t	           |          r|r fd
t          |          D             S  j        |k    rsd   t#          j         j                            D             t'                    |k    r2fdt#          j        dt'                    dz
  |          D             S d   t#          j        dd|                    D             S )zH
    Converts a matplotlib colormap to palette of RGB hex strings."
    r   N)ColormapListedColormap   Categorytabz3.5cm)	colormapsc                 T    g | ]$}t          j        |j        z                     %S r7   )r5  colorsN)r'   r   r8  s     r)   r   z&mplcmap_to_palette.<locals>.<listcomp>I  s.    NNN!wt{1TV8455NNNr+   c                 ,    g | ]}t          |          S r7   r5  r'   cs     r)   r   z&mplcmap_to_palette.<locals>.<listcomp>L  s    CCCawqzzCCCr+   c                 :    g | ]}t          |                   S r7   rE  rG  s     r)   r   z&mplcmap_to_palette.<locals>.<listcomp>N  s#    \\\q73q66?\\\r+   rN   c                 ,    g | ]}t          |          S r7   r\  r]  s     r)   r   z&mplcmap_to_palette.<locals>.<listcomp>P  s    AAA1GAJJAAAr+   )
matplotlibmatplotlib.colorsrP  rQ  r%   
startswithreplacer   __version__rV  get_cmaprA   lowerrW  r   r   rZ  r   arangerO   rH  )	r8  rI  r   mplrP  rQ  rV  rW  rC  s	   `       @r)   mplcmap_to_paletterk  0  s    ::::::::nGdH%% D??:&& 	3<<
E22D3?##genn44%%%%%%1{{4(( 1 1 1{{4::<<001 -,,,,,==y}}TZZ\\'B'BCCD$''  	NNNNuW~~NNNGNVgCC44	$&0A0A+B+BCCCG7||w&&\\\\BK3w<<PQ>SZ4[4[\\\NAAR[Aw%?%? @ @AAAAs   :B 1CCc                     ddl m} dg}|pd}t           fd|D                       }                     d          r+t	          t          | d d                                      }n|          }t          ||||          S )Nr   )rC  glasbeyrR  c              3       K   | ]}|v V  	d S r$   r7   )r'   r^  r8  s     r)   r*   z+colorcet_cmap_to_palette.<locals>.<genexpr>Y  s'      9919999999r+   _r)colorcetrC  r,   endswithr\   reversedrN  )r8  rI  r   rC  
categoriesrJ  s   `     r)   colorcet_cmap_to_paletteru  S  s          JnG9999j99999}}T  xSbS	 23344$-GWk;KLLLr+   c           	           ddl m} g d}t           fd|D                       }d}                     d          r d d          d}| o0                                 |j        vo                     d	           }|r| }|pd
}                     d          r                     dd            |j        v r|j                  }n2t          | t          |                                 d                     }|t          d  d          t          |t                    rU |v s                                 |v r;|                     |                                                                         }t          |t                    r;|t          |                   }|s#t          |          |k     rt!          ||          }nt#          |          r ||          }|r|d d d         }t%          t'          ||||                    S )Nr   palettes)	accentcategorydark
colorblindpastelset1set2set3pairedc              3   D   K   | ]}|                                 v V  d S r$   rh  )r'   catr8  s     r)   r*   z+bokeh_palette_to_palette.<locals>.<genexpr>i  s0      EE33$**,,.EEEEEEr+   Fro  rp  TfirerR  rT  rS  zSupplied palette z not found among bokeh palettes)bokehrx  r,   rr  
capitalizerj  rd  re  all_palettesgetattrr   r%   r!  r   rc   rO   polylinear_gradientcallabler\   rN  )	r8  rI  r   rx  rt  rJ  reverseinvertedrC  s	   `        r)   bokeh_palette_to_paletter  c  sL   4 4 4JEEEE*EEEEEG}}T CRCy %$ 0):):(,)N 0///  nG u /||E:.. x$$$'-(D'(DOO<M<Mt*T*TUURTRRRSSS	GT	"	" D4??;L;LPW;W;W++dGKK0A0A$B$BCC'4   ##g,,' 	@7||g%%-gw??	'		 #''""''$$B$- ';@PQQRRRr+   
   c                     t          |           t          |          g}t          d          D ]5fdt          d          D             }|                    |           6d |D             S )z?
    Interpolates the color gradient between to hex colors
    rN   c           	          g | ]?}t          |         t                    d z
  z  |         |         z
  z  z             @S )rN   )rE  float)r'   jr   nr[   ts     r)   r   z#linear_gradient.<locals>.<listcomp>  sI    RRRAs1Q4588QqS>AaD1I">>??RRRr+   r   c                 @    g | ]}t          d  |D                       S )c                     g | ]}|d z  S )g     o@r7   r]  s     r)   r   z.linear_gradient.<locals>.<listcomp>.<listcomp>  s    )))QtV)))r+   r\  )r'   rgbs     r)   r   z#linear_gradient.<locals>.<listcomp>  s/    ???sG))S)))**???r+   )hex2rgbr   r`   )	start_hex
finish_hexr  gradientcurr_vectorr   r[   r  s     `  @@@r)   linear_gradientr    s     		A
AsH1a[[ % %RRRRRRRqRRR$$$$??h????r+   c                    t          t          |          t          |           dz
  z            }t          | d         | d         |          }t          |           t          |          k    r|S t	          dt          |           dz
            D ]G}t          | |         | |dz            |dz             }|t          |          dk    r
|dd         n|z  }H|S )zH
    Interpolates the color gradients between a list of hex colors.
    rN   r   N)rE  r  rO   r  r   )rY  r  n_outr  colnext_colorss         r)   r  r    s     aCKKM*++Evay&)U;;H
6{{c(mm##QFa(( M M%fSk6#a%=%'JJs;'7'7!';';KOOLOr+   CMapInfor9   providerrz  sourcebg)rb  r  rq  c                    | t           } n;t          | t                    r&| t           vrt          d| dt                     | g} g }fd}d| v r	 ddl}ddlm} t          |d          rt          |j                  }nNt          |d	          rt          |j	                  }n)t          |j
                  t          |j                  z   }| |d|          z  }| |dd
 |D                       z  }n# t          $ r Y nw xY wd| v rJ	 ddlm} | |d|j                  z  }| |dd |j        D                       z  }n# t          $ r Y nw xY wd| v r[	 ddlm}m}	 |	                                }
||
d<   | |d|
          z  }| |dd |
D                       z  }n# t          $ r Y nw xY wt)          t+          |                    S )z
    List available colormaps by combining matplotlib, bokeh, and
    colorcet colormaps or palettes if available. May also be
    narrowed down to a particular provider or list of providers.
    NzColormap provider z  not recognized, must be one of c                 D     r fd|D             nt          |          S )Nc           	      8    g | ]}t          |d d d           S )Nr  )r  )r'   r  r  s     r)   r   z-_list_cmaps.<locals>.info.<locals>.<listcomp>  s-    dddYZa4ttTTTdddr+   )r\   )r  namesrecordss   ` r)   r   z_list_cmaps.<locals>.info  s5    +dddd^cdddd#E{{	+r+   rb  r   rU  rW  _cmap_registryc                 B    g | ]}|                     d           |d z   S ro  rr  )r'   r8  s     r)   r   z_list_cmaps.<locals>.<listcomp>  sC     )E )E )Et04d0C0C)Ed )E )E )Er+   r  rw  c                 B    g | ]}|                     d           |d z   S r  r  rS   s     r)   r   z_list_cmaps.<locals>.<listcomp>  s<     $= $= $=q+,::d+;+;$=AdF $= $= $=r+   rq  )
glasbey_hv	palette_nr  c                 B    g | ]}|                     d           |d z   S r  r  rS   s     r)   r   z_list_cmaps.<locals>.<listcomp>  s.    &X&X&X!qzzRVGWGW&Xqv&X&X&Xr+   )	providersr%   strr   rb  rV  hasattrr\   rW  r  cmaps_listeddatadImportErrorr  rx  r  rq  r  r  copysortedr   )r  r  cmapsr   rj  rV  	mpl_cmapsrx  r  r  cet_mapss    `         r)   _list_cmapsr    s    	Hc	"	" 9$$ 8( 8 8*38 8 9 9 9:E+ + + + + x	$$$$%%%%%% sK(( A //		-.. A !233		 11$rx..@	TT,	222ETT, )E )Ey )E )E )E F F FEE 	 	 	D	(	&&&&&&TT'8#8999ETT' $= $=H4I $= $= $= > > >EE 	 	 	D	X	66666666 ~~''H%/H\"TT*h///ETT*&X&Xx&X&X&XYYYEE 	 	 	D	/%(()))s8   B%C9 9
DD8E 
EEA	F& &
F32F3c                 h    |D ].}t          j        t          t          ||| ||                     /dS )a  
    Maintain descriptions of colormaps that include the following information:

    name     - string name for the colormap
    category - intended use or purpose, mostly following matplotlib
    provider - package providing the colormap directly
    source   - original source or creator of the colormaps
    bg       - base/background color expected for the map
               ('light','dark','medium','any' (unknown or N/A))
    r  N)bisectinsort	cmap_infor  )rz  r  r  r  r  r9   s         r)   register_cmapsr    sU      2 2ith3;F-/"1 "1 "1 	2 	2 	2 	22 2r+   c                    t          | d          }t                      }|D ]{}	|	j        }
d}|
                    d          r
|
dd         n|
}|8|dk    r|
                    d          s|dk    r*|
                    d          st          D ]}|j        |k    rd}|                    |
          }|
                    d          rN|j        dk    rC|j        d	k    r|                    d
          }n!|j        d
k    r|                    d	          }|	||j        v rA| 	| |j        v r6|	||j        v r+|	||j	        v r |	||j        v r|
                    |           |s6||dk    r.t          |
|	j        ddd          }|
                    |           }|rt          |d           S t          t          t          d |D             d                               S )z?
    Return colormap names matching the specified filters.
    T)r  r  Fro  Nrp  r8   	Diverginglightr{  )r  Miscellaneous)r  rz  r  r  c                     | j                             d          d         | j        pd| j                                        | j        | j        pdfS )N r   )rz  splitr  r9   rh  r  r  )r   s    r)   r   zlist_cmaps.<locals>.<lambda>-  sD    1:++C004adjb!&,,..RSR\^_^f^ljlm r+   )r   c                     g | ]	}|j         
S r7   r8   )r'   recs     r)   r   zlist_cmaps.<locals>.<listcomp>0  s    +H+H+HCH+H+H+Hr+   c                 *    |                                  S r$   r  )r  s    r)   r   zlist_cmaps.<locals>.<lambda>0  s    WXW^W^W`W` r+   )r  r  r9   rr  r  _replacerz  r  r  r  addr  r  r\   r   )r  r  r9   rz  r  r  r  	availablematchesavailanamer*  basenamer   s                 r)   
list_cmapsr    s2    Xt<<<IeeG  j$~~d33>ssOd]]u~~d33]e^^ENN4$8$8^ & &68##7 ZZUZ++1nnT** 4
k0I0I$--ZZ6Z2211D&LLZZ7Z331 L (H
,B,B (H
,B,B .f.@.@ j"**{{1~~~  0Ho4M4M UENO[_cghhhA  dmm
 
 
 	

 OF+H+H+H+H+HN`N`$a$a$abbcccr+   zUniform Sequentialrb  bidsr{  )viridisplasmainfernomagmacividiszMono Sequentialcolorbrewerr  )GreysPurplesBluesGreensOrangesRedsYlOrBrYlOrRdOrRdPuRdRdPuBuPuGnBuPuBuYlGnBuPuBuGnBuGnYlGnzOther Sequentialmisc	gist_yargbinary)afmhotgraybone	gist_gray	gist_heathotpinkr,   )copperspringsummerautumnwintercoolWistiar  )	BrBGPiYGPRGnPuOrRdBuRdGyRdYlBuRdYlGnSpectral)coolwarmbwrseismicCategorical)AccentDark2PairedPastel1Pastel2Set1Set2Set3d3)tab10tab20tab20btab20cRainbownipy_spectral	gist_ncar)brghsvgist_rainbowrainbowjetr  )CMRmap	cubehelix
gist_earth
gist_sterngnuplotgnuplot2oceanterrainflagprismrq  cet)	bgywbgykbcbmwbmykgyr  dimgrayr  )blueskrkgkbzUniform Diverging)r  gwvbwycwrbkrbkymediumbjyzUniform Rainbow)r$  
colorwheelisolumr  )ViridisPlasmaInfernoMagma)r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )
Category10
Category20Category20bCategory20c
ColorblindzUniform Categorical)rm  glasbey_coolglasbey_warmr  glasbey_lightglasbey_darkc                    |dn|}t          | t                    rd | j        D             nAt          | t                    rt	          |           nt          | t                    r| nt          | t
                    rt          d          }t          d          }t          d          }|dk    s|,| |v s|                                 |v rt          | ||          n|dk    s|,| |v s| 	                                |v rt          | ||          nX|dk    s|| |v rt          | ||          n:t          d|  d| d	          	 t          | |          n# t          $ r dY nw xY wt          t                    st          d
|  d| d          |r.t                    |k    rfdt!          |          D             S S )zD
    Convert valid colormap specifications to a list of colors.
    Nzmatplotlib, bokeh, or colorcetc                 Z    g | ](}t          |t                    rt          |          n|)S r7   )r%   r   r5  r]  s     r)   r   z process_cmap.<locals>.<listcomp>  s1    RRRAu!5!5<71:::1RRRr+   rb  r  rq  zSupplied cmap z not found among z colormaps.zcmap argument z  expects a list, Cycle or valid z colormap or palette.c                 @    g | ]}|t                    z           S r7   rA  rB  s     r)   r   z process_cmap.<locals>.<listcomp>  s(    @@@A#g,,'@@@r+   )r%   r   r.   r   r\   r  r  rh  rk  r  r  ru  r   rA   	TypeErrorrO   r   )	r8  rI  r  r   providers_checkedr  bk_cmaps	cet_cmapsrC  s	           @r)   process_cmaprY    s7    ;C:J66PX$ RRdkRRR	D%	 	  t**	D$		 	D#		 --	w''
++	|##(8di>O>OSWS]S]S_S_clSlSl(wDDGG  X%548;K;KtO`O`dlOlOl.tWkJJGG##(8TY=N=N.tWkJJGGcdccEVcccddd	(w77GG 	 	 	GGG	gt$$ ywwwO`wwwxxx A3w<<7**@@@@w@@@@Ns   E E.-E.   c           
      @   t          |           t          |          dz
  k    r!t          d|t          |           fz            t          j        |          }t	          |          t          |          }}||z
  }g }t          ||           D ].\  }	}
||
gt          t          ||	|z  z                      z  z  }/||\  }}t          t          |||z
  |z  z                      }t          t          |||z
  |z  z                      }||z
  }||k    r|dz   }|||         }||k    rnt          j	        t          j
        t          j        |          |z
                      }t          |          |dz   k    r|||dz            n||dz
  |dz            }||fS )a  
    Maps the supplied colors into bins defined by the supplied levels.
    If a clip tuple is defined the bins are clipped to the defined
    range otherwise the range is computed from the levels and returned.

    Arguments
    ---------
    colors: list
      List of colors (usually hex string or named colors)
    levels: list or array_like
      Levels specifying the bins to map the colors to
    clip: tuple (optional)
      Lower and upper limits of the color range
    N: int
      Number of discrete colors to map the range onto

    Returns
    -------
    cmap: list
      List of colors
    clip: tuple
      Lower and upper bounds of the color range
    rN   zwThe number of colors in the colormap must match the intervals defined in the color_levels, expected %d colors found %d.Nr   )rO   r   r   diffminrc   r   rE  rF  argminabsr3  )rY  levelscliprZ  	intervalsr<  r=  intervalr8  intvr^  clminclmaxlidxuidxidxs                   r)   color_intervalsrj    s   0 6{{c&kk!m## F s6{{+, - - 	- IVc&kk$DDyHDy&)) 2 2aCah/001111u5U4Z1233445T%Z123344v4<<6DDIE>>)BF28F#3#3E#9::;;C),Vs1u)<)<6#s1u*%%&QPSTUPUBVD:r+   , c                 p    t          | t                    s| g} |                    d | D                       S )z;
    Returns an axis label for one or more dimensions.
    c                     g | ]	}|j         
S r7   )pprint_labelr  s     r)   r   z"dim_axis_label.<locals>.<listcomp>  s    >>>a1>>>>r+   )r%   r\   r   )r   	separators     r)   dim_axis_labelrp    s;     j$''Bzl>>>>:>>>???r+   c                 F   d}t          | t                    rSt          j        d|           }|r:|                                }|                     |d          }t          |          } n| S |r| |z  } |-| d                    d                              d          |z   } | S )z/
    Scales a numeric or string font size.
    Nz[-+]?\d*\.\d+|\d+r  z.3f0.)r%   r  rematchgroupre  r  rstrip)sizescalingextru  values        r)   scale_fontsizer|    s     C$ -t44 	KKMME,,ub))C<<DDK g~
}}##C((//44s:Kr+   皙?c                 J      fd}|                     |t          g          S )z=
    Attaches plot refresh to all streams on the object.
    c                 ~    t          |           D ]+}j        |j        vr|                    j                   ,d S r$   )r   refresh_subscribersadd_subscriber)r{   streamr   
precedences     r)   append_refreshz&attach_streams.<locals>.append_refresh  sQ    (.. 	@ 	@F|6#666%%dlJ???	@ 	@r+   )r   r	   )r   r0   r  r  s   ` ` r)   attach_streamsr  	  s@    @ @ @ @ @ @ <<555r+   c                 <    |                      fd           dS )z
    Traverses the object and sets the supplied attribute on the
    object. Supports Dimensioned and DimensionedPlot types.
    c                 &    t          |           S r$   )setattr)r   	attributer{  s    r)   r   z!traverse_setter.<locals>.<lambda>  s    71i77 r+   N)r   )r0   r  r{  s    ``r)   traverse_setterr    s+    
 LL7777788888r+   c                    |                      ddg          }t          j                    5  t          j        dd           |                    d                              t          j                  }t          j        |j	        |z
            }t          j
        |t          j                   ||dk             }t          |          r |                                cddd           S 	 ddd           n# 1 swxY w Y   dS )z8
    NumPy based implementation of get_min_distance
    r   rN   ignorezinvalid value encountered infloat32N)r3  warningscatch_warningsfilterwarningsastypeviewr   	complex64r_  Tfill_diagonalinfrO   r]  )r   xys	distancess      r)   _get_min_distance_numpyr    s7    --A

C		 	"	" # #*IJJJjj##((66F359%%	
BF+++ik*	y>> 	#==??# # # # # # # #	## # # # # # # # # # # # # # # 1s   B1C66C:=C:c                     	 ddl m}  ||                     ddg                                                    S # t          $ r t          |           cY S w xY w)zW
    Gets the minimum sampling distance of the x- and y-coordinates
    in a grid.
    r   )pdistrN   )scipy.spatial.distancer  r3  r]  rA   r  )r   r  s     r)   get_min_distancer  ,  st    
0000000uW]]Aq6**++//111 0 0 0&w/////0s   7: AAc           
         | j         }|                    d|j                  }g }|D ]+}|d         \  }}|d         \  }}	t          j        |	|z
  ||z
            }
|t          j        |
t          j        dz  z             |z  z
  }|	t          j        |
t          j        dz  z             |z  z
  }|t          j        |
t          j        dz  z
            |z  z
  }|	t          j        |
t          j        dz  z
            |z  z
  }t          j        ||f||	ft          j	        t          j	        f||f||	f||fg          }|
                    |           -|S )zt
    Computes paths for a directed path which include an arrow to
    indicate the directionality of each edge.
    r3  )datatyper   r   rN      )_split_edgepathsr  r   r   arctan2cospisinr3  r   r`   )r   arrow_length	edgepathsedgesarrowsr   sxsyexeyradxa0ya0xa1ya1arrows                   r)   get_directed_graph_pathsr  8  sP   
 (IOOWOIIEF 
 
1B1BjB2&&26#beAg+&&|3326#beAg+&&|3326#beAg+&&|3326#beAg+&&|332r(RHrvrv.>*r2hc
< = =eMr+   c                 d    t          |           dk    r
| dd         }  dj        d | D              S )z&
    Convert RGB(A) tuple to hex.
    r   Nr  z#{:02x}{:02x}{:02x}c              3   :   K   | ]}t          |d z            V  dS )rZ  Nr`  r'   ri   s     r)   r*   zrgb2hex.<locals>.<genexpr>T  s,      )B)B#ae**)B)B)B)B)B)Br+   )rO   rB   )r  s    r)   r5  r5  N  s@     3xx!||#2#h' ')B)Bc)B)B)BCCr+   c                     t          | t                    rDt          |           }|                    d          r|                    d          r
|dd         }n| j        }|S )z7
    Returns the key to look up a dimension range.
    zdim('z')   rp  )r%   r!   reprrd  rr  r9   )eldimdim_names     r)   dim_range_keyr  W  sf     % ;;w'' 	&H,=,=d,C,C 	&"~H:Or+   c                 >      fdt          ddd          D             S )z "#FFFFFF" -> [255,255,255] c                 F    g | ]}t          ||d z            d          S )r      r`  )r'   r   r9  s     r)   r   zhex2rgb.<locals>.<listcomp>g  s/    	4	4	4!#c!AaC%j"

	4	4	4r+   rN      r   r  )r9  s   `r)   r  r  d  s)     
5	4	4	4uQq||	4	4	44r+   c                   @    e Zd Z ej        dd          Zd ZddZdS )apply_nodataNz
        Optional missing-data value for integer data.
        If non-None, data with this value will be replaced with NaN so
        that it is transparent (by default) when plotted.defaultdocc                     |                     d          }|| j        j        k    }t          |d          r |                    |t
          j                  S t          j        ||t
          j                  S )z=Replace `nodata` value in data with NaN, if specified in optsfloat64where)r  rT   nodatar  r  r   r   )selfr   r-  s      r)   _replace_valuezapply_nodata._replace_valueq  s_    {{9%%TV]"4!! 	,::dBF+++xdBF+++r+   c                    | j         j        |S t          |d          r\|j        d         }|j                            ||          }|j        dvr|S t          || j                  } |j	        di |j
        |iS |                    dd          j        }|j        j        dvr|S |                    d          }|                    |                     |                    S )	N	interfacer   iur   F)flatr  r7   )rT   r  r  vdimsr  r   r   r!   r  	transformr9   dimension_valuesr  r  r   )r  r   r   vdimr   r  r3  s          r)   _processzapply_nodata._processy  s    6= N7K(( 	==#D%++GT::Ez%%D$"566I$7$>>	9'=>>>,,QU,;;=E{t++LL++E==!4!4U!;!;<<<r+   r$   )r4   r5   r6   r>   Integerr  r  r  r7   r+   r)   r  r  j  sV        U]4 .= > > >F
, , ,= = = = = =r+   r  z^#(?:[0-9a-fA-F]{3}){1,2}$)r   r   rN   )r         ?r  )r   g      ?r   )r   r   r   )r  r   r  )rN   r   r   )rN   rN   rN   )r  r  r   )r   r   r   r   )	br^  grh   r  r   wytransparent)gwg?gbx>r   )g@gҦ?gC?r   )gM~N?g
<"?r   )g-9(a?g^W*^+?r   )g7?gM%,Fq2?r   )gX?gX|[T7?g72{<)gؿ?g_1D<?g'i˲`<)gϽK;?g8@?g`x<)gQfL2r?gMl^0C?r   )gs?gnTe	G?r   )g7̒?g3pV?r   )gcAJ?gLsW?r   )gD4ؙ?g?JTT?r   )god?gvb Y?r   )gb?g-R\?r   )gQH?gj}]X?r   )gwJ?gLX?r   )g]P?gAȘ`?r   )g&?gjP`?r   )g8gDio?gjD\?r   )g6o1?g&"dTY?gjUCɁ>)g:ǀ?g-Z?gw(;[?)g?gS3+\?gzm|?)gݰmQf?gQ2n]?gy^u>)gB?go=1_?gr>>)g0Bxq?g_!se`?gGm?)g4c?g%7a?g%>?)goe1?gtb?gvŷpS>)g2d?g+gb?gYAi.>)g*<?g (c?g(=?)gFw;S?g簱d?g[NIC>)gi?gZ)e?gR>T>)g9]?g2f?g>)gx?ggg,g?gߺ]?)grPL?g@7oh?gq)\>)g?x=?gei?g`>)g0?g-%&k?g/sA?)gNE*-?g2$)l?g3Qh2?)gGg?gpWm?gST->)g?gng_yn?gݟ>)gXO0?gαro?gA	N\?)g0GĔ?gRm"p?gU"(>)gN]?g_7q?gA/b>)g^?gq?g+.zf1?)g?gRp'lr?g;fF>)gk)?g3Rs?gb">)g	?g-t?gqG͑tQ>)gJ^c@?gNt?g:t/?)g>٬\?gWu?g*=->)g?gHiv?gga>)gBC+?g?5g3=w?gzk?)gQy?gOjx?g>)g/?g+|"x?g휌H>)g2bb?g]91y?g}n?)g\?ggP<z?g2S>)gP}:3?ghyܝ{?g-%=>)g\*?g)ko|?gv8 ?)g4)?gY^!}?gw|HF>)gXVn?gd4<~?gG}j}>)g?g[?gٶtA= ?)g6!A?gM`g?gd>)g@"2?g͎%?g8>)g9]?ggp?g>)g/$?gaWI?g;>)g@?gy?g.v>)g+?g)bS?g{v>)gp1=a?gk?gu">)g{?g4yS?g1E8>)gU?g[z4?gr.2>)g<?gajK?g$?>)gMbX9?gk?g>)g[='o?g:6U?gPnD*>)gg67?gdϞ$?g(;>)g? M?gZ?g?8>)gN@?gǁW˝?gk%el>)gcAJ?gZa?g{c>)gTr3܀?g&4?gJ>)gdCԷ?gEaE?gd/±>)gW>?g;?g>Qr>)g.&?g&(̍?g@7<`>)gN]?g,?gW('>)gMO?g??gI.6>)g9?ghUM?gY};>)gݘ?g|zlː?gPԠ>)g4Ry;?gyrM?gz%t>)gYBs?g#ӑ?g@w>)gZ!?gV
\?gP>)gPc*?g?g0 ʋ>)g#G?gC?{?glTh>)g3yS?gD?gw.>)g]wb֋?g7櫔?g?I>)g?gbJ?gHf~ >)g*?gR.?gXBT>)g8*5?gk?gq>)g m?gQ&E?g[Z>)g؞Y?gUP?g7>)gVzNz?gV,?gv`0>)gXQi?g|r?gq~V>)gQ?gY8?g~,>)g
ϛ?g?gPrm&>)g?gڛ?r   )gx?g~U.T?r   )gz6?g҈?r   )go?g@v?r   )gui?gR{?r   )g ?g:ؗl<?r   )g{?gb? ?r   )gJiWV?g}F?r   )gUB?g!?r   )g`-?gKHr?r   )g3?gr3܀?r   )gup>?g?Z?r   )gd]Fx?g9ӄ'c?r   )gR?g9Վ?r   )g@?gե?r   )gKR%?gWL?r   )gV_?gٕz?r   )g`Ù?giƢd?r   )g.o?g3Ib?r   )g+j0?ggc?r   )gfc]F?g3Mg'?r   )gUMu?gA)V¬?r   )g~ R8?gn!?r   )go?gd<J%<?r   )g}Жs)?gVpA?r   )g9(a_?gXǱ?r   )g0*?g҈}?r   )gj?gpwnд?r   )gdu?gyUg?r   )g0L
F%?gj4?r   )gHP?gvOjM?r   )g	h"lx?g}bٽ?r   )g!X4?gdF?r   )g9b->?g+ٱ?r   )g:@0G?g@j'?r   )g#gaO;?gMۿҤ?r   )gq@H?gg
%?r   )gY-?gy?r   )gkC?g <.?r   )gDV?gC9Ѯ?r   )gղHh?gZ*oG8-?r   )gd]Fx?gn\?r   )gJY?gBL?r   )gPI5?gʡE?r   )gW[?g`"?r   )gU+~?g#GG?r   )g"?gBxqZ?r   )gM»?gI ?r   )gO`?g@_?r   )gn?geV?r   )g#bJ$?gB>٬?r   )gףp=
?gyt?r   )gjH?g~:?r   )gi?g>'I?r   )gL7A`?gS!uq?r   )gY9?g~k,	?r   )g?W[?gm?r   )g M?gl!A	3?r   )gQN?gi o?r   )gX?g|a2U?r   )g@j'?gZӼ?r   )g~k	?g+yp?r   )gB>٬?g1 {?r   )g\U]?git3?r   )g6?g:M?r   )g?gNz1?r   )gf?g?r   )gA	3m?g%ǝ?r   )gVe?g7l[ ?r   )rN   gQkw?r   )rN   gn?r   )rN   gS.Q?gy]JS>)rN   gUB?gɋ?)rN   g;%?g,l?)rN   g镲?gk,&?)rN   g'UHI?gJ0?)rN   g-&6׆?gQda7?)rN   g<!7?g
%@?)rN   gH.?gh*D?)rN   g&S:?g/]E\J?)rN   gdu?gߗ#@4P?)rN   gJ?gUbCAS?)rN   gC5v?g)FL?W?)rN   gjjZ_$?g(s=[?)rN   gʦ\]?g7`	_?)rN   g{?gv$$b?)rN   grt?gwcd?)rN   g
p?gUYXg?)rN   gm4@?g{
%8j?)rN   gx?gȱSnGm?)rN   g.Q5?gBp?)rN   gH|?g	q?)rN   gQ?gO}s?)rN   gh?RDU?g!9u?)rN   gME*?g~}w?)rN   glscz?gly?)rN   gh㈵?gC|?)rN   gtA}˜.?gz~?)rN   gN#Ed?gsy?)rN   gD4ؙ?gw/Rā?)rN   gŧ ?gi[%?)rN   g1߄B?g>I?)rN   g<.9?g(Bv?)rN   g m?g9d?)rN   gm~?gF0E?)rN   gD?gAL?)rN   gA&9?gA)V?)rN   gp>??gK?)rN   g-s?g2SZK?)rN   gIK?gR?o*R?)rN   g*?gx'e?)rN   g,?gb*?)rN   gK7A?go[t?)rN   g~jt?gzPPV?)rN   g+ڧ?g	m9?)rN   g?g0GĔ?)rN   g=!7?gG˵h?)rN   g[Ɏ@?g2;ީ?)rN   g-s?gwIQ?)rN   gb?gU?)rN   gG ^/?gWt5=?)rN   gqZ|
?g#bJ$?)rN   g?:u<?gͮ{+?)rN   gypwn?gV,?)rN   gk	?g]gE?)rN   g^F?g!s?)rN   gzk`?gvhX?)rN   gz6?g5
?)rN   gJh?gҤt{?)rN   g}"O?gME?)rN   g	^)?gR{mǬ?)rN   g*?gk?)rN   gvq-?gec]?)rN   g4)^?g@1d?)rN   gW?gǚA?)rN   g̯ ?g\sG˵?)rN   go?gr4?)rN   gq&"?gPN?)rN   gʉvR?g(ILپ?)rN   gh o?g\[%X?)rN   g㥛 ?gAf?)rN   g?gÙ_?)rN   g*	?gӟH?)rN   gJ4?g1*?)rN   gAH0[?gAe?)rN   g?g^x?)rN   g=U?g~nض?)rN   g|?5^?ge,i?)rN   gB=?gZ ?)rN   gzG?gH}?)rN   gJR?gKTol?)rN   g؁sF?gC9Ѯ?)rN   g@ޫV&?g!u?)rN   g:3P?g|,}?c           	          g | ]B\  }}}d t          |dz            dt          |dz            dt          |dz            dCS )#rZ  02xr`  )r'   r   r  r  s       r)   r   r   !  sh     " " "Aa 	CCCLLBBc!c'llBBAGBBB " " "r+   c                   8    e Zd ZdZ ej                    ZddZdS )categorical_legendz
    Generates a Points element which contains information for generating
    a legend by inspecting the pipeline of a datashaded RGB element.
    Nc                 "   dd l }ddlm}m}m} |j                            |d          }t          ||          r|}n|j                            |d          }d ||fv rd S |j        }	 |j        j	        d         |	          }
|
                    |
|j                  }t          ||j        |j        f          sd S |j        }t          |	j        d          r	 t#          |	j        j        |         j                  }nF# t(          $ r9 t#          |	j        j        |         j                                                  }Y nw xY w|dgk    r6t#          |	j        |         j                                        j                  }n$t#          |	                    |d                    }|j        p|j        j        d	 |D             }t          t"                    rfd
t9          |          D             }nfd|D             }i }|                                D ]@\  }}t          |t<                    r!t?          d |d d         D                       }|||<   AtA          |dg          !                    |dd| j"        j#        d          S )Nr   r   )	datashade	rasterizeshadeF)skip_nonlinkeddtypes__UNKNOWN_CATEGORIES__)rG   c                     g | ]}d d |fS r   r7   )r'   r  s     r)   r   z/categorical_legend._process.<locals>.<listcomp>I  s    222cq!Sk222r+   c                 (    i | ]\  }}||         S r7   r7   )r'   r   r  rY  s      r)   r
  z/categorical_legend._process.<locals>.<dictcomp>K  s#    GGGVQ#vayGGGr+   c                 "    i | ]}||         S r7   r7   )r'   r  rY  s     r)   r
  z/categorical_legend._process.<locals>.<dictcomp>M  s    ;;;s#vc{;;;r+   c                     g | ]}|d z  S )rR  r7   r  s     r)   r   z/categorical_legend._process.<locals>.<listcomp>Q  s     : : :13 : : :r+   r   rz  )r  T)r8  colorshow_legendbackendvisible)$
datashaderoperation.datashaderr  r  r  pipelinefindr%   dataset
operations_get_aggregator
aggregator	count_catbycolumnr  r   r\   r  rt  rU  	to_pandasr  as_knownr  	color_keyrY  Sets1to3r]   r_   r   r5  r   optsrT   r  )r  r   r   dsr  r  r  rasterize_opshade_ophvdsinput_elaggr  cats
color_data
cat_colorsr8  r  r  rY  s                      @r)   r  zcategorical_legend._process-  s   FFFFFFFFFF',,Yu,MMlI.. 	J#HH',,U5,IIHHl+++417#.q1$77**8\5LMM#be455 	F49h'' 		GMDI,V4?@@ M M MDI,V4?IIKKLLM 0111DIf-1::<<GHH--fu-EEFFD#9ry'922T222
fd## 	<GGGGyGGGJJ;;;;d;;;J$**,, 	 	JC%'' < : :bqb	 : : :;;DIIj555::ZTFNE ; 3 3 	3s   $D   A EEr$   )r4   r5   r6   __doc__r>   Stringr  r  r7   r+   r)   r  r  %  sA         
 elnnG(3 (3 (3 (3 (3 (3r+   r  c                   >    e Zd ZdZ ej        i d          ZddZdS )flatten_stackz
    Thin wrapper around datashader's shade operation to flatten
    ImageStacks into RGB elements.

    Used for the MPL and Plotly backends because these backends
    do not natively support ImageStacks, unlike Bokeh.
    zF
        Additional parameters passed to datashader's shade operation.r  Nc                 r    	 ddl m} n"# t          $ r}t          d          |d }~ww xY w ||fi | j        S )Nr   )r  z+Flattening ImageStacks requires datashader.)r  r  r  shade_params)r  r   r   r  excs        r)   r  zflatten_stack._processd  sm    	V4444444 	V 	V 	VKLLRUU	VuW22 1222s   	 
(#(r$   )r4   r5   r6   r  r>   Dictr  r  r7   r+   r)   r  r  X  sW          5:b /I J J JL3 3 3 3 3 3r+   r  r$   r  )F)T)NF)r  )NFNNNNN)NNF)NrZ  )rk  )r}  )jr  rt  r   r  collectionsr   r   numpyr   r>   packaging.versionr   corer   r   r	   r
   r   r   r   r   r   core.ndmappingr   core.operationr   core.optionsr   r   core.spacesr   	core.utilr   r   r   r   r   r   r   r   r   r   r   re   r   r    util.transformr!   r/   Parameterizedr3   r=   r@   rL   rP   r^   ry   r   r}   r   r   rD   r   r   r   r   r   r  r  r  r#  r+  r>  rN  rk  ru  r  r  r  r  r  r  r  r  r  rY  rj  rp  r|  r  r  r  r  r  r5  r  r  r  compileRGB_HEX_REGEXCOLOR_ALIASESfire_colorslinear_kryw_0_100_c71r  r  r  r7   r+   r)   <module>r$     s    				      / / / / / / / /      % % % % % %
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 ( ' ' ' ' ' & & & & & & / / / / / / / / , , , , , ,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
       * * * * * * * *              $ ) ( ( ( (e! ( ( ('y)))/1 /1 /1dT T T  K K K K\
J 
J 
J   D
& 
& 
&   <= = = =6A A A A,, , ,(  (	 	 	" " "&"' "' "'JP P P. . .
7 
7 
7  3 3 3"   .   B  B  B  BFM M M M +S +S +S +S\
@ 
@ 
@ 
@    		JKKK	L	L///	7* 7* 7* 7*t2 2 2" OS $2d 2d 2d 2dj #\66888: : :  ,w9 9 9: : :
 !<(   !<     !<HHHJ J J {L-% % %& & & {L&'"""$ $ $ }lM5     }lD%***, , , y,k"$ $ $ y,4446 6 6 ff0 0 01 1 1 feW   #Z     #Z! ! ! "Jw%%%' ' ' "Jv
EN   "Jx
G    *eU&&&( ( ( #Wff---/ / /  '='; ; ;< < <
 {G]G% % %& & & }gtU>>>@ @ @ }g}e     }gvuN   $j%===? ? ? $j%   $j%  " " " "J. . . .b@ @ @ @  ,6 6 6 69 9 9   	0 	0 	0  ,D D D
 
 
5 5 5= = = = =9 = = =B 
899 
							
 
"@'K # # #@'K&I&I&I@'K # # #@'K&I&I&I@'K $ # #@'K 'J&I&I@'K $ # #	@'K 'J&I&I	@'K
 $ # #@'K
 'J&I&I@'K $ # #@'K 'J&I&I@'K $ # #@'K 'J&I&I@'K $ # #@'K 'J&I&I@'K $ # #@'K 'J&I&I@'K $ # #@'K 'J&I&I@'K $ # #@'K 'J&I&I@'K $ # #@'K 'J&I&I@'K $ # #@'K 'J&I&I@'K $ # #@'K 'J&I&I@'K $ # #@'K 'J&I&I@'K  $ # #!@'K  'J&I&I!@'K" $ # ##@'K" 'J&I&I#@'K$ $ # #%@'K$ 'J&I&I%@'K& $ # #'@'K& 'J&I&I'@'K( $ # #)@'K( 'J&I&I)@'K* $ # #+@'K* 'J&I&I+@'K, $ # #-@'K, 'J&I&I-@'K. $ # #/@'K. 'J&I&I/@'K0 $ # #1@'K0 'J&I&I1@'K2 $ # #3@'K2 'J&I&I3@'K4 $ # #5@'K4 'J&I&I5@'K6 $ # #7@'K6 'J&I&I7@'K8 $ # #9@'K8 'J&I&I9@'K: $ # #;@'K: 'J&I&I;@'K< $ # #=@'K< 'J&I&I=@'K> $ # #?@'K> 'J&I&I?@'K@ $ # #A@'K@ 'J&I&IA@'KB $ # #C@'KB 'J&I&IC@'KD $ # #E@'KD 'J&I&IE@'KF $ # #G@'KF 'J&I&IG@'KH $ # #I@'KH 'J&I&II@'KJ $ # #K@'KJ 'J&I&IK@'KL $ # #M@'KL 'J&I&IM@'KN $ # #O@'KN 'J&I&IO@'KP $ # #Q@'KP 'J&I&IQ@'KR $ # #S@'KR 'J&I&IS@'KT $ # #U@'KT 'J&I&IU@'KV $ # #W@'KV 'J&I&IW@'KX $ # #Y@'KX 'J&I&IY@'KZ $ # #[@'KZ 'J&I&I[@'K\ $ # #]@'K\ 'J&I&I]@'K^ $ # #_@'K^ 'J&I&I_@'K` $ # #a@'K` 'J&I&Ia@'Kb $ # #c@'Kb 'J&I&Ic@'Kd $ # #e@'Kd 'J&I&Ie@'Kf $ # #g@'Kf 'J&I&Ig@'Kh $ # #i@'Kh 'J&I&Ii@'Kj $ # #k@'Kj 'J&I&Ik@'Kl $ # #m@'Kl 'J&I&Im@'Kn $ # #o@'Kn 'J&I&Io@'Kp $ # #q@'Kp 'J&I&Iq@'Kr $ # #s@'Kr 'J&I&Is@'Kt $ # #u@'Kt 'J&I&Iu@'Kv $ # #w@'Kv 'J&I&Iw@'Kx $ # #y@'Kx 'J&I&Iy@'Kz $ # #{@'Kz 'J&I&I{@'K| $ # #}@'K| 'J&I&I}@'K~ $ # #@'K~ 'J&I&I@'K@ $ # #A@'K@ 'J&I&IA@'KB $ # #C@'KB 'J&I&IC@'KD $ # #E@'KD 'J&I&IE@'KF $ # #G@'KF 'J&I&IG@'KH $ # #I@'KH 'J&I&II@'KJ $ # #K@'KJ 'J&I&IK@'KL $ # #M@'KL 'J&I&IM@'KN $ # #O@'KN 'J&I&IO@'KP $ # #Q@'KP 'J&I&IQ@'KR $ # #S@'KR 'J&I&IS@'KT $ # #U@'KT 'J&I&IU@'KV $ # #W@'KV 'J&I&IW@'KX $ # #Y@'KX 'J&I&IY@'KZ $ # #[@'KZ 'J&I&I[@'K\ $ # #]@'K\ 'J&I&I]@'K^ $ # #_@'K^ 'J&I&I_@'K` $ # #a@'K` 'J&I&Ia@'Kb $ # #c@'Kb 'J&I&Ic@'Kd $ # #e@'Kd 'J&I&Ie@'Kf $ # #g@'Kf 'J&I&Ig@'Kh $ # #i@'Kh 'J&I&Ii@'Kj $ # #k@'Kj 'J&I&Ik@'Kl $ # #m@'Kl 'J&I&Im@'Kn $ # #o@'Kn 'J&I&Io@'Kp $ # #q@'Kp 'J&I&Iq@'Kr $ # #s@'Kr 'J&I&Is@'Kt $ # #u@'Kt 'J&I&Iu@'Kv $ # #w@'Kv 'J&I&Iw@'Kx $ # #y@'Kx 'J&I&Iy@'Kz $ # #{@'Kz 'J&I&I{@'K| $ # #}@'K| 'J&I&I}@'K~ $ # #@'K~ 'J&I&I@'K@ $ # #A@'K@ 'J&I&IA@'KB $ # #C@'KB 'J&I&IC@'KD $ # #E@'KD 'J&I&IE@'KF $ # #G@'KF 'J&I&IG@'KH $ # #I@'KH 'J&I&II@'KJ $ # #K@'KJ 'J&I&IK@'KL $ # #M@'KL 'J&I&IM@'KN $ # #O@'KN 'J&I&IO@'KP $ # #Q@'KP 'J&I&IQ@'KR $ # #S@'KR 'J&I&IS@'KT $ # #U@'KT 'J&I&IU@'KV $ # #W@'KV 'J&I&IW@'KX $ # #Y@'KX 'J&I&IY@'KZ $ # #[@'KZ 'J&I&I[@'K\ $ # #]@'K\ 'J&I&I]@'K^ $ # #_@'K^ 'J&I&I_@'K` $ # #a@'K` 'J&I&Ia@'Kb $ # #c@'Kb 'J&I&Ic@'Kd $ # #e@'Kd 'J&I&Ie@'Kf $ # #g@'Kf 'J&I&Ig@'Kh $ # #i@'Kh 'J&I&Ii@'Kj $ # #k@'Kj 'J&I&Ik@'Kl $ # #m@'Kl 'J&I&Im@'Kn $ # #o@'Kn 'J&I&Io@'Kp $ # #q@'Kp 'J&I&Iq@'Kr $ # #s@'Kr 'J&I&Is@'Kt $ # #u@'Kt 'J&I&Iu@'Kv $ # #w@'Kv 'J&I&Iw@'Kx $ # #y@'Kx 'J&I&Iy@'Kz $ # #{@'Kz 'J&I&I{@'K| $ # #}@'K| 'J&I&I}@'K~ $ # #@'K~ 'J&I&I@'K@ $ # #A@'K@ 'J&I&IA@'K @K#F" " " " "03 03 03 03 03 03 03 03f3 3 3 3 3I 3 3 3 3 3r+   