Ë
    úmxi<'  ã                  óÀ  — d dl m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
mZmZmZmZ d dlmZ ej"                  dk\  rd d	l	mZ nd d	lmZ ej"                  d
k\  rd dl	mZ nd dlmZ e
rd dlmZ  ed«      Z ed«      Z ededef   ef¬«      Z edee   ¬«      Zeegeee      f   Zdd„Z G d„ de«      Z G d„ deeef   «      Z  G d„ deeef   «      Z!d„ Z"y)é    )ÚannotationsN)ÚCallable)Úpartial)Úentry_points)ÚTYPE_CHECKINGÚAnyÚGenericÚTypeVarÚcast)Údeprecated_warn)é   é   )ÚTypeIs)r   é   )ÚTypeAliasType)ÚTracebackTypeÚTÚRÚPlugin.)Útype_paramsÚPluginT)Úboundc               ó   ‡ — dˆ fd„}|S )zq
    Converts a type to guard function.

    Added for compatibility with original `PluginRegistry` default.
    c               ó   •— t        | ‰«      S ©N)Ú
isinstance)ÚobjÚtps    €úS/home/htdocs/ttos/venv/lib/python3.12/site-packages/altair/utils/plugin_registry.pyÚfuncz_is_type.<locals>.func%   s   ø€ Ü˜#˜rÓ"Ð"ó    )r   ÚobjectÚreturnzTypeIs[type[T]]© )r   r    s   ` r   Ú_is_typer%      s   ø€ õ#ð €Kr!   c                  ó   — e Zd Zd„ Zd„ Zy)ÚNoSuchEntryPointc                ó    — || _         || _        y r   )ÚgroupÚname)Úselfr)   r*   s      r   Ú__init__zNoSuchEntryPoint.__init__,   s   € ØˆŒ
Øˆ�	r!   c                ó:   — d| j                   ›d| j                  ›�S )NzNo z entry point found in group )r*   r)   ©r+   s    r   Ú__str__zNoSuchEntryPoint.__str__0   s   € Ø�T—Y‘Y�MÐ!=¸d¿j¹j¸^ÐLÐLr!   N)Ú__name__Ú
__module__Ú__qualname__r,   r/   r$   r!   r   r'   r'   +   s   „ òóMr!   r'   c                  ó@   — e Zd ZdZ	 	 	 	 	 	 	 	 dd„Zdd„Zd	d„Zd
d„Zy)ÚPluginEnablera%  
    Context manager for enabling plugins.

    This object lets you use enable() as a context manager to
    temporarily enable a given plugin::

        with plugins.enable("name"):
            do_something()  # 'name' plugin temporarily enabled
        # plugins back to original state
    c                ó’   — || _         || _        || _        |j                  «       | _         | j                   j
                  |fi |¤Ž y r   )Úregistryr*   ÚoptionsÚ
_get_stateÚoriginal_stateÚ_enable)r+   r6   r*   r7   s       r   r,   zPluginEnabler.__init__@   sC   € ð 5=ˆŒØˆŒ	Ø'.ˆŒØ.6×.AÑ.AÓ.CˆÔØˆ�‰×Ñ˜dÑ. gÓ.r!   c                ó   — | S r   r$   r.   s    r   Ú	__enter__zPluginEnabler.__enter__I   s   € Øˆr!   c                óN   — | j                   j                  | j                  «       y r   )r6   Ú
_set_stater9   )r+   ÚtypÚvalueÚ	tracebacks       r   Ú__exit__zPluginEnabler.__exit__L   s   € Ø�‰× Ñ  ×!4Ñ!4Õ5r!   c                ó`   — t        | j                  «      j                  › d| j                  ›d�S )Nz.enable(ú))Útyper6   r0   r*   r.   s    r   Ú__repr__zPluginEnabler.__repr__O   s)   € Ü�t—}‘}Ó%×.Ñ.Ð/¨x¸¿	¹	°}ÀAÐFÐFr!   N)r6   zPluginRegistry[PluginT, R]r*   Ústrr7   r   r#   ÚNone)r#   úPluginEnabler[PluginT, R])r?   rE   r@   Ú	ExceptionrA   r   r#   rH   ©r#   rG   )r0   r1   r2   Ú__doc__r,   r<   rB   rF   r$   r!   r   r4   r4   4   s<   „ ñ	ð/Ø2ð/Ø:=ð/ØJMð/à	ó/óó6ôGr!   r4   c                  ó¸   — e Zd ZU dZi Zded<   i Zded<   def	 	 	 	 	 dd„Zdd„Z	dd	„Z
dd
„Zdd„Zdd„Z	 d	 	 	 	 	 dd„Zedd„«       Zedd„«       Zdd„Zdd„Zy)ÚPluginRegistryaÌ  
    A registry for plugins.

    This is a plugin registry that allows plugins to be loaded/registered
    in two ways:

    1. Through an explicit call to ``.register(name, value)``.
    2. By looking for other Python packages that are installed and provide
       a setuptools entry point group.

    When you create an instance of this class, provide the name of the
    entry point group to use::

        reg = PluginRegister("my_entrypoint_group")

    zdict[str, str]Úentrypoint_err_messagesúdict[str, Any]Ú_global_settingsÚ c                ó`  — || _         |  |t        urQt        |t        «      rAdt        | «      j                  ›d�}t        |d¬«       t        dt        |«      «      | _        n|| _        d| _	        d| _
        i | _        i | _        | j                  j                  j                  «       | _        y)aµ  
        Create a PluginRegistry for a named entry point group.

        Parameters
        ----------
        entry_point_group: str
            The name of the entry point group.
        plugin_type
            A type narrowing function that will optionally be used for runtime
            type checking loaded plugins.

        References
        ----------
        https://typing.readthedocs.io/en/latest/spec/narrowing.html
        z<Pass a callable `TypeIs` function to `plugin_type` instead.
z~(plugin_type)

See also:
https://typing.readthedocs.io/en/latest/spec/narrowing.html
https://docs.astral.sh/ruff/rules/assert/z5.4.0)ÚversionÚIsPluginNrR   )Úentry_point_groupÚcallabler   rE   r0   r   r   r%   Úplugin_typeÚ_activeÚ_active_nameÚ_pluginsÚ_optionsÚ	__class__rQ   Úcopy)r+   rV   rX   Úmsgs       r   r,   zPluginRegistry.__init__m   s¢   € ð$ '8ˆÔÙØœhÑ&¬:°kÄ4Ô+HàOÜ˜“:×&Ñ&Ð)ð *<ð=ð ô ˜C¨Õ1Ü# J´¸Ó0EÓFˆDÕà*ˆDÔØ)-ˆŒØ!#ˆÔØ,.ˆŒØ(*ˆŒØ04·±×0OÑ0O×0TÑ0TÓ0VˆÕr!   c                óò   — |€| j                   j                  |d«      S | j                  |«      r|| j                   |<   |S t        |«      j                  ›dt        | «      j                  ›�}t        |«      ‚)a(  
        Register a plugin by name and value.

        This method is used for explicit registration of a plugin and shouldn't be
        used to manage entry point managed plugins, which are auto-loaded.

        Parameters
        ----------
        name: str
            The name of the plugin.
        value: PluginType or None
            The actual plugin object to register or None to unregister that plugin.

        Returns
        -------
        plugin: PluginType or None
            The plugin that was registered or unregistered.
        Nz is not compatible with )r[   ÚpoprX   rE   r0   Ú	TypeError)r+   r*   r@   r_   s       r   ÚregisterzPluginRegistry.register“   sr   € ð& ˆ=Ø—=‘=×$Ñ$ T¨4Ó0Ð0Ø×Ñ˜eÔ$Ø"'ˆD�M‰M˜$ÑØˆLä˜%“[×)Ñ)Ð,Ð,DÄTÈ$ÃZ×EXÑEXÐD[Ð\ˆCÜ˜C“.Ð r!   c                óø   — t        | j                  j                  «       «      }t        | j                  «      }|D �cg c]  }|j
                  ‘Œ }}|j                  |«       t        t        |«      «      S c c}w )z:List the names of the registered and entry points plugins.)	Úlistr[   ÚkeysÚimportlib_metadata_getrV   r*   ÚextendÚsortedÚset)r+   ÚextsÚe_pointsÚepÚ	more_extss        r   ÚnameszPluginRegistry.names¯   s`   € ä�D—M‘M×&Ñ&Ó(Ó)ˆÜ)¨$×*@Ñ*@ÓAˆØ'/Ö0 �R—W“WÐ0ˆ	Ð0Ø�‰�IÔÜ”c˜$“iÓ Ð ùò 1s   ½A7c                óÊ   — | j                   | j                  | j                  j                  «       | j                  j                  «       | j
                  j                  «       dœS )zCReturn a dictionary representing the current state of the registry.)rY   rZ   r[   r\   rQ   )rY   rZ   r[   r^   r\   rQ   r.   s    r   r8   zPluginRegistry._get_state·   sP   € ð —|‘|Ø ×-Ñ-ØŸ™×*Ñ*Ó,ØŸ™×*Ñ*Ó,Ø $× 5Ñ 5× :Ñ :Ó <ñ
ð 	
r!   c                óŽ   — t        |j                  «       «      h d£k(  sJ ‚|j                  «       D ]  \  }}t        | ||«       Œ y)z Reset the state of the registry.>   rY   r\   r[   rZ   rQ   N)rj   rf   ÚitemsÚsetattr)r+   ÚstateÚkeyÚvals       r   r>   zPluginRegistry._set_stateÁ   sK   € ä�5—:‘:“<Ó ò %
ò 
ð 	
ð 
ð Ÿ™›ò 	$‰HˆC�Ü�D˜#˜sÕ#ñ	$r!   c                ó^  ‡— ‰| j                   vrM	 ˆfd„t        | j                  «      D «       \  }t        d|j                  «       «      }| j                  ‰|«       ‰| _	        | j                   ‰   | _
        t        |j                  «       «      t        | j                  j                  «       «      z  D ]   }|j                  |«      | j                  |<   Œ" || _        y # t        $ rC}‰| j                  v rt        | j                  ‰   «      |‚t        | j                  ‰«      |‚d }~ww xY w)Nc              3  ó@   •K  — | ]  }|j                   ‰k(  r|–— Œ y ­wr   )r*   )Ú.0rm   r*   s     €r   ú	<genexpr>z)PluginRegistry._enable.<locals>.<genexpr>Ð   s$   øè ø€ ò àØ—w‘w $’ô ñùs   ƒr   )r[   rg   rV   Ú
ValueErrorrO   r'   r   Úloadrc   rZ   rY   rj   rf   rQ   ra   r\   )r+   r*   r7   rm   Úerrr@   ru   s    `     r   r:   zPluginRegistry._enableÍ   s  ø€ Ø�t—}‘}Ñ$ð
Róä4°T×5KÑ5KÓLô‘�ô ˜ B§G¡G£IÓ.ˆEØ�M‰M˜$ Ô&Ø ˆÔØ—}‘} TÑ*ˆŒÜ�w—|‘|“~Ó&¬¨T×-BÑ-B×-GÑ-GÓ-IÓ)JÑJò 	:ˆCØ)0¯©°SÓ)9ˆD×!Ñ! #Ò&ð	:àˆ�øô ò RØ˜4×7Ñ7Ñ7Ü$ T×%AÑ%AÀ$Ñ%GÓHÈcÐQä*¨4×+AÑ+AÀ4ÓHÈcÐQûð	Rús   ‘ C  Ã 	D,Ã)>D'Ä'D,Nc                ó8   — |€| j                   }t        | |fi |¤ŽS )a&  
        Enable a plugin by name.

        This can be either called directly, or used as a context manager.

        Parameters
        ----------
        name : string (optional)
            The name of the plugin to enable. If not specified, then use the
            current active name.
        **options :
            Any additional parameters will be passed to the plugin as keyword
            arguments

        Returns
        -------
        PluginEnabler:
            An object that allows enable() to be used as a context manager
        )Úactiver4   )r+   r*   r7   s      r   ÚenablezPluginRegistry.enableâ   s$   € ð, ˆ<Ø—;‘;ˆDÜ˜T 4Ñ3¨7Ñ3Ð3r!   c                ó   — | j                   S )z/Return the name of the currently active plugin.)rZ   r.   s    r   r   zPluginRegistry.activeü   s   € ð × Ñ Ð r!   c                ó   — | j                   S )z&Return the current options dictionary.)r\   r.   s    r   r7   zPluginRegistry.options  s   € ð �}‰}Ðr!   c                ó@  — | j                   x}r5| j                  |«      r$| j                  rt        |fi | j                  ¤ŽS |S | j                   �Ct	        | «      j
                  ›dt	        | j                   «      j
                  ›d�}t        |«      ‚t        rt        ‚y)z#Return the currently active plugin.Nz2 requires all plugins to be callable objects, but z is not callable.)	rY   rX   r\   r   rE   r0   rb   r   ÚNotImplementedError)r+   r    r_   s      r   ÚgetzPluginRegistry.get  s›   € à—L‘LÐ ˆDÐ  d×&6Ñ&6°tÔ&<Ø59·]²]”7˜4Ñ1 4§=¡=Ñ1ÐLÈÐLØ�\‰\Ð%ä˜“:×&Ñ&Ð)ð *Ü˜DŸL™LÓ)×2Ñ2Ð5Ð5FðHð ô ˜C“.Ð Ýô &Ð%ð	 r!   c                ón   — t        | «      j                  › d| j                  ›d| j                  «       ›d�S )Nz(active=z, registered=rD   )rE   r0   r   ro   r.   s    r   rF   zPluginRegistry.__repr__  s2   € Ü�t“*×%Ñ%Ð& h¨t¯{©{¨o¸]È4Ï:É:Ë<ÐJZÐZ[Ð\Ð\r!   )rV   rG   rX   rU   r#   rH   )r*   rG   r@   úPluginT | Noner#   r‡   )r#   z	list[str])r#   rP   )rt   rP   r#   rH   )r*   rG   r#   rH   r   )r*   z
str | Noner7   r   r#   rI   rK   )r#   zpartial[R] | Plugin[R] | None)r0   r1   r2   rL   rO   Ú__annotations__rQ   rW   r,   rc   ro   r8   r>   r:   r€   Úpropertyr   r7   r…   rF   r$   r!   r   rN   rN   S   s¸   … ñð& /1Ð˜^Ó0ð (*Ð�nÓ)ð (*À8ð$WØ!$ð$WØ8@ð$Wà	ó$WóL!ó8!ó
ó
$ó ð, "&ð4Øð4Ø25ð4à	"ó4ð4 ò!ó ð!ð òó ðó&ô ]r!   rN   c                óv   — t        «       }t        |d«      r|j                  | ¬«      S |j                  | g «      S )NÚselect)r)   )r   Úhasattrr‹   r…   )r)   rm   s     r   rg   rg     s7   € Ü	‹€Bô
 ˆr�8ÔØ�y‰y˜uˆyÓ%Ð%à�v‰v�e˜RÓ Ð r!   )r   ztype[T]r#   z#Callable[[object], TypeIs[type[T]]])#Ú
__future__r   ÚsysÚcollections.abcr   Ú	functoolsr   Úimportlib.metadatar   Útypingr   r   r	   r
   r   Úaltair.utils.deprecationr   Úversion_infor   Útyping_extensionsr   Útypesr   r   r   r   r   r"   rU   r%   rJ   r'   r4   rN   rg   r$   r!   r   ú<module>r—      sé   ðÝ "ã 
Ý $Ý Ý +ß =Õ =å 4à×Ñ�wÒÞå(Ø×Ñ�wÒÞ$å/áÝ#áˆCƒL€ÙˆCƒL€Ù	�x ¨#¨q¨&Ñ!1À¸tÔ	D€Ù
�) 6¨#¡;Ô
/€Ø�V�H˜f V¨C¡[Ñ1Ð1Ñ2€ó
ôM�yô MôG�G˜G Q˜JÑ'ô Gô>D]�W˜W a˜ZÑ(ô D]óN	!r!   