
    d+^                       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. dZ/dZ0dMdNdZ1 e1            Z2ed         Z3de4d<   ed          Z5de4d!<   ee3e5f         Z6de4d"<   ed#         Z7 G d$ d%e          Z8e9e:e:f         Z;de4d&<   da<d'e4d(<   dOd*Z=dPd,Z>dQd.Z?ee:ge:f         Z@ed/         ZAe$ G d0 d1                      ZB G d2 d3e          ZC G d4 d5e          ZDe$ G d6 d7                      ZEed8         ZF G d9 d:          ZG G d; d<          ZH ejI        d=          ZJdRd>ZKdSdTdAZLe2d?dfdUdEZMdVdGZNeeGe6f         ZOde4dH<    eGdIJ          ZP eGdKJ          ZQdLZRdS )WaK   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)	TypeAlias	localhosti  F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_urlr2   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__ r3   r1   rC   rC   W   s*         r3   rC   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)rN   openr   r   jsonloaddict)fs    r1   get_all_sri_hashesrW   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

    )rW   )rX   hashess     r1   get_sri_hashes_for_versionr[      s    R  !!F'?r3   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   r[   r   lenRuntimeErrorr   split_compute_single_hashappend)	r^   pathsrZ   badpathnamesuffixfilenamesri_hashs	            r1   verify_sri_hashesrn      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r3   )rF   rE   c                  $    e Zd ZU ded<   ded<   dS )RuntimeMessagezLiteral['warn']typer(   textNrG   rL   r3   r1   rp   rp      s%         IIIIIr3   rp   c                  &    e Zd Zedd            ZdS )	UrlsFn
components	list[str]kindKindr'   c                    d S NrL   ru   rw   s     r1   __call__zUrlsFn.__call__   s    BE#r3   N)ru   rv   rw   rx   r'   rv   rH   rI   rJ   staticmethodr|   rL   r3   r1   rt   rt      s&        EEE \EEEr3   rt   c                  &    e Zd Zed	d            ZdS )
HashesFnru   rv   rw   rx   r'   rM   c                    d S rz   rL   r{   s     r1   r|   zHashesFn.__call__   s    ?Bsr3   N)ru   rv   rw   rx   r'   rM   r}   rL   r3   r1   r   r      s&        BBB \BBBr3   r   c                  J    e Zd ZU ded<    ee          Zded<   dZded<   dS )	Urlsrt   urls)default_factorylist[RuntimeMessage]messagesNzHashesFn | NonerZ   )rH   rI   rJ   rK   r   listr   rZ   rL   r3   r1   r   r      sJ         LLL%*U4%@%@%@H@@@@"F""""""r3   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_   r9   moder   r   r   
_log_levelrD   ru   r<   )rE   rF   zClassVar[ComponentDefs]_component_defs)r=   r>   r?   r@   rA   zClassVar[list[Component]]_default_componentsN)	rX   root_dirdevminified	log_levelroot_urlpath_versionerru   base_dirResourcesMode | NonerX   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 r7   zDsetting 'root_dir' makes sense only when 'mode' is set to 'relative'r5   z>setting 'version' makes sense only when 'mode' is set to 'cdn'r6   zBsetting 'root_url' makes sense only when 'mode' is set to 'server'r-   )r   r   ru   r   	resourcesendswithr   r   r9   r   r   ra   
startswithrootdirr   cdn_versionrX   r   r   r   	_root_urlr   	_cdn_urlsextend_server_urlsr   r   )selfr   rX   r   r   r   r   r   r   ru   r   mode_devr5   r6   s                 r1   __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r3   ru   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   rX   r   r   r   r   r   r   ru   r   )r   r   rX   r   r   r   r   r   r   r   ru   r   )r   ru   s     r1   clonezResources.clone  s]    L]]n^.%/%;zzdoAVAV]
 
 
 	
r3   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   rf   ru   r   r   )r   argss     r1   __repr__zResources.__repr__  sx    %	%%&8 	$KK
###?d666KK9do99:::.DIIdOO....r3   r   ResourcesLike | Nonec                t    t          |t                    r|S t          t          j        |                    S )Nr   )
isinstancer   r   r   )clsr   s     r1   buildzResources.build  s7    i++ 	A("4Y"?"?@@@@r3   c                    | j         S rz   )r   r   s    r1   r   zResources.log_level  s
    r3   levelr\   c                r    t          t                    }|||v st          d| d|           || _        d S )NzUnknown log level 'z', valid levels are: )r   r   ra   r   )r   r   valid_levelss      r1   r   zResources.log_level  sH    )),!6!6]5]]|]]^^^r3   c                ,    | j         | j         S | j        S rz   )r   _default_root_urlr   s    r1   r   zResources.root_url  s    >%>!))r3   rw   rx   c                .      fd j         D             S )Nc                2    g | ]}|j                  v |S rL   )r   ).0comprw   r   s     r1   
<listcomp>z,Resources.components_for.<locals>.<listcomp>  s,    WWWDD<PQU<V4V4V4V4V4Vr3   r   )r   rw   s   ``r1   components_forzResources.components_for  s#    WWWWWWWWWr3   rv   c                      j         s	 j        rdndfd                               D             } fd|D             }|S )N.min c                "    g | ]}|  d  S )r_   rL   )r   	componentrw   r   s     r1   r   z)Resources._file_paths.<locals>.<listcomp>  s,    \\\YI0x00$00\\\r3   c                <    g | ]}t          j        |          S rL   )r   r   )r   filerw   r   s     r1   r   z)Resources._file_paths.<locals>.<listcomp>  s'    CCCTdmT400CCCr3   )r   r   r   )r   rw   filesrg   r   s   ``  @r1   _file_pathszResources._file_paths  sh    !%CdmC66\\\\\$BUBUVZB[B[\\\CCCCCUCCCr3   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   rL   )args    r1   <lambda>z7Resources._collect_external_resources.<locals>.<lambda>  s    TWXYTZ r3   )keyN)	sortedr   model_class_reverse_mapitemsgetattrr   r(   rf   r   )r   r   external_resources_r   externales          r1   _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!!r3   r   c                6    t          | j        | j                  S rz   )_get_cdn_urlsrX   r   r   s    r1   r   zResources._cdn_urls  s    T\4=999r3   c                T    t          | j        | j        rdn| j        | j                  S )NF)_get_server_urlsr   r   r   r   r   s    r1   r   zResources._server_urls  s'    /SuudmUYUhiiir3   #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 )Nr4   c                :    g | ]}                     |          S rL   )_inline)r   ri   r   s     r1   r   z&Resources._resolve.<locals>.<listcomp>  s%    888$4<<%%888r3   r7   c                0    g | ]}t          |          S rL   )r   )r   ri   r   s     r1   r   z&Resources._resolve.<locals>.<listcomp>  s#    ???WT8,,???r3   r8   r5   r6   )
r   r   r   _default_root_dirr   r   r   r   rZ   r   )	r   rw   rg   r   rawrZ   r5   r6   r   s	   `       @r1   _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##r3   ri   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 */rQ   utf-8z/* END 
)r   rR   readdecode)ri   rl   beginrV   middleends         r1   r   zResources._inline  s    D>>)H)))$ 	.VVXX__W--F	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.%%%%**6**S***s   (AA!Ac                h    |                      d          \  }}}|                     d          }||z   S )NrE   r   r   r   r   r   r   r   s       r1   js_fileszResources.js_files   s9    mmD))q!!==>NOO!E))r3   c                    |                      d          \  }}}| j        |                    d| j         d           | j        r|                    d           |S )NrE   zBokeh.set_log_level("z");zBokeh.settings.dev = true)r   r   rf   r   r   r   r   s      r1   js_rawzResources.js_raw  sc    MM$''	3>%JJBt~BBBCCC8 	4JJ2333
r3   rM   c                8    |                      d          \  }}}|S )NrE   r   )r   r   rZ   s      r1   rZ   zResources.hashes  s    }}T**1fr3   c                N    t          j        | j        | j        | j                  S )N)r   r   rZ   )r   renderr   r   rZ   r   s    r1   	render_jszResources.render_js  s"    "$+VZVabbbbr3   c                h    |                      d          \  }}}|                     d          }||z   S )NrF   r   r   r   s       r1   	css_fileszResources.css_files  s8    mmE**q!!==iHH!E))r3   c                8    |                      d          \  }}}|S )NrF   r   r   s      r1   css_rawzResources.css_raw!  s    MM%((	3
r3   c                $    d | j         D             S )Nc                6    g | ]}t          j        |          S rL   )rS   dumps)r   rF   s     r1   r   z)Resources.css_raw_str.<locals>.<listcomp>(  s     888C
3888r3   )r  r   s    r1   css_raw_strzResources.css_raw_str&  s    884<8888r3   c                B    t          j        | j        | j                  S )N)r  r   )r   r   r  r   r   s    r1   
render_csszResources.render_css*  s    #DLDNSSSSr3   c                `    |                                  |                                 }}| d| S )Nr   )r  r   )r   rF   rE   s      r1   r   zResources.render-  s/    //##T^^%5%5R~~~~r3   rz   )r   r   rX   r"   r   r   r   r   r   r   r   r   r   r"   r   r   ru   r   r   r"   )ru   r   r'   r   r'   r(   )r   r   r'   r   )r'   r   )r   r   r'   r\   )rw   rx   r'   rD   )rw   rx   r'   rv   )r   r   r'   rv   )r'   r   )rw   rx   r'   r   ri   r(   r'   r(   )r'   rv   )r'   rM   )%rH   rI   rJ   __doc__r   DEFAULT_SERVER_HTTP_URLr   rK   r   r   r   r   r   __str__classmethodr   propertyr   setterr   r   r   r   r   r   r   r~   r   r   r   rZ   r   r   r  r  r  r   rL   r3   r1   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     r3   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   ra   rstripr  )r   r  r  s      r1   r   zSessionCoordinates.__init__7  sl    	9	!!/DI9%% 	jhiiiI$$S))	 &r3   c                    | j         S rz   )r  r   s    r1   r  zSessionCoordinates.urlG  s
    yr3   r   c                D    | j         t                      | _         | j         S )z- Session ID derived from the kwargs provided.)r  r   r   s    r1   r  zSessionCoordinates.session_idK  s$     #244Dr3   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    r1   session_id_allowing_nonez+SessionCoordinates.session_id_allowing_noneR  s     r3   )r  r(   r  r  r'   r\   r
  )r'   r   )r'   r  )rH   rI   rJ   r  rK   r  r   r  r  r  r   rL   r3   r1   r  r  1  s         XXIII%<VZ & & & & & &     X       X        X     r3   r  z^(\d)+\.(\d)+\.(\d)+(\.dev|rc)c                     dS )Nzhttps://cdn.bokeh.orgrL   rL   r3   r1   _cdn_base_urlr"  b  s    ""r3   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(   rw   rx   r'   c                $    |  d rdnd d| S )Nr`   r   r   r_   rL   )r   rw   r   rX   s     r1   mk_filenamez"_get_cdn_urls.<locals>.mk_filenameo  s-    EEEH"<&&"EEtEEEr3   c                .     d d | |          z   S )Nr-   rL   )r   rw   base_url	containerr&  s     r1   mk_urlz_get_cdn_urls.<locals>.mk_urlr  s+    ))Y)))KKd,C,CCCr3   c                $    fd| D             S )Nc                (    g | ]} |          S rL   rL   r   r   rw   r*  s     r1   r   z3_get_cdn_urls.<locals>.<lambda>.<locals>.<listcomp>u  s%    0e0e0eY	41H1H0e0e0er3   rL   ru   rw   r*  s    `r1   r   z_get_cdn_urls.<locals>.<lambda>u  s!    0e0e0e0e0eZd0e0e0e r3   r   r   warnz Requesting CDN BokehJS version 'z"' from local development version 'z6'. This configuration is unsupported and may not work!)rq   rr   c                (    fd| D             S )Nc                J    i | ]} |           |                    S rL   rL   )r   r   rw   r&  r*  
sri_hashess     r1   
<dictcomp>z3_get_cdn_urls.<locals>.<lambda>.<locals>.<dictcomp>  sE     2
 2
 2
R[FF9d##ZIt0L0L%M2
 2
 2
r3   rL   )ru   rw   r&  r*  r3  s    `r1   r   z_get_cdn_urls.<locals>.<lambda>  s;     2
 2
 2
 2
 2
 2
 2
_i2
 2
 2
 r3   r   r(   rw   rx   r'   r(   )r   docs_cdnr   rd   r"  _DEV_PATmatchr   rb   r   rf   rp   r   r[   rZ   )	rX   r   r6  resultr(  r)  r&  r*  r3  s	   ``  @@@@@r1   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

 
 
 
 
 
 Mr3   r   r   r   c                L     |rdndd fdt          fd	
          S )Nr   r   r   r(   rw   rx   r'   c                D    | d|   d| } |          } d| S )Nr-   r_   zstatic/rL   )r   rw   ri   	_minifiedr   r   s      r1   r*  z _get_server_urls.<locals>.mk_url  sL    111y11411%!>$''D))4)))r3   c                $    fd| D             S )Nc                (    g | ]} |          S rL   rL   r-  s     r1   r   z6_get_server_urls.<locals>.<lambda>.<locals>.<listcomp>  s%    .c.c.c9vvi/F/F.c.c.cr3   rL   r.  s    `r1   r   z"_get_server_urls.<locals>.<lambda>  s!    .c.c.c.c.cXb.c.c.c r3   r/  r5  )r   )r   r   r   r<  r*  s   ` `@@r1   r   r     s[    
 #*I* * * * * * * * ccccddddr3   ri   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)stdinrB  r   )	r   
subprocessr@  rA  rd   rB  communicater   strip)	ri   r@  rA  digestp1b64p2outr   s	            r1   re   re     s    ==&&&&&&&&3T3399;;F	vd	#	#	#B

#
#
%
%C	s")D	1	1	1B^^FC::g$$&&&r3   ResourcesLiker5   r   r4   )CDNINLINEr   rW   r[   rn   )NNF)r!   r"   r#   r$   r%   r&   r'   r(   )r'   rO   )rX   r(   r'   rM   )r'   r\   r
  )NT)rX   r"   r   r&   r'   r   )r   r(   r   r&   r   r   r'   r   r  )Sr  
__future__r   logging	getLoggerrH   logrS   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   r.   r/   r2   r  r9   rK   r:   r;   	ComponentrC   rU   r(   rM   rN   rW   r[   rn   PathVersionerrx   rp   rt   r   r   r   r   r  compiler7  r"  r   r   re   rL  rM  rN  __all__rL   r3   r1   <module>rb     s    ( # " " " " " g!!  				 + + + + + + + + + +
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
       7 7 7 7 7 7 7 7 $ $ $ $ $ $ $ $       ( ( ( ( ( ( ( ( . . . . . . . . , , , , , , , , + + + + + + ) ) ) ) ) ) ,++++++ "  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		!	!	!r3   