diff --git a/altair/utils/core.py b/altair/utils/core.py index 165816927..dd139fa2c 100644 --- a/altair/utils/core.py +++ b/altair/utils/core.py @@ -9,6 +9,7 @@ import sys import traceback import warnings +from typing import Callable, TypeVar, Any import jsonschema import pandas as pd @@ -16,12 +17,20 @@ from altair.utils.schemapi import SchemaBase +if sys.version_info >= (3, 10): + from typing import ParamSpec +else: + from typing_extensions import ParamSpec + try: from pandas.api.types import infer_dtype as _infer_dtype except ImportError: # Import for pandas < 0.20.0 from pandas.lib import infer_dtype as _infer_dtype +_V = TypeVar("_V") +_P = ParamSpec("_P") + def infer_dtype(value): """Infer the dtype of the value. @@ -552,10 +561,10 @@ def parse_shorthand( return attrs -def use_signature(Obj): +def use_signature(Obj: Callable[_P, Any]): """Apply call signature and documentation of Obj to the decorated method""" - def decorate(f): + def decorate(f: Callable[..., _V]) -> Callable[_P, _V]: # call-signature of f is exposed via __wrapped__. # we want it to mimic Obj.__init__ f.__wrapped__ = Obj.__init__ diff --git a/altair/vegalite/v5/api.py b/altair/vegalite/v5/api.py index 9e9647438..a9a64d280 100644 --- a/altair/vegalite/v5/api.py +++ b/altair/vegalite/v5/api.py @@ -1,5 +1,4 @@ import warnings -from typing import TypeVar import hashlib import io @@ -8,6 +7,7 @@ import pandas as pd from toolz.curried import pipe as _pipe import itertools +import sys from .schema import core, channels, mixins, Undefined, SCHEMA_URL @@ -16,15 +16,10 @@ from .display import renderers, VEGALITE_VERSION, VEGAEMBED_VERSION, VEGA_VERSION from .theme import themes -_TTopLevelMixin = TypeVar("_TTopLevelMixin", bound="TopLevelMixin") -_TEncodingMixin = TypeVar("_TEncodingMixin", bound="_EncodingMixin") -_TChart = TypeVar("_TChart", bound="Chart") -_TRepeatChart = TypeVar("_TRepeatChart", bound="RepeatChart") -_TConcatChart = TypeVar("_TConcatChart", bound="ConcatChart") -_THConcatChart = TypeVar("_THConcatChart", bound="HConcatChart") -_TVConcatChart = TypeVar("_TVConcatChart", bound="VConcatChart") -_TLayerChart = TypeVar("_TLayerChart", bound="LayerChart") -_TFacetChart = TypeVar("_TFacetChart", bound="FacetChart") +if sys.version_info >= (3, 11): + from typing import Self +else: + from typing_extensions import Self # ------------------------------------------------------------------------ @@ -125,8 +120,11 @@ def _prepare_data(data, context=None): Title = core.TitleParams -@utils.use_signature(core.LookupData) class LookupData(core.LookupData): + @utils.use_signature(core.LookupData) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + def to_dict(self, *args, **kwargs): """Convert the chart to a dictionary suitable for JSON export.""" copy = self.copy(deep=False) @@ -134,10 +132,13 @@ def to_dict(self, *args, **kwargs): return super(LookupData, copy).to_dict(*args, **kwargs) -@utils.use_signature(core.FacetMapping) class FacetMapping(core.FacetMapping): _class_is_valid_at_instantiation = False + @utils.use_signature(core.FacetMapping) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + def to_dict(self, *args, **kwargs): copy = self.copy(deep=False) context = kwargs.get("context", {}) @@ -989,7 +990,7 @@ def repeat( return RepeatChart(spec=self, repeat=repeat, columns=columns, **kwargs) - def properties(self: _TTopLevelMixin, **kwargs) -> _TTopLevelMixin: + def properties(self, **kwargs) -> Self: """Set top-level properties of the Chart. Argument names and types are the same as class initialization. @@ -1008,7 +1009,7 @@ def properties(self: _TTopLevelMixin, **kwargs) -> _TTopLevelMixin: return copy def project( - self: _TTopLevelMixin, + self, type=Undefined, center=Undefined, clipAngle=Undefined, @@ -1029,7 +1030,7 @@ def project( tilt=Undefined, translate=Undefined, **kwds, - ) -> _TTopLevelMixin: + ) -> Self: """Add a geographic projection to the chart. This is generally used either with ``mark_geoshape`` or with the @@ -1139,8 +1140,8 @@ def _add_transform(self, *transforms): return copy def transform_aggregate( - self: _TTopLevelMixin, aggregate=Undefined, groupby=Undefined, **kwds - ) -> _TTopLevelMixin: + self, aggregate=Undefined, groupby=Undefined, **kwds + ) -> Self: """ Add an :class:`AggregateTransform` to the schema. @@ -1214,9 +1215,7 @@ def transform_aggregate( core.AggregateTransform(aggregate=aggregate, groupby=groupby) ) - def transform_bin( - self: _TTopLevelMixin, as_=Undefined, field=Undefined, bin=True, **kwargs - ) -> _TTopLevelMixin: + def transform_bin(self, as_=Undefined, field=Undefined, bin=True, **kwargs) -> Self: """ Add a :class:`BinTransform` to the schema. @@ -1272,9 +1271,7 @@ def transform_bin( kwargs["field"] = field return self._add_transform(core.BinTransform(**kwargs)) - def transform_calculate( - self: _TTopLevelMixin, as_=Undefined, calculate=Undefined, **kwargs - ) -> _TTopLevelMixin: + def transform_calculate(self, as_=Undefined, calculate=Undefined, **kwargs) -> Self: """ Add a :class:`CalculateTransform` to the schema. @@ -1337,7 +1334,7 @@ def transform_calculate( return self def transform_density( - self: _TTopLevelMixin, + self, density, as_=Undefined, bandwidth=Undefined, @@ -1348,7 +1345,7 @@ def transform_density( maxsteps=Undefined, minsteps=Undefined, steps=Undefined, - ) -> _TTopLevelMixin: + ) -> Self: """Add a :class:`DensityTransform` to the spec. Parameters @@ -1405,7 +1402,7 @@ def transform_density( ) def transform_impute( - self: _TTopLevelMixin, + self, impute, key, frame=Undefined, @@ -1413,7 +1410,7 @@ def transform_impute( keyvals=Undefined, method=Undefined, value=Undefined, - ) -> _TTopLevelMixin: + ) -> Self: """ Add an :class:`ImputeTransform` to the schema. @@ -1475,8 +1472,8 @@ def transform_impute( ) def transform_joinaggregate( - self: _TTopLevelMixin, joinaggregate=Undefined, groupby=Undefined, **kwargs - ) -> _TTopLevelMixin: + self, joinaggregate=Undefined, groupby=Undefined, **kwargs + ) -> Self: """ Add a :class:`JoinAggregateTransform` to the schema. @@ -1527,7 +1524,7 @@ def transform_joinaggregate( ) # TODO: Update docstring - def transform_filter(self: _TTopLevelMixin, filter, **kwargs) -> _TTopLevelMixin: + def transform_filter(self, filter, **kwargs) -> Self: """ Add a :class:`FilterTransform` to the schema. @@ -1560,9 +1557,7 @@ def transform_filter(self: _TTopLevelMixin, filter, **kwargs) -> _TTopLevelMixin filter = new_filter return self._add_transform(core.FilterTransform(filter=filter, **kwargs)) - def transform_flatten( - self: _TTopLevelMixin, flatten, as_=Undefined - ) -> _TTopLevelMixin: + def transform_flatten(self, flatten, as_=Undefined) -> Self: """Add a :class:`FlattenTransform` to the schema. Parameters @@ -1590,7 +1585,7 @@ def transform_flatten( core.FlattenTransform(flatten=flatten, **{"as": as_}) ) - def transform_fold(self: _TTopLevelMixin, fold, as_=Undefined) -> _TTopLevelMixin: + def transform_fold(self, fold, as_=Undefined) -> Self: """Add a :class:`FoldTransform` to the spec. Parameters @@ -1614,13 +1609,13 @@ def transform_fold(self: _TTopLevelMixin, fold, as_=Undefined) -> _TTopLevelMixi return self._add_transform(core.FoldTransform(fold=fold, **{"as": as_})) def transform_loess( - self: _TTopLevelMixin, + self, on, loess, as_=Undefined, bandwidth=Undefined, groupby=Undefined, - ) -> _TTopLevelMixin: + ) -> Self: """Add a :class:`LoessTransform` to the spec. Parameters @@ -1656,13 +1651,13 @@ def transform_loess( ) def transform_lookup( - self: _TTopLevelMixin, + self, lookup=Undefined, from_=Undefined, as_=Undefined, default=Undefined, **kwargs, - ) -> _TTopLevelMixin: + ) -> Self: """Add a :class:`DataLookupTransform` or :class:`SelectionLookupTransform` to the chart Parameters @@ -1711,13 +1706,13 @@ def transform_lookup( return self._add_transform(core.LookupTransform(**kwargs)) def transform_pivot( - self: _TTopLevelMixin, + self, pivot, value, groupby=Undefined, limit=Undefined, op=Undefined, - ) -> _TTopLevelMixin: + ) -> Self: """Add a :class:`PivotTransform` to the chart. Parameters @@ -1757,13 +1752,13 @@ def transform_pivot( ) def transform_quantile( - self: _TTopLevelMixin, + self, quantile, as_=Undefined, groupby=Undefined, probs=Undefined, step=Undefined, - ) -> _TTopLevelMixin: + ) -> Self: """Add a :class:`QuantileTransform` to the chart Parameters @@ -1803,7 +1798,7 @@ def transform_quantile( ) def transform_regression( - self: _TTopLevelMixin, + self, on, regression, as_=Undefined, @@ -1812,7 +1807,7 @@ def transform_regression( method=Undefined, order=Undefined, params=Undefined, - ) -> _TTopLevelMixin: + ) -> Self: """Add a :class:`RegressionTransform` to the chart. Parameters @@ -1867,7 +1862,7 @@ def transform_regression( ) ) - def transform_sample(self: _TTopLevelMixin, sample=1000) -> _TTopLevelMixin: + def transform_sample(self, sample=1000) -> Self: """ Add a :class:`SampleTransform` to the schema. @@ -1888,8 +1883,8 @@ def transform_sample(self: _TTopLevelMixin, sample=1000) -> _TTopLevelMixin: return self._add_transform(core.SampleTransform(sample)) def transform_stack( - self: _TTopLevelMixin, as_, stack, groupby, offset=Undefined, sort=Undefined - ) -> _TTopLevelMixin: + self, as_, stack, groupby, offset=Undefined, sort=Undefined + ) -> Self: """ Add a :class:`StackTransform` to the schema. @@ -1925,12 +1920,12 @@ def transform_stack( ) def transform_timeunit( - self: _TTopLevelMixin, + self, as_=Undefined, field=Undefined, timeUnit=Undefined, **kwargs, - ) -> _TTopLevelMixin: + ) -> Self: """ Add a :class:`TimeUnitTransform` to the schema. @@ -2009,14 +2004,14 @@ def transform_timeunit( return self def transform_window( - self: _TTopLevelMixin, + self, window=Undefined, frame=Undefined, groupby=Undefined, ignorePeers=Undefined, sort=Undefined, **kwargs, - ) -> _TTopLevelMixin: + ) -> Self: """Add a :class:`WindowTransform` to the schema Parameters @@ -2255,21 +2250,21 @@ def _set_resolve(self, **kwargs): return copy @utils.use_signature(core.AxisResolveMap) - def resolve_axis(self: _TTopLevelMixin, *args, **kwargs) -> _TTopLevelMixin: + def resolve_axis(self, *args, **kwargs) -> Self: return self._set_resolve(axis=core.AxisResolveMap(*args, **kwargs)) @utils.use_signature(core.LegendResolveMap) - def resolve_legend(self: _TTopLevelMixin, *args, **kwargs) -> _TTopLevelMixin: + def resolve_legend(self, *args, **kwargs) -> Self: return self._set_resolve(legend=core.LegendResolveMap(*args, **kwargs)) @utils.use_signature(core.ScaleResolveMap) - def resolve_scale(self: _TTopLevelMixin, *args, **kwargs) -> _TTopLevelMixin: + def resolve_scale(self, *args, **kwargs) -> Self: return self._set_resolve(scale=core.ScaleResolveMap(*args, **kwargs)) class _EncodingMixin: @utils.use_signature(core.FacetedEncoding) - def encode(self: _TEncodingMixin, *args, **kwargs) -> _TEncodingMixin: + def encode(self, *args, **kwargs) -> Self: # Convert args to kwargs based on their types. kwargs = utils.infer_encoding_types(args, kwargs, channels) @@ -2472,7 +2467,7 @@ def to_dict(self, *args, **kwargs) -> dict: return super(Chart, copy).to_dict(*args, **kwargs) return super().to_dict(*args, **kwargs) - def add_params(self: _TChart, *params) -> _TChart: + def add_params(self, *params) -> Self: """Add one or more parameters to the chart.""" if not params: return self @@ -2487,10 +2482,10 @@ def add_params(self: _TChart, *params) -> _TChart: @utils.deprecation.deprecated( message="'add_selection' is deprecated. Use 'add_params' instead." ) - def add_selection(self: _TChart, *params) -> _TChart: + def add_selection(self, *params) -> Self: return self.add_params(*params) - def interactive(self: _TChart, name=None, bind_x=True, bind_y=True) -> _TChart: + def interactive(self, name=None, bind_x=True, bind_y=True) -> Self: """Make chart axes scales interactive Parameters @@ -2585,13 +2580,13 @@ def _get(spec, attr): ) -@utils.use_signature(core.TopLevelRepeatSpec) class RepeatChart(TopLevelMixin, core.TopLevelRepeatSpec): """A chart repeated across rows and columns with small changes""" # Because TopLevelRepeatSpec is defined as a union as of Vega-Lite schema 4.9, # we set the arguments explicitly here. # TODO: Should we instead use tools/schemapi/codegen._get_args? + @utils.use_signature(core.TopLevelRepeatSpec) def __init__( self, repeat=Undefined, @@ -2646,9 +2641,7 @@ def __init__( **kwds, ) - def interactive( - self: _TRepeatChart, name=None, bind_x=True, bind_y=True - ) -> _TRepeatChart: + def interactive(self, name=None, bind_x=True, bind_y=True) -> Self: """Make chart axes scales interactive Parameters @@ -2671,7 +2664,7 @@ def interactive( copy.spec = copy.spec.interactive(name=name, bind_x=bind_x, bind_y=bind_y) return copy - def add_params(self: _TRepeatChart, *params) -> _TRepeatChart: + def add_params(self, *params) -> Self: """Add one or more parameters to the chart.""" if not params or self.spec is Undefined: return self @@ -2682,7 +2675,7 @@ def add_params(self: _TRepeatChart, *params) -> _TRepeatChart: @utils.deprecation.deprecated( message="'add_selection' is deprecated. Use 'add_params' instead." ) - def add_selection(self: _TRepeatChart, *selections) -> _TRepeatChart: + def add_selection(self, *selections) -> Self: return self.add_params(*selections) @@ -2706,10 +2699,10 @@ def repeat(repeater="repeat"): return core.RepeatRef(repeat=repeater) -@utils.use_signature(core.TopLevelConcatSpec) class ConcatChart(TopLevelMixin, core.TopLevelConcatSpec): """A chart with horizontally-concatenated facets""" + @utils.use_signature(core.TopLevelConcatSpec) def __init__(self, data=Undefined, concat=(), columns=Undefined, **kwargs): # TODO: move common data to top level? for spec in concat: @@ -2732,9 +2725,7 @@ def __or__(self, other): copy |= other return copy - def interactive( - self: _TConcatChart, name=None, bind_x=True, bind_y=True - ) -> _TConcatChart: + def interactive(self, name=None, bind_x=True, bind_y=True) -> Self: """Make chart axes scales interactive Parameters @@ -2760,7 +2751,7 @@ def interactive( encodings.append("y") return self.add_params(selection_interval(bind="scales", encodings=encodings)) - def add_params(self: _TConcatChart, *params) -> _TConcatChart: + def add_params(self, *params) -> Self: """Add one or more parameters to the chart.""" if not params or not self.concat: return self @@ -2771,7 +2762,7 @@ def add_params(self: _TConcatChart, *params) -> _TConcatChart: @utils.deprecation.deprecated( message="'add_selection' is deprecated. Use 'add_params' instead." ) - def add_selection(self: _TConcatChart, *selections) -> _TConcatChart: + def add_selection(self, *selections) -> Self: return self.add_params(*selections) @@ -2780,10 +2771,10 @@ def concat(*charts, **kwargs): return ConcatChart(concat=charts, **kwargs) -@utils.use_signature(core.TopLevelHConcatSpec) class HConcatChart(TopLevelMixin, core.TopLevelHConcatSpec): """A chart with horizontally-concatenated facets""" + @utils.use_signature(core.TopLevelHConcatSpec) def __init__(self, data=Undefined, hconcat=(), **kwargs): # TODO: move common data to top level? for spec in hconcat: @@ -2804,9 +2795,7 @@ def __or__(self, other): copy |= other return copy - def interactive( - self: _THConcatChart, name=None, bind_x=True, bind_y=True - ) -> _THConcatChart: + def interactive(self, name=None, bind_x=True, bind_y=True) -> Self: """Make chart axes scales interactive Parameters @@ -2832,7 +2821,7 @@ def interactive( encodings.append("y") return self.add_params(selection_interval(bind="scales", encodings=encodings)) - def add_params(self: _THConcatChart, *params) -> _THConcatChart: + def add_params(self, *params) -> Self: """Add one or more parameters to the chart.""" if not params or not self.hconcat: return self @@ -2843,7 +2832,7 @@ def add_params(self: _THConcatChart, *params) -> _THConcatChart: @utils.deprecation.deprecated( message="'add_selection' is deprecated. Use 'add_params' instead." ) - def add_selection(self: _THConcatChart, *selections) -> _THConcatChart: + def add_selection(self, *selections) -> Self: return self.add_params(*selections) @@ -2852,10 +2841,10 @@ def hconcat(*charts, **kwargs): return HConcatChart(hconcat=charts, **kwargs) -@utils.use_signature(core.TopLevelVConcatSpec) class VConcatChart(TopLevelMixin, core.TopLevelVConcatSpec): """A chart with vertically-concatenated facets""" + @utils.use_signature(core.TopLevelVConcatSpec) def __init__(self, data=Undefined, vconcat=(), **kwargs): # TODO: move common data to top level? for spec in vconcat: @@ -2876,9 +2865,7 @@ def __and__(self, other): copy &= other return copy - def interactive( - self: _TVConcatChart, name=None, bind_x=True, bind_y=True - ) -> _TVConcatChart: + def interactive(self, name=None, bind_x=True, bind_y=True) -> Self: """Make chart axes scales interactive Parameters @@ -2904,7 +2891,7 @@ def interactive( encodings.append("y") return self.add_params(selection_interval(bind="scales", encodings=encodings)) - def add_params(self: _TVConcatChart, *params) -> _TVConcatChart: + def add_params(self, *params) -> Self: """Add one or more parameters to the chart.""" if not params or not self.vconcat: return self @@ -2915,7 +2902,7 @@ def add_params(self: _TVConcatChart, *params) -> _TVConcatChart: @utils.deprecation.deprecated( message="'add_selection' is deprecated. Use 'add_params' instead." ) - def add_selection(self: _TVConcatChart, *selections) -> _TVConcatChart: + def add_selection(self, *selections) -> Self: return self.add_params(*selections) @@ -2924,10 +2911,10 @@ def vconcat(*charts, **kwargs): return VConcatChart(vconcat=charts, **kwargs) -@utils.use_signature(core.TopLevelLayerSpec) class LayerChart(TopLevelMixin, _EncodingMixin, core.TopLevelLayerSpec): """A Chart with layers within a single panel""" + @utils.use_signature(core.TopLevelLayerSpec) def __init__(self, data=Undefined, layer=(), **kwargs): # TODO: move common data to top level? # TODO: check for conflicting interaction @@ -2960,15 +2947,13 @@ def __add__(self, other): copy += other return copy - def add_layers(self: _TLayerChart, *layers) -> _TLayerChart: + def add_layers(self, *layers) -> Self: copy = self.copy(deep=["layer"]) for layer in layers: copy += layer return copy - def interactive( - self: _TLayerChart, name=None, bind_x=True, bind_y=True - ) -> _TLayerChart: + def interactive(self, name=None, bind_x=True, bind_y=True) -> Self: """Make chart axes scales interactive Parameters @@ -2997,7 +2982,7 @@ def interactive( ) return copy - def add_params(self: _TLayerChart, *params) -> _TLayerChart: + def add_params(self, *params) -> Self: """Add one or more parameters to the chart.""" if not params or not self.layer: return self @@ -3008,7 +2993,7 @@ def add_params(self: _TLayerChart, *params) -> _TLayerChart: @utils.deprecation.deprecated( message="'add_selection' is deprecated. Use 'add_params' instead." ) - def add_selection(self: _TLayerChart, *selections) -> _TLayerChart: + def add_selection(self, *selections) -> Self: return self.add_params(*selections) @@ -3017,10 +3002,10 @@ def layer(*charts, **kwargs): return LayerChart(layer=charts, **kwargs) -@utils.use_signature(core.TopLevelFacetSpec) class FacetChart(TopLevelMixin, core.TopLevelFacetSpec): """A Chart with layers within a single panel""" + @utils.use_signature(core.TopLevelFacetSpec) def __init__( self, data=Undefined, @@ -3037,9 +3022,7 @@ def __init__( data=data, spec=spec, facet=facet, params=params, **kwargs ) - def interactive( - self: _TFacetChart, name=None, bind_x=True, bind_y=True - ) -> _TFacetChart: + def interactive(self, name=None, bind_x=True, bind_y=True) -> Self: """Make chart axes scales interactive Parameters @@ -3062,7 +3045,7 @@ def interactive( copy.spec = copy.spec.interactive(name=name, bind_x=bind_x, bind_y=bind_y) return copy - def add_params(self: _TFacetChart, *params) -> _TFacetChart: + def add_params(self, *params) -> Self: """Add one or more parameters to the chart.""" if not params or self.spec is Undefined: return self @@ -3073,7 +3056,7 @@ def add_params(self: _TFacetChart, *params) -> _TFacetChart: @utils.deprecation.deprecated( message="'add_selection' is deprecated. Use 'add_params' instead." ) - def add_selection(self: _TFacetChart, *selections) -> _TFacetChart: + def add_selection(self, *selections) -> Self: return self.add_params(*selections) diff --git a/altair/vegalite/v5/schema/mixins.py b/altair/vegalite/v5/schema/mixins.py index 7091df57b..569daefb8 100644 --- a/altair/vegalite/v5/schema/mixins.py +++ b/altair/vegalite/v5/schema/mixins.py @@ -1,21 +1,24 @@ # The contents of this file are automatically written by # tools/generate_schema_wrapper.py. Do not modify directly. +import sys + from . import core from altair.utils import use_signature from altair.utils.schemapi import Undefined -from typing import TypeVar -_TConfigMethodMixin = TypeVar("_TConfigMethodMixin", bound="ConfigMethodMixin") -_TMarkMethodMixin = TypeVar("_TMarkMethodMixin", bound="MarkMethodMixin") +if sys.version_info >= (3, 11): + from typing import Self +else: + from typing_extensions import Self class MarkMethodMixin: """A mixin class that defines mark methods""" - def mark_arc(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Undefined, - ariaRole=Undefined, ariaRoleDescription=Undefined, aspect=Undefined, - bandSize=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, - clip=Undefined, color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, + def mark_arc(self, align=Undefined, angle=Undefined, aria=Undefined, ariaRole=Undefined, + ariaRoleDescription=Undefined, aspect=Undefined, bandSize=Undefined, + baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, + color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, description=Undefined, dir=Undefined, @@ -35,7 +38,7 @@ def mark_arc(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Und timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, - **kwds) -> _TMarkMethodMixin: + **kwds) -> Self: """Set the chart's mark to 'arc' (see :class:`MarkDef`) """ kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole, @@ -69,10 +72,10 @@ def mark_arc(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Und copy.mark = "arc" return copy - def mark_area(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Undefined, - ariaRole=Undefined, ariaRoleDescription=Undefined, aspect=Undefined, - bandSize=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, - clip=Undefined, color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, + def mark_area(self, align=Undefined, angle=Undefined, aria=Undefined, ariaRole=Undefined, + ariaRoleDescription=Undefined, aspect=Undefined, bandSize=Undefined, + baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, + color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, description=Undefined, @@ -92,7 +95,7 @@ def mark_area(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Un thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, - yOffset=Undefined, **kwds) -> _TMarkMethodMixin: + yOffset=Undefined, **kwds) -> Self: """Set the chart's mark to 'area' (see :class:`MarkDef`) """ kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole, @@ -126,10 +129,10 @@ def mark_area(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Un copy.mark = "area" return copy - def mark_bar(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Undefined, - ariaRole=Undefined, ariaRoleDescription=Undefined, aspect=Undefined, - bandSize=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, - clip=Undefined, color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, + def mark_bar(self, align=Undefined, angle=Undefined, aria=Undefined, ariaRole=Undefined, + ariaRoleDescription=Undefined, aspect=Undefined, bandSize=Undefined, + baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, + color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, description=Undefined, dir=Undefined, @@ -149,7 +152,7 @@ def mark_bar(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Und timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, - **kwds) -> _TMarkMethodMixin: + **kwds) -> Self: """Set the chart's mark to 'bar' (see :class:`MarkDef`) """ kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole, @@ -183,30 +186,30 @@ def mark_bar(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Und copy.mark = "bar" return copy - def mark_image(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Undefined, - ariaRole=Undefined, ariaRoleDescription=Undefined, aspect=Undefined, - bandSize=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, - clip=Undefined, color=Undefined, continuousBandSize=Undefined, - cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, - cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, - cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, - description=Undefined, dir=Undefined, discreteBandSize=Undefined, dx=Undefined, - dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, - filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, - fontWeight=Undefined, height=Undefined, href=Undefined, innerRadius=Undefined, - interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, - lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, - orient=Undefined, outerRadius=Undefined, padAngle=Undefined, point=Undefined, - radius=Undefined, radius2=Undefined, radius2Offset=Undefined, radiusOffset=Undefined, - shape=Undefined, size=Undefined, smooth=Undefined, stroke=Undefined, - strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, - strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, - strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, - text=Undefined, theta=Undefined, theta2=Undefined, theta2Offset=Undefined, - thetaOffset=Undefined, thickness=Undefined, timeUnitBandPosition=Undefined, - timeUnitBandSize=Undefined, tooltip=Undefined, url=Undefined, width=Undefined, - x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, - y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds) -> _TMarkMethodMixin: + def mark_image(self, align=Undefined, angle=Undefined, aria=Undefined, ariaRole=Undefined, + ariaRoleDescription=Undefined, aspect=Undefined, bandSize=Undefined, + baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, + color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, + cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, + cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, + cornerRadiusTopRight=Undefined, cursor=Undefined, description=Undefined, + dir=Undefined, discreteBandSize=Undefined, dx=Undefined, dy=Undefined, + ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, + font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, + height=Undefined, href=Undefined, innerRadius=Undefined, interpolate=Undefined, + invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, + lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, + outerRadius=Undefined, padAngle=Undefined, point=Undefined, radius=Undefined, + radius2=Undefined, radius2Offset=Undefined, radiusOffset=Undefined, shape=Undefined, + size=Undefined, smooth=Undefined, stroke=Undefined, strokeCap=Undefined, + strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, + strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, + strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, + theta=Undefined, theta2=Undefined, theta2Offset=Undefined, thetaOffset=Undefined, + thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, + tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined, + x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, + yOffset=Undefined, **kwds) -> Self: """Set the chart's mark to 'image' (see :class:`MarkDef`) """ kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole, @@ -240,10 +243,10 @@ def mark_image(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=U copy.mark = "image" return copy - def mark_line(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Undefined, - ariaRole=Undefined, ariaRoleDescription=Undefined, aspect=Undefined, - bandSize=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, - clip=Undefined, color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, + def mark_line(self, align=Undefined, angle=Undefined, aria=Undefined, ariaRole=Undefined, + ariaRoleDescription=Undefined, aspect=Undefined, bandSize=Undefined, + baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, + color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, description=Undefined, @@ -263,7 +266,7 @@ def mark_line(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Un thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, - yOffset=Undefined, **kwds) -> _TMarkMethodMixin: + yOffset=Undefined, **kwds) -> Self: """Set the chart's mark to 'line' (see :class:`MarkDef`) """ kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole, @@ -297,30 +300,30 @@ def mark_line(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Un copy.mark = "line" return copy - def mark_point(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Undefined, - ariaRole=Undefined, ariaRoleDescription=Undefined, aspect=Undefined, - bandSize=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, - clip=Undefined, color=Undefined, continuousBandSize=Undefined, - cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, - cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, - cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, - description=Undefined, dir=Undefined, discreteBandSize=Undefined, dx=Undefined, - dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, - filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, - fontWeight=Undefined, height=Undefined, href=Undefined, innerRadius=Undefined, - interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, - lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, - orient=Undefined, outerRadius=Undefined, padAngle=Undefined, point=Undefined, - radius=Undefined, radius2=Undefined, radius2Offset=Undefined, radiusOffset=Undefined, - shape=Undefined, size=Undefined, smooth=Undefined, stroke=Undefined, - strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, - strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, - strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, - text=Undefined, theta=Undefined, theta2=Undefined, theta2Offset=Undefined, - thetaOffset=Undefined, thickness=Undefined, timeUnitBandPosition=Undefined, - timeUnitBandSize=Undefined, tooltip=Undefined, url=Undefined, width=Undefined, - x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, - y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds) -> _TMarkMethodMixin: + def mark_point(self, align=Undefined, angle=Undefined, aria=Undefined, ariaRole=Undefined, + ariaRoleDescription=Undefined, aspect=Undefined, bandSize=Undefined, + baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, + color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, + cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, + cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, + cornerRadiusTopRight=Undefined, cursor=Undefined, description=Undefined, + dir=Undefined, discreteBandSize=Undefined, dx=Undefined, dy=Undefined, + ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, + font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, + height=Undefined, href=Undefined, innerRadius=Undefined, interpolate=Undefined, + invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, + lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, + outerRadius=Undefined, padAngle=Undefined, point=Undefined, radius=Undefined, + radius2=Undefined, radius2Offset=Undefined, radiusOffset=Undefined, shape=Undefined, + size=Undefined, smooth=Undefined, stroke=Undefined, strokeCap=Undefined, + strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, + strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, + strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, + theta=Undefined, theta2=Undefined, theta2Offset=Undefined, thetaOffset=Undefined, + thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, + tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined, + x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, + yOffset=Undefined, **kwds) -> Self: """Set the chart's mark to 'point' (see :class:`MarkDef`) """ kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole, @@ -354,10 +357,10 @@ def mark_point(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=U copy.mark = "point" return copy - def mark_rect(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Undefined, - ariaRole=Undefined, ariaRoleDescription=Undefined, aspect=Undefined, - bandSize=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, - clip=Undefined, color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, + def mark_rect(self, align=Undefined, angle=Undefined, aria=Undefined, ariaRole=Undefined, + ariaRoleDescription=Undefined, aspect=Undefined, bandSize=Undefined, + baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, + color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, description=Undefined, @@ -377,7 +380,7 @@ def mark_rect(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Un thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, - yOffset=Undefined, **kwds) -> _TMarkMethodMixin: + yOffset=Undefined, **kwds) -> Self: """Set the chart's mark to 'rect' (see :class:`MarkDef`) """ kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole, @@ -411,10 +414,10 @@ def mark_rect(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Un copy.mark = "rect" return copy - def mark_rule(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Undefined, - ariaRole=Undefined, ariaRoleDescription=Undefined, aspect=Undefined, - bandSize=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, - clip=Undefined, color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, + def mark_rule(self, align=Undefined, angle=Undefined, aria=Undefined, ariaRole=Undefined, + ariaRoleDescription=Undefined, aspect=Undefined, bandSize=Undefined, + baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, + color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, description=Undefined, @@ -434,7 +437,7 @@ def mark_rule(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Un thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, - yOffset=Undefined, **kwds) -> _TMarkMethodMixin: + yOffset=Undefined, **kwds) -> Self: """Set the chart's mark to 'rule' (see :class:`MarkDef`) """ kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole, @@ -468,10 +471,10 @@ def mark_rule(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Un copy.mark = "rule" return copy - def mark_text(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Undefined, - ariaRole=Undefined, ariaRoleDescription=Undefined, aspect=Undefined, - bandSize=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, - clip=Undefined, color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, + def mark_text(self, align=Undefined, angle=Undefined, aria=Undefined, ariaRole=Undefined, + ariaRoleDescription=Undefined, aspect=Undefined, bandSize=Undefined, + baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, + color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, description=Undefined, @@ -491,7 +494,7 @@ def mark_text(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Un thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, - yOffset=Undefined, **kwds) -> _TMarkMethodMixin: + yOffset=Undefined, **kwds) -> Self: """Set the chart's mark to 'text' (see :class:`MarkDef`) """ kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole, @@ -525,10 +528,10 @@ def mark_text(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Un copy.mark = "text" return copy - def mark_tick(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Undefined, - ariaRole=Undefined, ariaRoleDescription=Undefined, aspect=Undefined, - bandSize=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, - clip=Undefined, color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, + def mark_tick(self, align=Undefined, angle=Undefined, aria=Undefined, ariaRole=Undefined, + ariaRoleDescription=Undefined, aspect=Undefined, bandSize=Undefined, + baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, + color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, description=Undefined, @@ -548,7 +551,7 @@ def mark_tick(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Un thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, - yOffset=Undefined, **kwds) -> _TMarkMethodMixin: + yOffset=Undefined, **kwds) -> Self: """Set the chart's mark to 'tick' (see :class:`MarkDef`) """ kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole, @@ -582,30 +585,30 @@ def mark_tick(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Un copy.mark = "tick" return copy - def mark_trail(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Undefined, - ariaRole=Undefined, ariaRoleDescription=Undefined, aspect=Undefined, - bandSize=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, - clip=Undefined, color=Undefined, continuousBandSize=Undefined, - cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, - cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, - cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, - description=Undefined, dir=Undefined, discreteBandSize=Undefined, dx=Undefined, - dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, - filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, - fontWeight=Undefined, height=Undefined, href=Undefined, innerRadius=Undefined, - interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, - lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, - orient=Undefined, outerRadius=Undefined, padAngle=Undefined, point=Undefined, - radius=Undefined, radius2=Undefined, radius2Offset=Undefined, radiusOffset=Undefined, - shape=Undefined, size=Undefined, smooth=Undefined, stroke=Undefined, - strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, - strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, - strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined, - text=Undefined, theta=Undefined, theta2=Undefined, theta2Offset=Undefined, - thetaOffset=Undefined, thickness=Undefined, timeUnitBandPosition=Undefined, - timeUnitBandSize=Undefined, tooltip=Undefined, url=Undefined, width=Undefined, - x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, - y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds) -> _TMarkMethodMixin: + def mark_trail(self, align=Undefined, angle=Undefined, aria=Undefined, ariaRole=Undefined, + ariaRoleDescription=Undefined, aspect=Undefined, bandSize=Undefined, + baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, + color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, + cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, + cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, + cornerRadiusTopRight=Undefined, cursor=Undefined, description=Undefined, + dir=Undefined, discreteBandSize=Undefined, dx=Undefined, dy=Undefined, + ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, + font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, + height=Undefined, href=Undefined, innerRadius=Undefined, interpolate=Undefined, + invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, + lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, + outerRadius=Undefined, padAngle=Undefined, point=Undefined, radius=Undefined, + radius2=Undefined, radius2Offset=Undefined, radiusOffset=Undefined, shape=Undefined, + size=Undefined, smooth=Undefined, stroke=Undefined, strokeCap=Undefined, + strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, + strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, + strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, + theta=Undefined, theta2=Undefined, theta2Offset=Undefined, thetaOffset=Undefined, + thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, + tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined, + x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, + yOffset=Undefined, **kwds) -> Self: """Set the chart's mark to 'trail' (see :class:`MarkDef`) """ kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole, @@ -639,31 +642,30 @@ def mark_trail(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=U copy.mark = "trail" return copy - def mark_circle(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Undefined, - ariaRole=Undefined, ariaRoleDescription=Undefined, aspect=Undefined, - bandSize=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, - clip=Undefined, color=Undefined, continuousBandSize=Undefined, - cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, - cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, - cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, - description=Undefined, dir=Undefined, discreteBandSize=Undefined, dx=Undefined, - dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, - filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, - fontWeight=Undefined, height=Undefined, href=Undefined, innerRadius=Undefined, - interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, - lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, - orient=Undefined, outerRadius=Undefined, padAngle=Undefined, point=Undefined, - radius=Undefined, radius2=Undefined, radius2Offset=Undefined, - radiusOffset=Undefined, shape=Undefined, size=Undefined, smooth=Undefined, - stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, - strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, - strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, - style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, - theta2=Undefined, theta2Offset=Undefined, thetaOffset=Undefined, + def mark_circle(self, align=Undefined, angle=Undefined, aria=Undefined, ariaRole=Undefined, + ariaRoleDescription=Undefined, aspect=Undefined, bandSize=Undefined, + baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, + color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, + cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, + cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, + cornerRadiusTopRight=Undefined, cursor=Undefined, description=Undefined, + dir=Undefined, discreteBandSize=Undefined, dx=Undefined, dy=Undefined, + ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, + font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, + height=Undefined, href=Undefined, innerRadius=Undefined, interpolate=Undefined, + invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, + lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, + outerRadius=Undefined, padAngle=Undefined, point=Undefined, radius=Undefined, + radius2=Undefined, radius2Offset=Undefined, radiusOffset=Undefined, shape=Undefined, + size=Undefined, smooth=Undefined, stroke=Undefined, strokeCap=Undefined, + strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, + strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, + strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, + theta=Undefined, theta2=Undefined, theta2Offset=Undefined, thetaOffset=Undefined, thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, - y2Offset=Undefined, yOffset=Undefined, **kwds) -> _TMarkMethodMixin: + y2Offset=Undefined, yOffset=Undefined, **kwds) -> Self: """Set the chart's mark to 'circle' (see :class:`MarkDef`) """ kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole, @@ -697,31 +699,30 @@ def mark_circle(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria= copy.mark = "circle" return copy - def mark_square(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Undefined, - ariaRole=Undefined, ariaRoleDescription=Undefined, aspect=Undefined, - bandSize=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, - clip=Undefined, color=Undefined, continuousBandSize=Undefined, - cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, - cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, - cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, - description=Undefined, dir=Undefined, discreteBandSize=Undefined, dx=Undefined, - dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, - filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, - fontWeight=Undefined, height=Undefined, href=Undefined, innerRadius=Undefined, - interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, - lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, - orient=Undefined, outerRadius=Undefined, padAngle=Undefined, point=Undefined, - radius=Undefined, radius2=Undefined, radius2Offset=Undefined, - radiusOffset=Undefined, shape=Undefined, size=Undefined, smooth=Undefined, - stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, - strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, - strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, - style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, - theta2=Undefined, theta2Offset=Undefined, thetaOffset=Undefined, + def mark_square(self, align=Undefined, angle=Undefined, aria=Undefined, ariaRole=Undefined, + ariaRoleDescription=Undefined, aspect=Undefined, bandSize=Undefined, + baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, + color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, + cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, + cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, + cornerRadiusTopRight=Undefined, cursor=Undefined, description=Undefined, + dir=Undefined, discreteBandSize=Undefined, dx=Undefined, dy=Undefined, + ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, + font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, + height=Undefined, href=Undefined, innerRadius=Undefined, interpolate=Undefined, + invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, + lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, + outerRadius=Undefined, padAngle=Undefined, point=Undefined, radius=Undefined, + radius2=Undefined, radius2Offset=Undefined, radiusOffset=Undefined, shape=Undefined, + size=Undefined, smooth=Undefined, stroke=Undefined, strokeCap=Undefined, + strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined, + strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined, + strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined, + theta=Undefined, theta2=Undefined, theta2Offset=Undefined, thetaOffset=Undefined, thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, - y2Offset=Undefined, yOffset=Undefined, **kwds) -> _TMarkMethodMixin: + y2Offset=Undefined, yOffset=Undefined, **kwds) -> Self: """Set the chart's mark to 'square' (see :class:`MarkDef`) """ kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole, @@ -755,31 +756,31 @@ def mark_square(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria= copy.mark = "square" return copy - def mark_geoshape(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, aria=Undefined, - ariaRole=Undefined, ariaRoleDescription=Undefined, aspect=Undefined, - bandSize=Undefined, baseline=Undefined, binSpacing=Undefined, blend=Undefined, - clip=Undefined, color=Undefined, continuousBandSize=Undefined, - cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined, - cornerRadiusBottomRight=Undefined, cornerRadiusEnd=Undefined, - cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined, - description=Undefined, dir=Undefined, discreteBandSize=Undefined, dx=Undefined, - dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, - filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined, - fontWeight=Undefined, height=Undefined, href=Undefined, innerRadius=Undefined, - interpolate=Undefined, invalid=Undefined, limit=Undefined, line=Undefined, - lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined, - orient=Undefined, outerRadius=Undefined, padAngle=Undefined, point=Undefined, - radius=Undefined, radius2=Undefined, radius2Offset=Undefined, - radiusOffset=Undefined, shape=Undefined, size=Undefined, smooth=Undefined, - stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined, - strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined, - strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, - style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, - theta2=Undefined, theta2Offset=Undefined, thetaOffset=Undefined, - thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, - tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined, - x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, - y2Offset=Undefined, yOffset=Undefined, **kwds) -> _TMarkMethodMixin: + def mark_geoshape(self, align=Undefined, angle=Undefined, aria=Undefined, ariaRole=Undefined, + ariaRoleDescription=Undefined, aspect=Undefined, bandSize=Undefined, + baseline=Undefined, binSpacing=Undefined, blend=Undefined, clip=Undefined, + color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined, + cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined, + cornerRadiusEnd=Undefined, cornerRadiusTopLeft=Undefined, + cornerRadiusTopRight=Undefined, cursor=Undefined, description=Undefined, + dir=Undefined, discreteBandSize=Undefined, dx=Undefined, dy=Undefined, + ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined, + font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, + height=Undefined, href=Undefined, innerRadius=Undefined, interpolate=Undefined, + invalid=Undefined, limit=Undefined, line=Undefined, lineBreak=Undefined, + lineHeight=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, + outerRadius=Undefined, padAngle=Undefined, point=Undefined, radius=Undefined, + radius2=Undefined, radius2Offset=Undefined, radiusOffset=Undefined, + shape=Undefined, size=Undefined, smooth=Undefined, stroke=Undefined, + strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined, + strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined, + strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, + tension=Undefined, text=Undefined, theta=Undefined, theta2=Undefined, + theta2Offset=Undefined, thetaOffset=Undefined, thickness=Undefined, + timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, tooltip=Undefined, + url=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, + xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, + yOffset=Undefined, **kwds) -> Self: """Set the chart's mark to 'geoshape' (see :class:`MarkDef`) """ kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole, @@ -813,10 +814,9 @@ def mark_geoshape(self: _TMarkMethodMixin, align=Undefined, angle=Undefined, ari copy.mark = "geoshape" return copy - def mark_boxplot(self: _TMarkMethodMixin, box=Undefined, clip=Undefined, color=Undefined, - extent=Undefined, invalid=Undefined, median=Undefined, opacity=Undefined, - orient=Undefined, outliers=Undefined, rule=Undefined, size=Undefined, - ticks=Undefined, **kwds) -> _TMarkMethodMixin: + def mark_boxplot(self, box=Undefined, clip=Undefined, color=Undefined, extent=Undefined, + invalid=Undefined, median=Undefined, opacity=Undefined, orient=Undefined, + outliers=Undefined, rule=Undefined, size=Undefined, ticks=Undefined, **kwds) -> Self: """Set the chart's mark to 'boxplot' (see :class:`BoxPlotDef`) """ kwds = dict(box=box, clip=clip, color=color, extent=extent, invalid=invalid, median=median, @@ -829,9 +829,9 @@ def mark_boxplot(self: _TMarkMethodMixin, box=Undefined, clip=Undefined, color=U copy.mark = "boxplot" return copy - def mark_errorbar(self: _TMarkMethodMixin, clip=Undefined, color=Undefined, extent=Undefined, - opacity=Undefined, orient=Undefined, rule=Undefined, size=Undefined, - thickness=Undefined, ticks=Undefined, **kwds) -> _TMarkMethodMixin: + def mark_errorbar(self, clip=Undefined, color=Undefined, extent=Undefined, opacity=Undefined, + orient=Undefined, rule=Undefined, size=Undefined, thickness=Undefined, + ticks=Undefined, **kwds) -> Self: """Set the chart's mark to 'errorbar' (see :class:`ErrorBarDef`) """ kwds = dict(clip=clip, color=color, extent=extent, opacity=opacity, orient=orient, rule=rule, @@ -843,9 +843,9 @@ def mark_errorbar(self: _TMarkMethodMixin, clip=Undefined, color=Undefined, exte copy.mark = "errorbar" return copy - def mark_errorband(self: _TMarkMethodMixin, band=Undefined, borders=Undefined, clip=Undefined, - color=Undefined, extent=Undefined, interpolate=Undefined, opacity=Undefined, - orient=Undefined, tension=Undefined, **kwds) -> _TMarkMethodMixin: + def mark_errorband(self, band=Undefined, borders=Undefined, clip=Undefined, color=Undefined, + extent=Undefined, interpolate=Undefined, opacity=Undefined, orient=Undefined, + tension=Undefined, **kwds) -> Self: """Set the chart's mark to 'errorband' (see :class:`ErrorBandDef`) """ kwds = dict(band=band, borders=borders, clip=clip, color=color, extent=extent, @@ -862,13 +862,13 @@ class ConfigMethodMixin: """A mixin class that defines config methods""" @use_signature(core.Config) - def configure(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure(self, *args, **kwargs) -> Self: copy = self.copy(deep=False) copy.config = core.Config(*args, **kwargs) return copy @use_signature(core.RectConfig) - def configure_arc(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_arc(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -876,7 +876,7 @@ def configure_arc(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodM return copy @use_signature(core.AreaConfig) - def configure_area(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_area(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -884,7 +884,7 @@ def configure_area(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethod return copy @use_signature(core.AxisConfig) - def configure_axis(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axis(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -892,7 +892,7 @@ def configure_axis(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethod return copy @use_signature(core.AxisConfig) - def configure_axisBand(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisBand(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -900,7 +900,7 @@ def configure_axisBand(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMe return copy @use_signature(core.AxisConfig) - def configure_axisBottom(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisBottom(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -908,7 +908,7 @@ def configure_axisBottom(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfig return copy @use_signature(core.AxisConfig) - def configure_axisDiscrete(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisDiscrete(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -916,7 +916,7 @@ def configure_axisDiscrete(self: _TConfigMethodMixin, *args, **kwargs) -> _TConf return copy @use_signature(core.AxisConfig) - def configure_axisLeft(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisLeft(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -924,7 +924,7 @@ def configure_axisLeft(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMe return copy @use_signature(core.AxisConfig) - def configure_axisPoint(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisPoint(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -932,7 +932,7 @@ def configure_axisPoint(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigM return copy @use_signature(core.AxisConfig) - def configure_axisQuantitative(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisQuantitative(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -940,7 +940,7 @@ def configure_axisQuantitative(self: _TConfigMethodMixin, *args, **kwargs) -> _T return copy @use_signature(core.AxisConfig) - def configure_axisRight(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisRight(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -948,7 +948,7 @@ def configure_axisRight(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigM return copy @use_signature(core.AxisConfig) - def configure_axisTemporal(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisTemporal(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -956,7 +956,7 @@ def configure_axisTemporal(self: _TConfigMethodMixin, *args, **kwargs) -> _TConf return copy @use_signature(core.AxisConfig) - def configure_axisTop(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisTop(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -964,7 +964,7 @@ def configure_axisTop(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMet return copy @use_signature(core.AxisConfig) - def configure_axisX(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisX(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -972,7 +972,7 @@ def configure_axisX(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMetho return copy @use_signature(core.AxisConfig) - def configure_axisXBand(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisXBand(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -980,7 +980,7 @@ def configure_axisXBand(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigM return copy @use_signature(core.AxisConfig) - def configure_axisXDiscrete(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisXDiscrete(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -988,7 +988,7 @@ def configure_axisXDiscrete(self: _TConfigMethodMixin, *args, **kwargs) -> _TCon return copy @use_signature(core.AxisConfig) - def configure_axisXPoint(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisXPoint(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -996,7 +996,7 @@ def configure_axisXPoint(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfig return copy @use_signature(core.AxisConfig) - def configure_axisXQuantitative(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisXQuantitative(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1004,7 +1004,7 @@ def configure_axisXQuantitative(self: _TConfigMethodMixin, *args, **kwargs) -> _ return copy @use_signature(core.AxisConfig) - def configure_axisXTemporal(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisXTemporal(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1012,7 +1012,7 @@ def configure_axisXTemporal(self: _TConfigMethodMixin, *args, **kwargs) -> _TCon return copy @use_signature(core.AxisConfig) - def configure_axisY(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisY(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1020,7 +1020,7 @@ def configure_axisY(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMetho return copy @use_signature(core.AxisConfig) - def configure_axisYBand(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisYBand(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1028,7 +1028,7 @@ def configure_axisYBand(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigM return copy @use_signature(core.AxisConfig) - def configure_axisYDiscrete(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisYDiscrete(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1036,7 +1036,7 @@ def configure_axisYDiscrete(self: _TConfigMethodMixin, *args, **kwargs) -> _TCon return copy @use_signature(core.AxisConfig) - def configure_axisYPoint(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisYPoint(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1044,7 +1044,7 @@ def configure_axisYPoint(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfig return copy @use_signature(core.AxisConfig) - def configure_axisYQuantitative(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisYQuantitative(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1052,7 +1052,7 @@ def configure_axisYQuantitative(self: _TConfigMethodMixin, *args, **kwargs) -> _ return copy @use_signature(core.AxisConfig) - def configure_axisYTemporal(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_axisYTemporal(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1060,7 +1060,7 @@ def configure_axisYTemporal(self: _TConfigMethodMixin, *args, **kwargs) -> _TCon return copy @use_signature(core.BarConfig) - def configure_bar(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_bar(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1068,7 +1068,7 @@ def configure_bar(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodM return copy @use_signature(core.BoxPlotConfig) - def configure_boxplot(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_boxplot(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1076,7 +1076,7 @@ def configure_boxplot(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMet return copy @use_signature(core.MarkConfig) - def configure_circle(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_circle(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1084,7 +1084,7 @@ def configure_circle(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMeth return copy @use_signature(core.CompositionConfig) - def configure_concat(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_concat(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1092,7 +1092,7 @@ def configure_concat(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMeth return copy @use_signature(core.ErrorBandConfig) - def configure_errorband(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_errorband(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1100,7 +1100,7 @@ def configure_errorband(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigM return copy @use_signature(core.ErrorBarConfig) - def configure_errorbar(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_errorbar(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1108,7 +1108,7 @@ def configure_errorbar(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMe return copy @use_signature(core.CompositionConfig) - def configure_facet(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_facet(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1116,7 +1116,7 @@ def configure_facet(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMetho return copy @use_signature(core.MarkConfig) - def configure_geoshape(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_geoshape(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1124,7 +1124,7 @@ def configure_geoshape(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMe return copy @use_signature(core.HeaderConfig) - def configure_header(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_header(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1132,7 +1132,7 @@ def configure_header(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMeth return copy @use_signature(core.HeaderConfig) - def configure_headerColumn(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_headerColumn(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1140,7 +1140,7 @@ def configure_headerColumn(self: _TConfigMethodMixin, *args, **kwargs) -> _TConf return copy @use_signature(core.HeaderConfig) - def configure_headerFacet(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_headerFacet(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1148,7 +1148,7 @@ def configure_headerFacet(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfi return copy @use_signature(core.HeaderConfig) - def configure_headerRow(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_headerRow(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1156,7 +1156,7 @@ def configure_headerRow(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigM return copy @use_signature(core.RectConfig) - def configure_image(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_image(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1164,7 +1164,7 @@ def configure_image(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMetho return copy @use_signature(core.LegendConfig) - def configure_legend(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_legend(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1172,7 +1172,7 @@ def configure_legend(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMeth return copy @use_signature(core.LineConfig) - def configure_line(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_line(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1180,7 +1180,7 @@ def configure_line(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethod return copy @use_signature(core.MarkConfig) - def configure_mark(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_mark(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1188,7 +1188,7 @@ def configure_mark(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethod return copy @use_signature(core.MarkConfig) - def configure_point(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_point(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1196,7 +1196,7 @@ def configure_point(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMetho return copy @use_signature(core.ProjectionConfig) - def configure_projection(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_projection(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1204,7 +1204,7 @@ def configure_projection(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfig return copy @use_signature(core.RangeConfig) - def configure_range(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_range(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1212,7 +1212,7 @@ def configure_range(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMetho return copy @use_signature(core.RectConfig) - def configure_rect(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_rect(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1220,7 +1220,7 @@ def configure_rect(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethod return copy @use_signature(core.MarkConfig) - def configure_rule(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_rule(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1228,7 +1228,7 @@ def configure_rule(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethod return copy @use_signature(core.ScaleConfig) - def configure_scale(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_scale(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1236,7 +1236,7 @@ def configure_scale(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMetho return copy @use_signature(core.SelectionConfig) - def configure_selection(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_selection(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1244,7 +1244,7 @@ def configure_selection(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigM return copy @use_signature(core.MarkConfig) - def configure_square(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_square(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1252,7 +1252,7 @@ def configure_square(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMeth return copy @use_signature(core.MarkConfig) - def configure_text(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_text(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1260,7 +1260,7 @@ def configure_text(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethod return copy @use_signature(core.TickConfig) - def configure_tick(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_tick(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1268,7 +1268,7 @@ def configure_tick(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethod return copy @use_signature(core.TitleConfig) - def configure_title(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_title(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1276,7 +1276,7 @@ def configure_title(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMetho return copy @use_signature(core.LineConfig) - def configure_trail(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_trail(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -1284,7 +1284,7 @@ def configure_trail(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMetho return copy @use_signature(core.ViewConfig) - def configure_view(self: _TConfigMethodMixin, *args, **kwargs) -> _TConfigMethodMixin: + def configure_view(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() diff --git a/doc/getting_started/installation.rst b/doc/getting_started/installation.rst index 0199182b0..ecdf23102 100644 --- a/doc/getting_started/installation.rst +++ b/doc/getting_started/installation.rst @@ -24,12 +24,13 @@ Altair has the following dependencies, all of which are installed automatically with the above installation commands: - python 3.6 or newer -- importlib_metadata_ (python<3.8) - jinja2 - jsonschema_ - NumPy_ - Pandas_ - Toolz_ +- importlib_metadata_ (python<3.8) +- typing_extensions_ (python<3.11) To run Altair's full test suite and build Altair's documentation requires a few additional dependencies, see `CONTRIBUTING.md ` @@ -68,6 +69,7 @@ development version directly from GitHub using: .. _IPython: https://github.com/ipython/ipython .. _importlib_metadata: https://github.com/python/importlib_metadata +.. _typing_extensions: https://github.com/python/typing_extensions .. _jsonschema: https://github.com/Julian/jsonschema .. _NumPy: http://www.numpy.org/ .. _Pandas: http://pandas.pydata.org diff --git a/doc/releases/changes.rst b/doc/releases/changes.rst index d62c7c04f..790bafcdb 100644 --- a/doc/releases/changes.rst +++ b/doc/releases/changes.rst @@ -20,7 +20,7 @@ Enhancements - The ``Title`` and ``Impute`` aliases were added for ``TitleParams`` and ``ImputeParams``, respectively (#2732). - Saving charts with HTML inline is now supported without having altair_saver installed (#2807). - The documentation page has been revamped, both in terms of appearance and content. -- More informative autocompletion by removing deprecated methods (#2814) and adding support for completion in method chains for editors that rely on type hints (e.g. VS Code) (#2846) +- More informative autocompletion by removing deprecated methods (#2814) and for editors that rely on type hints (e.g. VS Code) we added support for completion in method chains (#2846) and extended keyword completion to cover additional methods (#2920). - Substantially improved error handling. Both in terms of finding the more relevant error (#2842), and in terms of improving the formatting and clarity of the error messages (#2824, #2568). - Include experimental support for the DataFrame Interchange Protocol (through `__dataframe__` attribute). This requires `pyarrow>=11.0.0` (#2888). diff --git a/requirements.txt b/requirements.txt index d6ab9d282..96ae4e1c7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ importlib_metadata; python_version < "3.8" +typing_extensions>=4.0.1; python_version < "3.11" jinja2 jsonschema>=3.0 numpy diff --git a/tools/generate_schema_wrapper.py b/tools/generate_schema_wrapper.py index 68058aef7..198d1bae3 100644 --- a/tools/generate_schema_wrapper.py +++ b/tools/generate_schema_wrapper.py @@ -147,7 +147,7 @@ def to_dict(self, validate=True, ignore=(), context=None): """ MARK_METHOD = ''' -def mark_{mark}({def_arglist}) -> {self_type}: +def mark_{mark}({def_arglist}) -> Self: """Set the chart's mark to '{mark}' (see :class:`{mark_def}`) """ kwds = dict({dict_arglist}) @@ -161,7 +161,7 @@ def mark_{mark}({def_arglist}) -> {self_type}: CONFIG_METHOD = """ @use_signature(core.{classname}) -def {method}(self: {self_type}, *args, **kwargs) -> {self_type}: +def {method}(self, *args, **kwargs) -> Self: copy = self.copy(deep=False) copy.config = core.{classname}(*args, **kwargs) return copy @@ -169,7 +169,7 @@ def {method}(self: {self_type}, *args, **kwargs) -> {self_type}: CONFIG_PROP_METHOD = """ @use_signature(core.{classname}) -def configure_{prop}(self: {self_type}, *args, **kwargs) -> {self_type}: +def configure_{prop}(self, *args, **kwargs) -> Self: copy = self.copy(deep=['config']) if copy.config is Undefined: copy.config = core.Config() @@ -501,18 +501,12 @@ def generate_vegalite_mark_mixin(schemafile, markdefs): schema = json.load(f) class_name = "MarkMethodMixin" - type_var_name = f"_T{class_name}" imports = [ - "from typing import TypeVar", "from altair.utils.schemapi import Undefined", "from . import core", ] - type_var_definition = ( - f'{type_var_name} = TypeVar("{type_var_name}", bound="{class_name}")' - ) - code = [ f"class {class_name}:", ' """A mixin class that defines mark methods"""', @@ -530,7 +524,7 @@ def generate_vegalite_mark_mixin(schemafile, markdefs): required -= {"type"} kwds -= {"type"} - def_args = [f"self: {type_var_name}"] + [ + def_args = ["self"] + [ "{}=Undefined".format(p) for p in (sorted(required) + sorted(kwds)) ] dict_args = ["{0}={0}".format(p) for p in (sorted(required) + sorted(kwds))] @@ -546,21 +540,16 @@ def generate_vegalite_mark_mixin(schemafile, markdefs): mark_def=mark_def, def_arglist=indent_arglist(def_args, indent_level=10 + len(mark)), dict_arglist=indent_arglist(dict_args, indent_level=16), - self_type=type_var_name, ) code.append("\n ".join(mark_method.splitlines())) - return imports, type_var_definition, "\n".join(code) + return imports, "\n".join(code) def generate_vegalite_config_mixin(schemafile): imports = ["from . import core", "from altair.utils import use_signature"] class_name = "ConfigMethodMixin" - type_var_name = f"_T{class_name}" - type_var_definition = ( - f'{type_var_name} = TypeVar("{type_var_name}", bound="{class_name}")' - ) code = [ f"class {class_name}:", @@ -571,20 +560,16 @@ def generate_vegalite_config_mixin(schemafile): info = SchemaInfo({"$ref": "#/definitions/Config"}, rootschema=schema) # configure() method - method = CONFIG_METHOD.format( - classname="Config", method="configure", self_type=type_var_name - ) + method = CONFIG_METHOD.format(classname="Config", method="configure") code.append("\n ".join(method.splitlines())) # configure_prop() methods for prop, prop_info in info.properties.items(): classname = prop_info.refname if classname and classname.endswith("Config"): - method = CONFIG_PROP_METHOD.format( - classname=classname, prop=prop, self_type=type_var_name - ) + method = CONFIG_PROP_METHOD.format(classname=classname, prop=prop) code.append("\n ".join(method.splitlines())) - return imports, type_var_definition, "\n".join(code) + return imports, "\n".join(code) def vegalite_main(skip_download=False): @@ -634,19 +619,23 @@ def vegalite_main(skip_download=False): } outfile = join(schemapath, "mixins.py") print("Generating\n {}\n ->{}".format(schemafile, outfile)) - mark_imports, mark_type_var, mark_mixin = generate_vegalite_mark_mixin( - schemafile, markdefs - ) - config_imports, config_type_var, config_mixin = generate_vegalite_config_mixin( - schemafile - ) + mark_imports, mark_mixin = generate_vegalite_mark_mixin(schemafile, markdefs) + config_imports, config_mixin = generate_vegalite_config_mixin(schemafile) + try_except_imports = [ + "if sys.version_info >= (3, 11):", + " from typing import Self", + "else:", + " from typing_extensions import Self", + ] + stdlib_imports = ["import sys"] imports = sorted(set(mark_imports + config_imports)) - type_vars = sorted([mark_type_var, config_type_var]) with open(outfile, "w", encoding="utf8") as f: f.write(HEADER) + f.write("\n".join(stdlib_imports)) + f.write("\n\n") f.write("\n".join(imports)) f.write("\n\n") - f.write("\n".join(type_vars)) + f.write("\n".join(try_except_imports)) f.write("\n\n\n") f.write(mark_mixin) f.write("\n\n\n") diff --git a/tools/update_init_file.py b/tools/update_init_file.py index 1ebce280e..b451c4543 100644 --- a/tools/update_init_file.py +++ b/tools/update_init_file.py @@ -10,6 +10,11 @@ import black +if sys.version_info >= (3, 11): + from typing import Self +else: + from typing_extensions import Self + # Import Altair from head ROOT_DIR = abspath(join(dirname(__file__), "..")) sys.path.insert(0, ROOT_DIR) @@ -64,6 +69,7 @@ def _is_relevant_attribute(attr_name): getattr(attr, "_deprecated", False) is True or attr_name.startswith("_") or attr is TypeVar + or attr is Self ): return False else: