a
    Df>)                     @  s
  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rd d
lmZ d dlmZ d dlmZ dd Zg dZedZdd Zdd Zdd Z d"dddddZ!d#ddZ"dd Z#G d d! d!eZ$dS )$    )annotationsN)TYPE_CHECKINGAnyClassVarMappingOptional)ColumnDataSource)JupyterComm   )	lazy_load   )	ModelPane)Document)Model)Commc                 C  sr   t | dkri S ttdd | D }dd |D }| D ]"}|D ]}|| || q@q8dd | D }|S )z@
    Converts Vega dataset into Bokeh ColumnDataSource data
    r   c                 s  s    | ]}|  D ]
}|V  qqd S N)keys).0dk r   \/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/panel/pane/vega.py	<genexpr>        zds_as_cds.<locals>.<genexpr>c                 S  s   i | ]
}|g qS r   r   )r   r   r   r   r   
<dictcomp>!   r   zds_as_cds.<locals>.<dictcomp>c                 S  s   i | ]\}}|t |qS r   )npZasarray)r   r   vr   r   r   r   %   r   )lensortedsetappendgetitems)Zdatasetr   dataitemr   r   r   r   	ds_as_cds   s    r%   )ZhconcatZvconcatZlayerz^v(\d+)\.\d+\.\d+.jsonc                 C  s    t | tr|| v S t| |S d S r   )
isinstancedicthasattr)objattrr   r   r   _isin-   s    
r+   c                 C  sv   |dkrPt | tr&| di ddS t | jtr@| jddS t| jddS n"t | trf| ddS t| ddS d S )N   selecttypeinterval)r&   r'   r!   r-   getattr)specversionr   r   r   	_get_type3   s    

r3   c                 C  sl   i }|  ddko| dd u }|  ddko:| dd u }|rN|rNd|d< n|r\d|d< n|rhd|d< |S )Nheight	containerwidthZstretch_bothsizing_modeZstretch_widthZstretch_height)r!   )r1   props
dimensionsZresponsive_heightZresponsive_widthr   r   r   _get_dimensionsA   s    

r:   r,   int)default_versionreturnc                 C  sd   t | r|  dd}n| dd}|dd }t|}|d u sP| sT|S t| d S )N$schema /r   )	Vega	is_altairto_dictr!   splitSCHEMA_REGEX	fullmatchgroupsr;   )r)   r<   Zschemar2   matchr   r   r   _get_schema_versionM   s    

rJ   c              	     s   | d u ri S  d u rt |   dkr(dnd}i }t| |r| | } dkrbt|trbdd |D }z | fdd| D  W n ttfy   Y n0 tD ].}t| |r| | D ]}|t	| d qq|S )Nr,   params	selectionc                 S  s@   i | ]8}t |d ddks"t|drt|dr2|jn|d |qS )Z
param_typeNrL   r-   name)r0   r+   r(   rM   r   pr   r   r   r   b   s   z#_get_selections.<locals>.<dictcomp>c                   s   i | ]\}}|t | qS r   )r3   )r   rM   r1   r2   r   r   r   g   s   rP   )
rJ   r+   r&   listupdater"   AttributeError	TypeError_containers_get_selections)r)   r2   key
selectionsrK   cZsubobjr   rP   r   rV   X   s.    

rV   c                 C  sb   t | trZt| }d|v rV|d }t |tr:t||d< nt |trVdd |D |d< |S |  S )Nr#   c                 S  s   g | ]}t |qS r   )r'   r   r   r   r   r   
<listcomp>z   r   z_to_json.<locals>.<listcomp>)r&   r'   rQ   rD   )r)   jsonr#   r   r   r   _to_jsonr   s    


r]   c                      s2  e Zd ZU dZejdeefddZejej	ddZ
ejddd	Zejd
dg ddZdZded< d
d
ddZded< dZded< d: fdd	Zedd Zedd Zdd Zedd  Zed!d"d#d$d%Zd;d&d'Zd(d) Z fd*d+Zi f fd,d-	Zd<d.d/d/d0d1d2 fd3d4Zd5d1d6d7d8d9Z   Z!S )=rB   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.)r`   ra   Fz&
        Whether to show Vega actions.)r_   ra   NT)	excelZggplot2ZquartzZvoxZfivethirtyeightZdarkZlatimesZurbaninstituteZgooglecharts)r_   Z
allow_NoneZobjectsg?zClassVar[float | bool | None]priorityr#   )rL   debounceobjectz"ClassVar[Mapping[str, str | None]]_renamezClassVar[bool]_updatesc                   s2   t  j|fi | | j| jdg |   d S )Nre   )super__init__paramZwatch_update_selections)selfre   rK   	__class__r   r   ri      s    zVega.__init__c                 C  s
   t | jS r   )rV   re   )rl   r   r   r   _selections   s    zVega._selectionsc                   sH   j jj tjtr. fddjD }n fddjD }|S )Nc                   s   i | ]}|j | qS r   )rd   r!   r   selr_   rl   r   r   r      s   z"Vega._throttle.<locals>.<dictcomp>c                   s   i | ]}|j p qS r   )rd   rp   rr   r   r   r      r   )rj   rd   r_   r&   r'   ro   )rl   throttler   rr   r   	_throttle   s    
zVega._throttlec                 G  sh   dd | j  D }| jrPt| jjdh t|krP| jjdd |D  d S tdtjf| | _d S )Nc                 S  s2   i | ]*\}}||d kr"t jddn
t jddqS )r/   F)Z
allow_refs)rj   DictList)r   estyper   r   r   r      s   z+Vega._update_selections.<locals>.<dictcomp>rM   c                 S  s   i | ]
}|d qS r   r   rN   r   r   r   r      r   Z	Selection)ro   r"   rL   r   rj   rR   r.   Parameterized)rl   argsrK   r   r   r   rk      s     zVega._update_selectionsc                 C  s$   dt jv r dd l}t||jjS dS )Naltairr   F)sysmodulesr{   r&   apiZTopLevelMixin)clsr)   altr   r   r   rC      s    
zVega.is_altairr   zfloat | bool | None)r)   r=   c                 C  s,   t |tr"d|dd v r"dS | |S )NZvegar>   r?   T)r&   r'   r!   lowerrC   )r   r)   r   r   r   applies   s    zVega.appliesc           	      C  s  |d u ri nt |}|di }t|D ]}||v s(t|| t rDq(||}t|trttdd |D rt|||< q(|rt|d ng }| | jrdd l	}t| jj
|j|jt|jfs|t| jj
krt| jj
}nt|}t|d||< q(tt|d||< q(|di }t|t rD|di }|rtt|d|d< n>t|tr|D ],}d|v rTtt|dd||d < qT|S )	Ndatasetsc                 s  s    | ]}t |tod |v V  qdS )ZgeometryN)r&   r'   rZ   r   r   r   r      r   z$Vega._get_sources.<locals>.<genexpr>r   )r#   r#   valuesrM   )r'   r!   rQ   r&   popanyr   rC   re   r{   r#   ZDataZUrlDatar.   	Undefinedr   Zfrom_dfr%   )	rl   r\   sourcesr   rM   r#   columnsr   r   r   r   r   _get_sources   s:    

 zVega._get_sourcesc                 C  sL   |j d }| j|}|j d }|dkr0t|}| jjjf i ||i d S )Nr.   valuer/   )r#   ro   r!   rQ   rL   rj   rR   )rl   eventrM   rx   r   r   r   r   _process_event   s    

zVega._process_eventc                   s4   t  |}d|v r0|d d ur0t|d |d< |S )Nr#   )rh   _process_param_changer]   )rl   rK   r8   rm   r   r   r      s    zVega._process_param_changec                   s   t  |}|d }|d ur(| ||}| jrd| jv rZd|v rHd|d< d|v rd|d< n6d| jv rvd|v rvd|d< nd| jv rd|v rd|d< |rt||ni }||d< ||d< t| j|d< | j|d< || |S )	Nr#   Zbothr6   r5   r4   data_sourceseventsrs   )	rh   _get_propertiesr   r7   r:   rQ   ro   rt   rR   )rl   ra   r   r8   r#   r9   rm   r   r   r     s*    




zVega._get_propertiesr   zOptional[Model]zOptional[Comm]r   )ra   rootparentcommr=   c                   s>   t ddt|t|| _t ||||}| jd|||d |S )Nzpanel.models.vegaZVegaPlotZ
vega_event)modelra   r   )r   r&   r	   Z_bokeh_modelrh   
_get_modelZ_register_events)rl   ra   r   r   r   r   rm   r   r   r     s    zVega._get_modelstrNone)refr   r=   c                 C  s*   | j |jt|jd}|jf i | d S )N)r   )r   documentr'   r   rR   )rl   r   r   r8   r   r   r   _update(  s    zVega._update)N)N)NNN)"__name__
__module____qualname____doc__rj   ZClassSelectorr;   r'   rd   ry   rL   BooleanZshow_actionsZObjectSelectorZthemerc   __annotations__rf   rg   ri   propertyro   rt   rk   classmethodrC   r   r   r   r   r   r   r   __classcell__r   r   rm   r   rB      s6   





!  rB   )r,   )N)%
__future__r   rer|   typingr   r   r   r   r   numpyr   rj   Zbokeh.modelsr   Zpyviz_commsr	   utilr   baser   Zbokeh.documentr   Zbokeh.modelr   r   r%   rU   compilerF   r+   r3   r:   rJ   rV   r]   rB   r   r   r   r   <module>   s.   

