
    -eX^                       U d Z ddlmZ ddlZ ej        e          ZddlZddlZddl	m
Z
mZmZ ddlmZmZmZmZmZmZmZmZ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l!m"Z"m!Z! ddl#m$Z$m%Z% ddl&m'Z'm(Z( ddl)m*Z* ddl+m,Z, erddl-m.Z.  e!j/                    Z0 e!j1                    Z2dKdLdZ3 e3            Z4ed         Z5de6d<   ed         Z7de6d<   ee5e7f         Z8de6d <   ed!         Z9 G d" d#e          Z:e;e<e<f         Z=de6d$<   da>d%e6d&<   dMd(Z?dNd*Z@dOd,ZAee<ge<f         ZBed-         ZCe$ G d. d/                      ZD G d0 d1e          ZE G d2 d3e          ZFe$ G d4 d5                      ZGed6         ZH G d7 d8          ZI G d9 d:          ZJ ejK        d;          ZLdPd<ZMdQdRd?ZNe4d=dfdSdCZOdTdEZPeeIe8f         ZQde6dF<    eIdGH          ZR eIdIH          ZSdJZTdS )UaK   The resources module provides the Resources class for easily configuring
how BokehJS code and CSS resources should be located, loaded, and embedded in
Bokeh documents.

Additionally, functions for retrieving `Subresource Integrity`_ hashes for
Bokeh JavaScript files are provided here.

Some pre-configured Resources objects are made available as attributes.

Attributes:
    CDN : load minified BokehJS from CDN
    INLINE : provide minified BokehJS from library static directory

.. _Subresource Integrity: https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity

    )annotationsN)basenamejoinrelpath)	TYPE_CHECKINGCallableClassVarLiteralProtocol	TypedDictUnioncastget_args   )__version__)CSS_RESOURCESJS_RESOURCES)IDPathLike)Model)LogLevelsettings)	dataclassfield)ROOT_DIR
bokehjsdir)generate_session_id)is_full_release)	TypeAliasFhost
str | Noneport
int | Nonesslboolreturnstrc                @    |rdnd}| d| pt            d|pt           dS )Nhttpshttpz://:/)DEFAULT_SERVER_HOSTDEFAULT_SERVER_PORT)r    r"   r$   protocols       /lib/python3.11/site-packages/bokeh/resources.py
server_urlr1   J   s;    )ww6HWW46#6WW9TATWWWW    )inlinecdnserverrelativeabsoluter   BaseMode)z
server-devzrelative-devzabsolute-devDevModeResourcesModebokehbokeh-glbokeh-widgetsbokeh-tablesbokeh-mathjaxz	bokeh-apic                  $    e Zd ZU ded<   ded<   dS )ComponentDefslist[Component]jscssN__name__
__module____qualname____annotations__ r2   r0   rB   rB   W   s*         r2   rB   Hasheszdict[str, Hashes] | None_SRI_HASHESdict[str, Hashes]c                     t           sOt          t          t          d          d          5 } t	          j        |           a ddd           n# 1 swxY w Y   t           J t          t                     S )a   Report SRI script hashes for all versions of BokehJS.

    Bokeh provides `Subresource Integrity`_ hashes for all JavaScript files that
    are published to CDN for full releases. This function returns a dictionary
    that maps version strings to sub-dictionaries that JavaScipt filenames to
    their hashes.

    Returns:
        dict

    Example:

        The returned dict will map version strings to sub-dictionaries for each
        version:

        .. code-block:: python

            {
                '1.4.0': {
                    'bokeh-1.4.0.js': 'vn/jmieHiN+ST+GOXzRU9AFfxsBp8gaJ/wvrzTQGpIKMsdIcyn6U1TYtvzjYztkN',
                    'bokeh-1.4.0.min.js': 'mdMpUZqu5U0cV1pLU9Ap/3jthtPth7yWSJTu1ayRgk95qqjLewIkjntQDQDQA5cZ',
                    ...
                }
                '1.3.4': {
                    ...
                }
                ...
            }

    .. _Subresource Integrity: https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity

    z	_sri.jsonrbN)rM   openr   r   jsonloaddict)fs    r0   get_all_sri_hashesrV   i   s    F  '$x--t44 	')A,,K	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' """s   AAAversionc                .    t                      }||          S )a   Report SRI script hashes for a specific version of BokehJS.

    Bokeh provides `Subresource Integrity`_ hashes for all JavaScript files that
    are published to CDN for full releases. This function returns a dictionary
    that maps JavaScript filenames to their hashes, for a single version of
    Bokeh.

    Args:
        version (str) :
            The Bokeh version to return SRI hashes for. Hashes are only provided
            for full releases, e.g "1.4.0", and not for "dev" builds or release
            candidates.

    Returns:
        dict

    Raises:
        KeyError: if the specified version does not exist

    Example:

        The returned dict for a single version will map filenames for that
        version to their SRI hashes:

        .. code-block:: python

            {
                'bokeh-1.4.0.js': 'vn/jmieHiN+ST+GOXzRU9AFfxsBp8gaJ/wvrzTQGpIKMsdIcyn6U1TYtvzjYztkN',
                'bokeh-1.4.0.min.js': 'mdMpUZqu5U0cV1pLU9Ap/3jthtPth7yWSJTu1ayRgk95qqjLewIkjntQDQDQA5cZ',
                'bokeh-api-1.4.0.js': 'Y3kNQHt7YjwAfKNIzkiQukIOeEGKzUU3mbSrraUl1KVfrlwQ3ZAMI1Xrw5o3Yg5V',
                'bokeh-api-1.4.0.min.js': '4oAJrx+zOFjxu9XLFp84gefY8oIEr75nyVh2/SLnyzzg9wR+mXXEi+xyy/HzfBLM',
                'bokeh-tables-1.4.0.js': 'I2iTMWMyfU/rzKXWJ2RHNGYfsXnyKQ3YjqQV2RvoJUJCyaGBrp0rZcWiTAwTc9t6',
                'bokeh-tables-1.4.0.min.js': 'pj14Cq5ZSxsyqBh+pnL2wlBS3UX25Yz1gVxqWkFMCExcnkN3fl4mbOF8ZUKyh7yl',
                'bokeh-widgets-1.4.0.js': 'scpWAebHEUz99AtveN4uJmVTHOKDmKWnzyYKdIhpXjrlvOwhIwEWUrvbIHqA0ke5',
                'bokeh-widgets-1.4.0.min.js': 'xR3dSxvH5hoa9txuPVrD63jB1LpXhzFoo0ho62qWRSYZVdyZHGOchrJX57RwZz8l'
            }

    .. _Subresource Integrity: https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity

    )rV   )rW   hashess     r0   get_sri_hashes_for_versionrZ      s    R  !!F'?r2   Nonec                 z   t                      st          d          ddlm}   | t          t	                      d                    }t          t                    }t          |          t          |          k     rt          d          t          |          t          |          k    rt          d          g }|D ]g}t          |          
                    dd          \  }}| d	t           d| }t          |          }||         |k    r|                    |           h|rt          d
|          dS )a6   Verify the SRI hashes in a full release package.

    This function compares the computed SRI hashes for the BokehJS files in a
    full release package to the values in the SRI manifest file. Returns None
    if all hashes match, otherwise an exception will be raised.

    .. note::
        This function can only be called on full release (e.g "1.2.3") packages.

    Returns:
        None

    Raises:
        ValueError
            If called outside a full release package
        RuntimeError
            If there are missing, extra, or mismatched files

    z7verify_sri_hashes() can only be used with full releasesr   )globzjs/bokeh*.jsz5There are unexpected 'bokeh*.js' files in the packagez2There are 'bokeh*.js' files missing in the package.r   -z$SRI Hash mismatches in the package: N)r   
ValueErrorr]   r   r   rZ   r   lenRuntimeErrorr   split_compute_single_hashappend)	r]   pathsrY   badpathnamesuffixfilenamesri_hashs	            r0   verify_sri_hashesrm      sT   (  TRSSSDjllN3344E'44F
6{{SZZRSSS
6{{SZZOPPPC  ~~++C33f33[33633'--(x''JJt
 KI#IIJJJK Kr2   )rE   rD   c                  $    e Zd ZU ded<   ded<   dS )RuntimeMessagezLiteral['warn']typer'   textNrF   rK   r2   r0   ro   ro      s%         IIIIIr2   ro   c                  &    e Zd Zedd            ZdS )	UrlsFn
components	list[str]kindKindr&   c                    d S NrK   rt   rv   s     r0   __call__zUrlsFn.__call__   s    BE#r2   N)rt   ru   rv   rw   r&   ru   rG   rH   rI   staticmethodr{   rK   r2   r0   rs   rs      s&        EEE \EEEr2   rs   c                  &    e Zd Zed	d            ZdS )
HashesFnrt   ru   rv   rw   r&   rL   c                    d S ry   rK   rz   s     r0   r{   zHashesFn.__call__   s    ?Bsr2   N)rt   ru   rv   rw   r&   rL   r|   rK   r2   r0   r   r      s&        BBB \BBBr2   r   c                  J    e Zd ZU ded<    ee          Zded<   dZded<   dS )	Urlsrs   urls)default_factorylist[RuntimeMessage]messagesNzHashesFn | NonerY   )rG   rH   rI   rJ   r   listr   rY   rK   r2   r0   r   r      sJ         LLL%*U4%@%@%@H@@@@"F""""""r2   r   )__css____javascript__c                     e Zd ZU dZdZeZded<   ded<   ded<   d	ed
<   g dg dZded<   g dZ	ded<   	 dJdddddddddd	dKd#Z
dd$dLd&ZdMd(ZeZedJdNd+            ZedOd,            Zej        dPd/            ZedMd0            ZdQd3ZdRd5ZdSd8ZdTd:ZdTd;ZdUd=ZedVd?            ZedWd@            ZedWdA            ZedXdC            ZdMdDZedWdE            Z edWdF            Z!edWdG            Z"dMdHZ#dMdIZ$dS )Y	Resourcesa%  
    The Resources class encapsulates information relating to loading or
    embedding Bokeh Javascript and CSS.

    Args:
        mode (str) : how should Bokeh JS and CSS be included in output

            See below for descriptions of available modes

        version (str, optional) : what version of Bokeh JS and CSS to load

            Only valid with the ``'cdn'`` mode

        root_dir (str, optional) : root directory for loading Bokeh JS and CSS assets

            Only valid with ``'relative'`` and ``'relative-dev'`` modes

        minified (bool, optional) : whether JavaScript and CSS should be minified or not (default: True)

        root_url (str, optional) : URL and port of Bokeh Server to load resources from

            Only valid with ``'server'`` and ``'server-dev'`` modes

    The following **mode** values are available for configuring a Resource object:

    * ``'inline'`` configure to provide entire Bokeh JS and CSS inline
    * ``'cdn'`` configure to load Bokeh JS and CSS from ``https://cdn.bokeh.org``
    * ``'server'`` configure to load from a Bokeh Server
    * ``'server-dev'`` same as ``server`` but supports non-minified assets
    * ``'relative'`` configure to load relative to the given directory
    * ``'relative-dev'`` same as ``relative`` but supports non-minified assets
    * ``'absolute'`` configure to load from the installed Bokeh library static directory
    * ``'absolute-dev'`` same as ``absolute`` but supports non-minified assets

    Once configured, a Resource object exposes the following public attributes:

    Attributes:
        js_raw : any raw JS that needs to be placed inside ``<script>`` tags
        css_raw : any raw CSS that needs to be places inside ``<style>`` tags
        js_files : URLs of any JS files that need to be loaded by ``<script>`` tags
        css_files : URLs of any CSS files that need to be loaded by ``<link>`` tags
        messages : any informational messages concerning this configuration

    These attributes are often useful as template parameters when embedding
    Bokeh plots.

    r^   r8   moder   r   r   
_log_levelrC   rt   r;   )rD   rE   zClassVar[ComponentDefs]_component_defs)r<   r=   r>   r?   r@   zClassVar[list[Component]]_default_componentsN)	rW   root_dirdevminified	log_levelroot_urlpath_versionerrt   base_dirResourcesMode | NonerW   r!   r   PathLike | Noner   bool | Noner   r   LogLevel | Noner   r   PathVersioner | Nonelist[Component] | Noner   c       	           |	|	nt          | j                  | _        t          j        |          }|                    d          }||nt          j        p|| _        t          t          |r
|d d         n|          | _	        | j	        t          t                    vrt          d|           |r)| j	                            d          st          d          |r)| j	                            d          st          d          |r)| j	                            d          st          d	          t          j        |          | _        ~t          j        |          | _        ~t          j        |          | _        ~t          j        |          | _        ~|| _        ~|r|                    d
          s|d
z   }|| _        g | _        | j	        dk    r4|                                 }| j                            |j                   n>| j	        dk    r3|                                 }| j                            |j                   |
|
nt3          | j                  | _        d S )Nz-devzvwrong value for 'mode' parameter, expected 'inline', 'cdn', 'server(-dev)', 'relative(-dev)' or 'absolute(-dev)', got r6   zDsetting 'root_dir' makes sense only when 'mode' is set to 'relative'r4   z>setting 'version' makes sense only when 'mode' is set to 'cdn'r5   zBsetting 'root_url' makes sense only when 'mode' is set to 'server'r,   )r   r   rt   r   	resourcesendswithr   r   r8   r   r   r`   
startswithrootdirr   cdn_versionrW   r   r   r   	_root_urlr   	_cdn_urlsextend_server_urlsr   r   )selfr   rW   r   r   r   r   r   r   rt   r   mode_devr4   r5   s                 r0   __init__zResources.__init__J  sd    )3(>**DIaDbDb!$''==((/33x|/Gx#B499dCC	9HX....e^be e  
  	eDI00<< 	ecddd 	_49//66 	_]^^^ 	cDI00:: 	cabbb (22+G44 )(33!+I66, 	&H--c22 	&#~H!9..""CM  ....Y(""&&((FM  111$,$8j>R>Rr2   rt   r&   c                   t          | j        | j        | j        | j        | j        | j        | j        | j        ||nt          | j
                  | j        
  
        S )zK Make a clone of a resources instance allowing to override its components. N)
r   rW   r   r   r   r   r   r   rt   r   )r   r   rW   r   r   r   r   r   r   r   rt   r   )r   rt   s     r0   clonezResources.clone  s]    L]]n^.%/%;zzdoAVAV]
 
 
 	
r2   r'   c                    d| j         g}| j        r|                    d           | j        | j        k    r|                    d| j                   dd                    |           dS )Nzmode=zdev=Truezcomponents=z
Resources(z, ))r   r   re   rt   r   r   )r   argss     r0   __repr__zResources.__repr__  sx    %	%%&8 	$KK
###?d666KK9do99:::.DIIdOO....r2   r   ResourcesLike | Nonec                t    t          |t                    r|S t          t          j        |                    S )Nr   )
isinstancer   r   r   )clsr   s     r0   buildzResources.build  s7    i++ 	A("4Y"?"?@@@@r2   c                    | j         S ry   )r   r   s    r0   r   zResources.log_level  s
    r2   levelr[   c                r    t          t                    }|||v st          d| d|           || _        d S )NzUnknown log level 'z', valid levels are: )r   r   r`   r   )r   r   valid_levelss      r0   r   zResources.log_level  sH    )),!6!6]5]]|]]^^^r2   c                ,    | j         | j         S | j        S ry   )r   _default_root_urlr   s    r0   r   zResources.root_url  s    >%>!))r2   rv   rw   c                .      fd j         D             S )Nc                2    g | ]}|j                  v |S rK   )r   ).0comprv   r   s     r0   
<listcomp>z,Resources.components_for.<locals>.<listcomp>  s,    WWWDD<PQU<V4V4V4V4V4Vr2   r   )r   rv   s   ``r0   components_forzResources.components_for  s#    WWWWWWWWWr2   ru   c                      j         s	 j        rdndfd                               D             } fd|D             }|S )N.min c                "    g | ]}|  d  S )r^   rK   )r   	componentrv   r   s     r0   r   z)Resources._file_paths.<locals>.<listcomp>  s,    \\\YI0x00$00\\\r2   c                <    g | ]}t          j        |          S rK   )r   r   )r   filerv   r   s     r0   r   z)Resources._file_paths.<locals>.<listcomp>  s'    CCCTdmT400CCCr2   )r   r   r   )r   rv   filesrf   r   s   ``  @r0   _file_pathszResources._file_paths  sh    !%CdmC66\\\\\$BUBUVZB[B[\\\CCCCCUCCCr2   resource_attrResourceAttrc                X   g }t          t          j                                        d           D ]x\  }}t	          ||d          }t          |t                    r||vr|                    |           Et          |t                    r|D ]}||vr|                    |           y|S )zI Collect external resources set on resource_attr attribute of all models.c                    | d         S )Nr   rK   )args    r0   <lambda>z7Resources._collect_external_resources.<locals>.<lambda>  s    TWXYTZ r2   )keyN)	sortedr   model_class_reverse_mapitemsgetattrr   r'   re   r   )r   r   external_resources_r   externales          r0   _collect_external_resourcesz%Resources._collect_external_resources  s    (*U:@@BBHZHZ[[[ 		5 		5FAs/6sM4/P/PH(C(( 5#555&--h777Hd++ 5! 5 5A 222*11!444!!r2   r   c                6    t          | j        | j                  S ry   )_get_cdn_urlsrW   r   r   s    r0   r   zResources._cdn_urls  s    T\4=999r2   c                T    t          | j        | j        rdn| j        | j                  S )NF)_get_server_urlsr   r   r   r   r   s    r0   r   zResources._server_urls  s'    /SuudmUYUhiiir2   #tuple[list[str], list[str], Hashes]c                                          |          }g g }}i } j        dk    r fd|D             }n j        dk    r j        p j        fd|D             }n j        dk    rt	          |          }nۉ j        dk    r{                                 }t	          |                                         |          |                    }|j        r)|                                         |          |          }nU j        dk    rJ 	                                }t	          |                                         |          |                    }|||fS )Nr3   c                :    g | ]}                     |          S rK   )_inline)r   rh   r   s     r0   r   z&Resources._resolve.<locals>.<listcomp>  s%    888$4<<%%888r2   r6   c                0    g | ]}t          |          S rK   )r   )r   rh   r   s     r0   r   z&Resources._resolve.<locals>.<listcomp>  s#    ???WT8,,???r2   r7   r4   r5   )
r   r   r   _default_root_dirr   r   r   r   rY   r   )	r   rv   rf   r   rawrY   r4   r5   r   s	   `       @r0   _resolvezResources._resolve  sd     &&s9  8888%888CCY*$$}>(>H???????EEY*$$KKEEY%..""C$"5"5d";";TBBCCEz ED$7$7$=$=tDDY(""&&((FT%8%8%>%>EEFFEsF##r2   rh   c                    t          |           }d| d}t          | d          5 }|                                                    d          }d d d            n# 1 swxY w Y   d| d}| d| d| S )Nz	/* BEGIN z */rP   utf-8z/* END 
)r   rQ   readdecode)rh   rk   beginrU   middleends         r0   r   zResources._inline  s    D>>)H)))$ 	.VVXX__W--F	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.%%%%**6**S***s   (AA!Ac                h    |                      d          \  }}}|                     d          }||z   S )NrD   r   r   r   r   r   r   r   s       r0   js_fileszResources.js_files   s9    mmD))q!!==>NOO!E))r2   c                    |                      d          \  }}}| j        |                    d| j         d           | j        r|                    d           |S )NrD   zBokeh.set_log_level("z");zBokeh.settings.dev = true)r   r   re   r   r   r   r   s      r0   js_rawzResources.js_raw  sc    MM$''	3>%JJBt~BBBCCC8 	4JJ2333
r2   rL   c                8    |                      d          \  }}}|S )NrD   r   )r   r   rY   s      r0   rY   zResources.hashes  s    }}T**1fr2   c                N    t          j        | j        | j        | j                  S )N)r   r   rY   )r   renderr   r   rY   r   s    r0   	render_jszResources.render_js  s"    "$+VZVabbbbr2   c                h    |                      d          \  }}}|                     d          }||z   S )NrE   r   r   r   s       r0   	css_fileszResources.css_files  s8    mmE**q!!==iHH!E))r2   c                8    |                      d          \  }}}|S )NrE   r   r   s      r0   css_rawzResources.css_raw!  s    MM%((	3
r2   c                $    d | j         D             S )Nc                6    g | ]}t          j        |          S rK   )rR   dumps)r   rE   s     r0   r   z)Resources.css_raw_str.<locals>.<listcomp>(  s     888C
3888r2   )r  r   s    r0   css_raw_strzResources.css_raw_str&  s    884<8888r2   c                B    t          j        | j        | j                  S )N)r  r   )r   r   r  r   r   s    r0   
render_csszResources.render_css*  s    #DLDNSSSSr2   c                `    |                                  |                                 }}| d| S )Nr   )r  r   )r   rE   rD   s      r0   r   zResources.render-  s/    //##T^^%5%5R~~~~r2   ry   )r   r   rW   r!   r   r   r   r   r   r   r   r   r   r!   r   r   rt   r   r   r!   )rt   r   r&   r   r&   r'   )r   r   r&   r   )r&   r   )r   r   r&   r[   )rv   rw   r&   rC   )rv   rw   r&   ru   )r   r   r&   ru   )r&   r   )rv   rw   r&   r   rh   r'   r&   r'   )r&   ru   )r&   rL   )%rG   rH   rI   __doc__r   DEFAULT_SERVER_HTTP_URLr   rJ   r   r   r   r   r   __str__classmethodr   propertyr   setterr   r   r   r   r   r   r   r}   r   r   r   rY   r   r   r  r  r  r   rK   r2   r0   r   r     sb        . .` /NNN"""" cbb0 0O    
 6}5|5||||| &*=S #$( $%)#/3-1#=S =S =S =S =S =S~ =A 
 
 
 
 
 
/ / / / GA A A A [A    X         * * * X*X X X X   " " " "": : : :j j j j$ $ $ $. + + + \+ * * * X*
 	 	 	 X	    Xc c c c * * * X*
    X 9 9 9 X9T T T T     r2   r   c                      e Zd ZU dZded<   ded<   eddddZedd            Zedd            Z	edd            Z
dS )SessionCoordinateszN Internal class used to parse kwargs for server URL, app_path, and session_id.r'   _url	ID | None_session_idN)url
session_idr  r  r&   r[   c                   || _         | j         dk    rt          | _         | j                             d          rt          d          | j                             d          | _         || _        d S )NdefaultwszIurl should be the http or https URL for the server, not the websocket URLr,   )r  r  r   r`   rstripr  )r   r  r  s      r0   r   zSessionCoordinates.__init__7  sl    	9	!!/DI9%% 	jhiiiI$$S))	 &r2   c                    | j         S ry   )r  r   s    r0   r  zSessionCoordinates.urlG  s
    yr2   r   c                D    | j         t                      | _         | j         S )z- Session ID derived from the kwargs provided.)r  r   r   s    r0   r  zSessionCoordinates.session_idK  s$     #244Dr2   c                    | j         S )a   Session ID provided in kwargs, keeping it None if it hasn't been generated yet.

        The purpose of this is to preserve ``None`` as long as possible... in some cases
        we may never generate the session ID because we generate it on the server.
        )r  r   s    r0   session_id_allowing_nonez+SessionCoordinates.session_id_allowing_noneR  s     r2   )r  r'   r  r  r&   r[   r	  )r&   r   )r&   r  )rG   rH   rI   r  rJ   r  r   r  r  r  r  rK   r2   r0   r  r  1  s         XXIII%<VZ & & & & & &     X       X        X     r2   r  z^(\d)+\.(\d)+\.(\d)+(\.dev|rc)c                     dS )Nzhttps://cdn.bokeh.orgrK   rK   r2   r0   _cdn_base_urlr!  b  s    ""r2   Tr   c           
     &     1t          j                    }|r|nt          j        d          d          t	                      t
                                         rdndd fd
dfdt          fd          }t          t          j        d                    dk    r5|j	        
                    t          dd  dt           d                     t                     r J t                     fd|_        |S )N+r   z	bokeh/devzbokeh/releaser   r'   rv   rw   r&   c                $    |  d rdnd d| S )Nr_   r   r   r^   rK   )r   rv   r   rW   s     r0   mk_filenamez"_get_cdn_urls.<locals>.mk_filenameo  s-    EEEH"<&&"EEtEEEr2   c                .     d d | |          z   S )Nr,   rK   )r   rv   base_url	containerr%  s     r0   mk_urlz_get_cdn_urls.<locals>.mk_urlr  s+    ))Y)))KKd,C,CCCr2   c                $    fd| D             S )Nc                (    g | ]} |          S rK   rK   r   r   rv   r)  s     r0   r   z3_get_cdn_urls.<locals>.<lambda>.<locals>.<listcomp>u  s%    0e0e0eY	41H1H0e0e0er2   rK   rt   rv   r)  s    `r0   r   z_get_cdn_urls.<locals>.<lambda>u  s!    0e0e0e0e0eZd0e0e0e r2   r   r   warnz Requesting CDN BokehJS version 'z"' from local development version 'z6'. This configuration is unsupported and may not work!)rp   rq   c                (    fd| D             S )Nc                J    i | ]} |           |                    S rK   rK   )r   r   rv   r%  r)  
sri_hashess     r0   
<dictcomp>z3_get_cdn_urls.<locals>.<lambda>.<locals>.<dictcomp>  sE     2
 2
 2
R[FF9d##ZIt0L0L%M2
 2
 2
r2   rK   )rt   rv   r%  r)  r2  s    `r0   r   z_get_cdn_urls.<locals>.<lambda>  s;     2
 2
 2
 2
 2
 2
 2
_i2
 2
 2
 r2   r   r'   rv   rw   r&   r'   )r   docs_cdnr   rc   r!  _DEV_PATmatchr   ra   r   re   ro   r   rZ   rY   )	rW   r   r5  resultr'  r(  r%  r)  r2  s	   ``  @@@@@r0   r   r   f  s   $&&&E((K,=c,B,B1,EH'~~g66KOIF F F F F F FD D D D D D D D eeeefffF
;S!!""Q&&~F7 F F^i F F F 
  
  
 	 	 	 w 
"""/88

 
 
 
 
 
 Mr2   r   r   r   c                L     |rdndd fdt          fd	
          S )Nr   r   r   r'   rv   rw   r&   c                D    | d|   d| } |          } d| S )Nr,   r^   zstatic/rK   )r   rv   rh   	_minifiedr   r   s      r0   r)  z _get_server_urls.<locals>.mk_url  sL    111y11411%!>$''D))4)))r2   c                $    fd| D             S )Nc                (    g | ]} |          S rK   rK   r,  s     r0   r   z6_get_server_urls.<locals>.<lambda>.<locals>.<listcomp>  s%    .c.c.c9vvi/F/F.c.c.cr2   rK   r-  s    `r0   r   z"_get_server_urls.<locals>.<lambda>  s!    .c.c.c.c.cXb.c.c.c r2   r.  r4  )r   )r   r   r   r;  r)  s   ` `@@r0   r   r     s[    
 #*I* * * * * * * * ccccddddr2   rh   c                R   |                      d          sJ ddlm}m} d|                                  } |||          }d                                } |||j        |          }|                                \  }}|                    d                                          S )	Nz.jsr   )PIPEPopenzopenssl dgst -sha384 -binary )stdoutzopenssl base64 -A)stdinrA  r   )	r   
subprocessr?  r@  rc   rA  communicater   strip)	rh   r?  r@  digestp1b64p2outr   s	            r0   rd   rd     s    ==&&&&&&&&3T3399;;F	vd	#	#	#B

#
#
%
%C	s")D	1	1	1B^^FC::g$$&&&r2   ResourcesLiker4   r   r3   )CDNINLINEr   rV   rZ   rm   )NNF)r    r!   r"   r#   r$   r%   r&   r'   )r&   rN   )rW   r'   r&   rL   )r&   r[   r	  )NT)rW   r!   r   r%   r&   r   )r   r'   r   r%   r   r   r&   r   r
  )Ur  
__future__r   logging	getLoggerrG   logrR   reos.pathr   r   r   typingr   r   r	   r
   r   r   r   r   r   r   r   core.templatesr   r   
core.typesr   r   modelr   r   r   util.dataclassesr   r   
util.pathsr   r   
util.tokenr   util.versionr   typing_extensionsr   default_server_hostr-   default_server_portr.   r1   r  r8   rJ   r9   r:   	ComponentrB   rT   r'   rL   rM   rV   rZ   rm   PathVersionerrw   ro   rs   r   r   r   r   r  compiler6  r!  r   r   rd   rK  rL  rM  __all__rK   r2   r0   <module>rc     s    ( # " " " " " g!!  				 + + + + + + + + + +
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
       7 7 7 7 7 7 7 7 $ $ $ $ $ $ $ $       ( ( ( ( ( ( ( ( . . . . . . . . , , , , , , , , + + + + + + ) ) ) ) ) ) ,++++++ 3h244 2h244 X X X X X %*,, OP P P P PIJ J J J J 7!23 3 3 3 3fg	    I    cN " " " "(, , , , ,( ( ( (V* * * *Z+K +K +K +KZ #${
       
F F F F FX F F FC C C C Cx C C C # # # # # # # #
 23g g g g g g g gR	(  (  (  (  (  (  (  ( \ 2:788# # # #! ! ! ! !J ,+/e e e e e ' ' ' '$ !M!9: : : : :iU		!	!	!r2   