
    Be                       d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
mZ ddlZddlmZ ddlm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mZ ddl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'  G d dej(                  Z)d8dZ*	 d9d:d!Z+d;d<d&Z,d=d>d)Z-d* Z. e/g d+          Z0d?d@d1Z1edAdBd7            Z2dS )Cz*
Utilities for manipulating bokeh models.
    )annotationsN)contextmanager)TYPE_CHECKINGAnyIterableListOptional)
Serializer)Document)ColumnDataChangedEventDocumentPatchedEventModelChangedEvent)	PatchJson)	DataModel)ColumnDataSourceFlexBoxModel)	patch_doc   )state)HoldPolicyType)DocumentChangedEvent)Message)Commc                  "    e Zd ZdZd	dZd	dZdS )
comparable_arrayz1
    Array subclass that allows comparisons.
    otherr   returnboolc                0    t          j        | |d          S NT)	equal_nannparray_equalselfr   s     .lib/python3.11/site-packages/panel/io/model.py__eq__zcomparable_array.__eq__*   s    ~dET::::    c                2    t          j        | |d           S r!   r#   r&   s     r(   __ne__zcomparable_array.__ne__-   s    >$>>>>>r*   N)r   r   r   r   )__name__
__module____qualname____doc__r)   r,    r*   r(   r   r   %   sF         ; ; ; ;? ? ? ? ? ?r*   r   eventsList[DocumentChangedEvent]r   Nonec                ~   | D ]}t          t          |dd          t                    rd|j        _        3t          |t
                    rqt          |j        t                    rWt          |j        t          j
                  r8t          |j        j        |j        j        |j                  }||_        ||_        dS )zp
    Patch events applies patches to events that are to be dispatched
    avoiding various issues in Bokeh.
    hintN)
isinstancegetattrr   r6   colsr   modelr   newr$   ndarrayr   shapedtypeserializable_new)r2   e	new_arrays      r(   monkeypatch_eventsrB   0   s    
  	/ 	/ga..0FGG 	/AFKK-.. 	/:agy3Q3Q 	/
++	/,QU[!%+quMM	!%."	/ 	/r*   Tdocr   binaryr   $Optional[List[DocumentChangedEvent]]Message[Any] | Nonec                &   |t          | j        j                  }|rt          j        rdS d |D             sdS t                     t          | j        j        |          t          
                                        }t          j                    }t          |d|i|          }fd| j        j        D             | j        _        | j                            fd           |rj        D ]}|                    |           |S )z`
    Returns a json diff required to update an existing plot with
    the latest plot data.
    Nc                <    g | ]}t          |t                    |S r1   )r7   r   ).0events     r(   
<listcomp>zdiff.<locals>.<listcomp>P   s(    YYYeECW1X1XYEYYYr*   )
referencesdeferred)r2   use_buffersc                    g | ]}|v|	S r1   r1   )rI   r@   patch_eventss     r(   rK   zdiff.<locals>.<listcomp>X   s$    !a!a!a1T`K`K`!K`K`K`r*   c                0                         |            S N)has_ref)r:   
serializers    r(   <lambda>zdiff.<locals>.<lambda>Y   s    j.@.@.G.G*G r*   )list	callbacks_held_eventsr   _holdrB   r
   modelssynced_referencesr   encoder   create_headerflush_syncedbuffers
add_buffer)	rC   rD   r2   
patch_jsonheadermsgbufferrP   rT   s	          @@r(   diffre   D   s1    ~cm011 U[ tYYvYYYL |$$$sz'CfUUUJ*"3"3L"A"ABBBJ$&&F
F]F3Z
@
@C!a!a!a!aS]-G!a!a!aCMJGGGGHHH # ( 	# 	#FNN6""""Jr*   objr   replaceDocument | Nonec                    |                      dt          i          D ]0}|j        }d|_        |r|                    |           |r||_        1dS )zI
    Removes the document from any previously displayed bokeh object
    typeN)selectr   document	_documentremove_root)rf   rg   r:   prev_docs       r(   rn   rn   _   sg     VUO,, & &> 	(  ''' 	&%EO& &r*   Fholdc                    t          |            |                    |            |j        j        |r|                                 dS dS dS )zX
    Adds a model to the supplied Document removing it from any existing Documents.
    N)rn   add_rootrW   
hold_valuerp   )rf   rC   rp   s      r(   
add_to_docrt   k   sS    
 LL
}'D'




 ('''r*   c                ^   |                     di                                dg           D ] }|                     d          dk    s|                     d          dk    r6|                     d|                     d                               d          i          }t          |t                    s|                     d	i                                           D ]N\  }}t          |t
                    r4d
 t          |                                          D             |d	         |<   OdS )zf
    Required for handling messages containing JSON serialized typed
    array from the frontend.
    contentr2   kindModelChangedattrdataidr:   r;   c                    g | ]\  }}|S r1   r1   )rI   _vs      r(   rK   z!patch_cds_msg.<locals>.<listcomp>   s    $J$J$J41aQ$J$J$Jr*   N)get
select_oner7   r   itemsdictsorted)r:   rc   rJ   cdscolvaluess         r(   patch_cds_msgr   u   s,   
 B''++Hb99 K K99V..%))F2C2Cv2M2Meii&8&8&<&<T&B&BCDD#/00 	 99UB//5577 	K 	KKC&$'' K$J$J6&,,..3I3I$J$J$JeS!	KK Kr*   )	childrentextnametoolbar	renderersbelowcenterleftrightdepthintignoredOptional[Iterable[str]]strc           	     `   |t           }ddlm} t          | |          r!|                     t                                } d}t          |           j        }t          | 	                    d          
                                          }g }|D ]\  }}	||v r
t          |	t                    rdt          |	          j        z  }	nt          |	          }	t          |	          dk    r|	dd         d	z   }	|                    |d
|	           d                    |          }
t          | t                     rY|d                    |          z  }| j        D ]/} |t'          j        t+          | |dz             dz   d          z  }0|d|
z  z  }n|d                    ||
          z  }|S )zl
    Returns a string repr for a bokeh model, useful for recreating
    panel objects using pure bokeh.
    N   )Viewable F)include_defaultsz%s()   z...=z, z{cls}(children=[
)clsr   )r   z,
z  z], %s)z{cls}({props}))r   props)_DEFAULT_IGNORED_REPRviewabler   r7   get_rootr   rj   r-   r   properties_with_valuesr   r   reprlenappendjoinr   formatr   textwrapindent
bokeh_repr)rf   r   r   r   rr   
propertiesr   kr~   
props_reprs              r(   r   r      s   
 '#######x   'll8::&&
A
s))
C22E2JJPPRRSSJE 	' 	'1<<a 	a))AAQAq66B;;#2#A11%&&&&5!!J#w @	!((S(111< 	O 	OCCuQw!?!?!?%!GNNNAA	X
""	$$J$???Hr*   combinepolicyr   commComm | Nonec              #    K   | pt           j        } | dV  dS | j        j        }	 ||                                  n|                     |           dV  |r|| j        _        dS |ddlm}  || |           |                                  dS # |r|| j        _        w |ddlm}  || |           |                                  w xY w)a  
    Context manager that holds events on a particular Document
    allowing them all to be collected and dispatched when the context
    manager exits. This allows multiple events on the same object to
    be combined if the policy is set to 'combine'.

    Arguments
    ---------
    doc: Document
        The Bokeh Document to hold events on.
    policy: HoldPolicyType
        One of 'combine', 'collect' or None determining whether events
        setting the same property are combined or accumulated to be
        dispatched when the context manager exits.
    comm: Comm
        The Comm to dispatch events on when the context manager exits.
    Nr   )push)	r   curdocrW   rs   unholdrp   rY   notebookr   )rC   r   r   heldr   s        r(   rp   rp      s     & 
C
{=#D>JJLLLLHHV 	"&CM******S$JJLLLLL  	"&CM******S$JJLLLLs   0B 9C	)r2   r3   r   r4   )TN)rC   r   rD   r   r2   rE   r   rF   rR   )rf   r   rg   rh   r   r4   )F)rf   r   rC   r   rp   r   )r   N)rf   r   r   r   r   r   r   r   )r   N)rC   r   r   r   r   r   )3r0   
__future__r   r   
contextlibr   typingr   r   r   r   r	   numpyr$   bokeh.core.serializationr
   bokeh.documentr   bokeh.document.eventsr   r   r   bokeh.document.jsonr   bokeh.modelr   bokeh.modelsr   r   r   !bokeh.protocol.messages.patch_docr   r   bokeh.core.enumsr   r   bokeh.protocol.messager   pyviz_commsr   r<   r   rB   re   rn   rt   r   	frozensetr   r   rp   r1   r*   r(   <module>r      s    # " " " " "  % % % % % %                  / / / / / / # # # # # #          * ) ) ) ) ) ! ! ! ! ! ! 9 9 9 9 9 9 9 9 9 9 7 7 7 7 7 7       !//////::::::......      	? 	? 	? 	? 	?rz 	? 	? 	?/ / / /* X\    6
& 
& 
& 
& 
&    K K K "	"z"z"z{{ " " " " "H $ $ $ $ $ $ $r*   