Skip to content

Commit

Permalink
Use DataFrameLike protocol for the transformed_data signature
Browse files Browse the repository at this point in the history
The returned DataFrames can be arrow or Polars as well if those are used as the input to the Chart.
  • Loading branch information
jonmmease committed Jun 10, 2023
1 parent 8ab1dce commit 6f43d6b
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 15 deletions.
1 change: 1 addition & 0 deletions altair/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@
"Cyclical",
"Data",
"DataFormat",
"DataFrameLike",
"DataSource",
"Datasets",
"DateTime",
Expand Down
13 changes: 6 additions & 7 deletions altair/utils/_transformed_data.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
from typing import List, Optional, Tuple, Dict, Iterable, overload, Union

import pandas as pd

from altair import (
Chart,
FacetChart,
Expand All @@ -11,6 +9,7 @@
ConcatChart,
data_transformers,
)
from altair.utils.core import DataFrameLike
from altair.utils.schemapi import Undefined

Scope = Tuple[int, ...]
Expand All @@ -24,7 +23,7 @@ def transformed_data(
chart: Union[Chart, FacetChart],
row_limit: Optional[int] = None,
exclude: Optional[Iterable[str]] = None,
) -> Optional[pd.DataFrame]:
) -> Optional[DataFrameLike]:
...


Expand All @@ -33,7 +32,7 @@ def transformed_data(
chart: Union[LayerChart, HConcatChart, VConcatChart, ConcatChart],
row_limit: Optional[int] = None,
exclude: Optional[Iterable[str]] = None,
) -> List[pd.DataFrame]:
) -> List[DataFrameLike]:
...


Expand All @@ -54,9 +53,9 @@ def transformed_data(chart, row_limit=None, exclude=None):
Returns
-------
pandas DataFrame or list of pandas DataFrames or None
If input chart is a Chart or Facet Chart, returns a pandas DataFrame of the
transformed data. Otherwise, returns a list of pandas DataFrames of the
DataFrame or list of DataFrames or None
If input chart is a Chart or Facet Chart, returns a DataFrame of the
transformed data. Otherwise, returns a list of DataFrames of the
transformed data
"""
try:
Expand Down
9 changes: 7 additions & 2 deletions altair/utils/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@
from altair.utils.schemapi import SchemaBase

if sys.version_info >= (3, 10):
from typing import ParamSpec
from typing import ParamSpec, Protocol
else:
from typing_extensions import ParamSpec
from typing_extensions import ParamSpec, Protocol

try:
from pandas.api.types import infer_dtype as _infer_dtype
Expand All @@ -32,6 +32,11 @@
_P = ParamSpec("_P")


class DataFrameLike(Protocol):
def __dataframe__(self, *args, **kwargs):
...


def infer_dtype(value):
"""Infer the dtype of the value.
Expand Down
13 changes: 7 additions & 6 deletions altair/vegalite/v5/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
from .display import renderers, VEGALITE_VERSION, VEGAEMBED_VERSION, VEGA_VERSION
from .theme import themes
from .compiler import vegalite_compilers
from ...utils.core import DataFrameLike

if sys.version_info >= (3, 11):
from typing import Self
Expand Down Expand Up @@ -2661,7 +2662,7 @@ def _transformed_data(
self,
row_limit: Optional[int] = None,
exclude: Optional[Iterable[str]] = None,
) -> Optional[pd.DataFrame]:
) -> Optional[DataFrameLike]:
"""Evaluate a Chart's transforms
Evaluate the data transforms associated with a Chart and return the
Expand Down Expand Up @@ -2947,7 +2948,7 @@ def _transformed_data(
self,
row_limit: Optional[int] = None,
exclude: Optional[Iterable[str]] = None,
) -> List[pd.DataFrame]:
) -> List[DataFrameLike]:
"""Evaluate a ConcatChart's transforms
Evaluate the data transforms associated with a ConcatChart and return the
Expand Down Expand Up @@ -3044,7 +3045,7 @@ def _transformed_data(
self,
row_limit: Optional[int] = None,
exclude: Optional[Iterable[str]] = None,
) -> List[pd.DataFrame]:
) -> List[DataFrameLike]:
"""Evaluate a HConcatChart's transforms
Evaluate the data transforms associated with a HConcatChart and return the
Expand Down Expand Up @@ -3141,7 +3142,7 @@ def _transformed_data(
self,
row_limit: Optional[int] = None,
exclude: Optional[Iterable[str]] = None,
) -> List[pd.DataFrame]:
) -> List[DataFrameLike]:
"""Evaluate a VConcatChart's transforms
Evaluate the data transforms associated with a VConcatChart and return the
Expand Down Expand Up @@ -3237,7 +3238,7 @@ def _transformed_data(
self,
row_limit: Optional[int] = None,
exclude: Optional[Iterable[str]] = None,
) -> List[pd.DataFrame]:
) -> List[DataFrameLike]:
"""Evaluate a LayerChart's transforms
Evaluate the data transforms associated with a LayerChart and return the
Expand Down Expand Up @@ -3352,7 +3353,7 @@ def _transformed_data(
self,
row_limit: Optional[int] = None,
exclude: Optional[Iterable[str]] = None,
) -> Optional[pd.DataFrame]:
) -> Optional[DataFrameLike]:
"""Evaluate a FacetChart's transforms
Evaluate the data transforms associated with a FacetChart and return the
Expand Down

0 comments on commit 6f43d6b

Please sign in to comment.