
    eFK                       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Zddlm	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/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z?m@Z@ ddlAmBZBmCZCmDZDmEZEmFZF ddlGmGZG er$ddlHmIZI ddlJmKZK ddlLmMZM ddlNmOZO ddlPmQZQ dd lRmSZS d!ZTd"eUd#<   d$ZVd"eUd%<   d&ZWd"eUd'<   dd*ZXddd5ZYdd6ZZdd8Z[ eDj\        d9          Z]d:eUd;<    eDj\        d<          Z^d:eUd=<    eDj\        d>          Z_d:eUd?<   d@dAdBdCZ`di fdDZa	 dddKZb	 dddPZcdQ Zd	 	 	 dddUZeddXZfdY Zg G dZ d[e6          Zh G d\ d]e8          Zi G d^ d_          ZjddbZkeddd            Zl	 	 	 	 dddlZmdddrZndsdtd@dudvdd+i fddZod ZpdddZqdS )z`
Various utilities for loading JS dependencies and rendering plots
inside the Jupyter notebook.
    )annotationsN)OrderedDict)contextmanager)partial)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@   A   s    :;<<r>   Tdocr   commr   binaryboolmsganyNonec           
     L   |t          | |          }|dS |j        su	 ddlm} |                                                    dt          t          | |||                     dS # t          $ r  t          j
        dt          d           Y dS w xY wt          ||           dS )	zH
    Pushes events stored on the document across the provided comm.
    N)rC   r   )IOLoopg?)rE   zAttempted to send message over Jupyter Comm but it was not yet open and also could not be rescheduled to a later time. The update will not be sent.)
stacklevel)r'   _commtornado.iolooprI   current
call_laterr   push	ExceptionwarningswarnUserWarningsend)rA   rB   rC   rE   rI   s        r?   rO   rO   D   s     {3v&&&
{Z 	------NN''WT3fRU-V-V-VWWWWW 	 	 	M/0;      	 	T3s   AA' '&BBc                h   |                      |j                   |                      |j                   |                      |j                   |j        D ][}t          j        |j                  }|                                }|                      |           |                      |g           \dS )z:
    Sends a bokeh message across a pyviz_comms.Comm.
    )buffersN)	rT   header_jsonmetadata_jsoncontent_jsonrV   jsondumpsrefto_bytes)rB   rE   bufferheaderpayloads        r?   rT   rT   Y   s     	IIcoIIc   IIc+ % %FJ''//##		&		7)	$$$$	% %r>   r\   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tagsrO   )r\   selfrootrA   rB   s        r?   push_on_rootrg   i   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forcerl   timeoutconfigrequirementsexportsskip_imports	ipywidgetversion)itemsupdateri   renderbokeh__version__)rr   configsrv   rw   rx   ry   rl   rm   ru   confkeycs               r?   _autoload_jsr   t   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   rA   rootsz{% extends base %}
)r   r#   r   r   r   copyr|   dictrj   r   lenr   
isinstancer4   r*   from_stringr}   )	docs_jsonrender_itemstemplatetemplate_variablesjson_idrZ   scriptcontexts           r?   html_for_render_itemsr      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
'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   r7   r   )r   r\   r   r   list_rootsr{   r   r   r   r6   )r   rB   r   r\   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   rv   ry   z<div id='{id}'>{html}</div>)r   r   )r7   application/javascriptr7   r   )r   r   
ValueErrorru   r   r\   r-   _is_pyodider,   r   _template_variablesr   r   to_json_loaded_extensionssysmodulesosenvironrh   r}   r   formatmimebundle_to_htmlr6   )r   rB   r   targetr   r   render_itemdivrender_jsonrv   ry   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>   'Comm'locationOptional['Location']c                   |r;|j         t          j        v r(t          j        |j                  }|j        s
fd|_        t	          | t
                    st          d          t          | |d           ||                    |           |-|	                    || |           }|                    |           t          | |          S )zb
    Displays bokeh output inside a notebook using the PyViz display
    and comms machinery.
    c                ,                                     S r   )init)_rB   s    r?   <lambda>z#render_mimebundle.<locals>.<lambda>   s    TYY[[ r>   z&Can only render bokeh LayoutDOM modelsT)client_comm_id_JupyterCommManager_comms_on_openr   r   r   r&   add_root
_get_modelr   )r   rA   rB   r   r   r   client_commlocs     `     r?   render_mimebundler      s      97)-@-GGG)01GH# 	9#8#8#8#8K eU## CABBBuc4   W!!#ueT::StY///r>   rr   Dict[str, Any]c                    t          | t                    r| \  }}n| }|                    dd          }d|v r!|d         }|d                    |          z  }|S )z+
    Converts a MIME bundle into HTML.
    r7   r   r   z4
<script type="application/javascript">{js}</script>)js)r   tuplegetr   )rr   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"   ru   .)ReactiveHTML/r   z.minr   N)rp   rw   __js_skip____js_require__rw   c              3  $   K   | ]
}|k    V  d S r   r=   )r   ru   model_requires     r?   	<genexpr>z%require_components.<locals>.<genexpr><  s(      AAv=F*AAAAAAr>   rp   r   r$   )ru   r   model_class_reverse_mapr{   appendreactiver   r   paramconcrete_descendentsvaluesjs_filessplitreplacehasattrr|   r   r   r   r   poprF   r   r   )ru   r   rv   rw   js_requires	qual_namer   r   exportr   namer   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>V  s    >>>DAq1a>>>r>   rV   contentr   )_buffers)	enumerater   )clsrE   rV   s      r?   decodezJupyterCommJSBinary.decodeT  s=    >>Ic)n$=$=>>>C	N6*W====r>   N)__name__
__module____qualname____doc__classmethodr  r=   r>   r?   r  r  N  s9         
 > > [> > >r>   r  c                      e Zd ZeZdS )JupyterCommManagerBinaryN)r  r   r!  r  r   r=   r>   r?   r%  r%  Y  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)re   
mimebundles     r?   __init__zMimebundle.__init__b  s    %r>   Nc                    | j         S r   r)  )re   r   r   s      r?   r   zMimebundle._repr_mimebundle_e  s    r>   r   )r  r   r!  r"  r,  r   r=   r>   r?   r'  r'  ^  sA         & & &           r>   r'  objsr1   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)_modelsrg   )r.  r   r\   s      r?   push_notebookr1  l  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_commr4  z  s;      
 EKes   " 0autoinlinerl   enable_mathjaxbool | Literal['auto']rm   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>  rl   r7  r   )rr   r   rv   rw   rx   ry   rl   rm   r   
_templateszjupyter.csszutf-8)encoding
)r   r7   z<style>z</style>)IPython.displayr<  r-   r   r   r   r   r   _user_valuer   r)   
from_bokehr+   r  r   r   r   unset_valuer5   r~   ior>  curstateoutput_notebookr(   	read_textjoinr   r   
js_managerr!   )r6  rl   r7  rm   r<  r   prev_resourcesuser_resourcesnb_endpointrr   r   rv   rw   rx   ry   bokeh_jsCSSJSs                     r?   load_notebookrR    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)rT  websocket_originstartshow	server_id)r   r   r]  )r   )rB  r<  r   rW  rX  rY  callableuuiduuid4hexrT  r   r8   r6   )r   rS  rT  r<  rW  rX  rY  originr]  r   urlr   s               r?   show_serverrd    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_optsrZ   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)ru   r   r   setget_rootr%   r'  r   )r   rf  rg  rZ   rh  ri  rj  rl  rm  ru   rA   rB   r   s                r?   render_embedrs    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;  )rB  r<  rs  )r   argskwargsr<  s       r?   
show_embedrw    s=    444444U DT D D DV D DEEEr>   r   rv  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   rA   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   newrz  )_cleanuprP   rr  	_documentupdate_from_model)changerM   	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.widgetsry  r   r   r   rr  r  r|  observe)r   rA   rv  ry  r   r  r   r  s   `     @@r?   ry   ry     s    & 100000
$##(**CE#    ))c)22EZd333Fv}%% :05w 	) 	) 	) 	) 	) 	) 	) 	)$ 	)=999Mr>   )r9   r:   )TN)
rA   r   rB   r   rC   rD   rE   rF   r9   rG   )rB   r   rE   rF   )r\   r4   r   )r   r   rB   r   r   r   r9   r   )Nr   )r   r   rB   r   r   r4   r9   r   )NNr   )r   r   rA   r   rB   r   r   r   r   r   r   r4   r9   r   )rr   r   r9   r4   )r.  r1   r9   rG   )r9   r
   )TFr5  rk   )
r6  rD   rl   rD   r7  r8  rm   r9  r9   rG   )r   )r   r   rS  r4   rT  r9  r9   rU  )rf  r9  rg  r9  rZ   rD   rh  r4   ri  r4   rj  rk  rl  rD   rm  rn  r9   rG   r   )r   r   rv  r   )rr"  
__future__r   rZ   r   r   r_  rQ   collectionsr   
contextlibr   	functoolsr   typingr   r   r	   r
   r   r   r   r   r~   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    r   r!   utilr#   rp  r%   r   r&   r'   r   r(   r)   r*   r+   r,   r-   bokeh.server.serverr.   jinja2r/   models.comm_managerr0   viewabler1   widgets.baser2   r   r3   r5   __annotations__r6   r8   r@   rO   rT   rg   get_templaterh   ri   rj   r   r   r   r   r   r   r   r  r  r%  r'  r1  r4  rR  rd  rs  rw  ry   r=   r>   r?   <module>r     sX     # " " " " "  				 



   # # # # # # % % % % % %                                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 08   67 67 67r	> 	> 	> 	> 	>- 	> 	> 	>& & & & &2 & & &
                       -3	.F .F .F .F .Fb. . . . .b "15DTR'+ '+ '+ '+ '+RF F F. . . . . . .r>   