
    -e                       U d Z ddlmZ ddlZ ej        e          ZddlmZ ddl	m
Z
 ddlmZmZmZmZmZmZ ddlmZmZ dd	lmZ er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Z!eegdf         Z"de#d<   eg df         Z$de#d<   ee"e$f         Z%de#d<   ee&eegdf         Z'de#d<    G d d          Z( G d d          Z)d&dZ*d'd(d%Z+dS ))z Provides ``PropertyCallbackManager`` and ``EventCallbackManager``
mixin classes for adding ``on_change`` and ``on_event`` callback
interfaces to classes.
    )annotationsN)defaultdict)	signature)TYPE_CHECKINGAnyCallableSequenceUnioncast   )Event
ModelEvent)get_param_info)	TypeAlias)Setter)ID)Document)DocumentPatchedEvent)EventCallbackManagerPropertyCallbackManagerr   EventCallbackWithEventEventCallbackWithoutEventEventCallbackPropertyCallbackc                  f     e Zd ZU dZded<   ded<   ded<   ded	<   d fdZddZddZddZ xZ	S )r   zs A mixin class to provide an interface for registering and
    triggering event callbacks on the Python side.

    Document | Nonedocumentr   idzset[str]subscribed_eventszdict[str, list[EventCallback]]_event_callbacksargsr   kwreturnNonec                l     t                      j        |i | t          t                    | _        d S N)super__init__r   listr    selfr!   r"   	__class__s      ;lib/python3.11/site-packages/bokeh/util/callback_manager.pyr(   zEventCallbackManager.__init__Q   s5    $%"%%% +D 1 1    eventstr | type[Event]	callbacksr   c                0   t          |t                    st          |t                    r|j        }|D ]G}t          |          dk    rt          |dd           | j        |                             |           H| j	        
                    |           dS )z Run callbacks when the specified event occurs on this Model

        Not all Events are supported for all Models.
        See specific Events in :ref:`bokeh.events` for more information on
        which Models are able to trigger them.
        r   )r/   zEvent callback)whatN)
isinstancestr
issubclassr   
event_name_nargs_check_callbackr    appendr   add)r+   r/   r1   callbacks       r-   on_eventzEventCallbackManager.on_eventU   s     %%% 	%*UE*B*B 	%$E! 	: 	:Hh1$$*;KLLLL!%(//9999""5)))))r.   r   c                     d fd} j         7ddlm}  j         j                            t          |           |           d S  |             d S )Nr#   r$   c                 $   j                             j        g           D ]m} j        dj        j        j        k    rOt          |           dk    r t          t          |                        O t          t          |                      nd S )Nr   )	r    getr7   modelr   r8   r   r   r   )r<   r/   r+   s    r-   invokez3EventCallbackManager._trigger_event.<locals>.invokeg   s     155e6FKK F F;*tw%+./H/Hh''1,,A6AACCCC>3X>>uEEEF Fr.   r   Modelr#   r$   )r   rA   rD   r1   notify_eventr   )r+   r/   rB   rD   s   ``  r-   _trigger_eventz#EventCallbackManager._trigger_eventf   s    	F 	F 	F 	F 	F 	F 	F =$%%%%%%M#00eT1B1BE6RRRRRFHHHHHr.   c                    | j         d S | j        D ]6}ddlm} | j         j                            |t          ||                      7d S )Nr   rC   )r   r    rA   rD   r1   	subscriber   )r+   keyrD   s      r-   _update_event_callbacksz,EventCallbackManager._update_event_callbacksu   si    = F( 	F 	FC%%%%%%M#--c4t3D3DEEEE	F 	Fr.   r!   r   r"   r   r#   r$   )r/   r0   r1   r   r#   r$   )r/   r   r#   r$   rE   )
__name__
__module____qualname____doc____annotations__r(   r=   rG   rK   __classcell__r,   s   @r-   r   r   F   s          
 
FFF44442 2 2 2 2 2* * * *"   F F F F F F F Fr.   r   c                  V     e Zd ZU dZded<   ded<   d fdZddZddZ	 dddZ xZ	S )r   zZ A mixin class to provide an interface for registering and
    triggering callbacks.

    r   r   z!dict[str, list[PropertyCallback]]
_callbacksr!   r   r"   r#   r$   c                H     t                      j        |i | i | _        d S r&   )r'   r(   rU   r*   s      r-   r(   z PropertyCallbackManager.__init__   s*    $%"%%%r.   attrr5   r1   r   c                    t          |          dk    rt          d          | j                            |g           }|D ],}||v rt	          |d           |                    |           -dS )z Add a callback on this object to trigger when ``attr`` changes.

        Args:
            attr (str) : an attribute name on this object
            callback (callable) : a callback function to register

        Returns:
            None

        r   zSon_change takes an attribute name and one or more callbacks, got only one parameter)rW   oldnewN)len
ValueErrorrU   
setdefaultr9   r:   r+   rW   r1   rU   r<   s        r-   	on_changez!PropertyCallbackManager.on_change   s     y>>Qrsss_//b99
! 	( 	(H:%%H&<===h''''	( 	(r.   c                    t          |          dk    rt          d          | j                            |g           }|D ]}|                    |           dS )z$ Remove a callback from this object r   zZremove_on_change takes an attribute name and one or more callbacks, got only one parameterN)r[   r\   rU   r]   remover^   s        r-   remove_on_changez(PropertyCallbackManager.remove_on_change   si    y>>Qyzzz_//b99
! 	( 	(Hh''''	( 	(r.   NrY   rZ   hintDocumentPatchedEvent | NonesetterSetter | Nonec           	          d fd} j         ;ddlm}  j         j                            t          |           |||           dS  |             dS )z Trigger callbacks for ``attr`` on this object.

        Args:
            attr (str) :
            old (object) :
            new (object) :

        Returns:
            None

        r#   r$   c                 h    j                                       } | r| D ]} |           d S d S r&   )rU   r@   )r1   r<   rW   rZ   rY   r+   s     r-   rB   z/PropertyCallbackManager.trigger.<locals>.invoke   sZ    ++D11I - ) - -HHT3,,,,- -- -r.   Nr   rC   rE   )r   rA   rD   r1   notify_changer   )r+   rW   rY   rZ   rc   re   rB   rD   s   ````    r-   triggerzPropertyCallbackManager.trigger   s    	- 	- 	- 	- 	- 	- 	- 	- 	-
 =$%%%%%%M#11$ud2C2CT3PSUY[acijjjjjFHHHHHr.   rL   )rW   r5   r1   r   r#   r$   )NN)rW   r5   rY   r   rZ   r   rc   rd   re   rf   r#   r$   )
rM   rN   rO   rP   rQ   r(   r_   rb   rj   rR   rS   s   @r-   r   r   }   s          
 1111     ( ( ( (,( ( ( ( OS        r.   r   fnCallable[..., Any]r#   intc                    t          |           }t          |          \  }}t          |          t          |          z
  S r&   )r   r   r[   )rk   sig	all_namesdefault_valuess       r-   r8   r8      s8    
B--C .s 3 3I~y>>C////r.   Callback functionsr<   fargsSequence[str]r3   r5   r$   c                "   t          |           }t          |          }|dz   }t          |          \  }}t          |          t          |          z
  }|t          |          k    r't	          |d                    |          |fz            dS )z3Bokeh-internal function to check callback signaturez) must have signature func(%s), got func%sz, N)r   r5   r   r[   r\   join)	r<   rs   r3   ro   formatted_args	error_msgrp   rq   nargss	            r-   r9   r9      s    
H

CXXNBBI .s 3 3I~	NNS000EE

dii&6&6%GGHHH r.   )rk   rl   r#   rm   )rr   )r<   rl   rs   rt   r3   r5   r#   r$   ),rP   
__future__r   logging	getLoggerrM   logcollectionsr   inspectr   typingr   r   r   r	   r
   r   eventsr   r   util.functionsr   typing_extensionsr   core.has_propsr   
core.typesr   document.documentr   document.eventsr   __all__r   rQ   r   r   r5   r   r   r   r8   r9    r.   r-   <module>r      sg     # " " " " " g!! $ # # # # #                      ' & & & & & & & + + + + + + 7++++++'''''',,,,,,666666 %-eWd]$;  ; ; ; ;'/D'9  9 9 9 9 !79R!RS S S S S&S#'<=  = = = =5F 5F 5F 5F 5F 5F 5F 5FnA A A A A A A AV0 0 0 0

I 
I 
I 
I 
I 
I 
Ir.   