Ë
    úmxi~  ã                  ó–  — U d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN ddlOmPZQ er4ddlRZRddlSmTZT dd	lmZmUZU eRj¬                  d
k\  rddlmWZW nddlXmWZW ddlYmZZZ g d¢Z[	 	 	 	 	 	 dd„Z\dd„Z]eQj¼                  Z^eQj¾                  Z_eQjÀ                  Z`dead<   	 dead<   	 dd„Zbedd„«       Zcedd„«       Zcdd„Zc	 	 	 	 	 	 dd„Zdy) z)Customizing chart configuration defaults.é    )Úannotations)ÚTYPE_CHECKINGÚAny)Úoverload)FÚAreaConfigKwdsÚAutoSizeParamsKwdsÚAxisConfigKwdsÚAxisResolveMapKwdsÚBarConfigKwdsÚBindCheckboxKwdsÚBindDirectKwdsÚBindInputKwdsÚBindRadioSelectKwdsÚBindRangeKwdsÚBoxPlotConfigKwdsÚBrushConfigKwdsÚCompositionConfigKwdsÚ
ConfigKwdsÚDateTimeKwdsÚDerivedStreamKwdsÚErrorBandConfigKwdsÚErrorBarConfigKwdsÚ$FeatureGeometryGeoJsonPropertiesKwdsÚFormatConfigKwdsÚGeoJsonFeatureCollectionKwdsÚGeoJsonFeatureKwdsÚGeometryCollectionKwdsÚGradientStopKwdsÚHeaderConfigKwdsÚIntervalSelectionConfigKwdsÚ&IntervalSelectionConfigWithoutTypeKwdsÚLegendConfigKwdsÚLegendResolveMapKwdsÚLegendStreamBindingKwdsÚLinearGradientKwdsÚLineConfigKwdsÚLineStringKwdsÚ
LocaleKwdsÚMarkConfigKwdsÚMergedStreamKwdsÚMultiLineStringKwdsÚMultiPointKwdsÚMultiPolygonKwdsÚNumberLocaleKwdsÚOverlayMarkDefKwdsÚPaddingKwdsÚ	PointKwdsÚPointSelectionConfigKwdsÚ#PointSelectionConfigWithoutTypeKwdsÚPolygonKwdsÚProjectionConfigKwdsÚProjectionKwdsÚRadialGradientKwdsÚRangeConfigKwdsÚRectConfigKwdsÚResolveKwdsÚ
RowColKwdsÚScaleConfigKwdsÚScaleInvalidDataConfigKwdsÚScaleResolveMapKwdsÚSelectionConfigKwdsÚStepKwdsÚStyleConfigIndexKwdsÚThemeConfigÚTickConfigKwdsÚTimeIntervalStepKwdsÚTimeLocaleKwdsÚTitleConfigKwdsÚTitleParamsKwdsÚTooltipContentKwdsÚTopLevelSelectionParameterKwdsÚVariableParameterKwdsÚViewBackgroundKwdsÚViewConfigKwds)ÚthemesN)ÚCallable)r   ÚLiteral)é   é   )ÚLiteralString)ÚPlugin)Mr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r&   r'   r%   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   ÚactiveÚenableÚgetÚnamesÚoptionsÚregisterÚ
unregisterc               ó   ‡ ‡— dˆˆ fd„}|S )a?  
    Decorator for registering a theme function.

    Parameters
    ----------
    name
        Unique name assigned in registry.
    enable
        Auto-enable the wrapped theme.

    Examples
    --------
    Register and enable a theme::

        import altair as alt
        from altair import theme


        @theme.register("param_font_size", enable=True)
        def custom_theme() -> theme.ThemeConfig:
            sizes = 12, 14, 16, 18, 20
            return {
                "autosize": {"contains": "content", "resize": True},
                "background": "#F3F2F1",
                "config": {
                    "axisX": {"labelFontSize": sizes[1], "titleFontSize": sizes[1]},
                    "axisY": {"labelFontSize": sizes[1], "titleFontSize": sizes[1]},
                    "font": "'Lato', 'Segoe UI', Tahoma, Verdana, sans-serif",
                    "headerColumn": {"labelFontSize": sizes[1]},
                    "headerFacet": {"labelFontSize": sizes[1]},
                    "headerRow": {"labelFontSize": sizes[1]},
                    "legend": {"labelFontSize": sizes[0], "titleFontSize": sizes[1]},
                    "text": {"fontSize": sizes[0]},
                    "title": {"fontSize": sizes[-1]},
                },
                "height": {"step": 28},
                "width": 350,
            }

    We can then see the ``name`` parameter displayed when checking::

        theme.active
        "param_font_size"

    Until another theme has been enabled, all charts will use defaults set in ``custom_theme()``::

        from altair.datasets import data

        source = data.stocks()
        lines = (
            alt.Chart(source, title=alt.Title("Stocks"))
            .mark_line()
            .encode(x="date:T", y="price:Q", color="symbol:N")
        )
        lines.interactive(bind_y=False)

    c               óN   •— t        ‰| «       ‰rt        j                  ‰«       | S ©N)Ú	_registerÚ_themesrU   )ÚfuncrU   Únames    €€úC/home/htdocs/ttos/venv/lib/python3.12/site-packages/altair/theme.pyÚdecoratezregister.<locals>.decorateî   s!   ø€ Ü�$˜ÔÙÜ�N‰N˜4Ô Øˆó    )r`   úPlugin[ThemeConfig]Úreturnre   © )ra   rU   rc   s   `` rb   rY   rY   ¯   s   ù€ ö~ð €Ord   c                óX   — t        | d«      }|€d| ›dt        «       ›�}t        |«      ‚|S )zò
    Remove and return a previously registered theme.

    Parameters
    ----------
    name
        Unique name assigned during ``alt.theme.register``.

    Raises
    ------
    TypeError
        When ``name`` has not been registered.
    NzFound no theme named z! in registry.
Registered themes:
)r^   rW   Ú	TypeError)ra   ÚpluginÚmsgs      rb   rZ   rZ   ÷   sC   € ô �t˜TÓ"€FØ€~à# D 8ð ,#ä‹wˆkðð 	ô
 ˜‹nÐàˆrd   ÚstrrT   údict[str, Any]rX   c                 ó   — t         S r]   )Ú__all__rg   rd   rb   Ú__dir__rp     s   € Ü€Nrd   c                 ó   — y r]   rg   ©ra   s    rb   Ú__getattr__rs     s   € Ø14rd   c                 ó   — y r]   rg   rr   s    rb   rs   rs      s   € Ø=@rd   c                ó„   — | dk(  rt         j                  S | dk(  rt         j                  S dt        ›d| ›�}t	        |«      ‚)NrT   rX   zmodule z has no attribute )r_   rT   rX   Ú__name__ÚAttributeError)ra   rk   s     rb   rs   rs   "  sD   € ØˆxÒÜ�~‰~ÐØ	�Ò	Ü�‰Ðàœ�|Ð#5°d°XÐ>ˆÜ˜SÓ!Ð!rd   c               óä   — |€ t         j                  j                  | d «      S t        j                  |«      r|t         j                  | <   |S t	        |«      j
                  ›d|›�}t        |«      ‚)Nz is not a callable theme

)r_   Ú_pluginsÚpopÚplugin_typeÚtyperv   ri   )ra   Úfnrk   s      rb   r^   r^   ,  sk   € ð 
€zÜ×Ñ×#Ñ# D¨$Ó/Ð/Ü	×	Ñ	˜RÔ	 Ø!#Œ×Ñ˜ÑØˆ	ä�b“×"Ñ"Ð%Ð%AÀ"ÀÐHˆÜ˜‹nÐrd   )ra   rR   rU   Úboolrf   z4Callable[[Plugin[ThemeConfig]], Plugin[ThemeConfig]])ra   rR   rf   re   )rf   z	list[str])ra   zLiteral['active']rf   rl   )ra   zLiteral['options']rf   rm   )ra   rl   rf   r   )ra   rR   r}   úPlugin[ThemeConfig] | Nonerf   r   )eÚ__doc__Ú
__future__r   Útypingr   r   r   Ú	_overloadÚ!altair.vegalite.v6.schema._configr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   Úaltair.vegalite.v6.themerM   r_   ÚsysÚcollections.abcrN   rO   Úversion_inforR   Útyping_extensionsÚaltair.utils.plugin_registryrS   ro   rY   rZ   rU   rV   rW   Ú__annotations__rp   rs   r^   rg   rd   rb   ú<module>rŒ      sI  ðÚ /å "ç %Ý (÷G÷ G÷ G÷ G÷ G÷ G÷ G÷ G÷ G÷ G÷ G÷ G÷ G÷ G÷ G÷ G÷ G÷ GõP 7áÛÝ(ß#à
×Ñ˜7Ò"Þ(å3Ý3òN€ðbEØ
ðEØ$(ðEà9óEóPð4 
�‰€Ø‡k�k€Ø�‰€ØƒØ 4Ø	Ó Ø 3óð Ú 4ó Ø 4Ø
Ú @ó Ø @ó"ð
Ø
ð
Ø7ð
àô
rd   