
    BeF                       U d Z ddlmZ ddlZddlZddlZddl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mZmZ ddlZddlZddl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 m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z)m*Z* ddl+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z<m=Z= ddl>m?Z?m@Z@mAZAmBZBmCZC ddlDmDZD er$ddlEmFZF ddlGmHZH ddlImJZJ ddlKmLZL ddlMmNZN ddlOmPZP d ZQd!eRd"<   d#ZSd!eRd$<   d%ZTd!eRd&<   dd)ZUddd2ZVdd4ZW eAjX        d5          ZYd6eRd7<    eAjX        d8          ZZd6eRd9<    eAjX        d:          Z[d6eRd;<   d<d=d>d?Z\di fd@Z]	 dddFZ^	 dddKZ_dL Z`	 	 	 dddOZaddRZbdS Zc G dT dUe3          Zd G dV dWe5          Ze G dX dY          Zfdd\Zge
dd^            Zh	 	 	 	 dddfZidddlZjdmdnd<dodpdd*i fdd{Zkd| ZldddZmdS )z`
Various utilities for loading JS dependencies and rendering plots
inside the Jupyter notebook.
    )annotationsN)OrderedDict)contextmanager)TYPE_CHECKINGAnyDictIteratorListLiteralOptionalTuple)serialize_json)MACROS)Document)server_document)div_for_render_itemscript_for_render_items)%standalone_docs_json_and_render_items)wrap_in_script_tag)Model)CDNINLINE)_Unsetsettings)make_id)PYVIZ_PROXYCommJupyterCommJSJupyterCommManager
nb_mime_js   )escape   )embed_state)
add_to_docdiff)	PANEL_DIR	Resources_envbundle_resourcespatch_model_css)state)Server)Template)CommManager)Viewable)Widget)Locationz&application/vnd.holoviews_load.v0+jsonstr	LOAD_MIMEz&application/vnd.holoviews_exec.v0+json	EXEC_MIME	text/html	HTML_MIMEreturnList[Dict[str, str]]c                     ddigS )Nmodulez!panel.io.jupyter_server_extension r<       1lib/python3.11/site-packages/panel/io/notebook.py_jupyter_server_extension_pathsr?   ?   s    :;<<r=   Tdoc
'Document'comm'Comm'binaryboolNonec                   t          | |          }|dS |                    |j                   |                    |j                   |                    |j                   |j        D ][}t          j        |j                  }|	                                }|                    |           |                    |g           \dS )zH
    Pushes events stored on the document across the provided comm.
    )rD   N)buffers)
r&   sendheader_jsonmetadata_jsoncontent_jsonrH   jsondumpsrefto_bytes)r@   rB   rD   msgbufferheaderpayloads          r>   pushrU   B   s     s6
"
"
"C
{ 	IIcoIIc   IIc+ % %FJ''//##		&		7)	$$$$	% %r=   rO   c                    | t           j        vrd S t           j        |          \  }}}}|rd|j        vrt          ||           d S d S d S )Nembedded)r,   _viewstagsrU   )rO   selfrootr@   rB   s        r>   push_on_rootr\   U   s^    
%,#l3/T4d 
$)++S$ ++r=   zdoc_nb_js.jsr.   	DOC_NB_JSzautoload_panel_js.jsAUTOLOAD_NB_JSznb_template.htmlNB_TEMPLATE_BASEF  )	reloadingload_timeoutc                    i i i d}|D ]7}	|	                                 D ] \  }
}||
                             |           !8t                              | d|||||||t          j        
  
        S )N)packagespathsshimT)
bundleforcera   timeoutconfigrequirementsexportsskip_imports	ipywidgetversion)itemsupdater^   renderbokeh__version__)rg   configsrk   rl   rm   rn   ra   rb   rj   confkeycs               r>   _autoload_jsry   `   s     r266F " "jjll 	" 	"FC3Kq!!!!	"   ### !   r=   c           	     D   t                      }t          t          |           d          }t          |d|          }t          t	          ||                    }|                                }|                    t          d||z   |t          t                               t          |          dk    r!|d         d         |d	<   |d	         j        |d
<   |t          }n,t          |t                    rt          j        d|z             }|                    |          S )NF)quotezapplication/json )titleplot_scriptdocsbasemacrosr#   r   r   r@   rootsz{% extends base %}
)r   r"   r   r   r   copyrq   dictr_   r   lenr   
isinstancer3   r)   from_stringrr   )	docs_jsonrender_itemstemplatetemplate_variablesjson_idrM   scriptcontexts           r>   html_for_render_itemsr   u   s   iiG.++5999Dd$6@@D 7 N NOOF %%''GNN4Vm      <A +"5>/#	Hc	"	" G#$:X$EFF??7###r=   documentOptional['Comm']managerOptional['CommManager']0Tuple[Dict[str, str], Dict[str, Dict[str, str]]]c                h   | j         d         j        d         }t          | d          \  }}|rR|d         }t          t	          |j         j                                                  d d                   |j         _        t          ||| j        | j	                  }d|t          dit          d|iifS )	Nr   idTsuppress_callback_warning)r   r   r6   r|   )r   rO   r   r   list_rootsrp   r   r   r   r5   )r   rB   r   rO   r   r   itemhtmls           r>   render_templater      s     .


%C Ehjn o o oY  NA'TZ->-D-D-F-F(G(G(LMM
 <(*;#6  D $	2.T3K0HIIr=   cdnmodel'Model'	resourcesc                   t          | t                    st          d          ddlm | j        d         }t          j        s(|dk    r"d}t          | |           || j	        j
        d<   t          | gd	
          \  }\  }t          |          }|                                }fdj        D             }	dt          j        v }
t          j        s|
dt"          j        v z  }
t&                              t+          |          t+          |g          |	|
          }||}}d                    ||          }||d}dt/          |          t0          dit0          d|iifS )Nz0notebook_content expects a single Model instancer!   )panel_extensionr   serverz'/panel-preview/static/extensions/panel/)dist_urlr   Tr   c                <    g | ]}|j         v j         |         S r<   )_globals).0extpnexts     r>   
<listcomp>z render_model.<locals>.<listcomp>   s6     . . .Cen,, N3',,,r=   ipywidgets_bokehPANEL_IPYWIDGET)r   r   rk   rn   z<div id='{id}'>{html}</div>)r   r   )r6   application/javascriptr6   r|   )r   r   
ValueErrorrj   r   rO   r,   _is_pyodider+   r   _template_variablesr   r   to_json_loaded_extensionssysmodulesosenvironr]   rr   r   formatmimebundle_to_htmlr5   )r   rB   r   targetr   r   render_itemdivrender_jsonrk   rn   r   bokeh_script	bokeh_divr   datar   s                   @r>   render_modelr      s    eU## MKLLL111111Yt_F Bh!6!6<11119A*:6!Fwjn!o!o!oY
k
*
*C%%''K. . . .53K . . .L #ck1I 5&"*44	 ++#[M22!	   F %c)L(//6	/JJDFFD,T22IrBv') )r=   c                $     ddl m d fd	}|S )z
    Generates a function that will render the supplied object as a
    mimebundle, e.g. to monkey-patch a _repr_mimebundle_ method onto
    an existing object.
    r!   panelNc                B                                    | |          S N)_repr_mimebundle_)includeexcludeobjr   s     r>   r   z(mime_renderer.<locals>._repr_mimebundle_   s!    uSzz++GW===r=   NN)paner   )r   r   r   s   ` @r>   mime_rendererr      sA     > > > > > > >r=   locationOptional['Location']c                   t          | t                    st          d          t          | |d           ||                    |           |-|                    || | |          }|                    |           t          | ||          S )zb
    Displays bokeh output inside a notebook using the PyViz display
    and comms machinery.
    z&Can only render bokeh LayoutDOM modelsT)r   r   r   r%   add_root
_get_modelr   )r   r@   rB   r   r   r   locs          r>   render_mimebundler      s     eU## CABBBuc4   W!!#ueT::StY///r=   rg   Dict[str, Any]c                    t          | t                    r| \  }}n| }|                    dd          }d|v r!|d         }|d                    |          z  }|S )z+
    Converts a MIME bundle into HTML.
    r6   r|   r   z4
<script type="application/javascript">{js}</script>)js)r   tuplegetr   )rg   r   metadatar   r   s        r>   r   r      sq     &%   hh88K$$D4''*+GNNRTNUUUKr=   c                 b   ddl m }  g g i }}}g }t          j                                        D ]\  }}d|v r|                    |           ddlm} |t          t          j	        |          
                                          z  }| j                                        D ]s\  }}	|	                    d          d                             dd                              d          d	         }
|
|	d
d         i|
|id}|                    |           ti }|D ]}t          |d          r|                    |j                   t          |d          st#          |t$                    sSt#          |t$                    r|nt%          |j                                      di           }t+          fd|D                       s|                               t                              dg                     D ]}t#          |t.                    rBt%          d                   d<   d                             |          d         |d         <   t#          |t.                    r|d         n|f}|D ]*}||vr$|                    |           ||v r||         ||<   +||||fS )zl
    Returns JS snippet to load the required dependencies in the classic
    notebook using REQUIRE JS.
    r!   rj   .)ReactiveHTML/r   z.minr|   N)re   rl   __js_skip____js_require__rl   c              3  $   K   | ]
}|k    V  d S r   r<   )r   rj   model_requires     r>   	<genexpr>z%require_components.<locals>.<genexpr>!  s(      AAv=F*AAAAAAr=   re   r   r#   )rj   r   model_class_reverse_maprp   appendreactiver   r   paramconcrete_descendentsvaluesjs_filessplitreplacehasattrrq   r   r   r   r   popanyr   r   )rj   ru   rk   rl   js_requires	qual_namer   r   exportr   namerv   skip_importmodel_exportsreqreqsrr   s                    @r>   require_componentsr      s   
  %'R7\GK!9??AA & &	5 )u%%%''''''42<@@GGIIJJJKo++-- ! !
xx}}R ((44::3??C3B3dF^DD4    K 6 65-(( 	2u0111/00 	Jud4K4K 	eT"" 	7!MM !566M%)))R88AAAAAAAAA 	*NN=)))))'26677 
	6 
	6C#u%% Q)-mG.D)E)Eg&1>w1G1K1KC1P1Pg&s1v.'U33?3q66#D 6 6L(( ''***M))%21%5
	6
	6 L';66r=   c                  (    e Zd ZdZed             ZdS )JupyterCommJSBinaryzZ
    Extends pyviz_comms.JupyterCommJS with support for repacking
    binary buffers.
    c                z    d t          |d                   D             }t          |d         d         |          S )Nc                    i | ]\  }}||	S r<   r<   )r   ivs      r>   
<dictcomp>z.JupyterCommJSBinary.decode.<locals>.<dictcomp>;  s    >>>DAq1a>>>r=   rH   contentr   )_buffers)	enumerater   )clsrQ   rH   s      r>   decodezJupyterCommJSBinary.decode9  s=    >>Ic)n$=$=>>>C	N6*W====r=   N)__name__
__module____qualname____doc__classmethodr	  r<   r=   r>   r   r   3  s9         
 > > [> > >r=   r   c                      e Zd ZeZdS )JupyterCommManagerBinaryN)r
  r  r  r   client_commr<   r=   r>   r  r  >  s        %KKKr=   r  c                       e Zd ZdZd ZddZdS )
Mimebundlez'
    Wraps a generated mimebundle.
    c                    || _         d S r   _mimebundle)rZ   
mimebundles     r>   __init__zMimebundle.__init__G  s    %r=   Nc                    | j         S r   r  )rZ   r   r   s      r>   r   zMimebundle._repr_mimebundle_J  s    r=   r   )r
  r  r  r  r  r   r<   r=   r>   r  r  C  sA         & & &           r=   r  objsr0   c                 B    | D ]}|j         D ]}t          |           dS )z
    A utility for pushing updates to the frontend given a Panel
    object.  This is required when modifying any Bokeh object directly
    in a notebook session.

    Arguments
    ---------
    objs: panel.viewable.Viewable
    N)_modelsr\   )r  r   rO   s      r>   push_notebookr  Q  sD       ; 	 	C	 r=   r	   c               #  f   K   dt           _        	 dV  dt           _        dS # dt           _        w xY w)z8
    Context manager to temporarily block comm push
    TNF)r,   _holdr<   r=   r>   
block_commr   _  s;      
 EKes   " 0autoinlinera   enable_mathjaxbool | Literal['auto']rb   intc           
        ddl m} | rt          j        st          nt
          }t          j        d          }t          j        j        t          u}t          j         }t          j        ||          }	 t          d ||||          }	t                      \  }
}}}dt          j        v }t!          |	|
||||||          }|r|t          _        nQt          j                                         n2# |r|t          _        w t          j                                         w xY w |d	|t$          |i           t&          j        j                                                                         t0          d
z  dz                      d          }d                    t6          t8          j        t<          g          } |t$          |d	|i            |dd| di           d S )Nr   publish_display_datar   )default)notebook)r*  ra   r#  r   )rg   ru   rk   rl   rm   rn   ra   rb   r   
_templateszjupyter.csszutf-8)encoding
)r   r6   z<style>z</style>)IPython.displayr(  r,   r   r   r   r   r   _user_valuer   r(   
from_bokehr*   r   r   r   ry   unset_valuer4   rs   ior*  curstateoutput_notebookr'   	read_textjoinr   _JupyterCommManager
js_managerr    )r"  ra   r#  rb   r(  r   prev_resourcesuser_resourcesnb_endpointrg   ru   rk   rl   rm   rn   bokeh_jsCSSJSs                     r>   load_notebookr?  j  s    544444 C):CI'999N'36AN''K$YEEEI-!)kY)
 
 
 8J7K7K4w&#+5	%%%	
 	
 	
  	-!/H**,,,,  	-!/H**,,,, (8    
H  00222 |#m3
>
>
>
P
PC	K!4!?L	M	MBy".FKLLLL{,Cc,C,C,CDEEEEEEs   4AC. ./Dr   r   notebook_urlport'Server'c                   ddl m} ddlm}m}m} t          |          r |d          }n ||          }t          j                    j	        } || ||dd|          }	t          |          r ||	j
                  }
n |||	j
                  }
t          |
d	          } |t          |t          d
it          d|ii           |	S )a  
    Displays a bokeh server inline in the notebook.

    Arguments
    ---------
    panel: Viewable
      Panel Viewable object to launch a server for
    notebook_url: str
      The URL of the running Jupyter notebook server
    port: int (optional, default=0)
      Allows specifying a specific port
    server_id: str
      Unique ID to identify the server with

    Returns
    -------
    server: bokeh.server.Server
    r   r'  r#   )_origin_url_server_url
get_serverNTF)rA  websocket_originstartshow	server_id)r   r|   rJ  )r   )r.  r(  r   rD  rE  rF  callableuuiduuid4hexrA  r   r7   r5   )r   r@  rA  r(  rD  rE  rF  originrJ  r   urlr   s               r>   show_serverrQ    s!   & 544444<<<<<<<<<< +d##\**
 IZD6E  F
  5l6;''k,44SD111F62 	K+    Mr=   i     r|   z./
max_statesmax_optsrM   json_prefix	save_path	load_pathOptional[str]progressstatesDict[Widget, List[Any]]c	                8   ddl m }	 t                      }
t                      }|	                    d          5  |                     |
|          }t          | ||
||||||||           ddd           n# 1 swxY w Y   t          t          |                    S )ag  
    Renders a static version of a panel in a notebook by evaluating
    the set of states defined by the widgets in the model. Note
    this will only work well for simple apps with a relatively
    small state space.

    Arguments
    ---------
    max_states: int
      The maximum number of states to embed
    max_opts: int
      The maximum number of states for a single widget
    json: boolean (default=True)
      Whether to export the data to json files
    json_prefix: str (default='')
      Prefix for JSON filename
    save_path: str (default='./')
      The path to save json files to
    load_path: str (default=None)
      The path or URL the json files will be loaded from.
    progress: boolean (default=False)
      Whether to report progress
    states: dict (default={})
      A dictionary specifying the widget values to embed for each widget
    r!   r   T)embedN)rj   r   r   setget_rootr$   r  r   )r   rS  rT  rM   rU  rV  rW  rY  rZ  rj   r@   rB   r   s                r>   render_embedr`    s    <  
**C66D	$		  sD))E5#z8+y)X	 	 	              
 l5))***s   0A55A9<A9c                @    ddl m}  |t          | g|R i |          S )Nr   r'  )r.  r(  r`  )r   argskwargsr(  s       r>   
show_embedrd    s=    444444U DT D D DV D DEEEr=   r   rc  c                
    ddl m} ddlm} |r|nt	                      } | fi |                    |           |d          t          d          r'd_        gf fd		}                    |d           S )
a  
    Returns an ipywidget model which renders the Panel object.

    Requires `jupyter_bokeh` to be installed.

    Arguments
    ---------
    obj: object
      Any Panel object or object which can be rendered with Panel
    doc: bokeh.Document
        Bokeh document the bokeh model will be attached to.
    **kwargs: dict
      Keyword arguments passed to the pn.panel utility function

    Returns
    -------
    Returns an ipywidget model which renders the Panel object.
    r   )
BokehModelr!   r   r@   T)combine_events_view_countc                   d }| d         dk    rD| d         dk    r8|r6	                      |d                    n# t          $ r Y nw xY wg |d d <   d S | d         dk    r| d         dk    rw|r
|d         urm|r-	                      |d                    n# t          $ r Y nw xY w                    j                  }                    |           |g|d d <   d S d S d S d S )Noldr   newrg  )_cleanup	Exceptionr_  	_documentupdate_from_model)changecurrent	new_modelr   r   widgets      r>   view_count_changedz%ipywidget.<locals>.view_count_changed  sD   Ie}q  VE]a%7%7G%7LL,,,,    D


-1$$):): *;")!*E"9"9 WQZ0000$   LLV-=L>>	((333'[


 %$):):"9"9s!   ; 
AA;B 
B$#B$)	jupyter_bokeh.widgetsrf  r   r   r   r_  r   ri  observe)r   r@   rc  rf  r   ru  r   rt  s   `     @@r>   rn   rn     s    & 100000
$##(**CE#    ))c)22EZd333Fv}%% :05w 	) 	) 	) 	) 	) 	) 	) 	)$ 	)=999Mr=   )r8   r9   )T)r@   rA   rB   rC   rD   rE   r8   rF   )rO   r3   r   )r   rA   rB   r   r   r   r8   r   )Nr   )r   r   rB   r   r   r3   r8   r   )NNr   )r   r   r@   rA   rB   rC   r   r   r   r   r   r3   r8   r   )rg   r   r8   r3   )r  r0   r8   rF   )r8   r	   )TFr!  r`   )
r"  rE   ra   rE   r#  r$  rb   r%  r8   rF   )r   )r   r   r@  r3   rA  r%  r8   rB  )rS  r%  rT  r%  rM   rE   rU  r3   rV  r3   rW  rX  rY  rE   rZ  r[  r8   rF   r   )r   r   rc  r   )nr  
__future__r   rM   r   r   rL  collectionsr   
contextlibr   typingr   r   r   r	   r
   r   r   r   rs   bokeh.embed.notebookr   bokeh.core.json_encoderr   bokeh.core.templatesr   bokeh.documentr   bokeh.embedr   bokeh.embed.elementsr   r   bokeh.embed.utilr   bokeh.embed.wrappersr   bokeh.modelsr   bokeh.resourcesr   r   bokeh.settingsr   r   bokeh.util.serializationr   pyviz_commsr   r   r   r   r7  r    utilr"   r]  r$   r   r%   r&   r   r'   r(   r)   r*   r+   r,   bokeh.server.serverr-   jinja2r.   models.comm_managerr/   viewabler0   widgets.baser1   r   r2   r4   __annotations__r5   r7   r?   rU   r\   get_templater]   r^   r_   ry   r   r   r   r   r   r   r   r   r  r  r  r   r?  rQ  r`  rd  rn   r<   r=   r>   <module>r     s)     # " " " " "  				 



  # # # # # # % % % % % %                          2 2 2 2 2 2 ' ' ' ' ' ' # # # # # # ' ' ' ' ' ' M M M M M M M M B B B B B B 3 3 3 3 3 3       ' ' ' ' ' ' ' ' + + + + + + + + , , , , , ,             
             # # # # # # # #                    #******111111######%%%%%%"""""" :	 9 9 9 99	 9 9 9 9	    = = = =% % % % %&    (d'77	 7 7 7 7,4,-CDD D D D D.T./ABB  B B B B $    * =AUW $ $ $ $: ]aJ J J J J& EJ$) $) $) $) $)N	 	 	 (,%)	0 0 0 0 0*   67 67 67r	> 	> 	> 	> 	>- 	> 	> 	>& & & & &2 & & &
                       -3	.F .F .F .F .Fb. . . . .b "15DTR'+ '+ '+ '+ '+RF F F. . . . . . .r=   