
    ;gq                    6   U 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 ddl	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mZ ddlmZ ddlmZ ddlmZ e
r1ddl mZ 	 ddl!m"Z" eez  e"z  Z#de$d<   e&e'dz  e'f   Z(e&e'dz  e'dz  f   Z)d dZ*	 	 	 	 	 	 	 	 d!dZ+ G d dejX                        Z- G d de-      Z. G d d      Z/ G d de/      Z0 G d de0      Z1e-je                  e0       e.je                  e1       dZ3y# e%$ r eez  Z#de$d<   Y w xY w)"zE
Defines Links which allow declaring links between bokeh properties.
    )annotationsN)IterableSequence)TYPE_CHECKINGAny	TypeAlias)CustomJS	LayoutDOMModel   )create_linked_datamodel)LOADING_INDICATOR_CSS_CLASS)ReactiveESMReactiveHTML)Reactive)warn)Viewable)r   Dimensionedr   JSLinkTargetc           
     
   |D ]}  }|j                  d      rt        | d      rqt        | j                  t              rW| j                  }|j                  d      D ]6  }t        ||      rt        ||      }t        d| d| j                   d       || j                  vr|t        | j                  j                               vr[t        j                  |t        | j                              }|rd|}nd}t        d	|d
t        |       j                   d| d      | j                   j#                  |d      | j                  j#                  |d      [t        d|dt        |       j                   d       y )Nevent:object.zCould not resolve z on zF model. Ensure you jslink an attribute that exists on the bokeh model. 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)source
propertiespropcurrentattrmatchesmatches_reprs          +lib/python3.12/site-packages/panel/links.pyassert_source_syncabler:   $   s   ??8$VX&:fmmY+OmmG

37D)%gt4G (d6==/ B# # 	 ( &,,&4tFNN<Q<Q<S7T+T//d6<<6HIG!>wkJ!#D8 ,6l++, -66B^1F 
 ''++D%8@nn  u-5 tF|7L7L6M N% % 7     c                `   |j                         D ]  \  }}|j                  d      r||j                  vr|t        |j                  j                               vrZt        j                  |t        |j                              }|rd|}nd}t        d|dt        |       j                   d|       |j                  j                  |d      |j                  j                  |d      t        d|d	t        |       j                   d
|d	t        |      j                   d	       y )Nr   r   r   r   r   r   Fr    r!   z object to z5. It requires a live Python kernel to have an effect.)itemsr"   r(   r)   r*   r+   r,   r-   r'   r.   r/   r0   r1   )r2   targetr3   kpr7   r8   s          r9   assert_target_syncablerA   F   s7      "1<<!fll"qV^^5J5J5L0M'M//43EFG!>wkJ!#A5 )6l++, -66B^E 
 ''++Au5=nn  E*2 ^DL4I4I3J KEV0E0E/F GFF ! #r;   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.rD   rF   z=weakref.WeakKeyDictionary[Reactive | BkModel, list[Callback]]registryz-dict[type[Callback], type[CallbackGenerator]]
_callbacksFbool_requires_targetc                    |!t        t        |       j                   d      |dnt        j                  |      | _        |si }t        |   d||d| | j                          y)a;  
        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.

        Parameters
        ----------
        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 must define a source)argscode )	r'   r.   r/   weakrefref_sourcesuper__init__init)selfr2   r>   rM   rN   params	__class__s         r9   rT   zCallback.__init__z   sf    2 >T
 3 344IJKK%~t7;;v3FD8d88		r;   c                &   t         j                  t        j                  vr-t        j                  j	                  t         j                         | j
                  }|y|| j                  v r
| j                  |   }| j                  j                         j                         D ci c]  \  }}|dk7  s|| }}}|D ]  }|j                  j                         j                         D ci c]  \  }}|dk7  s|| }}}t        |d      sQt        |      t        |       u sh|j
                  |u sw|j                  | j                  u s||k(  s y | j                  |   j	                  |        y| g| j                  |<   yc c}}w c c}}w )z(
        Registers the Callback
        Nnamer>   )rC   _process_callbacksr   _preprocessing_hooksappendr2   rH   r(   r+   r=   r#   r.   r>   rV   r2   linksr?   vrW   linklink_paramss           r9   rU   zCallback.init   sb    &&h.K.KK))001L1LM>T]]"MM&)E!%!2!2!4!:!:!<!<AV1!<   %)ZZ%6%6%8%>%>%@%@TQAKAqD%@   tX.4jDJ.4;;&3Ht{{2v7L  MM&!((.%)FDMM&!s   &F4F,F:Fc                "    || j                   | <   y)zu
        Register a LinkCallback providing the implementation for
        the Link for a particular backend.
        N)rI   )clscallbacks     r9   register_callbackzCallback.register_callback   s     'sr;   c                >    | j                   r| j                         S d S N)rR   rV   s    r9   r2   zCallback.source       !%t||~747r;   c                    |sy |j                   d   }||j                  t              }||j                  v r*||j                  |   d   j                  dt        i      z  } j
                  j                         D cg c]&  }|D ]  }t        |t              s|j                  ! ( c}}t         fd|D              sy ||u r}	n6|j                  t              t        |j                  dt        i            z   }	|	sy |	D 
cg c]q  }
 j
                  j                  |
g       D ]P  }|j                  r2|j                  |	v s$t        |j                  t        j                        r||
t!        |dd       fR s }}
}i }dt"        j$                  v rddlm} dd	lm}m} |D 
cg c]#  \  }}
}t        |
|      st        ||      s||
|f% }}
}}|j                  |      } |||      }|	D ]  }
 j
                  j                  |
g       D ]  }t1        |d      r5|j                  |j                  g       D ]  }|j3                  ||
|f        i |t5        |      <   |j6                  j9                         D ]0  \  }}	 |j                  |g       }|D ]  }||t5        |         |<    2   |D ]z  \  }}
} j<                  t?        |         }|
1|t!        |
d
|g      vs!t!        |dd      r|||t!        |d
|g      vrS|j                  t5        |      i       } ||||
||       | y c c}}w c c}}
w c c}}
}w # t:        $ r Y w xY w)Nidr   r.   c              3  F   K   | ]  }|j                   v xs |v   y wrh   )rH   ).0mrd   targetss     r9   	<genexpr>z.Callback._process_callbacks.<locals>.<genexpr>   s'     J'QqCLL(8AL8's   !r>   	holoviewsr   r   )	HoloViewsgenerate_panel_bokeh_map_modelsrK   F)arg_overrides) rQ   selectr   ru   BkModelrH   r+   r$   Linkr>   anyr)   r1   rK   r(   Parameterizedr&   sysmodulesholoviews.core.dimensionr   pane.holoviewsrs   rt   r#   r]   rl   rM   r=   	ExceptionrI   r.   )rd   	root_view
root_modelchanged
old_modelsrQ   inspectr_   ra   linkablesrcfoundrv   r   rs   rt   tgthv_views
map_hve_bkr?   r`   hv_objscb	overridesrp   s   `                       @r9   r[   zCallback._process_callbacks   sN    nnT"&&x0Ggoo%7??3/2996G:LMM030C0C0Er0EuRW$[efjlp[qt{{RW{0ErGJ'JJH   *T*2C2CVgDV2W-XX   CK
BJ3((b1((DKK8,C$++u':':; 3h561 7( 	 
 46#++%<K9>9>%5dC"34
38T sC    !''	2H1*hGJLL,,S"5DtX.#->>$++r#BC!LL$S)9: $C.0M"T(+ $		 11%&0nnQ&;G $+C9<M"T(3A6 $+ !2 6   !&T3T
+B73	C5+I I159ckSY0N%N%))"T(B7Iz4cC !&_ s
   ) %$%s+   L7L7A6L=-(MM

	M	M	)NNN)r2   r   r>   JSLinkTarget | NonerM   zdict[str, Any] | NonerN   zdict[str, str] | NonereturnNone)re   ztype[CallbackGenerator]r   r   )r   zReactive | NoneNN)r   r   r   rx   r   zViewable | None)r/   
__module____qualname____doc__r(   DictrM   rN   rP   WeakKeyDictionaryrH   __annotations__rI   rK   rT   rU   classmethodrf   propertyr2   r[   __classcell__rX   s   @r9   rC   rC   _   s	    5::bT 8- .D
 5::d )B CD
 OhgNgNgNiHKi ACJ=B #d" ?CJN  (; # 2G D+8 ' ' 8 8 cgAD AD.5AD@OAD ADr;   rC   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 )ry   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.rG   z[
        A dictionary mapping between source specification to target
        specification.Tc                    | j                   r#|!t        t        |       j                   d      |d nt	        j
                  |      | _        t        |    |fi | y )Nz must define a target.)	rK   r'   r.   r/   rP   rQ   _targetrS   rT   )rV   r2   r>   rW   rX   s       r9   rT   zLink.__init__!  sV      V^T
 3 344JKLL%~t7;;v3F*6*r;   c                >    | j                   r| j                         S d S rh   )r   ri   s    r9   r>   zLink.target(  rj   r;   c                   | j                          | j                  }|y|| j                  v r| j                  |   }| j                  j	                         j                         D ci c]  \  }}|dk7  s|| }}}|D ]  }|j                  j	                         j                         D ci c]  \  }}|dk7  s|| }}}t        |      t        |       u s[|j                  |u sj|j                  | j                  u s||k(  s y | j                  |   j                  |        y| g| j                  |<   yc c}}w c c}}w )z$
        Registers the Link
        NrZ   )	rU   r2   rH   r(   r+   r=   r.   r>   r]   r^   s           r9   ra   z	Link.link,  s0    			>T]]"MM&)E!%!2!2!4!:!:!<!<AV1!<   %)ZZ%6%6%8%>%>%@%@TQAKAqD%@   J$t*,1Ft{{2v7L  MM&!((.%)FDMM&!s   (D<6D<.E<Ec                    | j                   }|y| j                  j                  |g       }| |v r|j                  |        yy)z&
        Unregisters the Link
        N)r2   rH   r1   remove)rV   r2   r_   s      r9   unlinkzLink.unlinkE  sC     >!!&"-5=LL r;   rh   )r2   r   r>   r   )r   r   r   )r/   r   r   r   r(   Booleanbidirectionalr   r3   rK   rT   r   r>   ra   r   r   r   s   @r9   ry   ry   	  sg     "EMM% 6A BM B - J
 + 8 8+2	r;   ry   c                      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ddZy)CallbackGeneratorTNc           
     P   || _         || _        || _        || _        || _        | j                          | j                  |||      }|D ]?  \  }}}	|d   r||d   j                  d      r|d   s(	 | j                  |||||||	       A y # t        $ r | j                  r Y [w xY w)Nr   r   )r   ra   r2   r>   rv   validate
_get_specsr"   _init_callbackr   error)
rV   r   ra   r2   r>   rv   specssrc_spectgt_specrN   s
             r9   rT   zCallbackGenerator.__init__V  s     %	*ff5(-$Hh{v1hqk6L6LX6V_ghi_j##JfhPXZ^_	 ).
  ::	s   2BB%$B%c                0   ddl m} d}dt        j                  v ra ||      rY||j                  S |j                  d      }|d   }t        |      dkD  rdj                  |dd       }nd}|j                  |   }nvt        |t              r-|j                  j                  |j                  d   d      \  }}n9t        |t              r|}n&t        |t        j                         rt#        ||      }|"|j                  d      D ]  }	t%        ||	      } |S )	a  
        Resolves a model given the supplied object and a model_spec.

        Parameters
        -----------
        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_plotNrr   r   r   rl   r   )r   r   r|   r}   stater%   lenjoinhandlesr$   r   ru   r1   rQ   rx   r(   r{   r   r&   )
rd   r   obj
model_specr   modelmodel_specshandle_spec_specs
             r9   _resolve_modelz CallbackGenerator._resolve_modell  s   . 	:#++%*?*D!yy (..s3)!n{#a'!$+ab/!:J!%JK0X&{{z~~d';\JHE1W%EU001+C<E!"((-t, . r;   c           
     0	   |j                   j                         j                         D 	ci c]  \  }}	|dvr||	 }
}}	| j                  |||d         }|y |j                  d   }t        |      ||ft        |j                  j                               t        |j                  j                               z   }t        fd|D              ry ||
d<   d }|j                  r| j                  |||d         }|||
d<   t        |j                  fi | j                  j                         D ]@  \  }}	| j                  ||	d       }|||
|<   !t        |	t         j                        r<|	|
|<   B dt         j"                  v rdd	lm}m} t        ||      r|j*                  |   d   }n|}t-        |d      rd
nd} ||      rB|j.                  j                         D ]%  \  }}	||z   }t        |	t0              s||
vs!|	|
|<   ' t        ||      r!||j*                  v r|j*                  |   d   }n|} ||      rB|j.                  j                         D ]%  \  }}	d|z   }t        |	t0              s||
vs!|	|
|<   ' t        |t2        t4        f      r0|d   |j6                  j9                         v r|j6                  x|
d<   }t        |t2        t4        f      r0|d   |j6                  j9                         v r|j6                  x|
d<   }| j;                  ||||d   |||d          | j=                  |
       || j?                  |||d   ||d         }nd| d}tA        |
|g      }| jC                  ||      \  }}|D ]  }|jE                  ||        |D ]  }|jG                  ||        |d   }tI        |dd      r||y | j?                  |||||d         }t        |
      }||d<   ||d<   tA        ||g      }| jC                  |d |f      \  }}|j9                         }|D ]C  }||vr+d| d| d}| jJ                  rtM        |      tO        |       |jE                  ||       E |D ]  }|jG                  ||        y c c}	}w )N)r2   r>   rZ   rN   rM   r   rl   c              3  H   K   | ]  }|D ]  }|j                   v    y wrh   )tags)rn   cbsr   link_ids      r9   rq   z3CallbackGenerator._init_callback.<locals>.<genexpr>  s$     EYc2w"''!!Ys   "r2   r>   rr   r   )rs   r   source_r   target_ztry { z" } catch(err) { console.log(err) })rM   rN   r   r   Fz&Could not link non-existent property 'z' on z model)(r(   r+   r=   r   rQ   rl   r)   js_property_callbacksjs_event_callbacksrz   rK   dictrM   rv   r$   r{   r|   r}   r   rs   r   _plotsr#   r   rx   r   r   datar3   _initialize_models_process_references	_get_coder	   _get_triggersjs_on_changejs_on_eventr&   r   r'   r   ) rV   r   ra   r2   r   r>   r   rN   r?   r`   
references	src_modelrQ   	callbacks	tgt_model	arg_modelrs   r   r   prefixr   src_cbchangeseventschevtgt_propreverse_referencestgt_cbr3   msgr   s                                   @r9   r   z CallbackGenerator._init_callback  s   
 (,zz'8'8':'@'@'B P'Btq!"NN d'B
 P ''
FHQKH	nnT"d8Xx000779:--44678 	
 EYEE(
8	  ++JLI$'0
8$9d&8&89??ADAq++J4@I$ )
15#6#67 !
1 B #++%H&),mmC(+")$"9YrF$S)KK--/DAq
A!!W-!:2E()
1 0
 &),1EmmC(+$S)KK--/DAq!AA!!W-!:2E()
1 0 i+|!<={inn77993<>>A
8$yi+|!<={inn77993<>>A
8$yfi!fiYabcYde  ,<>>$VXa[QDTF"GHDzG9E,,T8<B""2v. B!!"f-  A;t_e4	8IXM]~~dFHfhqkJ!*-'08$'08$1G9M,,TD(3CD))+
B#>rd%	{RXY::$S/)I""2v.  B!!"f- KPs   Rc                     y)z8
        Method to process references in place.
        NrO   )rV   r   s     r9   r   z%CallbackGenerator._process_references
      r;   c                    g S )z\
        Return a list of spec tuples that define source and target
        models.
        rO   )rV   ra   r2   r>   s       r9   r   zCallbackGenerator._get_specs  s	     	r;   c                     y)z2
        Returns the code to be executed.
        r   rO   )rV   ra   r2   r   r>   r   s         r9   r   zCallbackGenerator._get_code  s     r;   c                
    g g fS )zK
        Returns the changes and events that trigger the callback.
        rO   rV   ra   r   s      r9   r   zCallbackGenerator._get_triggers!  s     2vr;   c                     y)z_
        Applies any necessary initialization to the source and target
        models.
        NrO   )rV   ra   r2   r   r   r>   r   r   s           r9   r   z$CallbackGenerator._initialize_models)  r   r;   c                     y rh   rO   ri   s    r9   r   zCallbackGenerator.validate2  s    r;   )
r   r   ra   ry   r2   r   r>   r   rv   zdict[str, Any])r   r   r   r   r   
str | Noner   Model | None)r   r   ra   ry   r2   r   r   SourceModelSpecr>   r   r   TargetModelSpecrN   r   r   r   ra   ry   r2   r   r>   r   r   z=Sequence[tuple[SourceModelSpec, TargetModelSpec, str | None]]ra   ry   r2   r   r   strr>   r   r   r   r   r   ra   ry   r   r   r   ztuple[list[str], list[str]]r2   r   r   r   r   r   r>   r   r   r   r   r   r   r   r   )r/   r   r   r   rT   r   r   r   r   r   r   r   r   r   rO   r;   r9   r   r   R  s   E '+B'+5=#;I, ..%1.?I.	. .`k.k.'+k.5=k.!k.+>k. "k. *4k. 
	k.Z
"*4@	F".:=#/9 
$3	$$16BE#0<HR 
r;   r   c                  8    e Zd Z	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZy)JSCallbackGeneratorc                n    |d   j                  d      rg |d   j                  d      d   gfS |d   gg fS )Nr   r   :)r"   r%   r   s      r9   r   z!JSCallbackGenerator._get_triggers9  sI     A;!!(+))#.q1222}b  r;   c                R   |j                   D ]  }|j                  d      }|j                  d      rd |f}*t        |      dkD  rdj	                  |d d       |d   f}R|d   }t        |t              r|j                  j                  ||      }d |f} d|j                      fgS )Nr   r   r   r   r   )	rN   r%   r"   r   r   r$   r   r*   r1   )rV   ra   r2   r>   r   	src_specsr   src_props           r9   r   zJSCallbackGenerator._get_specs@  s     IID

3Ix( $<Y!#HHYs^4imD$Q<fh/%~~11(HEH (+  <49::r;   Nr   r   )r/   r   r   r   r   rO   r;   r9   r   r   7  sD    !!$3!	$!;;"*;4@;	F;r;   r   c                       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
    c                j   |j                   rt        | 	  |||      S g }|j                  j	                         D ]  \  }}|j                  d      }t        |      dkD  rdj                  |d d       |d   f}n5|d   }t        |t              r|j                  j                  ||      }d |f}|j                  d      }	t        |	      dkD  rdj                  |	d d       |	d   f}n5|	d   }
t        |t              r|j                  j                  |
|
      }
d |
f}|j                  ||d f        |S )Nr   r   r   r   )rN   rS   r   r3   r=   r%   r   r   r$   r   r*   r1   r]   )rV   ra   r2   r>   r   r   r   r   r   	tgt_specsr   rX   s              r9   r   z"JSLinkCallbackGenerator._get_specs  s/    997%dFF;;"&//"7"7"9Hh s+I9~!HHYs^4imD$Q<fh/%~~11(HEH (+ s+I9~!HHYs^4imD$Q<fh/%~~11(HEH (+LL(Hd34# #:$ r;   c                   ||r|rt        |di       j                         D 	ci c]  \  }}	|	|
 }
}}	|
j                  ||      }|j                  d      ry t	        |t
              r||j                  v ryt	        |t
              ri|j                  j                         D 	ci c]  \  }}	|	|
 }}}	|j                  ||      }t        ||      }	 |j                  ||i      }||v r||   }nt        ||      }|r|dk7  rt        ||      rt        |||       |9|j                  s,t        dt        | j                        j                    d      y y c c}	}w c c}	}w # t        $ r i }Y w xY w)Nr*   r   value_throttledz&Model could not be resolved on target z" and no custom code was specified.)r&   r=   r1   r"   r$   r   r(   r*   _process_param_changer   r#   setattrrN   r'   r.   r>   r/   )rV   ra   r2   r   r   r>   r   r   r?   r`   src_reverse	src_paramtgt_reverse	tgt_paramvaluer   s                   r9   r   z*JSLinkCallbackGenerator._initialize_models  s     X(,3FIr,J,P,P,RS,RDAq1a4,RKS#(;I""8,&(+	V\\0IjY_aiNj060D0D0FG0F1q!t0FG'OOHh?		2 66	57IJC s?ME	84%6679h;W	8U3TYYE $T[[ 1 : :;;]_ ` ` &/% T
 H
 ! Cs   E'E!E' 'E54E5c                    t        |      D ]7  }|dk(  s|j                  d      r|dd |v r!|j                  |      ||dd <   9 y)z8
        Strips target_ prefix from references.
        r>   r      N)r)   r"   pop)rV   r   r?   s      r9   r   z+JSLinkCallbackGenerator._process_references  sN     j!AH}ALL$;qu
?R *q 1Jqu "r;   c                   t        |t              r_|j                  j                         D ci c]  \  }}||
 }}}|j	                  ||      }	|j
                  j	                  |	      }
|
d}
nd}
t        |t              rf|j                  j                         D ci c]  \  }}||
 }}}|j	                  ||      }|||j                  vrd}n|j                  |   xs d}nd}|dk(  r3ddlm} | j                  j                  ||
|j                  t              S |r|j                  d      r| j                  }n| j                  }|j                  |||
|      S c c}}w c c}}w )Nr  loadingr   )config)src_attrsrc_transformloading_spinnerloading_css_classr   )r  tgt_attrr  tgt_transform)r$   r   r*   r=   r1   r0   _target_transformsr  _loading_link_templateformatr  r   r"   _event_link_template_link_template)rV   ra   r2   r   r>   r   r?   r`   r  r  r  r  r  r  r  templates                   r9   r   z!JSLinkCallbackGenerator._get_code  sv    fh',2NN,@,@,BC,BDAq1a4,BKC#(;I"5599)DM$ '#Mfh',2NN,@,@,BC,BDAq1a4,BKC#(;I IV5N5N$N ' & 9 9) D O#My &..55! & 6 6"= 6   H//944..??!!++	 #  9 D Ds   E#E)r   r   )r   dict[str, str]r   r   r   )r/   r   r   r  r  r  r   r   r   r   r   r   s   @r9   r   r   S  s    N$ :"*4@	F6`$`16`BE`#`0<`HR` 
`62&&".&:=&#&/9& 
&r;   r   )re   )rC   r   r   r   ry   )r2   r   r3   zIterable[str]r   r   )r2   r   r>   r   r3   r  r   r   )4r   
__future__r   r,   r|   rP   collections.abcr   r   typingr   r   r   r(   bokeh.modelsr	   r
   r   rx   io.datamodelr   
io.loadingr   modelsr   r   reactiver   util.warningsr   viewabler   bokeh.modelr~   r   r   r   r   tupler   r   r   r:   rA   r{   rC   ry   r   r   r   rf   __all__rO   r;   r9   <module>r'     sR   #  
  . 0 0  > > 1 3 -   !58"*W"4{"BiB C$JO,OC$Jd
23O D*8F	2gDu"" gDTE8 ERa aJ;+ ;8f1 fP 	  $7  8    7  8A  5"*W"4i45s   %D DD