
    eq                    p   d Z ddlmZ ddlZddlZddlZddlmZmZm	Z	m
Z
mZmZmZmZmZmZ ddlZddlmZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlm Z  ddl!m"Z" erTddl#mZ 	 ddl$m%Z% eeedf         Z&n# e'$ r eeef         Z&Y nw xY weee(         e(f         Z)eee(         ee(         f         Z*d'dZ+d(dZ, G d dej-                  Z. G d de.          Z/ G d d e0          Z1 G d! d"e1          Z2 G d# d$e2          Z3e.4                    e2%           e/4                    e3%           d&Z5dS ))zE
Defines Links which allow declaring links between bokeh properties.
    )annotationsN)
TYPE_CHECKINGAnyDictIterableListOptionalSequenceTupleTypeUnion)CustomJS	LayoutDOMModel   )create_linked_datamodel)LOADING_INDICATOR_CSS_CLASS)ReactiveHTML)Reactive)warn)Viewable)r   Dimensionedr   source
'Reactive'
propertiesIterable[str]returnNonec           
         |D ]}|                     d          rt          | d          rut          | j        t                    r[| j        }|                    d          D ]=}t          ||          rt          ||          }#t          d| d| j         d          || j        vr|t          | j
                                                  vr\t          j        |t          | j                            }|rd|}nd}t          d	|d
t          |           j         d| d          | j                            |d          | j
                            |d          (t          d|dt          |           j         d          d S )Nevent:object.zCould not resolve z on zF model. Ensure you jslink an attribute that exists on the bokeh model.z Similar parameters include:  Could not jslink  parameter (or property) on > object because it was not found. Similar parameters include: FCannot jslink  parameter on zG object, the parameter requires a live Python kernel to have an effect.)
startswithhasattr
isinstancer"   r   splitgetattr
ValueErrorparamlist_renamevaluesdifflibget_close_matchestype__name___source_transformsget)r   r   propcurrentattrmatchesmatches_reprs          +lib/python3.11/site-packages/panel/links.pyassert_source_syncabler@   &   s     ??8$$ 	VX&& 	:fmY+O+O 	mG

3  7D)) %gt44G # # #6= # # #  	 &,&&4tFN<Q<Q<S<S7T7T+T+T/d6<6H6HIIG "JwJJ!FD F F6ll+F F6BF F F  
 '++D%88@n  u--5% % %tF||7L % % %   65     target'JSLinkTarget'Dict[str, str]c                n   |                                 D ]\  }}|                    d          r||j        vr|t          |j                                                  vr[t          j        |t          |j                            }|rd|z  }nd}t          d|dt          |           j
         d|           |j                            |d          |j                            |d          @t          d|d	t          |           j
         d
|d	t          |          j
         d	           d S )Nr!   z Similar parameters include: %rr$   r%   r&   r'   Fr(   r)   z object to z5. It requires a live Python kernel to have an effect.)itemsr*   r0   r1   r2   r3   r4   r5   r/   r6   r7   r8   r9   )r   rB   r   kpr=   r>   s          r?   assert_target_syncablerI   H   s      ""  1<<!! 	fl""qV^5J5J5L5L0M0M'M'M/43E3EFFG "@7J!EA E E6ll+E E6BE E  
 '++Au55=n  E**2F F FDLL4I F FF F04V0EF F F   3 rA   c                      e Zd ZU dZ ej        i dd          Z ej        dd          Z ej	                    Z
ded	<   i Zd
ed<   dZded<   	 	 d'd( fdZd)dZed*d            Zed+d            Ze	 d,d-d&            Z xZS ).Callbackz
    A Callback defines some callback to be triggered when a property
    changes on the source object. A Callback can execute arbitrary
    Javascript code and will make all objects referenced in the args
    available in the JS namespace.
    Tz
        A mapping of names to Python objects. These objects are made
        available to the callback's code snippet as the values of
        named parameters to the callback.)default
allow_NonedocNz
        A dictionary mapping from a source specification to a JS code
        snippet to be executed if the source property changes.rL   rN   z?weakref.WeakKeyDictionary[Reactive | BkModel, List['Callback']]registryz1Dict[Type['Callback'], Type['CallbackGenerator']]
_callbacksFbool_requires_targetr   r   rB   rC   argsDict[str, Any]coderD   c                    |$t          dt          |           j        z            |dnt          j        |          | _        |si } t                      j        d||d| |                                  dS )a9  
        A Callback defines some callback to be triggered when a
        property changes on the source object. A Callback can execute
        arbitrary Javascript code and will make all objects referenced
        in the args available in the JS namespace.

        Arguments
        ---------
        source (Reactive):
           The source object the callback is attached to.
        target (Reactive | Model, optional):
           An optional target to trigger some action on when the source
           property changes.
        args (Dict[str, Any], optional):
           Additional args to make available in the Javascript namespace
           indexed by name.
        code (Dict[str, str], optional):
           A dictionary mapping from the changed source property to
           a JS code snippet to execute.
        Nz%s must define a source)rT   rV    )	r/   r6   r7   weakrefref_sourcesuper__init__init)selfr   rB   rT   rV   params	__class__s         r?   r]   zCallback.__init__|   s    2 >6d9LLMMM%~tt7;v3F3F 	D8d88888		rA   r   r   c                   t           j        t          j        vr)t          j                            t           j                   | j        }|dS || j        v r| j        |         }d | j                                        	                                D             }|D ]}d |j                                        	                                D             }t          |d          sHt          |          t          |           u r |j        |u r|j        | j        u r	||k    r dS | j        |                             |            dS | g| j        |<   dS )z(
        Registers the Callback
        Nc                &    i | ]\  }}|d k    ||S namerX   .0rG   vs      r?   
<dictcomp>z!Callback.init.<locals>.<dictcomp>   *       AV1rA   c                &    i | ]\  }}|d k    ||S rd   rX   rf   s      r?   ri   z!Callback.init.<locals>.<dictcomp>   *       !QAKKAqKKKrA   rB   )rK   _process_callbacksr   _preprocessing_hooksappendr   rP   r0   r3   rF   r+   r6   rB   r_   r   linksr`   linklink_paramss         r?   r^   zCallback.init   sj    &h.KKK)001LMMM>FT]""M&)E !%!2!2!4!4!:!:!<!<  F    %)Z%6%6%8%8%>%>%@%@   tX.. 4jjDJJ..4;&3H3Ht{22v7L7LFFM&!((.....%)FDM&!!!rA   callbackType['CallbackGenerator']c                    || j         | <   dS )zu
        Register a LinkCallback providing the implementation for
        the Link for a particular backend.
        N)rQ   )clsrt   s     r?   register_callbackzCallback.register_callback   s     'srA   Reactive | Nonec                <    | j         r|                                  nd S N)r[   r_   s    r?   r   zCallback.source       !%7t||~~~47rA   	root_viewr   
root_modelBkModelchangedViewable | Nonec           	         |sd S |j         d         }||                    t                    }||j        v r0||j        |         d                             dt          i          z  }d  j                                        D             t           fd|D                       sd S ||u r|nD|                    t                    t          |                    dt          i                    z   sd S  fdD             }i }dt          j
        v rddlm d	d
lm}	m}
 fd|D             }|                    |	          } |
||          }D ]} j                            |g           D ]}t#          |d          r6|                    |j        g           D ]}|                    |||f           i |t)          |          <   |j                                        D ]J\  }}	 |                    |g           }n# t.          $ r Y )w xY w|D ]}||t)          |                   |<   K|D ]\  }}} j        t3          |                   }|=|t5          |d|g          vs)t5          |dd          r|||t5          |d|g          vr`|                    t)          |          i           } ||||||           d S )Nidr   r6   c                P    g | ]#}|D ]}t          |t                    |j        $S rX   )r,   LinkrB   )rg   rq   rr   s      r?   
<listcomp>z/Callback._process_callbacks.<locals>.<listcomp>   s:    rrruRWrr$[efjlp[q[qrt{rrrrrA   c              3  2   K   | ]}|j         v p|v V  d S r{   )rP   )rg   mrw   targetss     r?   	<genexpr>z.Callback._process_callbacks.<locals>.<genexpr>   s3      JJQqCL(8ALJJJJJJrA   c           
         g | ]c}j                             |g           D ]E}|j        r(|j        v st	          |j        t
          j                  1||t          |d d          fFdS )rB   N)rP   r9   rS   rB   r,   r0   Parameterizedr.   )rg   srcrr   rw   linkables      r?   r   z/Callback._process_callbacks.<locals>.<listcomp>   s     
 
 
;>((b11
 
(
 -1K8,C,C$+u':;; -D 3h556,C,C,C,CrA   	holoviewsr   r   )	HoloViewsgenerate_panel_bokeh_mapc                b    g | ]+\  }}}t          |          t          |          &|||f,S rX   )r,   )rg   rr   r   tgtr   s       r?   r   z/Callback._process_callbacks.<locals>.<listcomp>   sX       %5dC"3448B38T8TsC   rA   rB   _modelsrS   F)arg_overrides)rZ   selectr   r   r   rP   r3   anyr1   sysmodulesholoviews.core.dimensionr   pane.holoviewsr   r   r9   r+   rB   ro   r   rT   rF   	ExceptionrQ   r6   r.   )rw   r~   r   r   
old_modelsrZ   inspectfoundr   r   r   hv_views
map_hve_bkr   rr   r   rG   rh   hv_objscb	overridesr   r   r   s   `                    @@@r?   rm   zCallback._process_callbacks   s     	FnT"&&x00Ggo%%7?3/2996G:LMMMrr0C0C0E0ErrrGJJJJJ'JJJJJ HH   **T*2C2CVgDV2W2W-X-XX   	F
 
 
 
 
BJ
 
 
 46#+%%<<<<<<KKKKKKKK   9>  E !''	22H11*hGGJ = =L,,S"55 = =DtX.. ;#->>$+r#B#B ; ;C!LL$S)9::::.0M"T((+ $	 1 1 = =1%&0nnQ&;&;GG( % % %$H%#* = =C9<M"T((3A66=== !& 	D 	DT3T

+B73	C5+I+I I I1599 !J>AkSY0N0N%N%N%))"T((B77IBz4cCCCCC	D 	Ds   0H
H	H	)NNN)r   r   rB   rC   rT   rU   rV   rD   r   r   )rt   ru   r   r   )r   ry   NN)r~   r   r   r   r   r   )r7   
__module____qualname____doc__r0   r   rT   rV   rY   WeakKeyDictionaryrP   __annotations__rQ   rS   r]   r^   classmethodrx   propertyr   rm   __classcell__ra   s   @r?   rK   rK   a   sx          5:bT 8- . . .D
 5:d )B C C CD
 QjPWPiPkPkHkkkk EGJFFFF #"""" <@<@             D+ + + +8 ' ' ' [' 8 8 8 X8 cgAD AD AD AD [AD AD AD AD ADrA   rK   c                       e Zd ZdZ ej        dd          Z ej        i d          ZdZ	dd fdZ
edd            ZddZddZ xZS )r   aW  
    A Link defines some connection between a source and target model.
    It allows defining callbacks in response to some change or event
    on the source object. Instead a Link directly causes some action
    to occur on the target, for JS based backends this usually means
    that a corresponding JS callback will effect some change on the
    target in response to a change on the source.

    A Link must define a source object which is what triggers events,
    but must not define a target. It is also possible to define bi-
    directional links between the source and target object.
    Fz>
        Whether to link source and target in both directions.rO   z[
        A dictionary mapping between source specification to target
        specification.TNr   r   rB   Optional['JSLinkTarget']c                    | j         r&|$t          dt          |           j        z            |d nt	          j        |          | _         t                      j        |fi | d S )Nz%s must define a target.)	rS   r/   r6   r7   rY   rZ   _targetr\   r]   )r_   r   rB   r`   ra   s       r?   r]   zLink.__init__#  sn      	OV^7$t**:MMNNN%~tt7;v3F3F**6*****rA   r   'JSLinkTarget' | Nonec                <    | j         r|                                  nd S r{   )r   r|   s    r?   rB   zLink.target*  r}   rA   r   c                $   |                                   | j        }|dS || j        v r| j        |         }d | j                                                                        D             }|D ]u}d |j                                                                        D             }t          |          t          |           u r |j        |u r|j        | j        u r	||k    r dS v| j        |                             |            dS | g| j        |<   dS )z$
        Registers the Link
        Nc                &    i | ]\  }}|d k    ||S rd   rX   rf   s      r?   ri   zLink.link.<locals>.<dictcomp>9  rj   rA   c                &    i | ]\  }}|d k    ||S rd   rX   rf   s      r?   ri   zLink.link.<locals>.<dictcomp>=  rl   rA   )	r^   r   rP   r0   r3   rF   r6   rB   ro   rp   s         r?   rr   z	Link.link.  s7    			>FT]""M&)E !%!2!2!4!4!:!:!<!<  F    %)Z%6%6%8%8%>%>%@%@   JJ$t**,,1F1Ft{22v7L7LFFM&!((.....%)FDM&!!!rA   c                    | j         }|dS | j                            |g           }| |v r|                    |            dS dS )z&
        Unregisters the Link
        N)r   rP   r9   remove)r_   r   rq   s      r?   unlinkzLink.unlinkG  sT     >F!!&"--5==LL =rA   r{   )r   r   rB   r   )r   r   r   )r7   r   r   r   r0   Booleanbidirectionalr   r   rS   r]   r   rB   rr   r   r   r   s   @r?   r   r     s          "EM% 6A B B BM B -   J
 + + + + + + + 8 8 8 X8+ + + +2	 	 	 	 	 	 	 	rA   r   c                  n    e Zd ZdZdi fd)dZed*d            Zd+dZd Zd,d Z	d-d"Z
d.d$Zd/d'Zd0d(ZdS )1CallbackGeneratorTNr   'Model'rr   'Link'r   r   rB   r   r   rU   c           
     x   || _         || _        || _        || _        || _        |                                  |                     |||          }|D ]h\  }}}	|d         r&|$|d                             d          r	|d         s4	 |                     |||||||	           Q# t          $ r | j
        r Y ew xY wd S )Nr   r!   )r   rr   r   rB   r   validate
_get_specsr*   _init_callbackr   error)
r_   r   rr   r   rB   r   specssrc_spectgt_specrV   s
             r?   r]   zCallbackGenerator.__init__X  s     %	*ff55(- 		 		$Hh{ v1hqk6L6LX6V6V1_ghi_j1##JfhPXZ^____   : D			 		s   B""B76B7objrC   
model_spec
str | Noner   'Model' | Nonec                l   ddl m} d}dt          j        v rr ||          rg||j        S |                    d          }|d         }t          |          dk    rd                    |dd                   }nd}|j        |         }nt          |t                    r*|j                            |j        d         d          \  }}nBt          |t                    r|}n*t          |t          j                  rt#          ||          }|(|                    d          D ]}	t%          ||	          }|S )	a  
        Resolves a model given the supplied object and a model_spec.

        Arguments
        ----------
        root_model: bokeh.model.Model
          The root bokeh model often used to index models
        obj: holoviews.plotting.ElementPlot or bokeh.model.Model or panel.Viewable
          The object to look the model up on
        model_spec: string
          A string defining how to look up the model, can be a single
          string defining the handle in a HoloViews plot or a path
          split by periods (.) to indicate a multi-level lookup.

        Returns
        -------
        model: bokeh.model.Model
          The resolved bokeh model
        r   )is_bokeh_element_plotNr   r#   r   r   r   )r   r   r   r   stater-   lenjoinhandlesr,   r   r   r9   rZ   r   r0   r   r   r.   )
rw   r   r   r   r   modelmodel_specshandle_spec_specs
             r?   _resolve_modelz CallbackGenerator._resolve_modeln  sN   . 	:99999#+%%*?*?*D*D%!y (..s33)!n{##a''!$+abb/!:!:JJ!%JK0X&& 	={z~d';\JJHE11W%% 	=EEU011 	=+C<<E!"((-- - -t,,rA   r   'SourceModelSpec'r   r   'TargetModelSpec'rV   Optional[str]r   c           
     	   d |j                                                                         D             }|                     |||d                   }	|	d S |j        d         }
t          |          ||ft          |	j                                                  t          |	j                                                  z   }t          fd|D                       rd S |	|d<   d }|j
        r$|                     |||d                   }|||d<   t          |j        fi | j                                        D ]C\  }}|                     ||d           }||||<   $t          |t           j                  s|||<   Ddt           j        v rdd	lm}m} t          ||          r|j        |
         d         }n|}t-          |d          rd
nd} ||          rB|j                                        D ](\  }}||z   }t          |t0                    r	||vr|||<   )t          ||          r|
|j        v r|j        |
         d         }n|} ||          rB|j                                        D ](\  }}d|z   }t          |t0                    r	||vr|||<   )t          |	t2                    r-|d         |	j                                        v r|	j        x|d<   }	t          |t2                    r-|d         |j                                        v r|j        x|d<   }|                     |||	|d         |||d                    |                     |           |&|                     |||d         ||d                   }nd                    |          }tA          ||g          }| !                    ||          \  }}|D ]}|	"                    ||           |D ]}|	#                    ||           |d         }tI          |dd          r||d S |                     |||||d                   }t          |          }||d<   |	|d<   tA          ||g          }| !                    |d |f          \  }}|                                }|D ]J}||vr.d| d| d}| j%        rtM          |          tO          |           |"                    ||           K|D ]}|#                    ||           d S )Nc                "    i | ]\  }}|d v	||S ))r   rB   re   rV   rT   rX   rf   s      r?   ri   z4CallbackGenerator._init_callback.<locals>.<dictcomp>  s6     P P Ptq!"NNN NNNrA   r   r   c              3  4   K   | ]}|D ]}|j         v V  d S r{   )tags)rg   cbsr   link_ids      r?   r   z3CallbackGenerator._init_callback.<locals>.<genexpr>  s7      EEcEE2w"'!EEEEEEErA   r   rB   r   r   )r   r   source_r$   target_z2try {{ {code} }} catch(err) {{ console.log(err) }})rV   )rT   rV   r   r   Fz&Could not link non-existent property 'z' on z model)(r0   r3   rF   r   rZ   r   r1   js_property_callbacksjs_event_callbacksr   rS   dictrT   r   r,   r   r   r   r   r   r   _plotsr+   r   r   r   datar   _initialize_models_process_references	_get_codeformatr   _get_triggersjs_on_changejs_on_eventr.   r   r/   r   ) r_   r   rr   r   r   rB   r   rV   
references	src_modelrZ   	callbacks	tgt_modelrG   rh   	arg_modelr   r   r   prefixr   src_cbchangeseventschevtgt_propreverse_referencestgt_cbr   msgr   s                                   @r?   r   z CallbackGenerator._init_callback  s   
P Ptz'8'8':':'@'@'B'B P P P
 ''
FHQKHH	FnT"d88Xx007799::-4466778 	
 EEEEYEEEEE 	F(
8	  	1++JLLI$'0
8$99d&899??AA 	" 	"DAq++J4@@I$ )
15#677 " !
1#+%%HHHHHHHH&),, mC(+")$"9"9AYYrF$$S)) *K--// * *DAq
A!!W-- *!:2E2E()
1&),, 1E1EmC(+$$S)) *K--// * *DAq!AA!!W-- *!:2E2E()
1 i.. 	B{in7799993<>A
8$yi.. 	B{in7799993<>A
8$yfi!fiYabcYdeee  ,,,<>>$VXa[QQDDGNNTXNYYDzG9EEE,,T8<< 	/ 	/B""2v.... 	. 	.B!!"f----A;t_e44 		8IXM]F~~dFHfhqkJJ!*--'08$'08$1G9MMM,,TD(3CDD))++
 	/ 	/B##YrYY	YYY: $S//)III""2v.... 	. 	.B!!"f----	. 	.rA   c                    dS )z8
        Method to process references in place.
        NrX   )r_   r   s     r?   r   z%CallbackGenerator._process_references        rA   ASequence[Tuple['SourceModelSpec', 'TargetModelSpec', str | None]]c                    g S )z\
        Return a list of spec tuples that define source and target
        models.
        rX   )r_   rr   r   rB   s       r?   r   zCallbackGenerator._get_specs  s	     	rA   strc                    dS )z2
        Returns the code to be executed.
        r$   rX   )r_   rr   r   r   rB   r   s         r?   r   zCallbackGenerator._get_code  s	     rrA   Tuple[List[str], List[str]]c                
    g g fS )zK
        Returns the changes and events that trigger the callback.
        rX   r_   rr   r   s      r?   r   zCallbackGenerator._get_triggers#  s     2vrA   r   r   c                    dS )z_
        Applies any necessary initialization to the source and target
        models.
        NrX   )r_   rr   r   r   r   rB   r   r   s           r?   r   z$CallbackGenerator._initialize_models+  r  rA   c                    d S r{   rX   r|   s    r?   r   zCallbackGenerator.validate4  s    rA   )
r   r   rr   r   r   r   rB   r   r   rU   )r   r   r   rC   r   r   r   r   )r   r   rr   r   r   r   r   r   rB   r   r   r   rV   r   r   r   rr   r   r   r   rB   rC   r   r  rr   r   r   rC   r   r  rB   r   r   r   r   r  rr   r   r   r   r   r  r   r   r   r   r   r  rB   r   r   r   r   r   r   r   r   )r7   r   r   r   r]   r   r   r   r   r   r   r   r   r   rX   rA   r?   r   r   T  s        E ,0QS    , . . . [.`k. k. k. k.Z  
                 rA   r   c                      e Zd ZddZddZdS )JSCallbackGeneratorrr   r   r   r   r   r  c                    |d                              d          r$g |d                             d          d         gfS |d         gg fS )Nr   r!   :)r*   r-   r	  s      r?   r   z!JSCallbackGenerator._get_triggers;  sT     A;!!(++ 	3))#..q1222}b  rA   r   r   rB   rC   r  c                   |j         D ]}|                    d          }|                    d          rd |f}1t          |          dk    r&d                    |d d                   |d         f}j|d         }t          |t                    r|j                            ||          }d |f}|d|j         |         fgS )Nr#   r!   r   r   r   )	rV   r-   r*   r   r   r,   r   r2   r9   )r_   rr   r   rB   r   	src_specsr   src_props           r?   r   zJSCallbackGenerator._get_specsB  s     I 
	, 
	,D

3Ix(( , $<Y!##HHYss^44imD$Q<fh// F%~11(HEEH (+<49::rA   Nr  r  )r7   r   r   r   r   rX   rA   r?   r  r  9  s<        ! ! ! !; ; ; ; ; ;rA   r  c                  D     e Zd ZdZdZdZd fdZddZddZddZ	 xZ
S ) JSLinkCallbackGeneratora  
    var value = source['{src_attr}'];
    value = {src_transform};
    value = {tgt_transform};
    try {{
      var property = target.properties['{tgt_attr}'];
      if (property !== undefined) {{ property.validate(value); }}
    }} catch(err) {{
      console.log('WARNING: Could not set {tgt_attr} on target, raised error: ' + err);
      return;
    }}
    try {{
      target['{tgt_attr}'] = value;
    }} catch(err) {{
      console.log(err)
    }}
    a  
    var value = true
    try {{
      var property = target.properties['{tgt_attr}'];
      if (property !== undefined) {{ property.validate(value); }}
    }} catch(err) {{
      console.log('WARNING: Could not set {tgt_attr} on target, raised error: ' + err);
      return;
    }}
    try {{
      target['{tgt_attr}'] = value;
    }} catch(err) {{
      console.log(err)
    }}
    a  
    if ('{src_attr}'.startsWith('event:')) {{
      var value = true
    }} else {{
      var value = source['{src_attr}'];
      value = {src_transform};
    }}
    if (typeof value !== 'boolean' || source.labels !== ['Loading']) {{
      value = true
    }}
    var css_classes = target.css_classes.slice()
    var loading_css = ['{loading_css_class}', 'pn-{loading_spinner}']
    if (value) {{
      for (var css of loading_css) {{
        if (!(css in css_classes)) {{
          css_classes.push(css)
        }}
      }}
    }} else {{
     for (var css of loading_css) {{
        var index = css_classes.indexOf(css)
        if (index > -1) {{
          css_classes.splice(index, 1)
        }}
      }}
    }}
    target['css_classes'] = css_classes
    rr   r   r   r   rB   rC   r   r  c                   |j         r#t                                          |||          S g }|j                                        D ]2\  }}|                    d          }t          |          dk    r&d                    |d d                   |d         f}n<|d         }t          |t                    r|j
                            ||          }d |f}|                    d          }	t          |	          dk    r&d                    |	d d                   |	d         f}n<|	d         }
t          |t                    r|j
                            |
|
          }
d |
f}|                    ||d f           4|S )Nr#   r   r  r   )rV   r\   r   r   rF   r-   r   r   r,   r   r2   r9   ro   )r_   rr   r   rB   r   r   r   r  r  	tgt_specsr   ra   s              r?   r   z"JSLinkCallbackGenerator._get_specs  sy    9 	<77%%dFF;;;"&/"7"7"9"9 	5 	5Hh s++I9~~!!HHYss^44imD$Q<fh// F%~11(HEEH (+ s++I9~~!!HHYss^44imD$Q<fh// F%~11(HEEH (+LL(Hd34444rA   r   r   r   r  r   r   r   r   r   r   c                   |M|rJ|rGd t          |di                                           D             }|                    ||          }	|                    d          rd S t	          |t
                    r|	|j        v rt	          |t
                    rd |j                                        D             }
|
                    ||          }t          ||	          }	 |                    ||i          }n# t          $ r i }Y nw xY w||v r||         }nt          ||          }|r'|dk    r!t          ||          rt          |||           |0|j        s+t          dt          | j                  j        z            d S d S )Nc                    i | ]\  }}||	S rX   rX   rf   s      r?   ri   z>JSLinkCallbackGenerator._initialize_models.<locals>.<dictcomp>  s    SSSDAq1aSSSrA   r2   r!   c                    i | ]\  }}||	S rX   rX   rf   s      r?   ri   z>JSLinkCallbackGenerator._initialize_models.<locals>.<dictcomp>  s    GGG1q!GGGrA   value_throttledzJModel could not be resolved on target %s and no custom code was specified.)r.   rF   r9   r*   r,   r   r0   r2   _process_param_changer   r+   setattrrV   r/   r6   rB   r7   )r_   rr   r   r   r   rB   r   r   src_reverse	src_paramtgt_reverse	tgt_paramvaluer   s                 r?   r   z*JSLinkCallbackGenerator._initialize_models  s     X ( SSGFIr,J,J,P,P,R,RSSSK#(;;I""8,, &(++ 5	V\0I0IjY_aiNjNj0IGG0D0D0F0FGGG'OOHh??		22 66	57IJJCC    CCCs??ME	844 4%66679h;W;W6	8U333TY D!$+..78 9 9 9 s   !C9 9DDr   rD   c                    t          |          D ]J}|dk    s!|                    d          r|dd         |v r*|                    |          ||dd         <   KdS )z8
        Strips target_ prefix from references.
        rB   r      N)r1   r*   pop)r_   r   rG   s      r?   r   z+JSLinkCallbackGenerator._process_references  st     j!! 	2 	2AH}}ALL$;$;}qu
?R?R *q 1 1Jqu	2 	2rA   c                   t          |t                    rXd |j                                        D             }|                    ||          }|j                            |          }|d}nd}t          |t                    rZd |j                                        D             }	|	                    ||          }
|
d}n|j                            |
d          }nd}|dk    r.ddlm} | j        	                    |||j
        t                    S |r|                    d          r| j        }n| j        }|	                    ||||	          S )
Nc                    i | ]\  }}||	S rX   rX   rf   s      r?   ri   z5JSLinkCallbackGenerator._get_code.<locals>.<dictcomp>      CCCDAq1aCCCrA   r&  c                    i | ]\  }}||	S rX   rX   rf   s      r?   ri   z5JSLinkCallbackGenerator._get_code.<locals>.<dictcomp>  r,  rA   loadingr   )config)src_attrsrc_transformloading_spinnerloading_css_classr!   )r0  tgt_attrr1  tgt_transform)r,   r   r2   rF   r9   r8   _target_transformsr/  _loading_link_templater   r2  r   r*   _event_link_template_link_template)r_   rr   r   r   rB   r   r"  r#  r1  r$  r%  r5  r/  templates                 r?   r   z!JSLinkCallbackGenerator._get_code  s    fh'' 	$CCFN,@,@,B,BCCCK#(;;I"599)DDM$ '#Mfh'' 	$CCFN,@,@,B,BCCCK#(;;I  ' & 9 = =i Q Q#My  &&&&&&.55! & 6"= 6     /H//99 /4.??!!++	 #   rA   r  r  )r   rD   r   r   r  )r7   r   r   r9  r8  r7  r   r   r   r   r   r   s   @r?   r  r  T  s        N$ :     69 9 9 982 2 2 2& & & & & & & &rA   r  )rt   )rK   r   r  r  r   )r   r   r   r   r   r   )r   r   rB   rC   r   rD   r   r   )6r   
__future__r   r4   r   rY   typingr   r   r   r   r   r	   r
   r   r   r   r0   bokeh.modelsr   r   r   r   io.datamodelr   
io.loadingr   modelsr   reactiver   util.warningsr   viewabler   bokeh.modelr   r   JSLinkTargetr   r  SourceModelSpecTargetModelSpecr@   rI   r   rK   r   r"   r   r  r  rx   __all__rX   rA   r?   <module>rI     sP    # " " " " "  



                        
  > > > > > > > > > > 1 1 1 1 1 1 3 3 3 3 3 3                               	:!!!!!!0888888Xw=> 0 0 0Xw./0HSM3./OHSM8C=89O       D   2gD gD gD gD gDu" gD gD gDTE E E E E8 E E ERa a a a a a a aJ; ; ; ; ;+ ; ; ;6g g g g g1 g g gR 	  $7  8 8 8    7  8 8 8s   (A: :BB