Ë
    úmxi;  ã                  ó:  — d dl mZ d dlZd dlZd dlmZ d dlZd dlZd dlZ	d dlm
Z
 d dlmZmZ d dlmZmZmZ  ej$                  e«      j(                  Z G d„ dej,                  «      Z G d	„ d
ej,                  «      Zdd„Z G d„ dej4                  «      Zdd„Zy)é    )ÚannotationsN)ÚAny)ÚTopLevelSpec)Ú!compile_to_vegafusion_chart_stateÚusing_vegafusion)ÚIndexSelectionÚIntervalSelectionÚPointSelectionc                  ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚParamsz/Traitlet class storing a JupyterChart's params.c                óð  •— t         ‰| �  «        |j                  «       D ]Ô  \  }}t        |t        t
        f«      rt        j                  «       }nƒt        |t        «      rt        j                  «       }n^t        |t        «      rt        j                  «       }n9t        |t        «      rt        j                  «       }nt        j                  «       } | j                  di ||i¤Ž t!        | ||«       ŒÖ y )N© )ÚsuperÚ__init__ÚitemsÚ
isinstanceÚintÚfloatÚ	traitletsÚFloatÚstrÚUnicodeÚlistÚListÚdictÚDictr   Ú
add_traitsÚsetattr)ÚselfÚtrait_valuesÚkeyÚvalueÚtraitlet_typeÚ	__class__s        €úS/home/htdocs/ttos/venv/lib/python3.12/site-packages/altair/jupyter/jupyter_chart.pyr   zParams.__init__   s¹   ø€ Ü‰ÑÔà&×,Ñ,Ó.ò 	&‰JˆC�Ü˜%¤#¤u Ô.Ü )§¡Ó 1‘Ü˜E¤3Ô'Ü )× 1Ñ 1Ó 3‘Ü˜E¤4Ô(Ü )§¡Ó 0‘Ü˜E¤4Ô(Ü )§¡Ó 0‘ä )§¡£�ð ˆD�O‰OÑ3˜s MÐ2Ò3ô �D˜#˜uÕ%ñ!	&ó    c                ó*   — d| j                  «       › d�S )NzParams(ú)©r    ©r   s    r%   Ú__repr__zParams.__repr__-   s   € Ø˜×*Ñ*Ó,Ð-¨QÐ/Ð/r&   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r+   Ú__classcell__©r$   s   @r%   r   r      s   ø„ Ù9ô&ö*0r&   r   c                  ó4   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zˆ xZS )Ú
Selectionsz3Traitlet class storing a JupyterChart's selections.c                óü  •— t         ‰| �  «        |j                  «       D ]Ú  \  }}t        |t        «      rt        j                  t        «      }nmt        |t        «      rt        j                  t        «      }nCt        |t        «      rt        j                  t        «      }ndt        |«      › �}t        |«      ‚ | j                  di ||i¤Ž t        | ||«       | j                  | j                  |¬«       ŒÜ y )NzUnexpected selection type: ©Únamesr   )r   r   r   r   r   r   ÚInstancer
   r	   ÚtypeÚ
ValueErrorr   r   ÚobserveÚ_make_read_only)r   r    r!   r"   r#   Úmsgr$   s         €r%   r   zSelections.__init__4   sÒ   ø€ Ü‰ÑÔà&×,Ñ,Ó.ò 	:‰JˆC�Ü˜%¤Ô0Ü )× 2Ñ 2´>Ó B‘Ü˜E¤>Ô2Ü )× 2Ñ 2´>Ó B‘Ü˜EÔ#4Ô5Ü )× 2Ñ 2Ô3DÓ E‘à3´D¸³K°=ÐA�Ü  “oÐ%ð ˆD�O‰OÑ3˜s MÐ2Ò3ô �D˜#˜uÔ%ð �L‰L˜×-Ñ-°SˆLÕ9ñ%	:r&   c                ó*   — d| j                  «       › d�S )NzSelections(r(   r)   r*   s    r%   r+   zSelections.__repr__K   s   € Ø˜T×.Ñ.Ó0Ð1°Ð3Ð3r&   c                ó˜   — |d   | j                  «       v r#|d   |d   k7  r| j                  |d   |d   «       d|d   › �}t        |«      ‚)zSWork around to make traits read-only, but still allow us to change them internally.ÚnameÚoldÚnewz@Selections may not be set from Python.
Attempted to set select: )ÚtraitsÚ
_set_valuer9   )r   Úchanger<   s      r%   r;   zSelections._make_read_onlyN   s^   € à�&‰>˜TŸ[™[›]Ñ*¨v°e©}ÀÀuÁÒ/MØ�O‰O˜F 6™N¨F°5©MÔ:ð(Ø(.¨v©Ð'7ð9ð 	ô ˜‹oÐr&   c                ó’   — | j                  | j                  |¬«       t        | ||«       | j                  | j                  |¬«       y )Nr5   )Ú	unobserver;   r   r:   )r   r!   r"   s      r%   rC   zSelections._set_valueX   s:   € Ø�‰�t×+Ñ+°3ˆÔ7Ü��c˜5Ô!Ø�‰�T×)Ñ)°ˆÕ5r&   )	r,   r-   r.   r/   r   r+   r;   rC   r0   r1   s   @r%   r3   r3   1   s   ø„ Ù=ô:ò.4òö6r&   r3   c                 ó6   — t         dz  dz  j                  «       S )NÚjszindex.js)Ú_hereÚ	read_textr   r&   r%   Úload_js_srcrK   ^   s   € Ü�D‰L˜:Ñ%×0Ñ0Ó2Ð2r&   c                  óP  ‡ — e Zd Z e«       ZdZ ej                  ed¬«      Z	 ej                  d¬«      j                  d¬«      Z ej                  d¬«      j                  d¬«      Z ej                  d¬«      j                  d¬«      Z ej"                  dd¬«      j                  d¬«      Z ej                  d	¬«      Z ej                  dd¬«      j                  d¬«      Z ej                  «       Z ej                  «       j                  d¬«      Z ej                  «       j                  d¬«      Z ej0                  d¬«      Z ej0                  d¬«      j                  d¬«      Z ej0                  d¬«      j                  d¬«      Z ej0                  d¬«      j                  d¬«      Zd	Zeddd
„«       Z	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Z  ejB                  d«      d„ «       Z"dd„Z# ejB                  d«      d„ «       Z$ ejB                  d«      d„ «       Z%ˆ xZ&S )ÚJupyterChartzj
    .vega-embed {
        /* Make sure action menu isn't cut off */
        overflow: visible;
    }
    T)Ú
allow_none)Úsyncé
   )Údefault_valueN)rQ   rN   Fc                ó\  — ddl m}m} |�r| j                  ry |«       }t	        «       j                  d«      }|r¤t        |d   j                  «       «      dk(  s(|d   j                  d«      s|d   j                  d«      r]|j                  d«       |rJt        |d   j                  «       «      dk(  rŒ3|d   j                  d«      rŒH|d   j                  d«      rŒ]dj                  |«      }|j                  | |«       ¬«      }|| _        d| _        yt	        «       | _        d	| _        y)
a¬  
        Configure JupyterChart's offline behavior.

        Parameters
        ----------
        offline: bool
            If True, configure JupyterChart to operate in offline mode where JavaScript
            dependencies are loaded from vl-convert.
            If False, configure it to operate in online mode where JavaScript dependencies
            are loaded from CDN dynamically. This is the default behavior.
        r   )Úimport_vl_convertÚvl_version_for_vl_convertNú
Úimportz//)Ú
vl_versionTF)Úaltair.utils._importersrS   rT   Ú_is_offlinerK   ÚsplitÚlenÚstripÚ
startswithÚpopÚjoinÚjavascript_bundleÚ_esm)ÚclsÚofflinerS   rT   ÚvlcÚ	src_linesÚsrcÚbundled_srcs           r%   Úenable_offlinezJupyterChart.enable_offline„   s  € ÷ 	YâØ�Šàá#Ó%ˆCä#›×+Ñ+¨DÓ1ˆIñ Ü�I˜a‘L×&Ñ&Ó(Ó)¨QÒ.Ø˜Q‘<×*Ñ*¨8Ô4Ø˜Q‘<×*Ñ*¨4Ô0à—‘˜aÔ ñ Ü�I˜a‘L×&Ñ&Ó(Ó)¨QÓ.Ø˜Q‘<×*Ñ*¨8Õ4Ø˜Q‘<×*Ñ*¨4Õ0ð —)‘)˜IÓ&ˆCð ×/Ñ/ØÑ 9Ó ;ð 0ó ˆKð #ˆCŒHØ"ˆC�Oä"“}ˆCŒHØ#ˆC�Or&   Úchartc           	     óp   •— t        i «      | _        t        i «      | _        t	        ‰| �  d|||||dœ|¤Ž y)a   
        Jupyter Widget for displaying and updating Altair Charts, and retrieving selection and parameter values.

        Parameters
        ----------
        chart: Chart
            Altair Chart instance
        debounce_wait: int
             Debouncing wait time in milliseconds. Updates will be sent from the client to the kernel
             after debounce_wait milliseconds of no chart interactions.
        max_wait: bool
             If True (default), updates will be sent from the client to the kernel every debounce_wait
             milliseconds even if there are ongoing chart interactions. If False, updates will not be
             sent until chart interactions have completed.
        debug: bool
             If True, debug messages will be printed
        embed_options: dict
             Options to pass to vega-embed.
             See https://github.com/vega/vega-embed?tab=readme-ov-file#options
        )ri   Údebounce_waitÚmax_waitÚdebugÚembed_optionsNr   )r   Úparamsr3   Ú
selectionsr   r   )r   ri   rk   rl   rm   rn   Úkwargsr$   s          €r%   r   zJupyterChart.__init__´   sF   ø€ ô: ˜R“jˆŒÜ$ R›.ˆŒÜ‰Ñð 	
ØØ'ØØØ'ñ	
ð ó	
r&   c                ó  ‡ — |j                   }g }i }i }i }i }|€6‰ j                  «       5  d‰ _        |‰ _        |‰ _        |‰ _        ddd«       yt        |dg «      }|t        j                  u�r˜|j                  D �]ˆ  }	t        |	j                  t        j                  «      r*|	j                  j                  «       j                  d«      }
n|	j                  }
t        |	dt        j                  «      }|t        j                  k7  rÍt        |t        «      s|j!                  «       }|d   }|dk(  rR|j#                  dd«      s)|j#                  dd«      sd	||
<   t%        |
g g ¬
«      ||
<   nMd||
<   t'        |
g g ¬
«      ||
<   n6|dk(  rd||
<   t)        |
i g ¬
«      ||
<   nd|j*                  › �}t-        |«      ‚|j/                  |
«       dg dœ||
<   �ŒY|	j0                  t        j                  k7  r|	j0                  nd}|||
<   �Œ‹ t3        |«      D ]  }d||<   Œ	 t5        |«      ‰ _	        ˆ fd„}‰ j                  j7                  |«       t9        |«      ‰ _        ‰ j                  «       5  t=        «       rH‰ j>                  € d‰ _        ˆ fd„}‰ j7                  |dg«       n1‰ jA                  ‰ j>                  «       n|j!                  «       ‰ _        |‰ _        |‰ _        |‰ _        ddd«       y# 1 sw Y   yxY w# 1 sw Y   yxY w)zRUpdates the JupyterChart's internal state when the wrapped Chart instance changes.Nro   ú"Úselectr8   ÚpointÚfieldsÚ	encodingsÚindex)r?   r"   ÚstoreÚintervalzUnexpected selection type )r"   ry   c                óT   •— t        ‰j                  «      }| d   || d   <   |‰_        y )NrA   r?   )r   Ú_params)Úparam_changeÚ
new_paramsr   s     €r%   Úon_param_traitlet_changedz@JupyterChart._on_change_chart.<locals>.on_param_traitlet_changed"  s,   ø€ Ü˜dŸl™lÓ+ˆJØ/;¸EÑ/BˆJ�| FÑ+Ñ,Ø%ˆD�Lr&   c                ó.   •— ‰j                  | d   «       y )NrA   )Ú_init_with_vegafusion)rD   r   s    €r%   Úon_local_tz_changez9JupyterChart._on_change_chart.<locals>.on_local_tz_change2  s   ø€ Ø×2Ñ2°6¸%±=ÕAr&   Úlocal_tz)!rA   Ú	hold_syncÚspecÚ_selection_typesÚ_vl_selectionsr|   ÚgetattrÚaltÚ	Undefinedro   r   r?   ÚParameterNameÚto_jsonr\   r   Úto_dictÚgetr   r
   r	   r8   r9   Úappendr"   Úcollect_transform_paramsr   r:   r3   rp   r   rƒ   r�   )r   rD   Ú	new_chartÚselection_watchesÚselection_typesÚinitial_paramsÚinitial_vl_selectionsÚempty_selectionsro   ÚparamÚ
clean_namert   Úselect_typer<   Úclean_valueÚ
param_namer   r‚   s   `                 r%   Ú_on_change_chartzJupyterChart._on_change_chartÜ   sù  ø€ ð —J‘Jˆ	ØÐØˆØˆØ "ÐØÐàÐØ—‘Ó!ñ .Ø �”	Ø(7�Ô%Ø&;�Ô#Ø-�”÷	.ð
 ä˜ H¨bÓ1ˆàœŸ™Ò&Ø"×)Ñ)ó (=�Ü˜eŸj™j¬#×*;Ñ*;Ô<Ø!&§¡×!3Ñ!3Ó!5×!;Ñ!;¸CÓ!@‘Jà!&§¡�Jä  ¨´#·-±-Ó@�àœSŸ]™]Ò*Ü% f¬dÔ3Ø!'§¡Ó!1˜à"(¨¡.�KØ" gÒ-à"ŸJ™J x°Ô6¸&¿*¹*À[ÐRVÔ:Wð ;B˜O¨JÑ7Ü;IØ%/°rÀô<Ð,¨ZÒ8ð ;B˜O¨JÑ7Ü;IØ%/°rÀô<Ð,¨ZÒ8ð %¨
Ò2Ø6@˜¨
Ñ3Ü7HØ!+°2¸Rô8Ð(¨Ò4ð !;¸6¿;¹;¸-ÐH˜Ü(¨›oÐ-Ø%×,Ñ,¨ZÔ8ØBFÐQSÑ8TÐ)¨*Ó5à16·±ÄÇÁÒ1M %§+¢+ÐSW�KØ1<�N :Ó.ðQ(=ôV 3°9Ó=ò 	.ˆJØ)-ˆN˜:Ò&ð	.ô ˜^Ó,ˆŒô	&ð
 	�‰×ÑÐ5Ô6ô %Ð%5Ó6ˆŒð �^‰^Óñ 	*ÜÔ!Ø—=‘=Ð(Ø $�D”IôBð —L‘LÐ!3°j°\ÕBà×.Ñ.¨t¯}©}Õ=à%×-Ñ-Ó/�”	Ø$3ˆDÔ!Ø"7ˆDÔØ)ˆDŒL÷	*ð 	*÷M.ð
 ú÷B	*ð 	*ús   ªK3É-A=K?Ë3K<Ë?Lc                óz  ‡ — ‰ j                   �¢‰ j                   j                  ddi¬«      }‰ j                  «       5  t        ||«      ‰ _        ‰ j                  j                  «       d   ‰ _        ‰ j                  j                  «       ‰ _        ˆ fd„}‰ j                  |dg«       d d d «       y y # 1 sw Y   y xY w)NÚpre_transformF)ÚcontextÚclient_to_serverc                ó  •— ‰j                   r(t        j                  | d   d¬«      }t        d|› �«       ‰j                  j                  | d   «      }‰j                   r%t        j                  |d¬«      }t        d|› �«       |‰_        y )NrA   é   )Úindentz*JavaScript to Python VegaFusion updates:
 z*Python to JavaScript VegaFusion updates:
 )rm   ÚjsonÚdumpsÚprintÚ_chart_stateÚupdateÚ_py_to_js_updates)rD   Úupdates_strÚupdatesr   s      €r%   Úon_js_to_py_updatesz?JupyterChart._init_with_vegafusion.<locals>.on_js_to_py_updatesK  s   ø€ Ø—z’zÜ&*§j¡j°¸±ÀqÔ&I˜ÜØIÈ+ÈÐWôð #×/Ñ/×6Ñ6°v¸e±}ÓE�GØ—z’zÜ&*§j¡j°ÀÔ&C˜ÜØIÈ+ÈÐWôð .5�DÕ*r&   Ú_js_to_py_updates)
ri   r�   r„   r   r§   Úget_watch_planÚ_js_watch_planÚget_transformed_specr…   r:   )r   rƒ   Úvegalite_specr¬   s   `   r%   r�   z"JupyterChart._init_with_vegafusion>  s¼   ø€ Ø�:‰:Ð!Ø ŸJ™J×.Ñ.¸ÈÐ7OÐ.ÓPˆMØ—‘Ó!ñ IÜ$EØ! 8ó%�Ô!ð '+×&7Ñ&7×&FÑ&FÓ&HØ&ñ'�Ô#ð !×-Ñ-×BÑBÓD�”	ô5ð —‘Ð0Ð3FÐ2GÔH÷1Ið Ið "÷Ið Iús   ¼A+B1Â1B:r|   c                óv   — |j                   j                  «       D ]  \  }}t        | j                  ||«       Œ y )N)rA   r   r   ro   )r   rD   r›   r"   s       r%   Ú_on_change_paramszJupyterChart._on_change_params[  s3   € à!'§¡×!1Ñ!1Ó!3ò 	4ÑˆJ˜Ü�D—K‘K ¨UÕ3ñ	4r&   r‡   c           	     óÊ  — |j                   j                  «       D ]Æ  \  }}|d   }|d   }| j                  |   }|dk(  r3| j                  j	                  |t        j                  |||¬«      «       ŒW|dk(  r3| j                  j	                  |t        j                  |||¬«      «       Œ�|dk(  sŒ•| j                  j	                  |t        j                  |||¬«      «       ŒÈ y)z’Updates the JupyterChart's public selections traitlet in response to changes that the JavaScript logic makes to the internal _selections traitlet.r"   ry   rx   )Úsignalry   ru   rz   N)	rA   r   r†   rp   rC   r   Ú	from_vegar
   r	   )r   rD   Úselection_nameÚselection_dictr"   ry   Úselection_types          r%   Ú_on_change_selectionsz"JupyterChart._on_change_selections`  sß   € ð /5¯j©j×.>Ñ.>Ó.@ò 	Ñ*ˆN˜NØ" 7Ñ+ˆEØ" 7Ñ+ˆEØ!×2Ñ2°>ÑBˆNØ Ò(Ø—‘×*Ñ*Ø"Ü"×,Ñ,¨^ÀEÐQVÔWõð   7Ò*Ø—‘×*Ñ*Ø"Ü"×,Ñ,¨^ÀEÐQVÔWõð   :Ó-Ø—‘×*Ñ*Ø"Ü%×/Ñ/Ø&¨u¸Eôõñ	r&   )T)rc   Úbool)rP   TFN)ri   r   rk   r   rl   r»   rm   r»   rn   zdict | Nonerq   r   )rƒ   r   )'r,   r-   r.   rK   ra   Ú_cssr   r7   r   ri   r   Útagr…   r   rk   ÚBoolrl   r   rƒ   rm   rn   r†   r‡   r|   r   r§   r¯   r­   r©   rY   Úclassmethodrh   r   r:   rœ   r�   r³   rº   r0   r1   s   @r%   rM   rM   b   sb  ø„ Ù‹=€Dð€Dð ˆI×Ñ˜|¸Ô=€EØˆ9�>‰> TÔ*×.Ñ.°DÐ.Ó9€DØ#�I—O‘O°"Ô5×9Ñ9¸tÐ9ÓD€MØˆy�~‰~¨DÔ1×5Ñ5¸4Ð5Ó@€HØ ˆy× Ñ ¨tÀÔE×IÑIÈtÐIÓT€HØˆI�N‰N¨Ô/€EØ"�I—N‘N°À$ÔG×KÑKÐQUÐKÓV€Mð &�y—~‘~Ó'ÐØ#�Y—^‘^Ó%×)Ñ)¨tÐ)Ó4€Nð ˆi�n‰nÓ×"Ñ"¨Ð"Ó-€Gð !�9—=‘=¨DÔ1€LØ"�Y—]‘]¨dÔ3×7Ñ7¸TÐ7ÓB€NØ%˜	Ÿ™°Ô6×:Ñ:ÀÐ:ÓEÐØ%˜	Ÿ™°Ô6×:Ñ:ÀÐ:ÓEÐð €Kàó-$ó ð-$ðd  ØØØ%)ð&
àð&
ð ð&
ð ð	&
ð
 ð&
ð #ð&
ð õ&
ðP €Y×Ñ�wÓñ_*ó  ð_*óBIð: €Y×Ñ�yÓ!ñ4ó "ð4ð €Y×ÑÐ'Ó(ñó )ôr&   rM   c                ó&  — t        «       }dD ].  }t        | |g «      D ]  }|j                  t        |«      «       Œ Œ0 t        | dg «      }|t        j
                  k7  r|ng }|D ]*  }t        |d«      sŒ|j                  |j                  «       Œ, |S )zÌ
    Collect the names of params that are defined by transforms.

    Parameters
    ----------
    chart: Chart from which to extract transform params

    Returns
    -------
    set of param names
    )ÚlayerÚconcatÚhconcatÚvconcatÚ	transformr—   )	Úsetrˆ   r¨   r�   r‰   rŠ   ÚhasattrÚaddr—   )ri   Útransform_paramsÚpropÚchildÚ
transformsÚtxs         r%   r�   r�   z  s¢   € ô “uÐð :ò EˆÜ˜U D¨"Ó-ò 	EˆEØ×#Ñ#Ô$<¸UÓ$CÕDñ	EðEô
 ˜ ¨RÓ0€JØ)¬S¯]©]Ò:‘À€JØò +ˆÜ�2�wÕØ× Ñ  §¡Õ*ð+ð Ðr&   )Úreturnr   )ri   r   rÎ   zset[str])Ú
__future__r   r¤   ÚpathlibÚtypingr   Ú	anywidgetr   Úaltairr‰   r   Úaltair.utils._vegafusion_datar   r   Úaltair.utils.selectionr   r	   r
   ÚPathÚ__file__ÚparentrI   Ú	HasTraitsr   r3   rK   Ú	AnyWidgetrM   r�   r   r&   r%   ú<module>rÛ      s…   ðÝ "ã Û Ý ã Û ã Ý ÷÷ UÑ Tàˆ�‰�XÓ×%Ñ%€ô0ˆY× Ñ ô 0ô8*6�×$Ñ$ô *6óZ3ôU�9×&Ñ&ô Uôpr&   