o
    h                      @  sb  U d Z ddlm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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQ ddlRmSZT erddlUZUdd	lmZmVZVmWZW eUjXd
krddlmYZY nddlZmYZY eUjXdkrddlm[Z[ nddlZm[Z[ ddl\m]Z] e[dZ^g dZ_d.ddZ`d/ddZaeTjbZbeTjcZceTjdZddeed< 	 deed< 	 d0d!d"Zfe
d1d$d%Zge
d2d'd%Zgd3d)d%Zgd4d,d-ZhdS )5z)Customizing chart configuration defaults.    )annotations)wraps)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)r   CallableLiteral)      )LiteralString)rP   
   )	ParamSpec)PluginP)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
unregisternamerR   rX   boolreturn4Callable[[Plugin[ThemeConfig]], Plugin[ThemeConfig]]c                  s   d fd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 vega_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)

    funcPlugin[ThemeConfig]r`   c                  s2   t   rt t d	 fdd}|S )
NargsP.argskwargsP.kwargsr`   rB   c                    s    | i |S N )rd   rf   rb   ri   @/var/www/vscode/kcb/lib/python3.10/site-packages/altair/theme.pywrapper   s   z+register.<locals>.decorate.<locals>.wrapper)rd   re   rf   rg   r`   rB   )	_register_themesrX   _wraps)rb   rl   rX   r^   rj   rk   decorate   s   

zregister.<locals>.decorateN)rb   rc   r`   rc   ri   )r^   rX   rq   ri   rp   rk   r\      s   ?r\   rc   c                 C  s0   t | d}|du r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:
)rm   rZ   	TypeError)r^   pluginmsgri   ri   rk   r]     s   
r]   strrW   dict[str, Any]r[   	list[str]c                   C  s   t S rh   )__all__ri   ri   ri   rk   __dir__%     ry   Literal['active']c                 C     d S rh   ri   r^   ri   ri   rk   __getattr__)  rz   r~   Literal['options']c                 C  r|   rh   ri   r}   ri   ri   rk   r~   +  rz   r   c                 C  s4   | dkrt jS | dkrt jS dtd| }t|)NrW   r[   zmodule z has no attribute )rn   rW   r[   __name__AttributeError)r^   rt   ri   ri   rk   r~   -  s   fnPlugin[ThemeConfig] | Nonec                C  sJ   |d u rt j| d S t |r|t j| < |S t|jd|}t|)Nz is not a callable theme

)rn   _pluginspopplugin_typetyper   rr   )r^   r   rt   ri   ri   rk   rm   7  s   

rm   )r^   rR   rX   r_   r`   ra   )r^   rR   r`   rc   )r`   rw   )r^   r{   r`   ru   )r^   r   r`   rv   )r^   ru   r`   r   )r^   rR   r   r   r`   r   )i__doc__
__future__r   	functoolsr   ro   typingr   r   r   	_overload!altair.vegalite.v5.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.v5.themerM   rn   sysrN   rO   version_inforR   typing_extensionsrT   altair.utils.plugin_registryrU   rV   rx   r\   r]   rX   rY   rZ   __annotations__ry   r~   rm   ri   ri   ri   rk   <module>   sH    " H


Q
M


