
    Be'                       d dl mZ d dlZd dlZd dlmZmZmZmZm	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 erd d
lmZ d dlmZ d dlmZ d Zg dZ ej        d          Zd Zd Zd Z dddZ!ddZ"d Z# G d de          Z$dS )    )annotationsN)TYPE_CHECKINGAnyClassVarMappingOptional)ColumnDataSource)JupyterComm   )	lazy_load   )	ModelPane)Document)Model)Commc                @   t          |           dk    ri S t          t          d | D                                 }d |D             }| D ]5}|D ]0}||                             |                    |                     16d |                                D             }|S )z@
    Converts Vega dataset into Bokeh ColumnDataSource data
    r   c              3  H   K   | ]}|                                 D ]}|V  d S N)keys).0dks      /lib/python3.11/site-packages/panel/pane/vega.py	<genexpr>zds_as_cds.<locals>.<genexpr>    s7      ;;A!&&((;;Qa;;;;;;;    c                    i | ]}|g S  r   )r   r   s     r   
<dictcomp>zds_as_cds.<locals>.<dictcomp>!   s       aAr   r   c                >    i | ]\  }}|t          j        |          S r   )npasarray)r   r   vs      r   r   zds_as_cds.<locals>.<dictcomp>%   s&    666AArz!}}666r   )lensortedsetappendgetitems)datasetr   dataitemr   s        r   	ds_as_cdsr,      s     7||q	#;;;;;;;<<D  4   D ( ( 	( 	(AGNN488A;;''''	(66666DKr   )hconcatvconcatlayerz^v(\d+)\.\d+\.\d+.jsonc                T    t          | t                    r|| v S t          | |          S r   )
isinstancedicthasattr)objattrs     r   _isinr6   -   s.    #t "s{sD!!!r   c                   |dk    rt          | t                    r*|                     di                               dd          S t          | j        t                    r| j                            dd          S t	          | j        dd          S t          | t                    r|                     dd          S t	          | dd          S )N   selecttypeinterval)r1   r2   r'   r9   getattr)specversions     r   	_get_typer?   3   s    !||dD!! 	<88Hb))--fjAAAT** 	<;??6:6664;
;;;dD!! 	588FJ///4444r   c                    i }|                      d          dk    }|                      d          dk    }|r|rd|d<   n|rd|d<   n|rd|d<   |S )Nheight	containerwidthstretch_bothsizing_modestretch_widthstretch_height)r'   )r=   
dimensionsresponsive_heightresponsive_widths       r   _get_dimensionsrK   A   s    J**k9xx((K7 5- 5$2
=!!	 5$3
=!!	 5$4
=!r   r8   default_versionintreturnc                   t                               |           r)|                                                     dd          }n|                     dd          }|                    d          d         }t
                              |          }||                                s|S t          |                                d                   S )N$schema /r   )	Vega	is_altairto_dictr'   splitSCHEMA_REGEX	fullmatchgroupsrM   )r4   rL   schemar>   matchs        r   _get_schema_versionr]   M   s    ~~c (""9b11B''ll3#G""7++E}ELLNN}u||~~a !!!r   c                   | i S t          |           dk    rdnd}i }t          | |          r{| |         }dk    r!t          |t                    rd |D             }	 |                    fd|                                D                        n# t          t          f$ r Y nw xY wt          D ]A}t          | |          r/| |         D ]&}|                    t          |                     'B|S )Nr8   params	selectionc                    i | ]G}t          |d d          dk    st          |d          't          |d          r|j        n|d         |HS )
param_typeNr`   r9   name)r<   r6   r3   rc   r   ps     r   r   z#_get_selections.<locals>.<dictcomp>b   sc       CD1lD11[@@E!XDVDV@ "!V,,;!F)Q@@@r   c                8    i | ]\  }}|t          |          S r   )r?   )r   rc   r=   r>   s      r   r   z#_get_selections.<locals>.<dictcomp>g   s6       3=4ig..  r   )r>   )
r]   r6   r1   listupdater(   AttributeError	TypeError_containers_get_selections)r4   r>   key
selectionsr_   csubobjs    `     r   rl   rl   X   s\   
{		%c**ll((CJS# Sa<<Jvt44< HN  F	    AG       	* 	 	 	D	 L La== 	La& L L!!/&'"J"J"JKKKKs   #3B B+*B+c                &   t          | t                    rit          |           }d|v rT|d         }t          |t                    rt          |          |d<   n$t          |t                    rd |D             |d<   |S |                                 S )Nr*   c                ,    g | ]}t          |          S r   )r2   r   r   s     r   
<listcomp>z_to_json.<locals>.<listcomp>z   s    666AQ666r   )r1   r2   rg   rV   )r4   jsonr*   s      r   _to_jsonrv   r   s    #t CyyT>><D$%% 7#DzzVD$'' 766666V;;==r   c                      e Zd ZU dZ ej        deefd          Z ej        ej	        d          Z
 ej        dd	          Z ej        d
dg d          ZdZded<   d
d
ddZded<   dZded<   d3 fd	Zed             Zed             Zd Zed             Zed4d             Zd3d!Zd" Z fd#Zi f fd$	Z	 	 d5d6 fd-Zd7d2Z  xZ!S )8rT   a  
    The Vega pane renders Vega-lite based plots (including those from Altair)
    inside a panel.

    Note

    - to use the `Vega` pane, the Panel `extension` has to be
    loaded with 'vega' as an argument to ensure that vega.js is initialized.
    - it supports selection events
    - it optimizes the plot rendering by using binary serialization for any
    array data found on the Vega/Altair object, providing huge speedups over
    the standard JSON serialization employed by Vega natively.

    Reference: https://panel.holoviz.org/reference/panes/Vega.html

    :Example:

    >>> pn.extension('vega')
    >>> Vega(some_vegalite_dict_or_altair_object, height=240)
       z
        Declares the debounce time in milliseconds either for all
        events or if a dictionary is provided for individual events.)defaultclass_doczn
        The Selection object reflects any selections available on the
        supplied vega plot into Python.)rz   r{   Fz&
        Whether to show Vega actions.)ry   r{   NT)	excelggplot2quartzvoxfivethirtyeightdarklatimesurbaninstitutegooglecharts)ry   
allow_Noneobjectsg?zClassVar[float | bool | None]priorityr*   )r`   debounceobjectz"ClassVar[Mapping[str, str | None]]_renamezClassVar[bool]_updatesc                     t                      j        |fi | | j                            | j        dg           |                                  d S )Nr   )super__init__paramwatch_update_selections)selfr   r_   	__class__s      r   r   zVega.__init__   sW    **6***
08*===!!!!!r   c                *    t          | j                  S r   )rl   r   )r   s    r   _selectionszVega._selections   s    t{+++r   c                      j         j        j        t           j        t                    r fd j        D             }n fd j        D             }|S )Nc                H    i | ]}|j                             |          S r   )r   r'   r   selry   r   s     r   r   z"Vega._throttle.<locals>.<dictcomp>   s=        T]&&sG44  r   c                $    i | ]}|j         pS r   )r   r   s     r   r   z"Vega._throttle.<locals>.<dictcomp>   s"    RRR#T]5gRRRr   )r   r   ry   r1   r2   r   )r   throttlery   s   ` @r   	_throttlezVega._throttle   s    *%-dmT** 	S    +  HH
 SRRRRAQRRRHr   c                ^   d | j                                         D             }| j        rYt          | j        j                  dhz
  t          |          k    r+| j        j                            d |D                        d S  t          dt          j        f|                      | _        d S )Nc                v    i | ]6\  }}||d k    rt          j        d          nt          j        d          7S )r;   F)
allow_refs)r   DictList)r   estypes      r   r   z+Vega._update_selections.<locals>.<dictcomp>   sX     
 
 
5 u
/B/BuzU++++
^cHdHdHd
 
 
r   rc   c                    i | ]}|d S r   r   rd   s     r   r   z+Vega._update_selections.<locals>.<dictcomp>   s    (A(A(AQD(A(A(Ar   	Selection)r   r(   r`   r%   r   rh   r:   Parameterized)r   argsr_   s      r   r   zVega._update_selections   s    
 
 ,2244
 
 
 > 	s4>#788F8CFSSN ''(A(A&(A(A(ABBBFJkE,?+A6JJLLr   c                ^    dt           j        v rdd l}t          ||j        j                  S dS )Naltairr   F)sysmodulesr   r1   apiTopLevelMixin)clsr4   alts      r   rU   zVega.is_altair   s5    s{""    c37#8999ur   r4   r   rN   float | bool | Nonec                    t          |t                    r,d|                    dd                                          v rdS |                     |          S )NvegarP   rQ   T)r1   r2   r'   lowerrU   )r   r4   s     r   applieszVega.applies   sO    c4   	Vswwy"/E/E/K/K/M/M%M%M4}}S!!!r   c           	        |i nt          |          }|                    di           }t          |          D ]\}||v st          ||         t                     r#|                    |          }t          |t                    rt          d |D                       r|||<   l|rt          |d                   ng }|                     | j                  rdd l	}t          | j        j
        |j        |j        t          |j                  f          s<|t          | j        j
                  k    rt          j        | j        j
                  }nt#          |          }t          |          ||<   <t          t#          |                    ||<   ^|                    di           }t          |t                     r9|                    di           }|r t          t#          |                    |d<   nWt          |t                    rB|D ]?}d|v r9t          t#          |                    d                              ||d         <   @|S )Ndatasetsc              3  H   K   | ]}t          |t                    od |v V  dS )geometryN)r1   r2   rs   s     r   r   z$Vega._get_sources.<locals>.<genexpr>   s7      -d-dZ[jD.A.A.UjTUo-d-d-d-d-d-dr   r   )r*   r*   valuesrc   )r2   r'   rg   r1   popanyr%   rU   r   r   r*   DataUrlDatar:   	Undefinedr	   from_dfr,   )	r   ru   sourcesr   rc   r*   columnsr   r   s	            r   _get_sourceszVega._get_sources   s;   ""T']]88J++NN 	G 	GDw*Xd^T"B"B<<%%D$%% #-d-d_c-d-d-d*d*d !%&*2c$q'lllG~~dk** 	G$$$$"4;#3chTRUR_M`M`5abb +s4;#34444+3DK4DEEDD$T??D 0d ; ; ; 0ioo F F Fxx##dD!! 	[88Hb))D I"2	$"H"H"Hd## 	[ [ [q==)9yx?Y?Y)Z)Z)ZGAfI&r   c                    |j         d         }| j                            |          }|j         d         }|dk    rt          |          } | j        j        j        di ||i d S )Nr:   valuer;   r   )r*   r   r'   rg   r`   r   rh   )r   eventrc   r   r   s        r   _process_eventzVega._process_event   sn    z&! $$T**
7#JKKE##44tUm44444r   c                    t                                          |          }d|v r |d         t          |d                   |d<   |S )Nr*   )r   _process_param_changerv   )r   r_   propsr   s      r   r   zVega._process_param_change   sF    --f55U??uV}8$U6]33E&Mr   c                0   t                                          |          }|d         }||                     ||          }|rt          |          ni }||d<   ||d<   t	          | j                  |d<   | j        |d<   |                    |           |S )Nr*   data_sourceseventsr   )r   _get_propertiesr   rK   rg   r   r   rh   )r   r{   r   r   r*   rH   r   s         r   r   zVega._get_properties  s    '',,V}''g66G.2:_T***
f 'nt/00h NjZ   r   r{   r   rootOptional[Model]parentcommOptional[Comm]r   c                    t          ddt          |t                    |          | _        t	                                          ||||          }|                     d|||           |S )Nzpanel.models.vegaVegaPlot
vega_event)modelr{   r   )r   r1   r
   _bokeh_modelr   
_get_model_register_events)r   r{   r   r   r   r   r   s         r   r   zVega._get_model  sk     &Zk-J-JD
 
 ""3fd;;l%StLLLr   refstrr   Nonec                |    |                      |j        t          |j                            } |j        di | d S )N)r   r   )r   documentr2   r   rh   )r   r   r   r   s       r   _updatezVega._update  sE    $$U^T%BT=U=U$VVur   r   )r4   r   rN   r   )NNN)
r{   r   r   r   r   r   r   r   rN   r   )r   r   r   r   rN   r   )"__name__
__module____qualname____doc__r   ClassSelectorrM   r2   r   r   r`   Booleanshow_actionsObjectSelectorthemer   __annotations__r   r   r   propertyr   r   r   classmethodrU   r   r   r   r   r   r   r   __classcell__)r   s   @r   rT   rT      s_         * #u"2sDk HH I I IH $#5+> E+ , , ,I !5= 5) * * *L !E $ I5 I5 I5 6 6 6E /2H1111 tv3? 3?G ? ? ? ?  $H####" " " " " "
 , , X, 	 	 X	M M M   [ " " " ["
   B5 5 5     ,.       6:?C	 	 	 	 	 	 	       r   rT   )r8   )rL   rM   rN   rM   r   )%
__future__r   rer   typingr   r   r   r   r   numpyr    r   bokeh.modelsr	   pyviz_commsr
   utilr   baser   bokeh.documentr   bokeh.modelr   r   r,   rk   compilerX   r6   r?   rK   r]   rl   rv   rT   r   r   r   <module>r      s   " " " " " " 				 



                   ) ) ) ) ) ) # # # # # #             !''''''!!!!!!          .--rz233" " "5 5 5
 
 
	" 	" 	" 	" 	"   4
 
 
a a a a a9 a a a a ar   